bfd/
authorDaniel Gutson <dgutson@codesourcery.com>
Mon, 28 Dec 2009 18:55:16 +0000 (18:55 +0000)
committerDaniel Gutson <dgutson@codesourcery.com>
Mon, 28 Dec 2009 18:55:16 +0000 (18:55 +0000)
        * elf32-arm.c (elf32_arm_final_link_relocate): limits
        fixed.

        ld/testsuite/
        * ld-arm/arm-elf.exp (armelftests): New test case added.
        * ld-arm/reloc-boundaries.s: New file.
        * ld-arm/reloc-boundaries.d: New file.

bfd/ChangeLog
bfd/elf32-arm.c
ld/testsuite/ChangeLog
ld/testsuite/ld-arm/arm-elf.exp
ld/testsuite/ld-arm/reloc-boundaries.d [new file with mode: 0644]
ld/testsuite/ld-arm/reloc-boundaries.s [new file with mode: 0644]

index 6ccebdcbc0d600a621e5a7b7dcdd59c4196e0f4b..bce7915f4c997142380e112928d7e3f6a6b1c507 100644 (file)
@@ -1,3 +1,8 @@
+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
index 1921780edb2ffdd7afe53791a73c5ed4a0e8dc1f..3e9759b8249b9a88794d89597e1675c6487117e7 100644 (file)
@@ -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);
index 0193e8238cc401b8fe95b54ea0f12ea7a408c90a..fff9ac62a3536267c3b3d7abb880f75e42362d1d 100644 (file)
@@ -1,3 +1,9 @@
+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
index 18b288faa3cd0714434df245e35feb3dac8f230f..ce8e9ee87fe57fffa7ea8bfc9a84b0b96ee0d80d 100644 (file)
@@ -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 (file)
index 0000000..dcdefd9
--- /dev/null
@@ -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 (file)
index 0000000..7e65bc0
--- /dev/null
@@ -0,0 +1,5 @@
+.syntax unified
+       .byte   x -128
+       .byte   x +255
+       .short  y -32768
+       .short  y +65535