From ce6e047fbb353e1d2faf15ab104a19db609b622b Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Tue, 6 Jul 2004 04:26:42 +0000 Subject: Update. 2004-07-05 Ulrich Drepper * 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. --- sysdeps/powerpc/powerpc32/dl-start.S | 5 +---- sysdeps/powerpc/powerpc64/dl-machine.h | 35 +++++++++++++++++++--------------- 2 files changed, 21 insertions(+), 19 deletions(-) (limited to 'sysdeps/powerpc') diff --git a/sysdeps/powerpc/powerpc32/dl-start.S b/sysdeps/powerpc/powerpc32/dl-start.S index 527982bfdf..d72202d4a4 100644 --- a/sysdeps/powerpc/powerpc32/dl-start.S +++ b/sysdeps/powerpc/powerpc32/dl-start.S @@ -1,5 +1,5 @@ /* 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 @@ -83,7 +83,6 @@ ENTRY(_dl_start_user) 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 @@ -98,8 +97,6 @@ ENTRY(_dl_start_user) 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) diff --git a/sysdeps/powerpc/powerpc64/dl-machine.h b/sysdeps/powerpc/powerpc64/dl-machine.h index 3edbadf6a4..2a090ec96e 100644 --- a/sysdeps/powerpc/powerpc64/dl-machine.h +++ b/sysdeps/powerpc/powerpc64/dl-machine.h @@ -194,6 +194,15 @@ elf_machine_dynamic (void) 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 @@ -239,17 +248,16 @@ elf_machine_dynamic (void) "_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" \ @@ -291,8 +299,7 @@ elf_machine_dynamic (void) " 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 \ @@ -307,8 +314,6 @@ elf_machine_dynamic (void) " 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" \ -- cgit v1.2.3