+2004-07-05 Ulrich Drepper <drepper@redhat.com>
+
+ * elf/dl-init.c: Don't define and use _dl_starting_up if
+ HAVE_INLINED_SYSCALLS is defined and the variable is not used.
+ * elf/dl-support.c: Likewise.
+ * elf/rtld.c: Likewise.
+ * elf/dl-misc.c (_dl_debug_vdprintf): Use writev syscall directly
+ if HAVE_INLINED_SYSCALLS is defined.
+ * sysdeps/powerpc/powerpc64/dl-machine.h: Don't rest _dl_starting_up
+ here.
+ * sysdeps/powerpc/powerpc32/dl-start.S: Likewise.
+ * sysdeps/unix/sysv/linux/configure.in: Define HAVE_INLINED_SYSCALLS.
+ * config.h.in: Add entry for HAVE_INLINED_SYSCALLS.
+
+ * sysdeps/posix/profil.c: If compiled for ld.so, omit code which
+ is needed to stop profiling.
+ * elf/dl-open.c (dl_open_worker): If a newly opened object is to be
+ profile make sure it cannot be unloaded.
+
+ * sysdeps/unix/sysv/linux/dl-origin.c: Inline readlink syscall.
+
+ * sysdeps/unix/sysv/linux/fcntl.c: If compiled without cancellation
+ support, make sure the helper function is inlined.
+ * sysdeps/unix/sysv/linux/pread.c: Likewise.
+ * sysdeps/unix/sysv/linux/pwrite.c: Likewise.
+ * sysdeps/unix/sysv/linux/i386/fcntl.c: Likewise.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/fcntl.c: Likewise.
+
2004-07-05 Jakub Jelinek <jakub@redhat.com>
* include/string.h (ffs): Add libc_hidden_builtin_proto.
/* Defined of libidn is available. */
#undef HAVE_LIBIDN
+/* Define if inlined system calls are available. */
+#undef HAVE_INLINED_SYSCALLS
+
/*
\f */
/* Type of the initializer. */
typedef void (*init_t) (int, char **, char **);
+#ifndef HAVE_INLINED_SYSCALLS
/* Flag, nonzero during startup phase. */
extern int _dl_starting_up;
extern int _dl_starting_up_internal attribute_hidden;
+#endif
static void
r->r_state = RT_CONSISTENT;
_dl_debug_state ();
+#ifndef HAVE_INLINED_SYSCALLS
/* Finished starting up. */
INTUSE(_dl_starting_up) = 0;
+#endif
}
INTDEF (_dl_init)
}
/* Finally write the result. */
-#ifdef INTERNAL_SYSCALL
+#ifdef HAVE_INLINED_SYSCALLS
INTERNAL_SYSCALL_DECL (err);
INTERNAL_SYSCALL (writev, err, 3, fd, &iov, niov);
#elif RTLD_PRIVATE_ERRNO
GLRO(dl_relocate_object) (l, l->l_scope, 1, 1);
if (old_profile_map == NULL && GL(dl_profile_map) != NULL)
- /* We must prepare the profiling. */
- GLRO(dl_start_profile) ();
+ {
+ /* We must prepare the profiling. */
+ GLRO(dl_start_profile) ();
+
+ /* Prevent unloading the object. */
+ GL(dl_profile_map)->l_flags_1 |= DF_1_NODELETE;
+ }
}
else
#endif
return;
}
- /* We don't need the file desriptor anymore. */
+ /* We don't need the file descriptor anymore. */
__close (fd);
/* Pointer to data after the header. */
to be the global scope. */
struct r_scope_elem *_dl_main_searchlist = &_dl_initial_searchlist;
+#ifndef HAVE_INLINED_SYSCALLS
/* Nonzero during startup. */
int _dl_starting_up = 1;
+#endif
/* Get architecture specific initializer. */
#include <dl-procinfo.c>
/* Nonzero if we were run directly. */
unsigned int _dl_skip_args attribute_relro attribute_hidden;
+#ifndef HAVE_INLINED_SYSCALLS
/* Set nonzero during loading and initialization of executable and
libraries, cleared before the executable's entry point runs. This
must not be initialized to nonzero, because the unused dynamic
never be called. */
int _dl_starting_up = 0;
INTVARDEF(_dl_starting_up)
+#endif
/* This is the structure which defines all variables global to ld.so
(except those which cannot be added for some reason). */
/* Process the environment variable which control the behaviour. */
process_envvars (&mode);
+#ifndef HAVE_INLINED_SYSCALLS
/* Set up a flag which tells we are just starting. */
INTUSE(_dl_starting_up) = 1;
+#endif
if (*user_entry == (ElfW(Addr)) ENTRY_POINT)
{
+2004-07-05 Ulrich Drepper <drepper@redhat.com>
+
+ * sysdeps/unix/sysv/linux/i386/sysdep-cancel.h: Define NO_CANCELLATION
+ if no cancellation support is needed.
+ * sysdeps/unix/sysv/linux/ia64/sysdep-cancel.h: Likewise.
+ * sysdeps/unix/sysv/linux/sh/sysdep-cancel.h: Likewise.
+ * sysdeps/unix/sysv/linux/x86_64/sysdep-cancel.h: Likewise.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h: Likewise.
+ * sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep-cancel.h: Likewise.
+ * sysdeps/unix/sysv/linux/s390/s390-32/sysdep-cancel.h: Likewise.
+ * sysdeps/unix/sysv/linux/s390/s390-64/sysdep-cancel.h: Likewise.
+ * sysdeps/unix/sysv/linux/sparc/sparc32/sysdep-cancel.h: Likewise.
+ * sysdeps/unix/sysv/linux/sparc/sparc64/sysdep-cancel.h: Likewise.
+
+ * sysdeps/unix/sysv/linux/powerpc/lowlevellock.h: Define __NR_futex
+ only if not already defined.
+
2004-07-05 Jakub Jelinek <jakub@redhat.com>
* sysdeps/unix/sysv/linux/x86_64/lowlevellock.h (lll_unlock): Use
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
L(ENDFDE): \
.previous
-#ifdef SHARED
+# ifdef SHARED
/* NUL-terminated augmentation string. Note "z" means there is an
augmentation value later on. */
-# define AUGMENTATION_STRING .string "zR"
-# define AUGMENTATION_PARAM \
+# define AUGMENTATION_STRING .string "zR"
+# define AUGMENTATION_PARAM \
/* Augmentation value length. */ \
.uleb128 1; \
/* Encoding: DW_EH_PE_pcrel + DW_EH_PE_sdata4. */ \
.byte 0x1b;
-# define AUGMENTATION_PARAM_FDE \
+# define AUGMENTATION_PARAM_FDE \
/* No augmentation data. */ \
.uleb128 0;
-# define START_SYMBOL_REF(name) \
+# define START_SYMBOL_REF(name) \
/* PC-relative start address of the code. */ \
.long L(name##START)-.
-#else
+# else
/* No augmentation. */
-# define AUGMENTATION_STRING .ascii "\0"
-# define AUGMENTATION_PARAM /* nothing */
-# define AUGMENTATION_PARAM_FDE /* nothing */
-# define START_SYMBOL_REF(name) \
+# define AUGMENTATION_STRING .ascii "\0"
+# define AUGMENTATION_PARAM /* nothing */
+# define AUGMENTATION_PARAM_FDE /* nothing */
+# define START_SYMBOL_REF(name) \
/* Absolute start address of the code. */ \
.long L(name##START)
-#endif
+# endif
/* Callframe description for syscalls without parameters. This is very
simple. The only place the stack pointer is changed is when the old
#elif !defined __ASSEMBLER__
-/* This code should never be used but we define it anyhow. */
# define SINGLE_THREAD_P (1)
+# define NO_CANCELLATION 1
#endif
#elif !defined __ASSEMBLER__
-/* This code should never be used but we define it anyhow. */
# define SINGLE_THREAD_P (1)
+# define NO_CANCELLATION 1
#endif
#include <atomic.h>
-#define __NR_futex 221
+#ifndef __NR_futex
+# define __NR_futex 221
+#endif
#define FUTEX_WAIT 0
#define FUTEX_WAKE 1
#define FUTEX_REQUEUE 3
/* Cancellable system call stubs. Linux/PowerPC version.
- Copyright (C) 2003 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Franz Sirl <Franz.Sirl-kernel@lauterbach.com>, 2003.
#elif !defined __ASSEMBLER__
-/* This code should never be used but we define it anyhow. */
# define SINGLE_THREAD_P (1)
+# define NO_CANCELLATION 1
#endif
/* Cancellable system call stubs. Linux/PowerPC64 version.
- Copyright (C) 2003 Free Software Foundation, Inc.
+ Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Franz Sirl <Franz.Sirl-kernel@lauterbach.com>, 2003.
#elif !defined __ASSEMBLER__
-/* This code should never be used but we define it anyhow. */
# define SINGLE_THREAD_P (1)
+# define NO_CANCELLATION 1
#endif
-/* Copyright (C) 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
#elif !defined __ASSEMBLER__
-/* This code should never be used but we define it anyhow. */
# define SINGLE_THREAD_P (1)
+# define NO_CANCELLATION 1
#endif
-/* Copyright (C) 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
#elif !defined __ASSEMBLER__
-/* This code should never be used but we define it anyhow. */
# define SINGLE_THREAD_P (1)
+# define NO_CANCELLATION 1
#endif
#elif !defined __ASSEMBLER__
-/* This code should never be used but we define it anyhow. */
# define SINGLE_THREAD_P (1)
+# define NO_CANCELLATION 1
#endif
#elif !defined __ASSEMBLER__
-/* This code should never be used but we define it anyhow. */
# define SINGLE_THREAD_P (1)
+# define NO_CANCELLATION 1
#endif
#elif !defined __ASSEMBLER__
-/* This code should never be used but we define it anyhow. */
# define SINGLE_THREAD_P (1)
+# define NO_CANCELLATION 1
#endif
-/* Copyright (C) 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
#elif !defined __ASSEMBLER__
-/* This code should never be used but we define it anyhow. */
# define SINGLE_THREAD_P (1)
+# define NO_CANCELLATION 1
#endif
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below. */
-#include <assert.h>
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
extern "C"
int
main ()
{
-
+return f != $ac_func;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
eval "$as_ac_var=no"
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
fi
echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
/* Low-level statistical profiling support function. Mostly POSIX.1 version.
- Copyright (C) 1996,97,98,2002 Free Software Foundation, Inc.
+ Copyright (C) 1996,97,98,2002, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
int
__profil (u_short *sample_buffer, size_t size, size_t offset, u_int scale)
{
- static struct sigaction oact;
- static struct itimerval otimer;
struct sigaction act;
struct itimerval timer;
+#ifndef IS_IN_rtld
+ static struct sigaction oact;
+ static struct itimerval otimer;
+# define oact_ptr &oact
+# define otimer_ptr &otimer
if (sample_buffer == NULL)
{
|| __sigaction (SIGPROF, &oact, NULL) < 0)
return -1;
}
+#else
+ /* In ld.so profiling should never be disabled once it runs. */
+ //assert (sample_buffer != NULL);
+# define oact_ptr NULL
+# define otimer_ptr NULL
+#endif
samples = sample_buffer;
nsamples = size / sizeof *samples;
act.sa_handler = (sighandler_t) &profil_counter;
act.sa_flags = SA_RESTART;
__sigfillset (&act.sa_mask);
- if (__sigaction (SIGPROF, &act, &oact) < 0)
+ if (__sigaction (SIGPROF, &act, oact_ptr) < 0)
return -1;
timer.it_value.tv_sec = 0;
timer.it_value.tv_usec = 1;
timer.it_interval = timer.it_value;
- return __setitimer (ITIMER_PROF, &timer, &otimer);
+ return __setitimer (ITIMER_PROF, &timer, otimer_ptr);
}
weak_alias (__profil, profil)
/* Machine-dependent ELF startup code. PowerPC version.
- Copyright (C) 1995-2000, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1995-2000, 2002, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
lwz r7,_dl_fini@got(r31)
/* Now, call the start function in r30... */
mtctr r30
- lwz r26,_dl_starting_up@got(r31)
/* Pass the stack pointer in r1 (so far so good), pointing to a NULL value.
(This lets our startup code distinguish between a program linked statically,
which linux will call with argc on top of the stack which will hopefully
stw r31,4(r1)
stw r31,8(r1)
stw r31,12(r1)
-/* Clear _dl_starting_up. */
- stw r31,0(r26)
/* Go do it! */
bctr
END(_start)
strong_alias (_dl_runtime_resolve, _dl_profile_resolve);
#endif
+#ifdef HAVE_INLINED_SYSCALLS
+/* We do not need _dl_starting_up. */
+# define DL_STARTING_UP_DEF
+#else
+# define DL_STARTING_UP_DEF \
+".LC__dl_starting_up:\n" \
+" .tc _dl_starting_up_internal[TC],_dl_starting_up_internal\n"
+#endif
+
/* Initial entry point code for the dynamic linker. The C function
`_dl_start' is the real entry point; its return value is the user
"_dl_start_user:\n" \
" .quad ._dl_start_user, .TOC.@tocbase, 0\n" \
" .previous\n" \
-" .section \".toc\",\"aw\"\n" \
-".LC__dl_starting_up:\n" \
-" .tc _dl_starting_up_internal[TC],_dl_starting_up_internal\n" \
-".LC__rtld_global:\n" \
-" .tc _rtld_global[TC],_rtld_global\n" \
-".LC__dl_argc:\n" \
-" .tc _dl_argc[TC],_dl_argc\n" \
-".LC__dl_argv:\n" \
-" .tc _dl_argv_internal[TC],_dl_argv_internal\n" \
-".LC__dl_fini:\n" \
-" .tc _dl_fini[TC],_dl_fini\n" \
+" .section \".toc\",\"aw\"\n" \
+DL_STARTING_UP_DEF \
+".LC__rtld_global:\n" \
+" .tc _rtld_global[TC],_rtld_global\n" \
+".LC__dl_argc:\n" \
+" .tc _dl_argc[TC],_dl_argc\n" \
+".LC__dl_argv:\n" \
+" .tc _dl_argv_internal[TC],_dl_argv_internal\n" \
+".LC__dl_fini:\n" \
+" .tc _dl_fini[TC],_dl_fini\n" \
" .previous\n" \
" .globl ._dl_start_user\n" \
" .type ._dl_start_user,@function\n" \
" addi 6,6,8\n" \
/* Pass a termination function pointer (in this case _dl_fini) in \
r7. */ \
-" ld 7,.LC__dl_fini@toc(2)\n" \
-" ld 26,.LC__dl_starting_up@toc(2)\n" \
+" ld 7,.LC__dl_fini@toc(2)\n" \
/* Pass the stack pointer in r1 (so far so good), pointing to a NULL \
value. This lets our startup code distinguish between a program \
linked statically, which linux will call with argc on top of the \
" std 31,8(1)\n" \
" std 31,16(1)\n" \
" std 31,24(1)\n" \
-/* Clear _dl_starting_up. */ \
-" stw 31,0(26)\n" \
/* Now, call the start function descriptor at r30... */ \
" .globl ._dl_main_dispatch\n" \
"._dl_main_dispatch:\n" \
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-
-#ifdef F77_DUMMY_MAIN
-# ifdef __cplusplus
- extern "C"
-# endif
- int F77_DUMMY_MAIN() { return 1; }
-#endif
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
int
main ()
{
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
ac_cv_check_symbol_sys_siglist=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
ac_cv_check_symbol_sys_siglist=no
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
fi
if test "$ac_cv_check_symbol_sys_siglist" = yes; then
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
-
-#ifdef F77_DUMMY_MAIN
-# ifdef __cplusplus
- extern "C"
-# endif
- int F77_DUMMY_MAIN() { return 1; }
-#endif
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
int
main ()
{
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
ac_cv_check_symbol__sys_siglist=yes
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
ac_cv_check_symbol__sys_siglist=no
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
fi
if test "$ac_cv_check_symbol__sys_siglist" = yes; then
else
for ctype in _ctype_ __ctype_ __ctype _ctype__ _ctype _locp; do
cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
-#include "confdefs.h"
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
#include <ctype.h>
-#ifdef F77_DUMMY_MAIN
-# ifdef __cplusplus
- extern "C"
-# endif
- int F77_DUMMY_MAIN() { return 1; }
-#endif
int
main ()
{
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
libc_cv_ctype_glue="$ctype"; break
else
echo "$as_me: failed program was:" >&5
-cat conftest.$ac_ext >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
done
fi
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define $ac_func innocuous_$ac_func
+
/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $ac_func (); below. */
-#include <assert.h>
+ which can conflict with char $ac_func (); below.
+ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+ <limits.h> exists even on freestanding compilers. */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
/* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus
extern "C"
int
main ()
{
-
+return f != $ac_func;
;
return 0;
}
_ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
- (eval $ac_link) 2>&5
+ (eval $ac_link) 2>conftest.er1
ac_status=$?
+ grep -v '^ *+' conftest.er1 >conftest.err
+ rm -f conftest.er1
+ cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
- { ac_try='test -s conftest$ac_exeext'
+ { ac_try='test -z "$ac_c_werror_flag"
+ || test ! -s conftest.err'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; } &&
+ { ac_try='test -s conftest$ac_exeext'
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5
ac_status=$?
eval "$as_ac_var=no"
fi
-rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
+rm -f conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
fi
echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6
echo $ECHO_N "(cached) $ECHO_C" >&6
else
cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
decnum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/(\1 * 65536 + \2 * 256 + \3)/'`;
abinum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1,\2,\3/'`;
cat >conftest.$ac_ext <<_ACEOF
-#line $LINENO "configure"
/* confdefs.h. */
_ACEOF
cat confdefs.h >>conftest.$ac_ext
echo "${ECHO_T}ok" >&6
fi
fi
+
+# We have inlined syscalls.
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_INLINED_SYSCALLS 1
+_ACEOF
+
AC_MSG_RESULT(ok)
fi
fi
+
+# We have inlined syscalls.
+AC_DEFINE(HAVE_INLINED_SYSCALLS)
#include <unistd.h>
#include <sys/param.h>
#include <ldsodefs.h>
+#include <sysdep.h>
#include <dl-dst.h>
char linkval[PATH_MAX];
char *result;
int len;
+ INTERNAL_SYSCALL_DECL (err);
- if ((len = __readlink ("/proc/self/exe", linkval, sizeof (linkval))) > 0
- && linkval[0] != '[')
+ len = INTERNAL_SYSCALL (readlink, err, 3, "/proc/self/exe", linkval,
+ sizeof (linkval));
+ if (! INTERNAL_SYSCALL_ERROR_P (len, err) && len > 0 && linkval[0] != '[')
{
/* We can use this value. */
assert (linkval[0] == '/');
-/* Copyright (C) 2000, 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
int
+#ifdef NO_CANCELLATION
+static inline __attribute ((always_inline))
+#endif
__fcntl_nocancel (int fd, int cmd, ...)
{
va_list ap;
-/* Copyright (C) 2000, 2002, 2003 Free Software Foundation, Inc.
+/* Copyright (C) 2000, 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
int
+#ifdef NO_CANCELLATION
+static inline __attribute ((always_inline))
+#endif
__fcntl_nocancel (int fd, int cmd, ...)
{
va_list ap;
/* Check if we can represent the values with the smaller type. */
if ((off64_t) fl.l_start != fl64->l_start)
{
+ eoverflow:
__set_errno (EOVERFLOW);
return -1;
}
fl.l_len = (off_t) fl64->l_len;
/* Check if we can represent the values with the smaller type. */
if ((off64_t) fl.l_len != fl64->l_len)
- {
- __set_errno (EOVERFLOW);
- return -1;
- }
+ goto eoverflow:
+
fl.l_type = fl64->l_type;
fl.l_whence = fl64->l_whence;
fl.l_pid = fl64->l_pid;
fl.l_start = (off_t) fl64->l_start;
/* Check if we can represent the values with the smaller type. */
if ((off64_t) fl.l_start != fl64->l_start)
- {
- __set_errno (EOVERFLOW);
- return -1;
- }
+ goto eoverflow:
+
fl.l_len = (off_t)fl64->l_len;
/* Check if we can represent the values with the smaller type. */
if ((off64_t) fl.l_len != fl64->l_len)
int
+#ifdef NO_CANCELLATION
+static inline __attribute ((always_inline))
+#endif
__fcntl_nocancel (int fd, int cmd, ...)
{
va_list ap;
-/* Copyright (C) 1997,1998,1999,2000,2002,2003 Free Software Foundation, Inc.
+/* Copyright (C) 1997-2000,2002,2003,2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
static ssize_t
+#ifdef NO_CANCELLATION
+inline __attribute ((always_inline))
+#endif
do_pread (int fd, void *buf, size_t count, off_t offset)
{
ssize_t result;
-/* Copyright (C) 1997,1998,1999,2000,2002,2003 Free Software Foundation, Inc.
+/* Copyright (C) 1997-2000,2002,2003,2004 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
static ssize_t
+#ifdef NO_CANCELLATION
+inline __attribute ((always_inline))
+#endif
do_pwrite (int fd, const void *buf, size_t count, off_t offset)
{
ssize_t result;