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]

Re: Xcoff relocation types not supported?


Alan Modra wrote:

> On Wed, May 01, 2002 at 01:29:51PM -0400, Jason Sullivan wrote:
> > test.as:33: Error: reloc 229 not supported by object file format
> > test.as:38: Error: reloc 229 not supported by object file format
> http://sources.redhat.com/ml/bug-binutils/2002-q2/msg00171.html
>
> Current CVS mainline binutils assembles your test file OK, but
> objdump bombs when trying to display relocs.  :-(

This patch fixes the problem.

Tom

--
Tom Rix
GCC Engineer
trix@redhat.com


2002-05-04  Tom Rix  <trix@redhat.com>

	* coffswap.h (coff_swap_reloc_in): Remove XCOFF support.
	(coff_swap_reloc_out): Same.
	* coff-rs6000.c: (xcoff_swap_reloc_in): Moved from coffswap.h.
	(xcoff_swap_reloc_out): Same.
	(xcoff_rtype2howto): Renamed from _bfd_xcoff_rtype2howto. Special
	case some 16 bit relocs. Add reloc value to output.
	(xcoff_howto_table): Remove 64 bit R_POS, add 16 bit
	R_RBR. Improve names. 
	(_bfd_xcoff_reloc_type_lookup): Adjust for removal of 64 bit R_POS.
	(bfd_xcoff_backend_data): Update with new reloc swap names.
	(bfd_pmac_xcoff_backend_data) : Same.
	* coff64-rs6000.c: (xcoff64_swap_reloc_in): Moved from coffswap.h.
	(xcoff64_swap_reloc_out): Same.
	(xcoff64_rtype2howto): Special case some 16 bit relocs and 32 bit 
	R_POS. Add reloc value to output.
	(xcoff64_howto_table): Move 64 bit R_POS to first entry.  Add 16 
	bit R_RBR. Improve names, masks. 
	(xcoff64_reloc_type_lookup): Adjust for move of 64 bit R_POS.
	(bfd_xcoff_backend_data): Update with new reloc swap names.
	(bfd_xcoff_aix5_backend_data) : Same.

Index: bfd/coff-rs6000.c
===================================================================
RCS file: /cvs/src/src/bfd/coff-rs6000.c,v
retrieving revision 1.37
diff -d -u -p -r1.37 coff-rs6000.c
--- bfd/coff-rs6000.c	28 Apr 2002 14:34:38 -0000	1.37
+++ bfd/coff-rs6000.c	4 May 2002 09:52:49 -0000
@@ -54,9 +54,11 @@ extern void _bfd_xcoff_swap_sym_in PARAM
 extern unsigned int _bfd_xcoff_swap_sym_out PARAMS ((bfd *, PTR, PTR));
 extern void _bfd_xcoff_swap_aux_in PARAMS ((bfd *, PTR, int, int, int, int, PTR));
 extern unsigned int _bfd_xcoff_swap_aux_out PARAMS ((bfd *, PTR, int, int, int, int, PTR));
+static void xcoff_swap_reloc_in PARAMS ((bfd *, PTR, PTR));
+static unsigned int xcoff_swap_reloc_out PARAMS ((bfd *, PTR, PTR));
 
-/* Forward declare _bfd_xcoff_rtype2howto for coffcode.h macro.  */
-void _bfd_xcoff_rtype2howto PARAMS ((arelent *, struct internal_reloc *));
+/* Forward declare xcoff_rtype2howto for coffcode.h macro.  */
+void xcoff_rtype2howto PARAMS ((arelent *, struct internal_reloc *));
 
 /* coffcode.h needs these to be defined.  */
 #define RS6000COFF_C 1
@@ -74,7 +76,7 @@ void _bfd_xcoff_rtype2howto PARAMS ((are
 #define COFF_DEFAULT_SECTION_ALIGNMENT_POWER (3)
 #define COFF_LONG_FILENAMES
 #define NO_COFF_SYMBOLS
-#define RTYPE2HOWTO(cache_ptr, dst) _bfd_xcoff_rtype2howto (cache_ptr, dst)
+#define RTYPE2HOWTO(cache_ptr, dst) xcoff_rtype2howto (cache_ptr, dst)
 #define coff_mkobject _bfd_xcoff_mkobject
 #define coff_bfd_copy_private_bfd_data _bfd_xcoff_copy_private_bfd_data
 #define coff_bfd_is_local_label_name _bfd_xcoff_is_local_label_name
@@ -105,6 +107,9 @@ extern int rs6000coff_core_file_failing_
 #define coff_SWAP_sym_out _bfd_xcoff_swap_sym_out
 #define coff_SWAP_aux_in _bfd_xcoff_swap_aux_in
 #define coff_SWAP_aux_out _bfd_xcoff_swap_aux_out
+#define coff_swap_reloc_in xcoff_swap_reloc_in
+#define coff_swap_reloc_out xcoff_swap_reloc_out
+#define NO_COFF_RELOCS
 
 #include "coffcode.h"
 
@@ -696,7 +701,7 @@ reloc_howto_type xcoff_howto_table[] =
 	 0,	                /* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,		        /* special_function */
-	 "R_BA",                /* name */
+	 "R_BA_26",             /* name */
 	 true,	                /* partial_inplace */
 	 0x3fffffc,	        /* src_mask */
 	 0x3fffffc,        	/* dst_mask */
@@ -900,7 +905,7 @@ reloc_howto_type xcoff_howto_table[] =
 	 0,	                /* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 0,		        /* special_function */
-	 "R_RBR",               /* name */
+	 "R_RBR_26",            /* name */
 	 true,	                /* partial_inplace */
 	 0xffff,	        /* src_mask */
 	 0xffff,        	/* dst_mask */
@@ -921,50 +926,58 @@ reloc_howto_type xcoff_howto_table[] =
 	 0xffff,        	/* dst_mask */
 	 false),                /* pcrel_offset */
 
-  HOWTO (R_POS,                 /* type */
-         0,                     /* rightshift */
-         4,                     /* size (0 = byte, 1 = short, 2 = long) */
-         64,                    /* bitsize */
-         false,                 /* pc_relative */
-         0,                     /* bitpos */
-         complain_overflow_bitfield, /* complain_on_overflow */
-         0,                     /* special_function */
-         "R_POS",               /* name */
-         true,                  /* partial_inplace */
-         MINUS_ONE,             /* src_mask */
-	 MINUS_ONE,             /* dst_mask */
-	 false),                /* pcrel_offset */
-
   /* 16 bit Non modifiable absolute branch.  */
   HOWTO (R_BA,	                /* type */
 	 0,	                /* rightshift */
-	 2,	                /* size (0 = byte, 1 = short, 2 = long) */
+	 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_BA",                /* name */
+	 "R_BA_16",             /* name */
 	 true,	                /* partial_inplace */
 	 0xfffc,	        /* src_mask */
 	 0xfffc,        	/* dst_mask */
 	 false),                /* pcrel_offset */
+
+  /* Modifiable branch relative.  */
+  HOWTO (R_RBR,	                /* 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_RBR_16",            /* name */
+	 true,	                /* partial_inplace */
+	 0xffff,	        /* src_mask */
+	 0xffff,        	/* dst_mask */
+	 false),                /* pcrel_offset */
+
 };
 
 void
-_bfd_xcoff_rtype2howto (relent, internal)
+xcoff_rtype2howto (relent, internal)
      arelent *relent;
      struct internal_reloc *internal;
 {
-  relent->howto = xcoff_howto_table + internal->r_type;
-
-  /* Check for relocs we don't know of.  */
-  if (internal->r_type
-      >= sizeof (xcoff_howto_table) / sizeof (xcoff_howto_table[0]))
-    abort ();
-  if (internal->r_type != relent->howto->type)
+  if (internal->r_type > R_RBRC)
     abort ();
 
+  /* Default howto layout works most of the time */
+  relent->howto = &xcoff_howto_table[internal->r_type];
+  
+  /* Special case some 16 bit reoloc */
+  if (15 == (internal->r_size & 0x1f))
+    {
+      if (R_BA == internal->r_type) 
+	relent->howto = &xcoff_howto_table[0x1c];
+      else if (R_RBR == internal->r_type) 
+	relent->howto = &xcoff_howto_table[0x1d];
+    }
+  
   /* The r_size field of an XCOFF reloc encodes the bitsize of the
      relocation, as well as indicating whether it is signed or not.
      Doublecheck that the relocation information gathered from the
@@ -972,14 +985,12 @@ _bfd_xcoff_rtype2howto (relent, internal
      for R_REF relocs.  */
   if (relent->howto->dst_mask != 0
       && (relent->howto->bitsize
-	  != ((unsigned int) internal->r_size & 0x3f) + 1))
-    abort ();
-#if 0
-  if ((internal->r_size & 0x80) != 0
-      ? (relent->howto->complain_on_overflow != complain_overflow_signed)
-      : (relent->howto->complain_on_overflow != complain_overflow_bitfield))
+	  != ((unsigned int) internal->r_size & 0x1f) + 1))
     abort ();
