diff options
author | Richard Sandiford <rdsandiford@googlemail.com> | 2003-01-28 12:51:07 +0000 |
---|---|---|
committer | Richard Sandiford <rdsandiford@googlemail.com> | 2003-01-28 12:51:07 +0000 |
commit | 1a677ea81e3a5f6f25761f864d27d42210310578 (patch) | |
tree | 19a0294148e92a87b7394090a5ef2aed4aaf848b /binutils | |
parent | a35bc64f56090692e1d45bc5754bacd679a132b9 (diff) | |
download | gdb-1a677ea81e3a5f6f25761f864d27d42210310578.zip gdb-1a677ea81e3a5f6f25761f864d27d42210310578.tar.gz gdb-1a677ea81e3a5f6f25761f864d27d42210310578.tar.bz2 |
* readelf.c (dump_relocations): Reorder the r_info field for
little-endian mips elf64. Move #ifdef BFD64 to cover the new code.
Diffstat (limited to 'binutils')
-rw-r--r-- | binutils/ChangeLog | 5 | ||||
-rw-r--r-- | binutils/readelf.c | 19 |
2 files changed, 20 insertions, 4 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog index f4c03c5..eebf029 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,8 @@ +2003-01-28 Richard Sandiford <rsandifo@redhat.com> + + * readelf.c (dump_relocations): Reorder the r_info field for + little-endian mips elf64. Move #ifdef BFD64 to cover the new code. + 2003-01-21 Daniel Berlin <dan@dberlin.org> * readelf.c (display_debug_loc): Skip address base changes. diff --git a/binutils/readelf.c b/binutils/readelf.c index ef36de0..d427ce1 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -1025,8 +1025,22 @@ dump_relocations (file, rel_offset, rel_size, symtab, nsyms, strtab, is_rela) } else { + /* The #ifdef BFD64 below is to prevent a compile time warning. + We know that if we do not have a 64 bit data type that we + will never execute this code anyway. */ +#ifdef BFD64 if (elf_header.e_machine == EM_MIPS) { + /* In little-endian objects, r_info isn't really a 64-bit + little-endian value: it has a 32-bit little-endian + symbol index followed by four individual byte fields. + Reorder INFO accordingly. */ + if (elf_header.e_ident[EI_DATA] != ELFDATA2MSB) + info = (((info & 0xffffffff) << 32) + | ((info >> 56) & 0xff) + | ((info >> 40) & 0xff00) + | ((info >> 24) & 0xff0000) + | ((info >> 8) & 0xff000000)); type = ELF64_MIPS_R_TYPE (info); type2 = ELF64_MIPS_R_TYPE2 (info); type3 = ELF64_MIPS_R_TYPE3 (info); @@ -1035,10 +1049,7 @@ dump_relocations (file, rel_offset, rel_size, symtab, nsyms, strtab, is_rela) type = ELF64_R_TYPE_ID (info); else type = ELF64_R_TYPE (info); - /* The #ifdef BFD64 below is to prevent a compile time warning. - We know that if we do not have a 64 bit data type that we - will never execute this code anyway. */ -#ifdef BFD64 + symtab_index = ELF64_R_SYM (info); #endif } |