diff options
author | Ulrich Weigand <Ulrich.Weigand@de.ibm.com> | 2013-12-04 06:49:15 -0600 |
---|---|---|
committer | Adhemerval Zanella <azanella@linux.vnet.ibm.com> | 2013-12-04 07:41:38 -0600 |
commit | d31beafa8e4ca69faa4cf362784796ef17299341 (patch) | |
tree | c19f21db80ede177c9205a7bb5749a5d3fdcda4c /sysdeps/powerpc/powerpc64/dl-machine.h | |
parent | PowerPC64: Add __private_ss field to TCB header (diff) | |
download | glibc-d31beafa8e4ca69faa4cf362784796ef17299341.tar.gz glibc-d31beafa8e4ca69faa4cf362784796ef17299341.tar.bz2 glibc-d31beafa8e4ca69faa4cf362784796ef17299341.zip |
PowerPC64 ELFv2 ABI 1/6: Code refactoring
This is the first patch to support the new ELFv2 ABI in glibc.
As preparation, this patch simply refactors some of the powerpc64 assembler
code to move all code related to creating function descriptors (.opd section)
or using function descriptors (function pointer call) into a central place
in sysdep.h.
Note that most locations creating .opd entries were already using macros
in sysdep.h, this patch simply extends this to the remaining places.
No relevant change in generated code expected.
Diffstat (limited to 'sysdeps/powerpc/powerpc64/dl-machine.h')
-rw-r--r-- | sysdeps/powerpc/powerpc64/dl-machine.h | 18 |
1 files changed, 1 insertions, 17 deletions
diff --git a/sysdeps/powerpc/powerpc64/dl-machine.h b/sysdeps/powerpc/powerpc64/dl-machine.h index 19fa4fab4b..a623be5f0b 100644 --- a/sysdeps/powerpc/powerpc64/dl-machine.h +++ b/sysdeps/powerpc/powerpc64/dl-machine.h @@ -122,14 +122,7 @@ elf_machine_dynamic (void) #define RTLD_START \ asm (".pushsection \".text\"\n" \ " .align 2\n" \ -" .type " BODY_PREFIX "_start,@function\n" \ -" .pushsection \".opd\",\"aw\"\n" \ -" .align 3\n" \ -" .globl _start\n" \ " " ENTRY_2(_start) "\n" \ -"_start:\n" \ -" " OPD_ENT(_start) "\n" \ -" .popsection\n" \ BODY_PREFIX "_start:\n" \ /* We start with the following on the stack, from top: \ argc (4 bytes); \ @@ -154,11 +147,6 @@ BODY_PREFIX "_start:\n" \ ".LT__start_name_end:\n" \ " .align 2\n" \ " " END_2(_start) "\n" \ -" .globl _dl_start_user\n" \ -" .pushsection \".opd\",\"aw\"\n" \ -"_dl_start_user:\n" \ -" " OPD_ENT(_dl_start_user) "\n" \ -" .popsection\n" \ " .pushsection \".toc\",\"aw\"\n" \ DL_STARTING_UP_DEF \ ".LC__rtld_local:\n" \ @@ -170,7 +158,6 @@ DL_STARTING_UP_DEF \ ".LC__dl_fini:\n" \ " .tc _dl_fini[TC],_dl_fini\n" \ " .popsection\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, \ @@ -228,10 +215,7 @@ BODY_PREFIX "_dl_start_user:\n" \ /* Now, call the start function descriptor at r30... */ \ " .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" \ +" " PPC64_LOAD_FUNCPTR(30) "\n" \ " bctr\n" \ ".LT__dl_start_user:\n" \ " .long 0\n" \ |