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.
This commit is contained in:
Ulrich Drepper 2004-07-06 04:26:42 +00:00
parent 2dd18ce2b2
commit ce6e047fbb
34 changed files with 295 additions and 122 deletions

View File

@ -1,3 +1,31 @@
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> 2004-07-05 Jakub Jelinek <jakub@redhat.com>
* include/string.h (ffs): Add libc_hidden_builtin_proto. * include/string.h (ffs): Add libc_hidden_builtin_proto.

View File

@ -208,6 +208,9 @@
/* Defined of libidn is available. */ /* Defined of libidn is available. */
#undef HAVE_LIBIDN #undef HAVE_LIBIDN
/* Define if inlined system calls are available. */
#undef HAVE_INLINED_SYSCALLS
/* /*
*/ */

View File

@ -24,9 +24,11 @@
/* Type of the initializer. */ /* Type of the initializer. */
typedef void (*init_t) (int, char **, char **); typedef void (*init_t) (int, char **, char **);
#ifndef HAVE_INLINED_SYSCALLS
/* Flag, nonzero during startup phase. */ /* Flag, nonzero during startup phase. */
extern int _dl_starting_up; extern int _dl_starting_up;
extern int _dl_starting_up_internal attribute_hidden; extern int _dl_starting_up_internal attribute_hidden;
#endif
static void static void
@ -143,7 +145,9 @@ _dl_init (struct link_map *main_map, int argc, char **argv, char **env)
r->r_state = RT_CONSISTENT; r->r_state = RT_CONSISTENT;
_dl_debug_state (); _dl_debug_state ();
#ifndef HAVE_INLINED_SYSCALLS
/* Finished starting up. */ /* Finished starting up. */
INTUSE(_dl_starting_up) = 0; INTUSE(_dl_starting_up) = 0;
#endif
} }
INTDEF (_dl_init) INTDEF (_dl_init)

View File

@ -247,7 +247,7 @@ _dl_debug_vdprintf (int fd, int tag_p, const char *fmt, va_list arg)
} }
/* Finally write the result. */ /* Finally write the result. */
#ifdef INTERNAL_SYSCALL #ifdef HAVE_INLINED_SYSCALLS
INTERNAL_SYSCALL_DECL (err); INTERNAL_SYSCALL_DECL (err);
INTERNAL_SYSCALL (writev, err, 3, fd, &iov, niov); INTERNAL_SYSCALL (writev, err, 3, fd, &iov, niov);
#elif RTLD_PRIVATE_ERRNO #elif RTLD_PRIVATE_ERRNO

View File

@ -297,8 +297,13 @@ dl_open_worker (void *a)
GLRO(dl_relocate_object) (l, l->l_scope, 1, 1); GLRO(dl_relocate_object) (l, l->l_scope, 1, 1);
if (old_profile_map == NULL && GL(dl_profile_map) != NULL) 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 else
#endif #endif

View File

@ -358,7 +358,7 @@ _dl_start_profile (void)
return; return;
} }
/* We don't need the file desriptor anymore. */ /* We don't need the file descriptor anymore. */
__close (fd); __close (fd);
/* Pointer to data after the header. */ /* Pointer to data after the header. */

View File

@ -86,8 +86,10 @@ struct r_scope_elem *_dl_global_scope[2] = { &_dl_initial_searchlist, NULL };
to be the global scope. */ to be the global scope. */
struct r_scope_elem *_dl_main_searchlist = &_dl_initial_searchlist; struct r_scope_elem *_dl_main_searchlist = &_dl_initial_searchlist;
#ifndef HAVE_INLINED_SYSCALLS
/* Nonzero during startup. */ /* Nonzero during startup. */
int _dl_starting_up = 1; int _dl_starting_up = 1;
#endif
/* Get architecture specific initializer. */ /* Get architecture specific initializer. */
#include <dl-procinfo.c> #include <dl-procinfo.c>

View File

