This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
patch, objdump xcoff 16 bit R_RBA
- From: Tom Rix <trix at redhat dot com>
- To: binutils at sources dot redhat dot com
- Cc: jasonsul at us dot ibm dot com
- Date: Thu, 30 May 2002 20:54:52 -0500
- Subject: patch, objdump xcoff 16 bit R_RBA
Related to the recent coughing xcoff.
Jason's test case using the native assembler produces an 16 bit R_RBA
reloc that is unhandled by objdump.
This patch fixes the problem.
Tom
--
Tom Rix
GCC Engineer
trix@redhat.com
2002-05-30 Tom Rix <trix@redhat.com>
* coff-rs6000.c (xcoff_rtype2howto): Handle 16 bit R_BRA.
* coff64-rs6000.c (xcoff64_rtype2howto): Same.
Index: bfd/coff-rs6000.c
===================================================================
RCS file: /cvs/src/src/bfd/coff-rs6000.c,v
retrieving revision 1.40
diff -d -u -p -r1.40 coff-rs6000.c
--- bfd/coff-rs6000.c 15 May 2002 00:18:55 -0000 1.40
+++ bfd/coff-rs6000.c 31 May 2002 00:42:44 -0000
@@ -948,6 +948,21 @@ reloc_howto_type xcoff_howto_table[] =
0xffff, /* dst_mask */
false), /* pcrel_offset */
+ /* Modifiable branch relative. */
+ HOWTO (R_RBA, /* type */
+ 0, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ false, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_signed, /* complain_on_overflow */
+ 0, /* special_function */
+ "R_RBA_16", /* name */
+ true, /* partial_inplace */
+ 0xffff, /* src_mask */
+ 0xffff, /* dst_mask */
+ false), /* pcrel_offset */
+
};
void
@@ -968,6 +983,8 @@ xcoff_rtype2howto (relent, internal)
relent->howto = &xcoff_howto_table[0x1c];
else if (R_RBR == internal->r_type)
relent->howto = &xcoff_howto_table[0x1d];
+ else if (R_RBA == internal->r_type)
+ relent->howto = &xcoff_howto_table[0x1e];
}
/* The r_size field of an XCOFF reloc encodes the bitsize of the
Index: bfd/coff64-rs6000.c
===================================================================
RCS file: /cvs/src/src/bfd/coff64-rs6000.c,v
retrieving revision 1.29
diff -d -u -p -r1.29 coff64-rs6000.c
--- bfd/coff64-rs6000.c 18 May 2002 13:13:12 -0000 1.29
+++ bfd/coff64-rs6000.c 31 May 2002 00:42:44 -0000
@@ -1730,6 +1730,22 @@ reloc_howto_type xcoff64_howto_table[] =
0xffff, /* src_mask */
0xffff, /* dst_mask */
false), /* pcrel_offset */
+
+ /* Modifiable branch absolute. */
+ HOWTO (R_RBA, /* type */
+ 0, /* rightshift */
+ 1, /* size (0 = byte, 1 = short, 2 = long) */
+ 16, /* bitsize */
+ false, /* pc_relative */
+ 0, /* bitpos */
+ complain_overflow_bitfield, /* complain_on_overflow */
+ 0, /* special_function */
+ "R_RBA_16", /* name */
+ true, /* partial_inplace */
+ 0xffff, /* src_mask */
+ 0xffff, /* dst_mask */
+ false), /* pcrel_offset */
+
};
void
@@ -1750,6 +1766,8 @@ xcoff64_rtype2howto (relent, internal)
relent->howto = &xcoff64_howto_table[0x1d];
else if (R_RBR == internal->r_type)
relent->howto = &xcoff64_howto_table[0x1e];
+ else if (R_RBA == internal->r_type)
+ relent->howto = &xcoff64_howto_table[0x1f];
}
/* Special case 32 bit */
else if (31 == (internal->r_size & 0x3f))