]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Improve PIC pc-relative instruction sequences on hppa.
authorJohn David Anglin <danglin@gcc.gnu.org>
Sat, 2 Dec 2017 16:04:16 +0000 (11:04 -0500)
committerJohn David Anglin <danglin@gcc.gnu.org>
Sat, 2 Dec 2017 16:04:16 +0000 (11:04 -0500)
* 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
sysdeps/hppa/dl-fptr.c
sysdeps/hppa/dl-fptr.h
sysdeps/hppa/dl-machine.h

index 3354d090815fb73af41c0a7333083ccba755a299..d85007edb07017c34997ac4955e525ef4c2ec36b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2017-12-02  John David Anglin  <danglin@gcc.gnu.org>
+
+       * 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  <joseph@codesourcery.com>
 
        * sysdeps/powerpc/power7/fpu/s_logb.c: Include
index 96fd09d192f2e8d153c0f83eee8792356a054a76..d2cc41340327a7f78bc92975835344d30b4bdaa4 100644 (file)
@@ -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;
index 0cb50524fd91e4559612f99573aaf364afca241b..3ed86bb23005622d05b9d5ecbe49cf587858722c 100644 (file)
@@ -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 */
index acfb9fc31fab228256cfaec1afdf231ba623939f..11ee9ca2eb59722fa5c4075fe8d351d4e0f35070 100644 (file)
@@ -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 */     \
                                                                        \