-#endif
+
+  /* Put a meaningful value in addend */
+  relent->addend = (internal->r_size & 0x80) ? - internal->r_vaddr 
+    : internal->r_vaddr;
 }
 
 reloc_howto_type *
@@ -992,7 +1003,7 @@ _bfd_xcoff_reloc_type_lookup (abfd, code
     case BFD_RELOC_PPC_B26:
       return &xcoff_howto_table[0xa];
     case BFD_RELOC_PPC_BA16:
-      return &xcoff_howto_table[0x1d];
+      return &xcoff_howto_table[0x1c];
     case BFD_RELOC_PPC_BA26:
       return &xcoff_howto_table[8];
     case BFD_RELOC_PPC_TOC16:
@@ -1000,8 +1011,6 @@ _bfd_xcoff_reloc_type_lookup (abfd, code
     case BFD_RELOC_32:
     case BFD_RELOC_CTOR:
       return &xcoff_howto_table[0];
-    case BFD_RELOC_64:
-      return &xcoff_howto_table[0x1c];
     default:
       return NULL;
     }
@@ -2650,6 +2659,40 @@ xcoff_swap_ldsym_out (abfd, src, d)
   bfd_put_32 (abfd, src->l_parm, dst->l_parm);
 }
 
+static void
+xcoff_swap_reloc_in (abfd, s, d)
+     bfd *abfd;
+     PTR s;
+     PTR d;
+{
+  struct external_reloc *src = (struct external_reloc *) s;
+  struct internal_reloc *dst = (struct internal_reloc *) d;
+
+  memset (dst, 0, sizeof (struct internal_reloc));
+
+  dst->r_vaddr = bfd_get_32 (abfd, src->r_vaddr);
+  dst->r_symndx = bfd_get_32 (abfd, src->r_symndx);
+  dst->r_size = bfd_get_8 (abfd, src->r_size);
+  dst->r_type = bfd_get_8 (abfd, src->r_type);
+}
+
+static unsigned int
+xcoff_swap_reloc_out (abfd, s, d)
+     bfd *abfd;
+     PTR s;
+     PTR d;
+{
+  struct internal_reloc *src = (struct internal_reloc *) s;
+  struct external_reloc *dst = (struct external_reloc *) d;
+
+  bfd_put_32 (abfd, src->r_vaddr, dst->r_vaddr);
+  bfd_put_32 (abfd, src->r_symndx, dst->r_symndx);
+  bfd_put_8 (abfd, src->r_type, dst->r_type);
+  bfd_put_8 (abfd, src->r_size, dst->r_size);
+
+  return bfd_coff_relsz (abfd);
+}
+
 /* Swap in the ldrel structure.  */
 
 static void
