summaryrefslogtreecommitdiff
path: root/binutils
diff options
context:
space:
mode:
authorMaciej W. Rozycki <macro@linux-mips.org>2005-04-04 15:07:18 +0000
committerMaciej W. Rozycki <macro@linux-mips.org>2005-04-04 15:07:18 +0000
commit82b22171a305ab167b852fea42a88e1d2ee56247 (patch)
tree2d98b3293758df3e09f8cf0c8bb26d9d136e7fb6 /binutils
parent3004064b20af3a0e6654018c942f784770921e1d (diff)
downloadbinutils-redhat-82b22171a305ab167b852fea42a88e1d2ee56247.tar.gz
* readelf.c (debug_apply_rela_addends): Reorder r_info as
necessary for 64-bit MIPS.
Diffstat (limited to 'binutils')
-rw-r--r--binutils/ChangeLog5
-rw-r--r--binutils/readelf.c12
2 files changed, 17 insertions, 0 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index 54b6a43239..7d47fad2b8 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,5 +1,10 @@
2005-04-04 Maciej W. Rozycki <macro@linux-mips.org>
+ * readelf.c (debug_apply_rela_addends): Reorder r_info as
+ necessary for 64-bit MIPS.
+
+2005-04-04 Maciej W. Rozycki <macro@linux-mips.org>
+
* doc/binutils.texi (readelf): Remove a duplicate paragraph.
2005-04-04 Ramana Radhakrishnan <ramana.radhakrishnan@codito.com>
diff --git a/binutils/readelf.c b/binutils/readelf.c
index d7bdf3eb2e..fe4c8157bb 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -7395,6 +7395,18 @@ debug_apply_rela_addends (FILE *file,
}
else
{
+ /* In MIPS 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_machine == EM_MIPS
+ && elf_header.e_ident[EI_DATA] != ELFDATA2MSB)
+ rp->r_info = (((rp->r_info & 0xffffffff) << 32)
+ | ((rp->r_info >> 56) & 0xff)
+ | ((rp->r_info >> 40) & 0xff00)
+ | ((rp->r_info >> 24) & 0xff0000)
+ | ((rp->r_info >> 8) & 0xff000000));
+
sym = symtab + ELF64_R_SYM (rp->r_info);
if (ELF64_R_SYM (rp->r_info) != 0