about summary refs log tree commit diff
path: root/sysdeps/powerpc/powerpc64/dl-machine.h
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2004-09-08 07:02:28 +0000
committerUlrich Drepper <drepper@redhat.com>2004-09-08 07:02:28 +0000
commit590b40f7ec801ea1b4be47112a016ed369041e64 (patch)
tree63d37abbae8a1046c88c4af07744f35830506ba5 /sysdeps/powerpc/powerpc64/dl-machine.h
parent67254a97d98f73a35ab995e8afccb3ded433c8b1 (diff)
downloadglibc-590b40f7ec801ea1b4be47112a016ed369041e64.tar.gz
glibc-590b40f7ec801ea1b4be47112a016ed369041e64.tar.xz
glibc-590b40f7ec801ea1b4be47112a016ed369041e64.zip
Update.
2004-09-07  Jakub Jelinek  <jakub@redhat.com>

	* sysdeps/powerpc/powerpc64/configure.in: New file.
	* config.h.in (USE_PPC64_OVERLAPPING_OPD): Add.
	* configure.in (HAVE_ASM_GLOBAL_DOT_NAME): Remove.
	* sysdeps/powerpc/powerpc64/sysdep.h: Formatting.
	(OPD_ENT, BODY_LABEL, ENTRY_1, ENTRY_2, END_2, DOT_PREFIX,
	BODY_PREFIX): Define.
	(ENTRY, DOT_LABEL, END, TRACEBACK, END_GEN_TB, EALIGN): Support
	HAVE_ASM_GLOBAL_DOT_NAME or no dot symbols,
	USE_PPC64_OVERLAPPING_OPD or never overlapping .opd entries.
	* sysdeps/powerpc/powerpc64/dl-machine.h: Include sysdep.h.
	(TRAMPOLINE_TEMPLATE, RTLD_START): Use the new sysdep.h macros.
Diffstat (limited to 'sysdeps/powerpc/powerpc64/dl-machine.h')
-rw-r--r--sysdeps/powerpc/powerpc64/dl-machine.h79
1 files changed, 39 insertions, 40 deletions
diff --git a/sysdeps/powerpc/powerpc64/dl-machine.h b/sysdeps/powerpc/powerpc64/dl-machine.h
index bcaa20049d..3fcf77df71 100644
--- a/sysdeps/powerpc/powerpc64/dl-machine.h
+++ b/sysdeps/powerpc/powerpc64/dl-machine.h
@@ -27,6 +27,7 @@
 #include <assert.h>
 #include <sys/param.h>
 #include <dl-tls.h>
+#include <sysdep.h>
 
 /* Translate a processor specific dynamic tag to the index
    in l_info array.  */
@@ -117,16 +118,15 @@ elf_machine_dynamic (void)
 #define TRAMPOLINE_TEMPLATE(tramp_name, fixup_name) \
   asm (".section \".text\"\n"						\
 "	.align	2\n"							\
-"	.globl	." #tramp_name "\n"					\
-"	.type	." #tramp_name ",@function\n"				\
+"	.type	" BODY_PREFIX #tramp_name ",@function\n"		\
 "	.section \".opd\",\"aw\"\n"					\
 "	.align	3\n"							\
 "	.globl	" #tramp_name "\n"					\
-"	.size	" #tramp_name ",24\n"					\
+"	" ENTRY_2(tramp_name) "\n"					\
 #tramp_name ":\n"							\
-"	.quad	." #tramp_name ",.TOC.@tocbase,0\n"			\
+"	" OPD_ENT(tramp_name) "\n"					\
 "	.previous\n"							\
-"." #tramp_name ":\n"							\
+BODY_PREFIX #tramp_name ":\n"						\
 /* We need to save the registers used to pass parameters, ie. r3 thru	\
    r10; the registers are saved in a stack frame.  */			\
 "	stdu	1,-128(1)\n"						\
@@ -141,14 +141,14 @@ elf_machine_dynamic (void)
 "	std	7,80(1)\n"						\
 "	mflr	0\n"							\
 "	std	8,88(1)\n"						\
-/* Store the LR in the LR Save area of the previous frame.  */    \
+/* Store the LR in the LR Save area of the previous frame.  */    	\
 "	std	0,128+16(1)\n"						\
 "	mfcr	0\n"							\
 "	std	9,96(1)\n"						\
 "	std	10,104(1)\n"						\
-/* I'm almost certain we don't have to save cr...  be safe.  */    \
+/* I'm almost certain we don't have to save cr...  be safe.  */    	\
 "	std	0,8(1)\n"						\
-"	bl	." #fixup_name "\n"					\
+"	bl	" DOT_PREFIX #fixup_name "\n"				\
 /* Put the registers back.  */						\
 "	ld	0,128+16(1)\n"						\
 "	ld	10,104(1)\n"						\
@@ -174,13 +174,13 @@ elf_machine_dynamic (void)
 ".LT_" #tramp_name ":\n"						\
 "	.long 0\n"							\
 "	.byte 0x00,0x0c,0x24,0x40,0x00,0x00,0x00,0x00\n"		\
-"	.long .LT_" #tramp_name "-."#tramp_name "\n"			\
+"	.long .LT_" #tramp_name "-" BODY_PREFIX #tramp_name "\n"	\
 "	.short .LT_" #tramp_name "_name_end-.LT_" #tramp_name "_name_start\n" \
 ".LT_" #tramp_name "_name_start:\n"					\
 "	.ascii \"" #tramp_name "\"\n"					\
 ".LT_" #tramp_name "_name_end:\n"					\
 "	.align 2\n"							\
-"	.size	." #tramp_name ",. - ." #tramp_name "\n"		\
+"	" END_2(tramp_name) "\n"					\
 "	.previous");
 
 #ifndef PROF
