1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- --- file/src/readelf.h
- +++ file/src/readelf.h
- @@ -50,6 +50,7 @@
- typedef uint32_t Elf64_Off[2];
- typedef uint32_t Elf64_Xword[2];
- #else
- +#undef USE_ARRAY_FOR_64BIT_TYPES
- typedef uint64_t Elf64_Addr;
- typedef uint64_t Elf64_Off;
- typedef uint64_t Elf64_Xword;
- --- file/src/readelf.c
- +++ file/src/readelf.c
- @@ -121,6 +121,14 @@
- return value;
- }
-
- +#ifdef USE_ARRAY_FOR_64BIT_TYPES
- +# define elf_getu64(swap, array) \
- + ((swap ? ((uint64_t)getu32(swap, array[0])) << 32 : getu32(swap, array[0])) + \
- + (swap ? getu32(swap, array[1]) : ((uint64_t)getu32(swap, array[1]) << 32)))
- +#else
- +# define elf_getu64(swap, value) getu64(swap, value)
- +#endif
- +
- #define xsh_addr (class == ELFCLASS32 \
- ? (void *) &sh32 \
- : (void *) &sh64)
- @@ -913,11 +921,7 @@
- if (getu16(swap, elfhdr.e_type) == ET_CORE) {
- #ifdef ELFCORE
- if (dophn_core(ms, class, swap, fd,
- -#ifdef USE_ARRAY_FOR_64BIT_TYPES
- - (off_t)getu32(swap, elfhdr.e_phoff[1]),
- -#else
- - (off_t)getu64(swap, elfhdr.e_phoff),
- -#endif
- + (off_t)elf_getu64(swap, elfhdr.e_phoff),
- getu16(swap, elfhdr.e_phnum),
- (size_t)getu16(swap, elfhdr.e_phentsize)) == -1)
- return -1;
- @@ -927,22 +931,14 @@
- } else {
- if (getu16(swap, elfhdr.e_type) == ET_EXEC) {
- if (dophn_exec(ms, class, swap, fd,
- -#ifdef USE_ARRAY_FOR_64BIT_TYPES
- - (off_t)getu32(swap, elfhdr.e_phoff[1]),
- -#else
- - (off_t)getu64(swap, elfhdr.e_phoff),
- -#endif
- + (off_t)elf_getu64(swap, elfhdr.e_phoff),
- getu16(swap, elfhdr.e_phnum),
- (size_t)getu16(swap, elfhdr.e_phentsize))
- == -1)
- return -1;
- }
- if (doshn(ms, class, swap, fd,
- -#ifdef USE_ARRAY_FOR_64BIT_TYPES
- - (off_t)getu32(swap, elfhdr.e_shoff[1]),
- -#else
- - (off_t)getu64(swap, elfhdr.e_shoff),
- -#endif
- + (off_t)elf_getu64(swap, elfhdr.e_shoff),
- getu16(swap, elfhdr.e_shnum),
- (size_t)getu16(swap, elfhdr.e_shentsize)) == -1)
- return -1;
|