From: John David Anglin Date: Sat, 2 Dec 2017 16:04:16 +0000 (-0500) Subject: Improve PIC pc-relative instruction sequences on hppa. X-Git-Tag: glibc-2.27~349 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=800a496acbb8c43036b3832460220d4ecbbc22a4;p=thirdparty%2Fglibc.git Improve PIC pc-relative instruction sequences on hppa. * sysdeps/hppa/dl-fptr.c (elf_machine_resolve): Remove unnecessary depi instruction from PIC pc-relative sequence. * sysdeps/hppa/dl-fptr.h (ELF_MACHINE_LOAD_ADDRESS): Likewise. * sysdeps/hppa/dl-machine.h (elf_machine_dynamic): Likewise. (elf_machine_load_address): Likewise. (elf_machine_runtime_setup): Likewise. --- diff --git a/ChangeLog b/ChangeLog index 3354d090815..d85007edb07 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2017-12-02 John David Anglin + + * sysdeps/hppa/dl-fptr.c (elf_machine_resolve): Remove unnecessary + depi instruction from PIC pc-relative sequence. + * sysdeps/hppa/dl-fptr.h (ELF_MACHINE_LOAD_ADDRESS): Likewise. + * sysdeps/hppa/dl-machine.h (elf_machine_dynamic): Likewise. + (elf_machine_load_address): Likewise. + (elf_machine_runtime_setup): Likewise. + 2017-12-02 Joseph Myers * sysdeps/powerpc/power7/fpu/s_logb.c: Include diff --git a/sysdeps/hppa/dl-fptr.c b/sysdeps/hppa/dl-fptr.c index 96fd09d192f..d2cc4134032 100644 --- a/sysdeps/hppa/dl-fptr.c +++ b/sysdeps/hppa/dl-fptr.c @@ -329,9 +329,8 @@ elf_machine_resolve (void) Elf32_Addr addr; asm ("b,l 1f,%0\n" -" depi 0,31,2,%0\n" -"1: addil L'_dl_runtime_resolve - ($PIC_pcrel$0 - 8),%0\n" -" ldo R'_dl_runtime_resolve - ($PIC_pcrel$0 - 12)(%%r1),%0\n" +" addil L'_dl_runtime_resolve - ($PIC_pcrel$0 - 1),%0\n" +"1: ldo R'_dl_runtime_resolve - ($PIC_pcrel$0 - 5)(%%r1),%0\n" : "=r" (addr) : : "r1"); return addr; diff --git a/sysdeps/hppa/dl-fptr.h b/sysdeps/hppa/dl-fptr.h index 0cb50524fd9..3ed86bb2300 100644 --- a/sysdeps/hppa/dl-fptr.h +++ b/sysdeps/hppa/dl-fptr.h @@ -31,9 +31,8 @@ extern void _dl_fptr_init (void); #define ELF_MACHINE_LOAD_ADDRESS(var, symbol) \ asm ( \ " b,l 1f,%0\n" \ -" depi 0,31,2,%0\n" \ -"1: addil L'" #symbol " - ($PIC_pcrel$0 - 8),%0\n" \ -" ldo R'" #symbol " - ($PIC_pcrel$0 - 12)(%%r1),%0\n" \ +" addil L'" #symbol " - ($PIC_pcrel$0 - 1),%0\n" \ +"1: ldo R'" #symbol " - ($PIC_pcrel$0 - 5)(%%r1),%0\n" \ : "=&r" (var) : : "r1"); #endif /* !dl_hppa_fptr_h */ diff --git a/sysdeps/hppa/dl-machine.h b/sysdeps/hppa/dl-machine.h index acfb9fc31fa..11ee9ca2eb5 100644 --- a/sysdeps/hppa/dl-machine.h +++ b/sysdeps/hppa/dl-machine.h @@ -81,10 +81,9 @@ elf_machine_dynamic (void) { Elf32_Addr dynamic; - asm ("b,l 1f,%0\n" -" depi 0,31,2,%0\n" -"1: addil L'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 8),%0\n" -" ldw R'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 12)(%%r1),%0\n" + asm ("bl 1f,%0\n" +" addil L'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 1),%0\n" +"1: ldw R'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 5)(%%r1),%0\n" : "=r" (dynamic) : : "r1"); return dynamic; @@ -100,10 +99,9 @@ elf_machine_load_address (void) Elf32_Addr dynamic; asm ( -" b,l 1f,%0\n" -" depi 0,31,2,%0\n" -"1: addil L'_DYNAMIC - ($PIC_pcrel$0 - 8),%0\n" -" ldo R'_DYNAMIC - ($PIC_pcrel$0 - 12)(%%r1),%0\n" +" bl 1f,%0\n" +" addil L'_DYNAMIC - ($PIC_pcrel$0 - 1),%0\n" +"1: ldo R'_DYNAMIC - ($PIC_pcrel$0 - 5)(%%r1),%0\n" : "=r" (dynamic) : : "r1"); return dynamic - elf_machine_dynamic (); @@ -339,14 +337,13 @@ asm ( \ just like a branch reloc. This sequence gets us the \ runtime address of _DYNAMIC. */ \ " bl 0f,%r19\n" \ -" depi 0,31,2,%r19\n" /* clear priviledge bits */ \ -"0: addil L'_DYNAMIC - ($PIC_pcrel$0 - 8),%r19\n" \ -" ldo R'_DYNAMIC - ($PIC_pcrel$0 - 12)(%r1),%r26\n" \ +" addil L'_DYNAMIC - ($PIC_pcrel$0 - 1),%r19\n" \ +"0: ldo R'_DYNAMIC - ($PIC_pcrel$0 - 5)(%r1),%r26\n" \ \ /* The link time address is stored in the first entry of the \ GOT. */ \ -" addil L'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 16),%r19\n" \ -" ldw R'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 20)(%r1),%r20\n" \ +" addil L'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 9),%r19\n" \ +" ldw R'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 13)(%r1),%r20\n" \ \ " sub %r26,%r20,%r20\n" /* Calculate load offset */ \ \