diff options
author | Ulrich Drepper <drepper@redhat.com> | 2009-03-15 00:26:14 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2009-03-15 00:26:14 +0000 |
commit | a42ad61bae4d378f290df67015b14dec1236545f (patch) | |
tree | 0f54f403ebb0b74474046310d0cf9484e3ff4fdf /sysdeps | |
parent | 1f7c90a722f7a4cde0a47be1968dee4e1ad876a4 (diff) | |
download | glibc-a42ad61bae4d378f290df67015b14dec1236545f.tar glibc-a42ad61bae4d378f290df67015b14dec1236545f.tar.gz glibc-a42ad61bae4d378f290df67015b14dec1236545f.tar.bz2 glibc-a42ad61bae4d378f290df67015b14dec1236545f.zip |
* elf/dl-runtime.c (reloc_offset): Define.
(reloc_index): Define.
(_dl_fixup): Rename reloc_offset parameter to reloc_arg.
(_dl_fixup_profile): Likewise. Use reloc_index instead of
computing index from reloc_offset.
(_dl_call_pltexit): Likewise.
* sysdeps/x86_64/dl-trampoline.S (_dl_runtime_resolve): Just pass
the relocation index to _dl_fixup.
(_dl_runtime_profile): Likewise for _dl_fixup_profile and
_dl_call_pltexit.
* sysdeps/x86_64/dl-runtime.c: New file.
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/x86_64/dl-runtime.c | 9 | ||||
-rw-r--r-- | sysdeps/x86_64/dl-trampoline.S | 12 |
2 files changed, 9 insertions, 12 deletions
diff --git a/sysdeps/x86_64/dl-runtime.c b/sysdeps/x86_64/dl-runtime.c new file mode 100644 index 0000000000..b625d1e882 --- /dev/null +++ b/sysdeps/x86_64/dl-runtime.c @@ -0,0 +1,9 @@ +/* The ABI calls for the PLT stubs to pass the index of the relocation + and not its offset. In _dl_profile_fixup and _dl_call_pltexit we + also use the index. Therefore it is wasteful to compute the offset + in the trampoline just to reverse the operation immediately + afterwards. */ +#define reloc_offset reloc_arg * sizeof (PLTREL) +#define reloc_index reloc_arg + +#include <elf/dl-runtime.c> diff --git a/sysdeps/x86_64/dl-trampoline.S b/sysdeps/x86_64/dl-trampoline.S index c9be759e37..0ae47a47db 100644 --- a/sysdeps/x86_64/dl-trampoline.S +++ b/sysdeps/x86_64/dl-trampoline.S @@ -35,10 +35,6 @@ _dl_runtime_resolve: movq %r8, 40(%rsp) movq %r9, 48(%rsp) movq 64(%rsp), %rsi # Copy args pushed by PLT in register. - movq %rsi, %r11 # Multiply by 24 - addq %r11, %rsi - addq %r11, %rsi - shlq $3, %rsi movq 56(%rsp), %rdi # %rdi: link_map, %rsi: reloc_offset call _dl_fixup # Call resolver. movq %rax, %r11 # Save return value @@ -116,10 +112,6 @@ _dl_runtime_profile: movq %rsp, %rcx # La_x86_64_regs pointer to %rcx. movq 48(%rbx), %rdx # Load return address if needed. movq 40(%rbx), %rsi # Copy args pushed by PLT in register. - movq %rsi,%r11 # Multiply by 24. - addq %r11,%rsi - addq %r11,%rsi - shlq $3, %rsi movq 32(%rbx), %rdi # %rdi: link_map, %rsi: reloc_offset leaq 16(%rbx), %r8 call _dl_profile_fixup # Call resolver. @@ -204,10 +196,6 @@ _dl_runtime_profile: movq 24(%rbx), %rdx # La_x86_64_regs argument to %rdx. movq 40(%rbx), %rsi # Copy args pushed by PLT in register. - movq %rsi,%r11 # Multiply by 24. - addq %r11,%rsi - addq %r11,%rsi - shlq $3, %rsi movq 32(%rbx), %rdi # %rdi: link_map, %rsi: reloc_offset call _dl_call_pltexit |