mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-22 13:00:06 +00:00
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.
This commit is contained in:
parent
d17542d235
commit
800a496acb
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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 */
|
||||
|
@ -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 */ \
|
||||
\
|
||||
|
Loading…
Reference in New Issue
Block a user