@@ -210,16 +210,15 @@ elf_machine_dynamic (void)
 #define RTLD_START \
   asm (".section \".text\"\n"						\
 "	.align	2\n"							\
-"	.globl	._start\n"						\
-"	.type	._start,@function\n"					\
+"	.type	" BODY_PREFIX "_start,@function\n"			\
 "	.section \".opd\",\"aw\"\n"					\
 "	.align	3\n"							\
 "	.globl	_start\n"						\
-"	.size	_start,24\n"						\
+"	" ENTRY_2(_start) "\n"						\
 "_start:\n"								\
-"	.quad	._start,.TOC.@tocbase,0\n"				\
+"	" OPD_ENT(_start) "\n"						\
 "	.previous\n"							\
-"._start:\n"								\
+BODY_PREFIX "_start:\n"							\
 /* We start with the following on the stack, from top:			\
    argc (4 bytes);							\
    arguments for program (terminated by NULL);				\
@@ -229,24 +228,24 @@ elf_machine_dynamic (void)
 "	li	4,0\n"							\
 "	stdu	4,-128(1)\n"						\
 /* Call _dl_start with one parameter pointing at argc.  */		\
-"	bl	._dl_start\n"						\
+"	bl	" DOT_PREFIX "_dl_start\n"				\
 "	nop\n"								\
 /* Transfer control to _dl_start_user!  */				\
-"	b	._dl_start_user\n"					\
-".LT__start:\n"  \
-"	.long 0\n"      \
+"	b	" DOT_PREFIX "_dl_start_user\n"				\
+".LT__start:\n"								\
+"	.long 0\n"							\
 "	.byte 0x00,0x0c,0x24,0x40,0x00,0x00,0x00,0x00\n"		\
-"	.long .LT__start-._start\n"					\
+"	.long .LT__start-" BODY_PREFIX "_start\n"			\
 "	.short .LT__start_name_end-.LT__start_name_start\n"		\
 ".LT__start_name_start:\n"						\
 "	.ascii \"_start\"\n"						\
 ".LT__start_name_end:\n"						\
 "	.align 2\n"							\
-"	.size	._start,.-._start\n"					\
+"	" END_2(_start) "\n"						\
 "	.globl	_dl_start_user\n"					\
 "	.section \".opd\",\"aw\"\n"					\
 "_dl_start_user:\n"							\
-"	.quad	._dl_start_user, .TOC.@tocbase, 0\n"			\
+"	" OPD_ENT(_dl_start_user) "\n"					\
 "	.previous\n"							\
 "	.section	\".toc\",\"aw\"\n"				\
 DL_STARTING_UP_DEF							\
@@ -259,20 +258,20 @@ DL_STARTING_UP_DEF							\
 ".LC__dl_fini:\n"							\
 "	.tc _dl_fini[TC],_dl_fini\n"					\
 "	.previous\n"							\
-"	.globl	._dl_start_user\n"					\
-"	.type	._dl_start_user,@function\n"				\
-/* Now, we do our main work of calling initialisation procedures.  \
-   The ELF ABI doesn't say anything about parameters for these,  \
-   so we just pass argc, argv, and the environment.  \
-   Changing these is strongly discouraged (not least because argc is  \
-   passed by value!).  */  \
-"._dl_start_user:\n"  \
+"	.type	" BODY_PREFIX "_dl_start_user,@function\n"		\
+"	" ENTRY_2(_dl_start_user) "\n"					\
+/* Now, we do our main work of calling initialisation procedures.	\
+   The ELF ABI doesn't say anything about parameters for these,		\
+   so we just pass argc, argv, and the environment.			\
+   Changing these is strongly discouraged (not least because argc is	\
+   passed by value!).  */						\
+BODY_PREFIX "_dl_start_user:\n"						\
 /* the address of _start in r30.  */					\
 "	mr	30,3\n"							\
 /* &_dl_argc in 29, &_dl_argv in 27, and _dl_loaded in 28.  */		\
-"	ld	28,.LC__rtld_global@toc(2)\n"    \
-"	ld	29,.LC__dl_argc@toc(2)\n"					\
-"	ld	27,.LC__dl_argv@toc(2)\n"					\
+"	ld	28,.LC__rtld_global@toc(2)\n"				\
+"	ld	29,.LC__dl_argc@toc(2)\n"				\
+"	ld	27,.LC__dl_argv@toc(2)\n"				\
 /* _dl_init (_dl_loaded, _dl_argc, _dl_argv, _dl_argv+_dl_argc+1).  */	\
 "	ld	3,0(28)\n"						\
 "	lwa	4,0(29)\n"						\
@@ -280,7 +279,7 @@ DL_STARTING_UP_DEF							\
 "	sldi	6,4,3\n"						\
 "	add	6,5,6\n"						\
 "	addi	6,6,8\n"						\
-"	bl	._dl_init\n"						\
+"	bl	" DOT_PREFIX "_dl_init\n"				\
 "	nop\n"								\
 /* Now, to conform to the ELF ABI, we have to:				\
    Pass argc (actually _dl_argc) in r3;  */				\
@@ -305,7 +304,7 @@ DL_STARTING_UP_DEF							\
    linked statically, which linux will call with argc on top of the	\
    stack which will hopefully never be zero, and a dynamically linked	\
    program which will always have a NULL on the top of the stack.	\
-   Take the opportunity to clear LR, so anyone who accidentally  \
+   Take the opportunity to clear LR, so anyone who accidentally		\
    returns from _start gets SEGV.  Also clear the next few words of	\
    the stack.  */							\
 "	li	31,0\n"							\
@@ -315,23 +314,23 @@ DL_STARTING_UP_DEF							\
 "	std	31,16(1)\n"						\
 "	std	31,24(1)\n"						\
 /* Now, call the start function descriptor at r30...  */		\
-"	.globl	._dl_main_dispatch\n"  \
-"._dl_main_dispatch:\n"  \
+"	.globl	._dl_main_dispatch\n"					\
+"._dl_main_dispatch:\n"							\
 "	ld	0,0(30)\n"						\
 "	ld	2,8(30)\n"						\
 "	mtctr	0\n"							\
 "	ld	11,16(30)\n"						\
 "	bctr\n"								\
-".LT__dl_start_user:\n"	\
+".LT__dl_start_user:\n"							\
 "	.long 0\n"							\
 "	.byte 0x00,0x0c,0x24,0x40,0x00,0x00,0x00,0x00\n"		\
-"	.long .LT__dl_start_user-._dl_start_user\n"			\
+"	.long .LT__dl_start_user-" BODY_PREFIX "_dl_start_user\n"	\
 "	.short .LT__dl_start_user_name_end-.LT__dl_start_user_name_start\n" \
 ".LT__dl_start_user_name_start:\n"					\
 "	.ascii \"_dl_start_user\"\n"					\
 ".LT__dl_start_user_name_end:\n"					\
 "	.align 2\n"							\
-"	.size	._dl_start_user,.-._dl_start_user\n"			\
+"	" END_2(_dl_start_user) "\n"					\
 "	.previous");
 
 /* Nonzero iff TYPE should not be allowed to resolve to one of