aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog5
-rw-r--r--bfd/elf32-arm.c9
-rw-r--r--ld/testsuite/ChangeLog6
-rw-r--r--ld/testsuite/ld-arm/arm-elf.exp5
-rw-r--r--ld/testsuite/ld-arm/reloc-boundaries.d6
-rw-r--r--ld/testsuite/ld-arm/reloc-boundaries.s5
6 files changed, 33 insertions, 3 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 6ccebdc..bce7915 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,10 @@
2009-12-28 Daniel Gutson <dgutson@codesourcery.com>
+ * elf32-arm.c (elf32_arm_final_link_relocate): limits
+ fixed.
+
+2009-12-28 Daniel Gutson <dgutson@codesourcery.com>
+
* elf-attrs.c (_bfd_elf_merge_object_attributes): Error
message rephrased.
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index 1921780..3e9759b 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -7212,7 +7212,11 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
case R_ARM_ABS8:
value += addend;
- if ((long) value > 0x7f || (long) value < -0x80)
+
+ /* There is no way to tell whether the user intended to use a signed or
+ unsigned addend. When checking for overflow we accept either,
+ as specified by the AAELF. */
+ if ((long) value > 0xff || (long) value < -0x80)
return bfd_reloc_overflow;
bfd_put_8 (input_bfd, value, hit_data);
@@ -7221,7 +7225,8 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
case R_ARM_ABS16:
value += addend;
- if ((long) value > 0x7fff || (long) value < -0x8000)
+ /* See comment for R_ARM_ABS8. */
+ if ((long) value > 0xffff || (long) value < -0x8000)
return bfd_reloc_overflow;
bfd_put_16 (input_bfd, value, hit_data);
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index 0193e82..fff9ac6 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,5 +1,11 @@
2009-12-28 Daniel Gutson <dgutson@codesourcery.com>
+ * ld-arm/arm-elf.exp (armelftests): New test case added.
+ * ld-arm/reloc-boundaries.s: New file.
+ * ld-arm/reloc-boundaries.d: New file.
+
+2009-12-28 Daniel Gutson <dgutson@codesourcery.com>
+
* ld-arm/arm-elf.exp: Run missing test
from a previous commit (callweak-2).
diff --git a/ld/testsuite/ld-arm/arm-elf.exp b/ld/testsuite/ld-arm/arm-elf.exp
index 18b288f..ce8e9ee 100644
--- a/ld/testsuite/ld-arm/arm-elf.exp
+++ b/ld/testsuite/ld-arm/arm-elf.exp
@@ -58,7 +58,7 @@ if { ![is_elf_format] || ![istarget "arm*-*-*"] } {
return
}
-# List contains test-items with 3 items followed by 2 lists:
+# List contains test-items with 3 items followed by 2 lists and one more item:
# 0:name 1:ld options 2:assembler options
# 3:filenames of assembler files 4: action and options. 5: name of output file
@@ -236,6 +236,9 @@ set armelftests {
{"callweak-2" "-static -T arm.ld" "" {callweak-2.s}
{{objdump -dr callweak-2.d}}
"callweak-2"}
+ {"Relocation boundaries" "-defsym x=0 -defsym y=0 -defsym _start=0" "" {reloc-boundaries.s}
+ {{objdump -s reloc-boundaries.d}}
+ "reloc-boundaries"}
}
run_ld_link_tests $armelftests
diff --git a/ld/testsuite/ld-arm/reloc-boundaries.d b/ld/testsuite/ld-arm/reloc-boundaries.d
new file mode 100644
index 0000000..dcdefd9
--- /dev/null
+++ b/ld/testsuite/ld-arm/reloc-boundaries.d
@@ -0,0 +1,6 @@
+
+[^:]*: file format elf32-(little|big)arm
+
+Contents of section .text:
+ 8000 80ff0080 ffff ......
+#...
diff --git a/ld/testsuite/ld-arm/reloc-boundaries.s b/ld/testsuite/ld-arm/reloc-boundaries.s
new file mode 100644
index 0000000..7e65bc0
--- /dev/null
+++ b/ld/testsuite/ld-arm/reloc-boundaries.s
@@ -0,0 +1,5 @@
+.syntax unified
+ .byte x -128
+ .byte x +255
+ .short y -32768
+ .short y +65535