@@ -3911,7 +3954,7 @@ static const struct xcoff_backend_data_r
       _bfd_xcoff_swap_aux_out,          /* _bfd_swap_aux_out */
       _bfd_xcoff_swap_sym_out,          /* _bfd_swap_sym_out */
       coff_swap_lineno_out,             /* _bfd_swap_lineno_out */
-      coff_swap_reloc_out,              /* _bfd_swap_reloc_out */
+      xcoff_swap_reloc_out,             /* _bfd_swap_reloc_out */
       coff_swap_filehdr_out,            /* _bfd_swap_filehdr_out */
       coff_swap_aouthdr_out,            /* _bfd_swap_aouthdr_out */
       coff_swap_scnhdr_out,             /* _bfd_swap_scnhdr_out */
@@ -3931,7 +3974,7 @@ static const struct xcoff_backend_data_r
       coff_swap_filehdr_in,             /* _bfd_coff_swap_filehdr_in */
       coff_swap_aouthdr_in,             /* _bfd_swap_aouthdr_in */
       coff_swap_scnhdr_in,              /* _bfd_swap_scnhdr_in */
-      coff_swap_reloc_in,               /* _bfd_reloc_in */
+      xcoff_swap_reloc_in,              /* _bfd_reloc_in */
       coff_bad_format_hook,             /* _bfd_bad_format_hook */
       coff_set_arch_mach_hook,          /* _bfd_set_arch_mach_hook */
       coff_mkobject_hook,               /* _bfd_mkobject_hook */
