aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/powerpc
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/powerpc')
-rw-r--r--sysdeps/powerpc/powerpc32/dl-start.S5
-rw-r--r--sysdeps/powerpc/powerpc64/dl-machine.h35
2 files changed, 21 insertions, 19 deletions
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" \