PR gas/14260
authorNick Clifton <nickc@redhat.com>
Thu, 28 Jun 2012 15:38:15 +0000 (15:38 +0000)
committerNick Clifton <nickc@redhat.com>
Thu, 28 Jun 2012 15:38:15 +0000 (15:38 +0000)
* config/tc-arm.c (encode_arm_addr_mode_common): Generate an error
message if literal pool addressing is used.

* gas/arm/ldr-t-bad.s: Add test of bogus use of literal pool
addressing.
* gas/arm/ldr-t-bad.l: Update expected assembler error message
output.

gas/ChangeLog
gas/config/tc-arm.c
gas/testsuite/ChangeLog
gas/testsuite/gas/arm/ldr-t-bad.l
gas/testsuite/gas/arm/ldr-t-bad.s

index 0d833a9..111a211 100644 (file)
@@ -1,5 +1,11 @@
 2012-06-28  Nick Clifton  <nickc@redhat.com>
 
+       PR gas/14260
+       * config/tc-arm.c (encode_arm_addr_mode_common): Generate an error
+       message if literal pool addressing is used.
+
+2012-06-28  Nick Clifton  <nickc@redhat.com>
+
        * dwarf2dbg.c (DWARF2_USE_FIXED_ADVANCE_PC): Enable when using
        linker relaxation.
        (dwarf2_gen_line_info): Generate real, local, labels for line
index 2257d4e..43e20d1 100644 (file)
@@ -7042,7 +7042,11 @@ encode_arm_shifter_operand (int i)
 static void
 encode_arm_addr_mode_common (int i, bfd_boolean is_t)
 {
-  gas_assert (inst.operands[i].isreg);
+  /* PR 14260:
+     Generate an error if the operand is not a register.  */
+  constraint (!inst.operands[i].isreg,
+             _("Instruction does not support =N addresses"));
+
   inst.instruction |= inst.operands[i].reg << 16;
 
   if (inst.operands[i].preind)
@@ -21269,8 +21273,8 @@ md_apply_fix (fixS *    fixP,
     thumb_bl_common:
 
 #ifdef OBJ_ELF
-       if (EF_ARM_EABI_VERSION (meabi_flags) >= EF_ARM_EABI_VER4 &&
-          fixP->fx_r_type == BFD_RELOC_THUMB_PCREL_BLX)
+       if (EF_ARM_EABI_VERSION (meabi_flags) >= EF_ARM_EABI_VER4
+          && fixP->fx_r_type == BFD_RELOC_THUMB_PCREL_BLX)
         fixP->fx_r_type = BFD_RELOC_THUMB_PCREL_BRANCH23;
 #endif
 
@@ -21281,15 +21285,15 @@ md_apply_fix (fixS *  fixP,
           1 of the base address.  */
        value = (value + 1) & ~ 1;
 
-       if ((value & ~0x3fffff) && ((value & ~0x3fffff) != ~0x3fffff))
-        {
-          if (!(ARM_CPU_HAS_FEATURE (cpu_variant, arm_arch_t2)))
-            as_bad_where (fixP->fx_file, fixP->fx_line, BAD_RANGE);
-          else if ((value & ~0x1ffffff)
-                   && ((value & ~0x1ffffff) != ~0x1ffffff))
-            as_bad_where (fixP->fx_file, fixP->fx_line,
-                          _("Thumb2 branch out of range"));
-        }
+      if ((value & ~0x3fffff) && ((value & ~0x3fffff) != ~0x3fffff))
+       {
+         if (!(ARM_CPU_HAS_FEATURE (cpu_variant, arm_arch_t2)))
+           as_bad_where (fixP->fx_file, fixP->fx_line, BAD_RANGE);
+         else if ((value & ~0x1ffffff)
+                  && ((value & ~0x1ffffff) != ~0x1ffffff))
+           as_bad_where (fixP->fx_file, fixP->fx_line,
+                         _("Thumb2 branch out of range"));
+       }
 
       if (fixP->fx_done || !seg->use_rela_p)
        encode_thumb2_b_bl_offset (buf, value);
index d76f013..6e41589 100644 (file)
@@ -1,5 +1,13 @@
 2012-06-28  Nick Clifton  <nickc@redhat.com>
 
+       PR gas/14260
+       * gas/arm/ldr-t-bad.s: Add test of bogus use of literal pool
+       addressing.
+       * gas/arm/ldr-t-bad.l: Update expected assembler error message
+       output.
+
+2012-06-28  Nick Clifton  <nickc@redhat.com>
+
        * gas/lns/lns.exp: Use alternate lns-common test for targets
        enabling linker relaxation.
        * gas/lns/lns-big-delta.d: Allow for output from architectures
index bda9eef..95f420a 100644 (file)
@@ -13,4 +13,4 @@
 [^:]*:56: Error: r15 not allowed here -- `str r15,\[r1,r2\]'
 [^:]*:57: Error: r13 not allowed here -- `str r1,\[r2,r13\]'
 [^:]*:58: Error: r15 not allowed here -- `str r1,\[r2,r15\]'
-
+[^:]*:61: Error: Instruction does not support =N addresses -- `ldrt r0,=0x0'
index ee76a3e..81c17a5 100644 (file)
@@ -57,3 +57,5 @@
        str r1, [r2, r13]
        str r1, [r2, r15]
 
+       @ PR 14260
+       ldrt r0, =0x0