@@ -4168,7 +4211,7 @@ static const struct xcoff_backend_data_r
     _bfd_xcoff_swap_aux_out,          /* _bfd_swap_aux_out */
     _bfd_xcoff_swap_sym_out,          /* _bfd_swap_sym_out */
     coff_swap_lineno_out,             /* _bfd_swap_lineno_out */
-    coff_swap_reloc_out,              /* _bfd_swap_reloc_out */
+    xcoff_swap_reloc_out,             /* _bfd_swap_reloc_out */
     coff_swap_filehdr_out,            /* _bfd_swap_filehdr_out */
     coff_swap_aouthdr_out,            /* _bfd_swap_aouthdr_out */
     coff_swap_scnhdr_out,             /* _bfd_swap_scnhdr_out */
@@ -4188,7 +4231,7 @@ static const struct xcoff_backend_data_r
     coff_swap_filehdr_in,             /* _bfd_coff_swap_filehdr_in */
     coff_swap_aouthdr_in,             /* _bfd_swap_aouthdr_in */
     coff_swap_scnhdr_in,              /* _bfd_swap_scnhdr_in */
-    coff_swap_reloc_in,               /* _bfd_reloc_in */
+    xcoff_swap_reloc_in,              /* _bfd_reloc_in */
     coff_bad_format_hook,             /* _bfd_bad_format_hook */
     coff_set_arch_mach_hook,          /* _bfd_set_arch_mach_hook */
     coff_mkobject_hook,               /* _bfd_mkobject_hook */
Index: bfd/coff64-rs6000.c
===================================================================
RCS file: /cvs/src/src/bfd/coff64-rs6000.c,v
retrieving revision 1.25
diff -d -u -p -r1.25 coff64-rs6000.c
--- bfd/coff64-rs6000.c	28 Apr 2002 14:34:39 -0000	1.25
+++ bfd/coff64-rs6000.c	4 May 2002 09:52:49 -0000
@@ -96,6 +96,8 @@ static void _bfd_xcoff64_swap_aux_in
   PARAMS ((bfd *, PTR, int, int, int, int, PTR));
 static unsigned int _bfd_xcoff64_swap_aux_out
   PARAMS ((bfd *, PTR, int, int, int, int, PTR));
+static void xcoff64_swap_reloc_in PARAMS ((bfd *, PTR, PTR));
+static unsigned int xcoff64_swap_reloc_out PARAMS ((bfd *, PTR, PTR));
 extern boolean _bfd_xcoff_mkobject PARAMS ((bfd *));
 extern boolean _bfd_xcoff_copy_private_bfd_data PARAMS ((bfd *, bfd *));
 extern boolean _bfd_xcoff_is_local_label_name PARAMS ((bfd *, const char *));
@@ -199,7 +201,9 @@ extern int rs6000coff_core_file_failing_
 #define coff_SWAP_sym_out _bfd_xcoff64_swap_sym_out
 #define coff_SWAP_aux_in _bfd_xcoff64_swap_aux_in
 #define coff_SWAP_aux_out _bfd_xcoff64_swap_aux_out
