summaryrefslogtreecommitdiff
path: root/sysdeps/powerpc/powerpc64
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2004-07-06 04:26:42 +0000
committerUlrich Drepper <drepper@redhat.com>2004-07-06 04:26:42 +0000
commitce6e047fbb353e1d2faf15ab104a19db609b622b (patch)
tree3cf56ba767e54e26c5a7bfedc235728d457c9093 /sysdeps/powerpc/powerpc64
parent2dd18ce2b2dfecc737479548f5b6d1784d90fe79 (diff)
Update.
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.
Diffstat (limited to 'sysdeps/powerpc/powerpc64')
-rw-r--r--sysdeps/powerpc/powerpc64/dl-machine.h35
1 files changed, 20 insertions, 15 deletions
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" \