* config/tc-arm.c (arm_force_relocation): Move out of #if OBJ_ELF.
authorAlan Modra <amodra@gmail.com>
Thu, 5 Dec 2002 11:46:50 +0000 (11:46 +0000)
committerAlan Modra <amodra@gmail.com>
Thu, 5 Dec 2002 11:46:50 +0000 (11:46 +0000)
Move OBJ_COFF TC_FORCE_RELOCATION code here so that COFF handles
ARM_IMMEDIATE and ARM_ADRL_IMMEDIATE relocs as for ELF.
* config/tc-arm.h (TC_FORCE_RELOCATION): Define for both ELF and
COFF to call arm_force_relocation.

gas/ChangeLog
gas/config/tc-arm.c
gas/config/tc-arm.h

index abf40ea177126c4667c2835a94196a85a907a620..4283fea5bfe214cfc836698bc5d3dc7a679276d3 100644 (file)
@@ -1,3 +1,11 @@
+2002-12-05  Alan Modra  <amodra@bigpond.net.au>
+
+       * config/tc-arm.c (arm_force_relocation): Move out of #if OBJ_ELF.
+       Move OBJ_COFF TC_FORCE_RELOCATION code here so that COFF handles
+       ARM_IMMEDIATE and ARM_ADRL_IMMEDIATE relocs as for ELF.
+       * config/tc-arm.h (TC_FORCE_RELOCATION): Define for both ELF and
+       COFF to call arm_force_relocation.
+
 2002-12-04  David Mosberger  <davidm@hpl.hp.com>
 
        * config/tc-ia64.c (pseudo_func): Add "@pause" constant for "hint"
index f78f10009806086f511991209ad01f9a6d9c81a1..9682141a2a4c1f0e3186878222e93284f9fd7938 100644 (file)
@@ -11432,6 +11432,32 @@ arm_validate_fix (fixP)
     }
 }
 
+int
+arm_force_relocation (fixp)
+     struct fix * fixp;
+{
+#if defined (OBJ_COFF) && defined (TE_PE)
+  if (fixp->fx_r_type == BFD_RELOC_RVA)
+    return 1;
+#endif
+#ifdef OBJ_ELF
+  if (   fixp->fx_r_type == BFD_RELOC_VTABLE_INHERIT
+      || fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY
+      || fixp->fx_r_type == BFD_RELOC_ARM_PCREL_BRANCH
+      || fixp->fx_r_type == BFD_RELOC_ARM_PCREL_BLX
+      || fixp->fx_r_type == BFD_RELOC_THUMB_PCREL_BLX
+      || fixp->fx_r_type == BFD_RELOC_THUMB_PCREL_BRANCH23)
+    return 1;
+#endif
+
+  /* Resolve these relocations even if the symbol is extern or weak.  */
+  if (fixp->fx_r_type == BFD_RELOC_ARM_IMMEDIATE
+      || fixp->fx_r_type == BFD_RELOC_ARM_ADRL_IMMEDIATE)
+    return 0;
+
+  return S_FORCE_RELOC (fixp->fx_addsy);
+}
+
 #ifdef OBJ_COFF
 /* This is a little hack to help the gas/arm/adrl.s test.  It prevents
    local labels from being added to the output symbol table when they
@@ -11448,6 +11474,7 @@ arm_fix_adjustable (fixP)
   return 0;
 }
 #endif
+
 #ifdef OBJ_ELF
 /* Relocations against Thumb function names must be left unadjusted,
    so that the linker can use this information to correctly set the
@@ -11514,26 +11541,6 @@ armelf_frob_symbol (symp, puntp)
   elf_frob_symbol (symp, puntp);
 }
 
-int
-arm_force_relocation (fixp)
-     struct fix * fixp;
-{
-  if (   fixp->fx_r_type == BFD_RELOC_VTABLE_INHERIT
-      || fixp->fx_r_type == BFD_RELOC_VTABLE_ENTRY
-      || fixp->fx_r_type == BFD_RELOC_ARM_PCREL_BRANCH
-      || fixp->fx_r_type == BFD_RELOC_ARM_PCREL_BLX
-      || fixp->fx_r_type == BFD_RELOC_THUMB_PCREL_BLX
-      || fixp->fx_r_type == BFD_RELOC_THUMB_PCREL_BRANCH23)
-    return 1;
-
-  /* Resolve these relocations even if the symbol is extern or weak.  */
-  if (fixp->fx_r_type == BFD_RELOC_ARM_IMMEDIATE
-      || fixp->fx_r_type == BFD_RELOC_ARM_ADRL_IMMEDIATE)
-    return 0;
-
-  return S_FORCE_RELOC (fixp->fx_addsy);
-}
-
 static bfd_reloc_code_real_type
 arm_parse_reloc ()
 {
index 441c16f30c37e6b83270d486b5235d811c4e9029..3b98b334267063d6d07a7044725557041ec465fd 100644 (file)
@@ -77,8 +77,6 @@ struct fix;
 
 #ifdef OBJ_COFF
 # if defined TE_PE
-#  define TC_FORCE_RELOCATION(x) \
-     ((x)->fx_r_type == BFD_RELOC_RVA || S_FORCE_RELOC ((x)->fx_addsy))
 #   ifdef TE_EPOC
 #    define TARGET_FORMAT (target_big_endian ? "epoc-pe-arm-big" : "epoc-pe-arm-little")
 #   else
@@ -92,11 +90,11 @@ struct fix;
 #ifdef OBJ_ELF
 # define TARGET_FORMAT elf32_arm_target_format()
   extern const char * elf32_arm_target_format PARAMS ((void));
-
-# define TC_FORCE_RELOCATION(FIX) arm_force_relocation (FIX)
-  extern int arm_force_relocation PARAMS ((struct fix *));
 #endif
 
+#define TC_FORCE_RELOCATION(FIX) arm_force_relocation (FIX)
+extern int arm_force_relocation PARAMS ((struct fix *));
+
 #define md_convert_frag(b, s, f) {as_fatal (_("arm convert_frag\n"));}
 
 #define md_cleanup() arm_cleanup ()