-
+#define coff_swap_reloc_in xcoff64_swap_reloc_in
+#define coff_swap_reloc_out xcoff64_swap_reloc_out
+#define NO_COFF_RELOCS
 
 #include "coffcode.h"
 
@@ -614,6 +618,40 @@ xcoff64_swap_ldsym_out (abfd, src, d)
   bfd_put_32 (abfd, src->l_parm, dst->l_parm);
 }
 
+static void
+xcoff64_swap_reloc_in (abfd, s, d)
+     bfd *abfd;
+     PTR s;
+     PTR d;
+{
+  struct external_reloc *src = (struct external_reloc *) s;
+  struct internal_reloc *dst = (struct internal_reloc *) d;
+
+  memset (dst, 0, sizeof (struct internal_reloc));
+
+  dst->r_vaddr = bfd_get_64 (abfd, src->r_vaddr);
+  dst->r_symndx = bfd_get_32 (abfd, src->r_symndx);
+  dst->r_size = bfd_get_8 (abfd, src->r_size);
+  dst->r_type = bfd_get_8 (abfd, src->r_type);
+}
+
+static unsigned int
+xcoff64_swap_reloc_out (abfd, s, d)
+     bfd *abfd;
+     PTR s;
+     PTR d;
+{
+  struct internal_reloc *src = (struct internal_reloc *) s;
+  struct external_reloc *dst = (struct external_reloc *) d;
+
+  bfd_put_64 (abfd, src->r_vaddr, dst->r_vaddr);
+  bfd_put_32 (abfd, src->r_symndx, dst->r_symndx);
+  bfd_put_8 (abfd, src->r_type, dst->r_type);
+  bfd_put_8 (abfd, src->r_size, dst->r_size);
+
+  return bfd_coff_relsz (abfd);
+}
+
 /* Swap in the ldrel structure.  */
 
 static void
@@ -1203,7 +1241,7 @@ reloc_howto_type xcoff64_howto_table[] =
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
-	 "R_POS",		/* name */
+	 "R_POS_64",		/* name */
 	 true,			/* partial_inplace */
 	 MINUS_ONE,		/* src_mask */
 	 MINUS_ONE,		/* dst_mask */
@@ -1310,7 +1348,7 @@ reloc_howto_type xcoff64_howto_table[] =
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
-	 "R_BA",		/* name */
+	 "R_BA_26",		/* name */
 	 true,			/* partial_inplace */
 	 0x3fffffc,		/* src_mask */
 	 0x3fffffc,		/* dst_mask */
@@ -1514,7 +1552,7 @@ reloc_howto_type xcoff64_howto_table[] =
 	 0,			/* bitpos */
 	 complain_overflow_signed, /* complain_on_overflow */
 	 0,			/* special_function */
-	 "R_RBR",		/* name */
+	 "R_RBR_26",		/* name */
 	 true,			/* partial_inplace */
 	 0xffff,		/* src_mask */
 	 0xffff,		/* dst_mask */
@@ -1537,32 +1575,47 @@ reloc_howto_type xcoff64_howto_table[] =
 
   HOWTO (R_POS,			/* type */
 	 0,			/* rightshift */
-	 4,			/* size (0 = byte, 1 = short, 2 = long) */
-	 64,			/* bitsize */
+	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 32,			/* bitsize */
 	 false,			/* pc_relative */
 	 0,			/* bitpos */
 	 complain_overflow_bitfield, /* complain_on_overflow */
 	 0,			/* special_function */
-	 "R_POS",		/* name */
+	 "R_POS_32",		/* name */
 	 true,			/* partial_inplace */
-	 MINUS_ONE,		/* src_mask */
-	 MINUS_ONE,		/* dst_mask */
+	 0xffffffff,		/* src_mask */
+	 0xffffffff,		/* dst_mask */
 	 false),		/* pcrel_offset */
 
   /* 16 bit Non modifiable absolute branch.  */
   HOWTO (R_BA,			/* type */
 	 0,			/* rightshift */
-	 2,			/* size (0 = byte, 1 = short, 2 = long) */
+	 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_BA",		/* name */
+	 "R_BA_16",		/* name */
 	 true,			/* partial_inplace */
 	 0xfffc,		/* src_mask */
 	 0xfffc,		/* dst_mask */
 	 false),		/* pcrel_offset */
