(md_apply_fix3:BFD_RELOC_ARM_IMMEDIATE): Do not allow values which have come
authorNick Clifton <nickc@redhat.com>
Fri, 2 Jul 2004 11:12:29 +0000 (11:12 +0000)
committerNick Clifton <nickc@redhat.com>
Fri, 2 Jul 2004 11:12:29 +0000 (11:12 +0000)
from undefined symbols.
Always consider this fixup to have been processed as a reloc cannot be
generated for it.

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

index ab0551eb7d6411fb2d4a96d70cd787f493b3474c..42968c03a0f0290de54a7755d577a743ebd10646 100644 (file)
@@ -1,3 +1,10 @@
+2004-07-02  Nick Clifton  <nickc@redhat.com>
+
+       * config/tc-arm.c (md_apply_fix3:BFD_RELOC_ARM_IMMEDIATE): Do not
+       allow values which have come from undefined symbols.
+       Always consider this fixup to have been processed as a reloc
+       cannot be generated for it.
+
 2004-07-02  Alan Modra  <amodra@bigpond.net.au>
 
        * frags.h (struct frag): Add has_code and insn_addr fields.
index 3f21c84a6ce6f07b995e3b5da4d28d39cbb7f3c9..da7fceaf4250343d9516a78b538a31c96a00a858 100644 (file)
@@ -12186,6 +12186,20 @@ md_apply_fix3 (fixP, valP, seg)
   switch (fixP->fx_r_type)
     {
     case BFD_RELOC_ARM_IMMEDIATE:
+      /* We claim that this fixup has been processed here,
+        even if in fact we generate an error because we do
+        not have a reloc for it, so tc_gen_reloc will reject it.  */
+      fixP->fx_done = 1;
+
+      if (fixP->fx_addsy
+         && ! S_IS_DEFINED (fixP->fx_addsy))
+       {
+         as_bad_where (fixP->fx_file, fixP->fx_line,
+                       _("undefined symbol %s used as an immediate value"),
+                       S_GET_NAME (fixP->fx_addsy));
+         break;
+       }
+
       newimm = validate_immediate (value);
       temp = md_chars_to_number (buf, INSN_SIZE);
 
@@ -12202,7 +12216,6 @@ md_apply_fix3 (fixP, valP, seg)
 
       newimm |= (temp & 0xfffff000);
       md_number_to_chars (buf, (valueT) newimm, INSN_SIZE);
-      fixP->fx_done = 1;
       break;
 
     case BFD_RELOC_ARM_ADRL_IMMEDIATE: