From 800a496acbb8c43036b3832460220d4ecbbc22a4 Mon Sep 17 00:00:00 2001 From: John David Anglin Date: Sat, 2 Dec 2017 11:04:16 -0500 Subject: [PATCH] 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. --- ChangeLog | 9 +++++++++ sysdeps/hppa/dl-fptr.c | 5 ++--- sysdeps/hppa/dl-fptr.h | 5 ++--- sysdeps/hppa/dl-machine.h | 23 ++++++++++------------- 4 files changed, 23 insertions(+), 19 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3354d09081..d85007edb0 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 96fd09d192..d2cc413403 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 0cb50524fd..3ed86bb230 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 acfb9fc31f..11ee9ca2eb 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 */ \ \ -- 2.11.4.GIT