+
+  /* Modifiable branch relative.  */
+  HOWTO (R_RBR,	                /* 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_RBR_16",            /* name */
+	 true,	                /* partial_inplace */
+	 0xffff,	        /* src_mask */
+	 0xffff,        	/* dst_mask */
+	 false),                /* pcrel_offset */
 };
 
 void
@@ -1570,15 +1623,27 @@ xcoff64_rtype2howto (relent, internal)
      arelent *relent;
      struct internal_reloc *internal;
 {
-  relent->howto = xcoff64_howto_table + internal->r_type;
-
-  /* Check for relocs we don't know of.  */
-  if (internal->r_type
-      >= sizeof (xcoff64_howto_table) / sizeof (xcoff64_howto_table[0]))
-    abort ();
-  if (internal->r_type != relent->howto->type)
+  if (internal->r_type > R_RBRC)
     abort ();
 
+  /* Default howto layout works most of the time */
+  relent->howto = &xcoff64_howto_table[internal->r_type];
+  
+  /* Special case some 16 bit reoloc */
+  if (15 == (internal->r_size & 0x3f))
+    {
+      if (R_BA == internal->r_type) 
+	relent->howto = &xcoff64_howto_table[0x1d];
+      else if (R_RBR == internal->r_type) 
+	relent->howto = &xcoff64_howto_table[0x1e];
+    }
+  /* Special case 32 bit */
+  else if (31 == (internal->r_size & 0x3f))
+    {
+      if (R_POS == internal->r_type) 
+	relent->howto = &xcoff64_howto_table[0x1c];
+    }
+  
   /* The r_size field of an XCOFF reloc encodes the bitsize of the
      relocation, as well as indicating whether it is signed or not.
      Doublecheck that the relocation information gathered from the
@@ -1588,12 +1653,10 @@ xcoff64_rtype2howto (relent, internal)
       && (relent->howto->bitsize
 	  != ((unsigned int) internal->r_size & 0x3f) + 1))
     abort ();
-#if 0
-  if ((internal->r_size & 0x80) != 0
-      ? (relent->howto->complain_on_overflow != complain_overflow_signed)
-      : (relent->howto->complain_on_overflow != complain_overflow_bitfield))
-    abort ();
-#endif
+
+  /* Put a meaningful value in addend */
+  relent->addend = (internal->r_size & 0x80) ? - internal->r_vaddr 
+    : internal->r_vaddr;
 }
 
 reloc_howto_type *
@@ -1613,9 +1676,9 @@ xcoff64_reloc_type_lookup (abfd, code)
       return &xcoff64_howto_table[3];
     case BFD_RELOC_32:
     case BFD_RELOC_CTOR:
-      return &xcoff64_howto_table[0];
-    case BFD_RELOC_64:
       return &xcoff64_howto_table[0x1c];
+    case BFD_RELOC_64:
+      return &xcoff64_howto_table[0];
     default:
       return NULL;
     }
@@ -2314,7 +2377,7 @@ static const struct xcoff_backend_data_r
     _bfd_xcoff64_swap_aux_out,		/* _bfd_swap_aux_out */
     _bfd_xcoff64_swap_sym_out,		/* _bfd_swap_sym_out */
     _bfd_xcoff64_swap_lineno_out,	/* _bfd_swap_lineno_out */
-    coff_swap_reloc_out,		/* _bfd_swap_reloc_out */
+    xcoff64_swap_reloc_out,		/* _bfd_swap_reloc_out */
     coff_swap_filehdr_out,		/* _bfd_swap_filehdr_out */
     coff_swap_aouthdr_out,		/* _bfd_swap_aouthdr_out */
     coff_swap_scnhdr_out,		/* _bfd_swap_scnhdr_out */
@@ -2334,7 +2397,7 @@ static const struct xcoff_backend_data_r
     coff_swap_filehdr_in,		/* _bfd_coff_swap_filehdr_in */
     coff_swap_aouthdr_in,		/* _bfd_swap_aouthdr_in */
     coff_swap_scnhdr_in,		/* _bfd_swap_scnhdr_in */
