diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | include/link.h | 5 | ||||
-rw-r--r-- | sysdeps/x86_64/dl-irel.h | 14 |
3 files changed, 18 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog index 430e7d2c5d..31c4d3d119 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2012-03-22 H.J. Lu <hongjiu.lu@intel.com> + * include/link.h (ELFW): New macro. + * sysdeps/x86_64/dl-irel.h: Replace Elf64_XXX with ElfW(XXX). + Replace ELF64_R_TYPE with ELFW(R_TYPE). + +2012-03-22 H.J. Lu <hongjiu.lu@intel.com> + * sysdeps/x86_64/dl-tls.h (dl_tls_index): Replace unsigned long with uint64_t. diff --git a/include/link.h b/include/link.h index c5265ee16f..2eb3179475 100644 --- a/include/link.h +++ b/include/link.h @@ -330,4 +330,9 @@ extern int __dl_iterate_phdr (int (*callback) (struct dl_phdr_info *info, size_t size, void *data), void *data); +/* We use this macro to refer to ELF macros independent of the native + wordsize. `ELFW(R_TYPE)' is used in place of `ELF32_R_TYPE' or + `ELF64_R_TYPE'. */ +#define ELFW(type) _ElfW (ELF, __ELF_NATIVE_CLASS, type) + #endif /* include/link.h */ diff --git a/sysdeps/x86_64/dl-irel.h b/sysdeps/x86_64/dl-irel.h index bc7e54e985..830f5db8c8 100644 --- a/sysdeps/x86_64/dl-irel.h +++ b/sysdeps/x86_64/dl-irel.h @@ -25,23 +25,23 @@ #define ELF_MACHINE_IRELA 1 -static inline Elf64_Addr +static inline ElfW(Addr) __attribute ((always_inline)) -elf_ifunc_invoke (Elf64_Addr addr) +elf_ifunc_invoke (ElfW(Addr) addr) { - return ((Elf64_Addr (*) (void)) (addr)) (); + return ((ElfW(Addr) (*) (void)) (addr)) (); } static inline void __attribute ((always_inline)) -elf_irela (const Elf64_Rela *reloc) +elf_irela (const ElfW(Rela) *reloc) { - Elf64_Addr *const reloc_addr = (void *) reloc->r_offset; - const unsigned long int r_type = ELF64_R_TYPE (reloc->r_info); + ElfW(Addr) *const reloc_addr = (void *) reloc->r_offset; + const unsigned long int r_type = ELFW(R_TYPE) (reloc->r_info); if (__builtin_expect (r_type == R_X86_64_IRELATIVE, 1)) { - Elf64_Addr value = elf_ifunc_invoke(reloc->r_addend); + ElfW(Addr) value = elf_ifunc_invoke(reloc->r_addend); *reloc_addr = value; } else |