From 9a6f4e976ddfb067ae1e954a03d8887d60956cbc Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Thu, 16 Jul 2009 13:18:52 +0000 Subject: [PATCH] gas/ * config/tc-arm.c (md_apply_fix ): Write the offset for REL targets here. gas/testsuite/ * gas/arm/target-reloc-1.s: New. * gas/arm/target-reloc-1.d: New. ld/testsuite/ * ld-arm/arm-target2.s: Add addend cases. * ld-arm/arm-target2-rel.d: Adjust. * ld-arm/arm-target2-abs.d: Adjust. * ld-arm/arm-target2-got-rel.d: Adjust. --- gas/ChangeLog | 5 +++++ gas/config/tc-arm.c | 9 ++++++++- gas/testsuite/ChangeLog | 5 +++++ gas/testsuite/gas/arm/target-reloc-1.d | 15 +++++++++++++++ gas/testsuite/gas/arm/target-reloc-1.s | 3 +++ ld/testsuite/ChangeLog | 7 +++++++ ld/testsuite/ld-arm/arm-target2-abs.d | 2 +- ld/testsuite/ld-arm/arm-target2-got-rel.d | 4 ++-- ld/testsuite/ld-arm/arm-target2-rel.d | 2 +- ld/testsuite/ld-arm/arm-target2.s | 3 +++ 10 files changed, 50 insertions(+), 5 deletions(-) create mode 100644 gas/testsuite/gas/arm/target-reloc-1.d create mode 100644 gas/testsuite/gas/arm/target-reloc-1.s diff --git a/gas/ChangeLog b/gas/ChangeLog index 97c08e584f8..e7605a7a2de 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2009-07-16 Nathan Sidwell + + * config/tc-arm.c (md_apply_fix ): Write + the offset for REL targets here. + 2009-07-15 Kai Tietz * listing.c (print_source): Initialize cache by NULL. diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c index 95d6a8dd3f5..31eb480c076 100644 --- a/gas/config/tc-arm.c +++ b/gas/config/tc-arm.c @@ -20014,10 +20014,17 @@ md_apply_fix (fixS * fixP, case BFD_RELOC_ARM_GOT32: case BFD_RELOC_ARM_GOTOFF: - case BFD_RELOC_ARM_TARGET2: if (fixP->fx_done || !seg->use_rela_p) md_number_to_chars (buf, 0, 4); break; + + case BFD_RELOC_ARM_TARGET2: + /* TARGET2 is not partial-inplace, so we need to write the + addend here for REL targets, because it won't be written out + during reloc processing later. */ + if (fixP->fx_done || !seg->use_rela_p) + md_number_to_chars (buf, fixP->fx_offset, 4); + break; #endif case BFD_RELOC_RVA: diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index caf8eabf46e..96e1cf01b4d 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-07-16 Nathan Sidwell + + * gas/arm/target-reloc-1.s: New. + * gas/arm/target-reloc-1.d: New. + 2009-07-14 Daniel Gutson * gas/arm/align64.s: New test case. diff --git a/gas/testsuite/gas/arm/target-reloc-1.d b/gas/testsuite/gas/arm/target-reloc-1.d new file mode 100644 index 00000000000..7a33b712311 --- /dev/null +++ b/gas/testsuite/gas/arm/target-reloc-1.d @@ -0,0 +1,15 @@ +#objdump: -dr --show-raw-insn +#skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix* *-*-vxworks +#name: TARGET reloc + +.*: file format .*arm.* + +Disassembly of section .text: + +00000000 : + 0: 00001234 .* + 0: R_ARM_TARGET2 foo + 4: cdef0000 .* + 4: R_ARM_TARGET2 foo + 8: 76543210 .* + 8: R_ARM_TARGET2 foo diff --git a/gas/testsuite/gas/arm/target-reloc-1.s b/gas/testsuite/gas/arm/target-reloc-1.s new file mode 100644 index 00000000000..b543ab3a869 --- /dev/null +++ b/gas/testsuite/gas/arm/target-reloc-1.s @@ -0,0 +1,3 @@ +foo: .word foo(TARGET2) + 0x1234 + .word foo + 0xcdef0000(TARGET2) + .word (foo + 0x76543210)(TARGET2) diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index a2d8cf9306d..1c00f3e9622 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2009-07-16 Nathan Sidwell + + * ld-arm/arm-target2.s: Add addend cases. + * ld-arm/arm-target2-rel.d: Adjust. + * ld-arm/arm-target2-abs.d: Adjust. + * ld-arm/arm-target2-got-rel.d: Adjust. + 2009-07-13 H.J. Lu * ld-ifunc/ifunc.exp: Don't use -shared/-static to build object diff --git a/ld/testsuite/ld-arm/arm-target2-abs.d b/ld/testsuite/ld-arm/arm-target2-abs.d index af64e60a2f6..a86dc01643a 100644 --- a/ld/testsuite/ld-arm/arm-target2-abs.d +++ b/ld/testsuite/ld-arm/arm-target2-abs.d @@ -2,6 +2,6 @@ .*: file format.* Contents of section .text: - 8000 (04800000|00008004) .* + 8000 (10800000|00008010) (44920000|00009244) (1080efcd|cdef8010) (20b25476|7654b220) .* # Ignore .ARM.attributes section #... diff --git a/ld/testsuite/ld-arm/arm-target2-got-rel.d b/ld/testsuite/ld-arm/arm-target2-got-rel.d index 1a996f0c202..34337912f90 100644 --- a/ld/testsuite/ld-arm/arm-target2-got-rel.d +++ b/ld/testsuite/ld-arm/arm-target2-got-rel.d @@ -2,8 +2,8 @@ .*: file format.* Contents of section .text: - 8000 (00100000|00001000) .* + 8000 (00100000|00001000) (30220000|00002230) (f80fefcd|cdef0ff8) (04425476|76544204) .* Contents of section .got: - 9000 (04800000|00008004) .* + 9000 (10800000|00008010) .* # Ignore .ARM.attributes section #... diff --git a/ld/testsuite/ld-arm/arm-target2-rel.d b/ld/testsuite/ld-arm/arm-target2-rel.d index 569d6b595b1..f8126406734 100644 --- a/ld/testsuite/ld-arm/arm-target2-rel.d +++ b/ld/testsuite/ld-arm/arm-target2-rel.d @@ -2,6 +2,6 @@ .*: file format.* Contents of section .text: - 8000 (04000000|00000004) .* + 8000 (10000000|00000010) (40120000|00001240) (0800efcd|cdef0008) (14325476|76543214) .* # Ignore .ARM.attributes section #... diff --git a/ld/testsuite/ld-arm/arm-target2.s b/ld/testsuite/ld-arm/arm-target2.s index 0c343ef6e87..26c451904a2 100644 --- a/ld/testsuite/ld-arm/arm-target2.s +++ b/ld/testsuite/ld-arm/arm-target2.s @@ -3,4 +3,7 @@ .global _start _start: .word foo(target2) + .word foo+0x1234(target2) + .word foo+0xcdef0000(target2) + .word foo+0x76543210(target2) foo: -- 2.30.2