about summary refs log tree commit diff
path: root/sysdeps/powerpc
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
parent2dd18ce2b2dfecc737479548f5b6d1784d90fe79 (diff)
downloadglibc-ce6e047fbb353e1d2faf15ab104a19db609b622b.tar.gz
glibc-ce6e047fbb353e1d2faf15ab104a19db609b622b.tar.xz
glibc-ce6e047fbb353e1d2faf15ab104a19db609b622b.zip
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')
-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"  \