@ -79,6 +79,7 @@ INTDEF(_dl_argv)
/* Nonzero if we were run directly. */ /* Nonzero if we were run directly. */
unsigned int _dl_skip_args attribute_relro attribute_hidden; unsigned int _dl_skip_args attribute_relro attribute_hidden;
#ifndef HAVE_INLINED_SYSCALLS
/* Set nonzero during loading and initialization of executable and /* Set nonzero during loading and initialization of executable and
libraries, cleared before the executable's entry point runs. This libraries, cleared before the executable's entry point runs. This
must not be initialized to nonzero, because the unused dynamic must not be initialized to nonzero, because the unused dynamic
@ -88,6 +89,7 @@ unsigned int _dl_skip_args attribute_relro attribute_hidden;
never be called. */ never be called. */
int _dl_starting_up = 0; int _dl_starting_up = 0;
INTVARDEF(_dl_starting_up) INTVARDEF(_dl_starting_up)
#endif
/* This is the structure which defines all variables global to ld.so /* This is the structure which defines all variables global to ld.so
(except those which cannot be added for some reason). */ (except those which cannot be added for some reason). */
@ -720,8 +722,10 @@ dl_main (const ElfW(Phdr) *phdr,
/* Process the environment variable which control the behaviour. */ /* Process the environment variable which control the behaviour. */
process_envvars (&mode); process_envvars (&mode);
#ifndef HAVE_INLINED_SYSCALLS
/* Set up a flag which tells we are just starting. */ /* Set up a flag which tells we are just starting. */
INTUSE(_dl_starting_up) = 1; INTUSE(_dl_starting_up) = 1;
#endif
if (*user_entry == (ElfW(Addr)) ENTRY_POINT) if (*user_entry == (ElfW(Addr)) ENTRY_POINT)
{ {

View File

@ -1,3 +1,20 @@
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> 2004-07-05 Jakub Jelinek <jakub@redhat.com>
* sysdeps/unix/sysv/linux/x86_64/lowlevellock.h (lll_unlock): Use * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h (lll_unlock): Use

View File

@ -1,4 +1,4 @@
/* 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. This file is part of the GNU C Library.
Contributed by Jakub Jelinek <jakub@redhat.com>, 2002. Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
@ -99,30 +99,30 @@
L(ENDFDE): \ L(ENDFDE): \
.previous .previous
#ifdef SHARED # ifdef SHARED
/* NUL-terminated augmentation string. Note "z" means there is an /* NUL-terminated augmentation string. Note "z" means there is an
augmentation value later on. */ augmentation value later on. */
# define AUGMENTATION_STRING .string "zR" # define AUGMENTATION_STRING .string "zR"
# define AUGMENTATION_PARAM \ # define AUGMENTATION_PARAM \
/* Augmentation value length. */ \ /* Augmentation value length. */ \
.uleb128 1; \ .uleb128 1; \
/* Encoding: DW_EH_PE_pcrel + DW_EH_PE_sdata4. */ \ /* Encoding: DW_EH_PE_pcrel + DW_EH_PE_sdata4. */ \
.byte 0x1b; .byte 0x1b;
# define AUGMENTATION_PARAM_FDE \ # define AUGMENTATION_PARAM_FDE \
/* No augmentation data. */ \ /* No augmentation data. */ \
.uleb128 0; .uleb128 0;
# define START_SYMBOL_REF(name) \ # define START_SYMBOL_REF(name) \
/* PC-relative start address of the code. */ \ /* PC-relative start address of the code. */ \
.long L(name##START)-. .long L(name##START)-.
#else # else
/* No augmentation. */ /* No augmentation. */
# define AUGMENTATION_STRING .ascii "\0" # define AUGMENTATION_STRING .ascii "\0"
# define AUGMENTATION_PARAM /* nothing */ # define AUGMENTATION_PARAM /* nothing */
# define AUGMENTATION_PARAM_FDE /* nothing */ # define AUGMENTATION_PARAM_FDE /* nothing */
# define START_SYMBOL_REF(name) \ # define START_SYMBOL_REF(name) \
/* Absolute start address of the code. */ \ /* Absolute start address of the code. */ \
.long L(name##START) .long L(name##START)
#endif # endif
/* Callframe description for syscalls without parameters. This is very /* Callframe description for syscalls without parameters. This is very
simple. The only place the stack pointer is changed is when the old simple. The only place the stack pointer is changed is when the old
@ -373,7 +373,7 @@
#elif !defined __ASSEMBLER__ #elif !defined __ASSEMBLER__
/* This code should never be used but we define it anyhow. */
# define SINGLE_THREAD_P (1) # define SINGLE_THREAD_P (1)
# define NO_CANCELLATION 1
#endif #endif

View File

@ -216,7 +216,7 @@ __GC_##name: \
#elif !defined __ASSEMBLER__ #elif !defined __ASSEMBLER__
/* This code should never be used but we define it anyhow. */
# define SINGLE_THREAD_P (1) # define SINGLE_THREAD_P (1)
# define NO_CANCELLATION 1
#endif #endif

View File

@ -26,7 +26,9 @@
#include <atomic.h> #include <atomic.h>
#define __NR_futex 221 #ifndef __NR_futex
# define __NR_futex 221
#endif
#define FUTEX_WAIT 0 #define FUTEX_WAIT 0
#define FUTEX_WAKE 1 #define FUTEX_WAKE 1
#define FUTEX_REQUEUE 3 #define FUTEX_REQUEUE 3

View File

@ -1,5 +1,5 @@
/* Cancellable system call stubs. Linux/PowerPC version. /* 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. This file is part of the GNU C Library.
Contributed by Franz Sirl <Franz.Sirl-kernel@lauterbach.com>, 2003. Contributed by Franz Sirl <Franz.Sirl-kernel@lauterbach.com>, 2003.
@ -109,7 +109,7 @@
#elif !defined __ASSEMBLER__ #elif !defined __ASSEMBLER__
/* This code should never be used but we define it anyhow. */
# define SINGLE_THREAD_P (1) # define SINGLE_THREAD_P (1)
# define NO_CANCELLATION 1
#endif #endif

View File

@ -1,5 +1,5 @@
/* Cancellable system call stubs. Linux/PowerPC64 version. /* 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. This file is part of the GNU C Library.
Contributed by Franz Sirl <Franz.Sirl-kernel@lauterbach.com>, 2003. Contributed by Franz Sirl <Franz.Sirl-kernel@lauterbach.com>, 2003.
@ -109,7 +109,7 @@
#elif !defined __ASSEMBLER__ #elif !defined __ASSEMBLER__
/* This code should never be used but we define it anyhow. */
# define SINGLE_THREAD_P (1) # define SINGLE_THREAD_P (1)
# define NO_CANCELLATION 1
#endif #endif

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2003 Free Software Foundation, Inc. /* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
@ -109,7 +109,7 @@ L(pseudo_end):
#elif !defined __ASSEMBLER__ #elif !defined __ASSEMBLER__
/* This code should never be used but we define it anyhow. */
# define SINGLE_THREAD_P (1) # define SINGLE_THREAD_P (1)
# define NO_CANCELLATION 1
#endif #endif

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2003 Free Software Foundation, Inc. /* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
Contributed by Jakub Jelinek <jakub@redhat.com>, 2003. Contributed by Jakub Jelinek <jakub@redhat.com>, 2003.
@ -122,7 +122,7 @@ extern int __local_multiple_threads attribute_hidden;
#elif !defined __ASSEMBLER__ #elif !defined __ASSEMBLER__
/* This code should never be used but we define it anyhow. */
# define SINGLE_THREAD_P (1) # define SINGLE_THREAD_P (1)
# define NO_CANCELLATION 1
#endif #endif

View File

@ -241,7 +241,7 @@
#elif !defined __ASSEMBLER__ #elif !defined __ASSEMBLER__
/* This code should never be used but we define it anyhow. */
# define SINGLE_THREAD_P (1) # define SINGLE_THREAD_P (1)
# define NO_CANCELLATION 1
#endif #endif

View File

@ -107,7 +107,7 @@ SYSCALL_ERROR_HANDLER_ENTRY(__syscall_error_handler2) \
#elif !defined __ASSEMBLER__ #elif !defined __ASSEMBLER__
/* This code should never be used but we define it anyhow. */
# define SINGLE_THREAD_P (1) # define SINGLE_THREAD_P (1)
# define NO_CANCELLATION 1
#endif #endif

View File

@ -101,7 +101,7 @@ SYSCALL_ERROR_HANDLER_ENTRY(__syscall_error_handler2) \
#elif !defined __ASSEMBLER__ #elif !defined __ASSEMBLER__
/* This code should never be used but we define it anyhow. */
# define SINGLE_THREAD_P (1) # define SINGLE_THREAD_P (1)
# define NO_CANCELLATION 1
#endif #endif

View File

@ -1,4 +1,4 @@
/* 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. This file is part of the GNU C Library.
Contributed by Jakub Jelinek <jakub@redhat.com>, 2002. Contributed by Jakub Jelinek <jakub@redhat.com>, 2002.
@ -132,7 +132,7 @@ extern int __local_multiple_threads attribute_hidden;
#elif !defined __ASSEMBLER__ #elif !defined __ASSEMBLER__
/* This code should never be used but we define it anyhow. */
# define SINGLE_THREAD_P (1) # define SINGLE_THREAD_P (1)
# define NO_CANCELLATION 1
#endif #endif

View File

@ -13,15 +13,28 @@ if eval "test \"\${$as_ac_var+set}\" = set"; then
echo $ECHO_N "(cached) $ECHO_C" >&6 echo $ECHO_N "(cached) $ECHO_C" >&6
else else
cat >conftest.$ac_ext <<_ACEOF cat >conftest.$ac_ext <<_ACEOF
#line $LINENO "configure"
/* confdefs.h. */ /* confdefs.h. */
_ACEOF _ACEOF
cat confdefs.h >>conftest.$ac_ext cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */ /* 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, /* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func (); below. */ which can conflict with char $ac_func (); below.
#include <assert.h> 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. */ /* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus #ifdef __cplusplus
extern "C" extern "C"
@ -45,18 +58,28 @@ char (*f) () = $ac_func;
int int
main () main ()
{ {
return f != $ac_func;
; ;
return 0; return 0;
} }
_ACEOF _ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext rm -f conftest.$ac_objext conftest$ac_exeext
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
(eval $ac_link) 2>&5 (eval $ac_link) 2>conftest.er1
ac_status=$? ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } && (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 echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5 (eval $ac_try) 2>&5
ac_status=$? ac_status=$?
@ -69,7 +92,8 @@ sed 's/^/| /' conftest.$ac_ext >&5
eval "$as_ac_var=no" eval "$as_ac_var=no"
fi 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 fi
echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6

View File

@ -1,5 +1,5 @@
/* Low-level statistical profiling support function. Mostly POSIX.1 version. /* 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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -62,10 +62,13 @@ profil_count (void *pc)
int int
__profil (u_short *sample_buffer, size_t size, size_t offset, u_int scale) __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 sigaction act;
struct itimerval timer; 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) if (sample_buffer == NULL)
{ {
@ -88,6 +91,12 @@ __profil (u_short *sample_buffer, size_t size, size_t offset, u_int scale)
|| __sigaction (SIGPROF, &oact, NULL) < 0) || __sigaction (SIGPROF, &oact, NULL) < 0)
return -1; 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; samples = sample_buffer;
nsamples = size / sizeof *samples; nsamples = size / sizeof *samples;
@ -97,13 +106,13 @@ __profil (u_short *sample_buffer, size_t size, size_t offset, u_int scale)
act.sa_handler = (sighandler_t) &profil_counter; act.sa_handler = (sighandler_t) &profil_counter;
act.sa_flags = SA_RESTART; act.sa_flags = SA_RESTART;
__sigfillset (&act.sa_mask); __sigfillset (&act.sa_mask);
if (__sigaction (SIGPROF, &act, &oact) < 0) if (__sigaction (SIGPROF, &act, oact_ptr) < 0)
return -1; return -1;
timer.it_value.tv_sec = 0; timer.it_value.tv_sec = 0;
timer.it_value.tv_usec = 1; timer.it_value.tv_usec = 1;
timer.it_interval = timer.it_value; timer.it_interval = timer.it_value;
return __setitimer (ITIMER_PROF, &timer, &otimer); return __setitimer (ITIMER_PROF, &timer, otimer_ptr);
} }
weak_alias (__profil, profil) weak_alias (__profil, profil)

View File

@ -1,5 +1,5 @@
/* Machine-dependent ELF startup code. PowerPC version. /* 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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -83,7 +83,6 @@ ENTRY(_dl_start_user)
lwz r7,_dl_fini@got(r31) lwz r7,_dl_fini@got(r31)
/* Now, call the start function in r30... */ /* Now, call the start function in r30... */
mtctr 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. /* 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, (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 which linux will call with argc on top of the stack which will hopefully
@ -98,8 +97,6 @@ ENTRY(_dl_start_user)
stw r31,4(r1) stw r31,4(r1)
stw r31,8(r1) stw r31,8(r1)
stw r31,12(r1) stw r31,12(r1)
/* Clear _dl_starting_up. */
stw r31,0(r26)
/* Go do it! */ /* Go do it! */
bctr bctr
END(_start) END(_start)

View File

@ -194,6 +194,15 @@ elf_machine_dynamic (void)
strong_alias (_dl_runtime_resolve, _dl_profile_resolve); strong_alias (_dl_runtime_resolve, _dl_profile_resolve);
#endif #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 /* 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' is the real entry point; its return value is the user
@ -239,17 +248,16 @@ elf_machine_dynamic (void)
"_dl_start_user:\n" \ "_dl_start_user:\n" \
" .quad ._dl_start_user, .TOC.@tocbase, 0\n" \ " .quad ._dl_start_user, .TOC.@tocbase, 0\n" \
" .previous\n" \ " .previous\n" \
" .section \".toc\",\"aw\"\n" \ " .section \".toc\",\"aw\"\n" \
".LC__dl_starting_up:\n" \ DL_STARTING_UP_DEF \
" .tc _dl_starting_up_internal[TC],_dl_starting_up_internal\n" \ ".LC__rtld_global:\n" \
".LC__rtld_global:\n" \ " .tc _rtld_global[TC],_rtld_global\n" \
" .tc _rtld_global[TC],_rtld_global\n" \ ".LC__dl_argc:\n" \
".LC__dl_argc:\n" \ " .tc _dl_argc[TC],_dl_argc\n" \
" .tc _dl_argc[TC],_dl_argc\n" \ ".LC__dl_argv:\n" \
".LC__dl_argv:\n" \ " .tc _dl_argv_internal[TC],_dl_argv_internal\n" \
" .tc _dl_argv_internal[TC],_dl_argv_internal\n" \ ".LC__dl_fini:\n" \
".LC__dl_fini:\n" \ " .tc _dl_fini[TC],_dl_fini\n" \
" .tc _dl_fini[TC],_dl_fini\n" \
" .previous\n" \ " .previous\n" \
" .globl ._dl_start_user\n" \ " .globl ._dl_start_user\n" \
" .type ._dl_start_user,@function\n" \ " .type ._dl_start_user,@function\n" \
@ -291,8 +299,7 @@ elf_machine_dynamic (void)
" addi 6,6,8\n" \ " addi 6,6,8\n" \
/* Pass a termination function pointer (in this case _dl_fini) in \ /* Pass a termination function pointer (in this case _dl_fini) in \
r7. */ \ r7. */ \
" ld 7,.LC__dl_fini@toc(2)\n" \ " ld 7,.LC__dl_fini@toc(2)\n" \
" ld 26,.LC__dl_starting_up@toc(2)\n" \
/* Pass the stack pointer in r1 (so far so good), pointing to a NULL \ /* Pass the stack pointer in r1 (so far so good), pointing to a NULL \
value. This lets our startup code distinguish between a program \ value. This lets our startup code distinguish between a program \
linked statically, which linux will call with argc on top of the \ linked statically, which linux will call with argc on top of the \
@ -307,8 +314,6 @@ elf_machine_dynamic (void)
" std 31,8(1)\n" \ " std 31,8(1)\n" \
" std 31,16(1)\n" \ " std 31,16(1)\n" \
" std 31,24(1)\n" \ " std 31,24(1)\n" \
/* Clear _dl_starting_up. */ \
" stw 31,0(26)\n" \
/* Now, call the start function descriptor at r30... */ \ /* Now, call the start function descriptor at r30... */ \
" .globl ._dl_main_dispatch\n" \ " .globl ._dl_main_dispatch\n" \
"._dl_main_dispatch:\n" \ "._dl_main_dispatch:\n" \

View File

@ -10,15 +10,12 @@ if test "${ac_cv_check_symbol_sys_siglist+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6 echo $ECHO_N "(cached) $ECHO_C" >&6
else else
cat >conftest.$ac_ext <<_ACEOF cat >conftest.$ac_ext <<_ACEOF
#line $LINENO "configure" /* confdefs.h. */
#include "confdefs.h" _ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#ifdef F77_DUMMY_MAIN
# ifdef __cplusplus
extern "C"
# endif
int F77_DUMMY_MAIN() { return 1; }
#endif
int int
main () main ()
{ {
@ -29,11 +26,21 @@ extern char *sys_siglist[]; puts(*sys_siglist);
_ACEOF _ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext rm -f conftest.$ac_objext conftest$ac_exeext
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
(eval $ac_link) 2>&5 (eval $ac_link) 2>conftest.er1
ac_status=$? ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } && (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 echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5 (eval $ac_try) 2>&5
ac_status=$? ac_status=$?
@ -42,10 +49,12 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_cv_check_symbol_sys_siglist=yes ac_cv_check_symbol_sys_siglist=yes
else else
echo "$as_me: failed program was:" >&5 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 ac_cv_check_symbol_sys_siglist=no
fi 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 fi
if test "$ac_cv_check_symbol_sys_siglist" = yes; then if test "$ac_cv_check_symbol_sys_siglist" = yes; then
@ -63,15 +72,12 @@ if test "${ac_cv_check_symbol__sys_siglist+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6 echo $ECHO_N "(cached) $ECHO_C" >&6
else else
cat >conftest.$ac_ext <<_ACEOF cat >conftest.$ac_ext <<_ACEOF
#line $LINENO "configure" /* confdefs.h. */
#include "confdefs.h" _ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#ifdef F77_DUMMY_MAIN
# ifdef __cplusplus
extern "C"
# endif
int F77_DUMMY_MAIN() { return 1; }
#endif
int int
main () main ()
{ {
@ -82,11 +88,21 @@ extern char *_sys_siglist[]; puts(*_sys_siglist);
_ACEOF _ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext rm -f conftest.$ac_objext conftest$ac_exeext
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
(eval $ac_link) 2>&5 (eval $ac_link) 2>conftest.er1
ac_status=$? ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } && (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 echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5 (eval $ac_try) 2>&5
ac_status=$? ac_status=$?
@ -95,10 +111,12 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
ac_cv_check_symbol__sys_siglist=yes ac_cv_check_symbol__sys_siglist=yes
else else
echo "$as_me: failed program was:" >&5 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 ac_cv_check_symbol__sys_siglist=no
fi 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 fi
if test "$ac_cv_check_symbol__sys_siglist" = yes; then if test "$ac_cv_check_symbol__sys_siglist" = yes; then
@ -120,15 +138,12 @@ if test "${libc_cv_ctype_glue+set}" = set; then
else else
for ctype in _ctype_ __ctype_ __ctype _ctype__ _ctype _locp; do for ctype in _ctype_ __ctype_ __ctype _ctype__ _ctype _locp; do
cat >conftest.$ac_ext <<_ACEOF cat >conftest.$ac_ext <<_ACEOF
#line $LINENO "configure" /* confdefs.h. */
#include "confdefs.h" _ACEOF
cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
#include <ctype.h> #include <ctype.h>
#ifdef F77_DUMMY_MAIN
# ifdef __cplusplus
extern "C"
# endif
int F77_DUMMY_MAIN() { return 1; }
#endif
int int
main () main ()
{ {
@ -139,11 +154,21 @@ $ctype[13];
_ACEOF _ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext rm -f conftest.$ac_objext conftest$ac_exeext
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
(eval $ac_link) 2>&5 (eval $ac_link) 2>conftest.er1
ac_status=$? ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } && (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 echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5 (eval $ac_try) 2>&5
ac_status=$? ac_status=$?
@ -152,9 +177,11 @@ if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
libc_cv_ctype_glue="$ctype"; break libc_cv_ctype_glue="$ctype"; break
else else
echo "$as_me: failed program was:" >&5 echo "$as_me: failed program was:" >&5
cat conftest.$ac_ext >&5 sed 's/^/| /' conftest.$ac_ext >&5
fi 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 done
fi fi

View File

@ -14,15 +14,28 @@ if eval "test \"\${$as_ac_var+set}\" = set"; then
echo $ECHO_N "(cached) $ECHO_C" >&6 echo $ECHO_N "(cached) $ECHO_C" >&6
else else
cat >conftest.$ac_ext <<_ACEOF cat >conftest.$ac_ext <<_ACEOF
#line $LINENO "configure"
/* confdefs.h. */ /* confdefs.h. */
_ACEOF _ACEOF
cat confdefs.h >>conftest.$ac_ext cat confdefs.h >>conftest.$ac_ext
cat >>conftest.$ac_ext <<_ACEOF cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */ /* 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, /* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func (); below. */ which can conflict with char $ac_func (); below.
#include <assert.h> 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. */ /* Override any gcc2 internal prototype to avoid an error. */
#ifdef __cplusplus #ifdef __cplusplus
extern "C" extern "C"
@ -46,18 +59,28 @@ char (*f) () = $ac_func;
int int
main () main ()
{ {
return f != $ac_func;
; ;
return 0; return 0;
} }
_ACEOF _ACEOF
rm -f conftest.$ac_objext conftest$ac_exeext rm -f conftest.$ac_objext conftest$ac_exeext
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
(eval $ac_link) 2>&5 (eval $ac_link) 2>conftest.er1
ac_status=$? ac_status=$?
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
echo "$as_me:$LINENO: \$? = $ac_status" >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } && (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 echo "$as_me:$LINENO: \"$ac_try\"") >&5
(eval $ac_try) 2>&5 (eval $ac_try) 2>&5
ac_status=$? ac_status=$?
@ -70,7 +93,8 @@ sed 's/^/| /' conftest.$ac_ext >&5
eval "$as_ac_var=no" eval "$as_ac_var=no"
fi 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 fi
echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5 echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6 echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&6

View File

@ -43,7 +43,6 @@ if test "${libc_cv_linux2010+set}" = set; then
echo $ECHO_N "(cached) $ECHO_C" >&6 echo $ECHO_N "(cached) $ECHO_C" >&6
else else
cat >conftest.$ac_ext <<_ACEOF cat >conftest.$ac_ext <<_ACEOF
#line $LINENO "configure"
/* confdefs.h. */ /* confdefs.h. */
_ACEOF _ACEOF
cat confdefs.h >>conftest.$ac_ext cat confdefs.h >>conftest.$ac_ext
@ -172,7 +171,6 @@ echo $ECHO_N "checking for kernel header at least $minimum_kernel... $ECHO_C" >&
decnum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/(\1 * 65536 + \2 * 256 + \3)/'`; 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/'`; abinum=`echo "$minimum_kernel.0.0.0" | sed 's/\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\).*/\1,\2,\3/'`;
cat >conftest.$ac_ext <<_ACEOF cat >conftest.$ac_ext <<_ACEOF
#line $LINENO "configure"
/* confdefs.h. */ /* confdefs.h. */
_ACEOF _ACEOF
cat confdefs.h >>conftest.$ac_ext cat confdefs.h >>conftest.$ac_ext
@ -379,3 +377,9 @@ ${ac_prefix}/include directory out of the way." >&2;}
echo "${ECHO_T}ok" >&6 echo "${ECHO_T}ok" >&6
fi fi
fi fi
# We have inlined syscalls.
cat >>confdefs.h <<\_ACEOF
#define HAVE_INLINED_SYSCALLS 1
_ACEOF

View File

@ -305,3 +305,6 @@ ${ac_prefix}/include directory out of the way.])
AC_MSG_RESULT(ok) AC_MSG_RESULT(ok)
fi fi
fi fi
# We have inlined syscalls.
AC_DEFINE(HAVE_INLINED_SYSCALLS)

View File

@ -24,6 +24,7 @@
#include <unistd.h> #include <unistd.h>
#include <sys/param.h> #include <sys/param.h>
#include <ldsodefs.h> #include <ldsodefs.h>
#include <sysdep.h>
#include <dl-dst.h> #include <dl-dst.h>
@ -37,9 +38,11 @@ _dl_get_origin (void)
char linkval[PATH_MAX]; char linkval[PATH_MAX];
char *result; char *result;
int len; int len;
INTERNAL_SYSCALL_DECL (err);
if ((len = __readlink ("/proc/self/exe", linkval, sizeof (linkval))) > 0 len = INTERNAL_SYSCALL (readlink, err, 3, "/proc/self/exe", linkval,
&& linkval[0] != '[') sizeof (linkval));
if (! INTERNAL_SYSCALL_ERROR_P (len, err) && len > 0 && linkval[0] != '[')
{ {
/* We can use this value. */ /* We can use this value. */
assert (linkval[0] == '/'); assert (linkval[0] == '/');

View File

@ -1,4 +1,4 @@
/* 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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -26,6 +26,9 @@
int int
#ifdef NO_CANCELLATION
static inline __attribute ((always_inline))
#endif
__fcntl_nocancel (int fd, int cmd, ...) __fcntl_nocancel (int fd, int cmd, ...)
{ {
va_list ap; va_list ap;

View File

@ -1,4 +1,4 @@
/* 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. This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or The GNU C Library is free software; you can redistribute it and/or
@ -32,6 +32,9 @@ int __have_no_fcntl64;
int int
#ifdef NO_CANCELLATION
static inline __attribute ((always_inline))
#endif
__fcntl_nocancel (int fd, int cmd, ...) __fcntl_nocancel (int fd, int cmd, ...)
{ {
va_list ap; va_list ap;
@ -65,16 +68,15 @@ __fcntl_nocancel (int fd, int cmd, ...)
/* Check if we can represent the values with the smaller type. */ /* Check if we can represent the values with the smaller type. */
if ((off64_t) fl.l_start != fl64->l_start) if ((off64_t) fl.l_start != fl64->l_start)
{ {
eoverflow:
__set_errno (EOVERFLOW); __set_errno (EOVERFLOW);
return -1; return -1;
} }
fl.l_len = (off_t) fl64->l_len; fl.l_len = (off_t) fl64->l_len;
/* Check if we can represent the values with the smaller type. */ /* Check if we can represent the values with the smaller type. */
if ((off64_t) fl.l_len != fl64->l_len) if ((off64_t) fl.l_len != fl64->l_len)
{ goto eoverflow:
__set_errno (EOVERFLOW);
return -1;
}
fl.l_type = fl64->l_type; fl.l_type = fl64->l_type;
fl.l_whence = fl64->l_whence; fl.l_whence = fl64->l_whence;
fl.l_pid = fl64->l_pid; fl.l_pid = fl64->l_pid;
@ -101,10 +103,8 @@ __fcntl_nocancel (int fd, int cmd, ...)
fl.l_start = (off_t) fl64->l_start; fl.l_start = (off_t) fl64->l_start;
/* Check if we can represent the values with the smaller type. */ /* Check if we can represent the values with the smaller type. */
if ((off64_t) fl.l_start != fl64->l_start) if ((off64_t) fl.l_start != fl64->l_start)
{ goto eoverflow:
__set_errno (EOVERFLOW);
return -1;
}
fl.l_len = (off_t)fl64->l_len; fl.l_len = (off_t)fl64->l_len;
/* Check if we can represent the values with the smaller type. */ /* Check if we can represent the values with the smaller type. */
if ((off64_t) fl.l_len != fl64->l_len) if ((off64_t) fl.l_len != fl64->l_len)

View File

@ -26,6 +26,9 @@
int int
#ifdef NO_CANCELLATION
static inline __attribute ((always_inline))
#endif
__fcntl_nocancel (int fd, int cmd, ...) __fcntl_nocancel (int fd, int cmd, ...)
{ {
va_list ap; va_list ap;

View File

@ -1,4 +1,4 @@
/* 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -44,6 +44,9 @@ static ssize_t __emulate_pread (int fd, void *buf, size_t count,
static ssize_t static ssize_t
#ifdef NO_CANCELLATION
inline __attribute ((always_inline))
#endif
do_pread (int fd, void *buf, size_t count, off_t offset) do_pread (int fd, void *buf, size_t count, off_t offset)
{ {
ssize_t result; ssize_t result;

View File

@ -1,4 +1,4 @@
/* 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. This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -44,6 +44,9 @@ static ssize_t __emulate_pwrite (int fd, const void *buf, size_t count,
static ssize_t static ssize_t
#ifdef NO_CANCELLATION
inline __attribute ((always_inline))
#endif
do_pwrite (int fd, const void *buf, size_t count, off_t offset) do_pwrite (int fd, const void *buf, size_t count, off_t offset)
{ {
ssize_t result; ssize_t result;