-    coff_swap_reloc_in,			/* _bfd_reloc_in */
+    xcoff64_swap_reloc_in,		/* _bfd_reloc_in */
     xcoff64_bad_format_hook,		/* _bfd_bad_format_hook */
     coff_set_arch_mach_hook,		/* _bfd_set_arch_mach_hook */
     coff_mkobject_hook,			/* _bfd_mkobject_hook */
@@ -2569,7 +2632,7 @@ static const struct xcoff_backend_data_r
     _bfd_xcoff64_swap_aux_out,		/* _bfd_swap_aux_out */
     _bfd_xcoff64_swap_sym_out,		/* _bfd_swap_sym_out */
     _bfd_xcoff64_swap_lineno_out,	/* _bfd_swap_lineno_out */
-    coff_swap_reloc_out,		/* _bfd_swap_reloc_out */
+    xcoff64_swap_reloc_out,		/* _bfd_swap_reloc_out */
     coff_swap_filehdr_out,		/* _bfd_swap_filehdr_out */
     coff_swap_aouthdr_out,		/* _bfd_swap_aouthdr_out */
     coff_swap_scnhdr_out,		/* _bfd_swap_scnhdr_out */
@@ -2589,7 +2652,7 @@ static const struct xcoff_backend_data_r
     coff_swap_filehdr_in,		/* _bfd_coff_swap_filehdr_in */
     coff_swap_aouthdr_in,		/* _bfd_swap_aouthdr_in */
     coff_swap_scnhdr_in,		/* _bfd_swap_scnhdr_in */
-    coff_swap_reloc_in,			/* _bfd_reloc_in */
+    xcoff64_swap_reloc_in,		/* _bfd_reloc_in */
     xcoff64_bad_format_hook,		/* _bfd_bad_format_hook */
     coff_set_arch_mach_hook,		/* _bfd_set_arch_mach_hook */
     coff_mkobject_hook,			/* _bfd_mkobject_hook */
Index: bfd/coffswap.h
===================================================================
RCS file: /cvs/src/src/bfd/coffswap.h,v
retrieving revision 1.11
diff -d -u -p -r1.11 coffswap.h
--- bfd/coffswap.h	18 Sep 2001 09:57:22 -0000	1.11
+++ bfd/coffswap.h	4 May 2002 09:52:49 -0000
@@ -244,13 +244,7 @@ coff_swap_reloc_in (abfd, src, dst)
 
   reloc_dst->r_vaddr = GET_RELOC_VADDR (abfd, reloc_src->r_vaddr);
   reloc_dst->r_symndx = H_GET_S32 (abfd, reloc_src->r_symndx);
-
-#ifdef RS6000COFF_C
-  reloc_dst->r_type = H_GET_8 (abfd, reloc_src->r_type);
-  reloc_dst->r_size = H_GET_8 (abfd, reloc_src->r_size);
-#else
   reloc_dst->r_type = H_GET_16 (abfd, reloc_src->r_type);
-#endif
 
 #ifdef SWAP_IN_RELOC_OFFSET
   reloc_dst->r_offset = SWAP_IN_RELOC_OFFSET (abfd, reloc_src->r_offset);
@@ -267,13 +261,7 @@ coff_swap_reloc_out (abfd, src, dst)
   struct external_reloc *reloc_dst = (struct external_reloc *) dst;
   PUT_RELOC_VADDR (abfd, reloc_src->r_vaddr, reloc_dst->r_vaddr);
   H_PUT_32 (abfd, reloc_src->r_symndx, reloc_dst->r_symndx);
-
-#ifdef RS6000COFF_C
-  H_PUT_8 (abfd, reloc_src->r_type, reloc_dst->r_type);
-  H_PUT_8 (abfd, reloc_src->r_size, reloc_dst->r_size);
-#else
   H_PUT_16 (abfd, reloc_src->r_type, reloc_dst->r_type);
-#endif
 
 #ifdef SWAP_OUT_RELOC_OFFSET
   SWAP_OUT_RELOC_OFFSET (abfd, reloc_src->r_offset, reloc_dst->r_offset);

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