This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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))

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]