diff options
author | joseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d> | 2013-01-18 17:11:00 +0000 |
---|---|---|
committer | joseph <joseph@7b3dc134-2b1b-0410-93df-9e9f96275f8d> | 2013-01-18 17:11:00 +0000 |
commit | fa4604e04e973ca3abd6aeaeec07bbf0fc38d9af (patch) | |
tree | cb548633e3b698c18fe6339137307cbf28dd0d82 /libc/sysdeps/x86_64/dl-machine.h | |
parent | 00ed3326c2fac75592e173e9d731452e9bb769ff (diff) | |
download | eglibc2-fa4604e04e973ca3abd6aeaeec07bbf0fc38d9af.tar.gz |
Merge changes between r22176 and r22241 from /fsf/trunk.
git-svn-id: svn://svn.eglibc.org/trunk@22242 7b3dc134-2b1b-0410-93df-9e9f96275f8d
Diffstat (limited to 'libc/sysdeps/x86_64/dl-machine.h')
-rw-r--r-- | libc/sysdeps/x86_64/dl-machine.h | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/libc/sysdeps/x86_64/dl-machine.h b/libc/sysdeps/x86_64/dl-machine.h index 660f1aa1e..4768c6954 100644 --- a/libc/sysdeps/x86_64/dl-machine.h +++ b/libc/sysdeps/x86_64/dl-machine.h @@ -286,6 +286,21 @@ elf_machine_rela (struct link_map *map, const ElfW(Rela) *reloc, switch (r_type) { +# ifndef RTLD_BOOTSTRAP +# ifdef __ILP32__ + case R_X86_64_SIZE64: + /* Set to symbol size plus addend. */ + *(Elf64_Addr *) (uintptr_t) reloc_addr + = (Elf64_Addr) sym->st_size + reloc->r_addend; + break; + + case R_X86_64_SIZE32: +# else + case R_X86_64_SIZE64: +# endif + /* Set to symbol size plus addend. */ + value = sym->st_size; +# endif case R_X86_64_GLOB_DAT: case R_X86_64_JUMP_SLOT: *reloc_addr = value + reloc->r_addend; @@ -394,6 +409,11 @@ elf_machine_rela (struct link_map *map, const ElfW(Rela) *reloc, relocation updates the whole 64-bit entry. */ *(Elf64_Addr *) reloc_addr = (Elf64_Addr) value + reloc->r_addend; break; +# ifndef __ILP32__ + case R_X86_64_SIZE32: + /* Set to symbol size plus addend. */ + value = sym->st_size; +# endif case R_X86_64_32: value += reloc->r_addend; *(unsigned int *) reloc_addr = value; |