gas/
authorCarlos O'Donell <carlos@codesourcery.com>
Mon, 7 Jul 2008 19:12:58 +0000 (19:12 +0000)
committerCarlos O'Donell <carlos@codesourcery.com>
Mon, 7 Jul 2008 19:12:58 +0000 (19:12 +0000)
2008-07-07  Paul Brook  <paul@codesourcery.com>

* config/tc-arm.c (arm_fix_adjustable): Don't adjust MOVW/MOVT
relocations.

gas/testsuite/

2008-07-07  Paul Brook  <paul@codesourcery.com>

* gas/arm/movw-local.d: New test.
* gas/arm/movw-local.s: New test.

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

index 1268f2f928a436555187bc63be92225135220017..225b521a91b46f63718d63fb5f66184a8c7ce053 100644 (file)
@@ -1,3 +1,8 @@
+2008-07-07  Paul Brook  <paul@codesourcery.com>
+
+       * config/tc-arm.c (arm_fix_adjustable): Don't adjust MOVW/MOVT
+       relocations. 
+
 2008-07-07  Ralf Corsépius  <ralf.corsepius@rtems.org>
 
        * configure.tgt: Add bfin-*-rtems*.
index 8aba5fcaf23b414adb378f2ba22fe12f75a990e8..0c0507415ba64175f0d0cca516f98378e5c2b144 100644 (file)
@@ -19420,6 +19420,17 @@ arm_fix_adjustable (fixS * fixP)
       || fixP->fx_r_type == BFD_RELOC_ARM_LDR_PC_G0)
     return 0;
 
+  /* MOVW/MOVT REL relocations have limited offsets, so keep the symbols.  */
+  if (fixP->fx_r_type == BFD_RELOC_ARM_MOVW
+      || fixP->fx_r_type == BFD_RELOC_ARM_MOVT
+      || fixP->fx_r_type == BFD_RELOC_ARM_MOVW_PCREL
+      || fixP->fx_r_type == BFD_RELOC_ARM_MOVT_PCREL
+      || fixP->fx_r_type == BFD_RELOC_ARM_THUMB_MOVW
+      || fixP->fx_r_type == BFD_RELOC_ARM_THUMB_MOVT
+      || fixP->fx_r_type == BFD_RELOC_ARM_THUMB_MOVW_PCREL
+      || fixP->fx_r_type == BFD_RELOC_ARM_THUMB_MOVT_PCREL)
+    return 0;
+
   return 1;
 }
 #endif /* defined (OBJ_ELF) || defined (OBJ_COFF) */
index 8366360dd47cc2ce320e6e0e3e09324b05dc47c3..aca2c7e5d4a77744c5b467d033ff8fce239513ae 100644 (file)
@@ -1,3 +1,8 @@
+2008-07-07  Paul Brook  <paul@codesourcery.com>
+
+       * gas/arm/movw-local.d: New test.
+       * gas/arm/movw-local.s: New test. 
+
 2008-06-27  Chao-ying Fu  <fu@mips.com>
 
        * gas/mips/odd-float.d: Replace ... with #pass.
diff --git a/gas/testsuite/gas/arm/movw-local.d b/gas/testsuite/gas/arm/movw-local.d
new file mode 100644 (file)
index 0000000..5fc7727
--- /dev/null
@@ -0,0 +1,16 @@
+#objdump: -dr --prefix-addresses --show-raw-insn
+#skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
+#name: MOVW/MOVT relocations against local symbols
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+0[0-9a-f]+ <[^>]+> e3000000    movw    r0, #0  ; 0x0
+                       0: R_ARM_MOVW_ABS_NC    bar
+0[0-9a-f]+ <[^>]+> e3400000    movt    r0, #0  ; 0x0
+                       4: R_ARM_MOVT_ABS       bar
+0[0-9a-f]+ <[^>]+> f240 0000   movw    r0, #0  ; 0x0
+                       8: R_ARM_THM_MOVW_ABS_NC        bar
+0[0-9a-f]+ <[^>]+> f2c0 0000   movt    r0, #0  ; 0x0
+                       c: R_ARM_THM_MOVT_ABS   bar
+#...
diff --git a/gas/testsuite/gas/arm/movw-local.s b/gas/testsuite/gas/arm/movw-local.s
new file mode 100644 (file)
index 0000000..fa923c9
--- /dev/null
@@ -0,0 +1,13 @@
+.arch armv7-a
+.text
+.syntax unified
+foo:
+movw r0, #:lower16: bar
+movt r0, #:upper16: bar
+.thumb
+movw r0, #:lower16: bar
+movt r0, #:upper16: bar
+
+.space 0x10000
+
+bar: