From 79947c5421861704e56232699b629b1f13d400e3 Mon Sep 17 00:00:00 2001 From: Carlos O'Donell Date: Mon, 7 Jul 2008 19:12:58 +0000 Subject: [PATCH] gas/ 2008-07-07 Paul Brook * config/tc-arm.c (arm_fix_adjustable): Don't adjust MOVW/MOVT relocations. gas/testsuite/ 2008-07-07 Paul Brook * gas/arm/movw-local.d: New test. * gas/arm/movw-local.s: New test. --- gas/ChangeLog | 5 +++++ gas/config/tc-arm.c | 11 +++++++++++ gas/testsuite/ChangeLog | 5 +++++ gas/testsuite/gas/arm/movw-local.d | 16 ++++++++++++++++ gas/testsuite/gas/arm/movw-local.s | 13 +++++++++++++ 5 files changed, 50 insertions(+) create mode 100644 gas/testsuite/gas/arm/movw-local.d create mode 100644 gas/testsuite/gas/arm/movw-local.s diff --git a/gas/ChangeLog b/gas/ChangeLog index 1268f2f928a..225b521a91b 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2008-07-07 Paul Brook + + * config/tc-arm.c (arm_fix_adjustable): Don't adjust MOVW/MOVT + relocations. + 2008-07-07 Ralf Corsépius * configure.tgt: Add bfin-*-rtems*. diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c index 8aba5fcaf23..0c0507415ba 100644 --- a/gas/config/tc-arm.c +++ b/gas/config/tc-arm.c @@ -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) */ diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 8366360dd47..aca2c7e5d4a 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-07-07 Paul Brook + + * gas/arm/movw-local.d: New test. + * gas/arm/movw-local.s: New test. + 2008-06-27 Chao-ying Fu * 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 index 00000000000..5fc7727fb09 --- /dev/null +++ b/gas/testsuite/gas/arm/movw-local.d @@ -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 index 00000000000..fa923c91be1 --- /dev/null +++ b/gas/testsuite/gas/arm/movw-local.s @@ -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: -- 2.30.2