aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@codesourcery.com>2009-07-16 13:18:52 +0000
committerNathan Sidwell <nathan@codesourcery.com>2009-07-16 13:18:52 +0000
commit9a6f4e976ddfb067ae1e954a03d8887d60956cbc (patch)
tree5c056a5483a53a430d3a5e7daefe618ad087d647
parent3726e6c57f4e006f2744ab5b866ef98f2a79747d (diff)
downloadbinutils-9a6f4e976ddfb067ae1e954a03d8887d60956cbc.zip
binutils-9a6f4e976ddfb067ae1e954a03d8887d60956cbc.tar.gz
binutils-9a6f4e976ddfb067ae1e954a03d8887d60956cbc.tar.bz2
gas/
* config/tc-arm.c (md_apply_fix <BFD_RELOC_ARM_TARGET2>): 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.
-rw-r--r--gas/ChangeLog5
-rw-r--r--gas/config/tc-arm.c9
-rw-r--r--gas/testsuite/ChangeLog5
-rw-r--r--gas/testsuite/gas/arm/target-reloc-1.d15
-rw-r--r--gas/testsuite/gas/arm/target-reloc-1.s3
-rw-r--r--ld/testsuite/ChangeLog7
-rw-r--r--ld/testsuite/ld-arm/arm-target2-abs.d2
-rw-r--r--ld/testsuite/ld-arm/arm-target2-got-rel.d4
-rw-r--r--ld/testsuite/ld-arm/arm-target2-rel.d2
-rw-r--r--ld/testsuite/ld-arm/arm-target2.s3
10 files changed, 50 insertions, 5 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 97c08e5..e7605a7 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,8 @@
+2009-07-16 Nathan Sidwell <nathan@codesourcery.com>
+
+ * config/tc-arm.c (md_apply_fix <BFD_RELOC_ARM_TARGET2>): Write
+ the offset for REL targets here.
+
2009-07-15 Kai Tietz <kai.tietz@onevision.com>
* listing.c (print_source): Initialize cache by NULL.
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index 95d6a8d..31eb480 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 caf8eab..96e1cf0 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2009-07-16 Nathan Sidwell <nathan@codesourcery.com>
+
+ * gas/arm/target-reloc-1.s: New.
+ * gas/arm/target-reloc-1.d: New.
+
2009-07-14 Daniel Gutson <dgutson@codesourcery.com>
* 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 0000000..7a33b71
--- /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 <foo>:
+ 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 0000000..b543ab3
--- /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 a2d8cf9..1c00f3e 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,10 @@
+2009-07-16 Nathan Sidwell <nathan@codesourcery.com>
+
+ * 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 <hongjiu.lu@intel.com>
* 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 af64e60..a86dc01 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 1a996f0..3433791 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 569d6b5..f812640 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 0c343ef..26c4519 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: