From 7a91e76ad19a372bc9f010500c75bd0a85ef7826 Mon Sep 17 00:00:00 2001
From: Nick Clifton <nickc@redhat.com>
Date: Thu, 11 Jan 2001 01:40:18 +0000
Subject: [PATCH] Allow ADRL relocs to be adjusted in arm-coff

---
 gas/ChangeLog       |  5 +++++
 gas/config/tc-arm.c | 16 ++++++++++++++++
 gas/config/tc-arm.h |  2 +-
 3 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/gas/ChangeLog b/gas/ChangeLog
index 3555324e6ef..e1d14bddc5e 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,8 @@
+2001-01-10  Nick Clifton  <nickc@redhat.com>
+
+	* config/tc-arm.c (arm_fix_adjustable): Define for OBJ_COFF.
+	* config/tc-arm.h (obj_fix_adjustable): Define for OBJ_COFF
+
 2001-01-10  Nick Clifton  <nickc@redhat.com>
 
 	* symbols.c (DOLLAR_LABEL_CHAR): New constant - the magic
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index f23cb0907b3..80318fa365a 100644
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -8537,6 +8537,22 @@ arm_validate_fix (fixP)
   return false;
 }
 
+#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
+   are used with the ADRL pseudo op.  The ADRL relocation should always
+   be resolved before the binbary is emitted, so it is safe to say that
+   it is adjustable.  */
+
+boolean
+arm_fix_adjustable (fixP)
+   fixS * fixP;
+{
+  if (fixP->fx_r_type == BFD_RELOC_ARM_ADRL_IMMEDIATE)
+    return 1;
+  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
diff --git a/gas/config/tc-arm.h b/gas/config/tc-arm.h
index 365591ccaba..0a823dda738 100644
--- a/gas/config/tc-arm.h
+++ b/gas/config/tc-arm.h
@@ -116,7 +116,7 @@
 #define TC_FIX_TYPE PTR
 #define TC_INIT_FIX_DATA(FIXP) ((FIXP)->tc_fix_data = NULL)
 
-#ifdef OBJ_ELF
+#if defined OBJ_ELF || defined OBJ_COFF
 #include "write.h"        /* For definition of fixS */
 #define obj_fix_adjustable(fixP) arm_fix_adjustable (fixP)
 boolean arm_fix_adjustable PARAMS ((fixS *));