gas/
authorRichard Sandiford <rdsandiford@googlemail.com>
Wed, 10 Nov 2010 13:36:31 +0000 (13:36 +0000)
committerRichard Sandiford <rdsandiford@googlemail.com>
Wed, 10 Nov 2010 13:36:31 +0000 (13:36 +0000)
* config/tc-arm.c (do_t_branch): Treat (PLT) branches as wide.

gas/testsuite/
* gas/arm/plt-1.s, gas/arm/plt-1.d: New test.

gas/ChangeLog
gas/config/tc-arm.c
gas/testsuite/ChangeLog
gas/testsuite/gas/arm/plt-1.d [new file with mode: 0644]
gas/testsuite/gas/arm/plt-1.s [new file with mode: 0644]

index 8433afde618137d89d5a059ed06468c6f08a8cbb..9fee27310388a08198efd08ceb62cb82ecfacfa6 100644 (file)
@@ -1,3 +1,7 @@
+2010-11-10  Richard Sandiford  <richard.sandiford@linaro.org>
+
+       * config/tc-arm.c (do_t_branch): Treat (PLT) branches as wide.
+
 2010-11-05  Nick Clifton  <nickc@redhat.com>
 
        * config/tc-cr16.c (getprocreg_image): Fix typo MAX_PREG ->
index 8dd342bdeca29d89b1517691321a9c8052d2f25b..9a8734293cea304e9882725fa3e0cf0803c183b5 100644 (file)
@@ -2213,7 +2213,7 @@ create_neon_reg_alias (char *newname, char *p)
   struct reg_entry mybasereg;
   struct neon_type ntype;
   struct neon_typed_alias typeinfo;
-  char *namebuf, *nameend;
+  char *namebuf, *nameend ATTRIBUTE_UNUSED;
   int namelen;
 
   typeinfo.defined = 0;
@@ -9683,7 +9683,9 @@ do_t_branch (void)
   else
     opcode = inst.instruction;
 
-  if (unified_syntax && inst.size_req == 4)
+  if (unified_syntax
+      && (inst.size_req == 4
+         || (inst.size_req != 2 && inst.operands[0].hasreloc)))
     {
       inst.instruction = THUMB_OP32(opcode);
       if (cond == COND_ALWAYS)
index 7c4bdc21846d383a41187d20f6f5a46548070a9f..b6e621903f3080083cdf55799ab82d25b783f373 100644 (file)
@@ -1,3 +1,7 @@
+2010-11-10  Richard Sandiford  <richard.sandiford@linaro.org>
+
+       * gas/arm/plt-1.s, gas/arm/plt-1.d: New test.
+
 2010-11-08  Thomas Schwinge  <thomas@schwinge.name>
 
        * lib/gas-defs.exp (is_elf_format): Consider for *-*-gnu*, too.
diff --git a/gas/testsuite/gas/arm/plt-1.d b/gas/testsuite/gas/arm/plt-1.d
new file mode 100644 (file)
index 0000000..ba25f8d
--- /dev/null
@@ -0,0 +1,38 @@
+# name: Thumb branch to PLT
+# as:
+# objdump: -dr
+# This test is only valid on ELF based ports.
+#not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+
+.*: +file format .*arm.*
+
+
+Disassembly of section \.text:
+
+0+000 <Strong1>:
+   0:  f7ff bffe       b\.w    12 <Strong2>
+                       0: R_ARM_THM_JUMP24     Strong2
+   4:  f7ff bffe       b\.w    12 <Strong2>
+                       4: R_ARM_THM_JUMP24     Strong2
+   8:  e7fe            b\.n    12 <Strong2>
+                       8: R_ARM_THM_JUMP11     Strong2
+   a:  e7fe            b\.n    12 <Strong2>
+                       a: R_ARM_THM_JUMP11     Strong2
+   c:  f7ff bffe       b\.w    12 <Strong2>
+                       c: R_ARM_THM_JUMP24     Strong2
+  10:  e7fe            b\.n    12 <Strong2>
+                       10: R_ARM_THM_JUMP11    Strong2
+
+0+012 <Strong2>:
+  12:  f7ff bffe       b\.w    0 <Strong1>
+                       12: R_ARM_THM_JUMP24    Strong1
+  16:  f7ff bffe       b\.w    0 <Strong1>
+                       16: R_ARM_THM_JUMP24    Strong1
+  1a:  e7fe            b\.n    0 <Strong1>
+                       1a: R_ARM_THM_JUMP11    Strong1
+  1c:  e7fe            b\.n    0 <Strong1>
+                       1c: R_ARM_THM_JUMP11    Strong1
+  1e:  f7ff bffe       b\.w    0 <Strong1>
+                       1e: R_ARM_THM_JUMP24    Strong1
+  22:  e7fe            b\.n    0 <Strong1>
+                       22: R_ARM_THM_JUMP11    Strong1
diff --git a/gas/testsuite/gas/arm/plt-1.s b/gas/testsuite/gas/arm/plt-1.s
new file mode 100644 (file)
index 0000000..262980a
--- /dev/null
@@ -0,0 +1,27 @@
+       .syntax unified
+       .text
+       .thumb
+
+       .globl  Strong1
+       .thumb_func
+       .type   Strong1, %function
+Strong1:
+       b       Strong2(PLT)
+       b.w     Strong2(PLT)
+       b.n     Strong2(PLT)
+       b       Strong2
+       b.w     Strong2
+       b.n     Strong2
+       .size   Strong1,.-Strong1
+
+       .globl  Strong2
+       .thumb_func
+       .type   Strong2, %function
+Strong2:
+       b       Strong1(PLT)
+       b.w     Strong1(PLT)
+       b.n     Strong1(PLT)
+       b       Strong1
+       b.w     Strong1
+       b.n     Strong1
+       .size   Strong2, .-Strong2