OSDN Git Service

bfd/
authorrsandifo <rsandifo>
Tue, 18 Jan 2011 01:36:43 +0000 (01:36 +0000)
committerrsandifo <rsandifo>
Tue, 18 Jan 2011 01:36:43 +0000 (01:36 +0000)
* elf32-arm.c (elf32_arm_check_relocs): Check needs_plt rather than
h->needs_plt when deciding whether to record a possible dynamic reloc.

ld/testsuite/
* ld-arm/arm-rel32.s, ld-arm/arm-rel32.d: New testcase.
* ld-arm/arm-elf.exp: Run it.

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

index 93291ef..7c513d8 100644 (file)
@@ -1,5 +1,10 @@
 2011-01-17  Richard Sandiford  <richard.sandiford@linaro.org>
 
+       * elf32-arm.c (elf32_arm_check_relocs): Check needs_plt rather than
+       h->needs_plt when deciding whether to record a possible dynamic reloc.
+
+2011-01-17  Richard Sandiford  <richard.sandiford@linaro.org>
+
        * elf32-arm.c (elf32_arm_gc_sweep_hook): Remove all registered
        dynamic relocs for the removed section.
 
index 8e9e30f..54001a3 100644 (file)
@@ -11576,7 +11576,7 @@ elf32_arm_check_relocs (bfd *abfd, struct bfd_link_info *info,
            if ((info->shared || htab->root.is_relocatable_executable)
                && (sec->flags & SEC_ALLOC) != 0
                && ((r_type == R_ARM_ABS32 || r_type == R_ARM_ABS32_NOI)
-                   || (h != NULL && ! h->needs_plt
+                   || (h != NULL && ! needs_plt
                        && (! info->symbolic || ! h->def_regular))))
              {
                struct elf_dyn_relocs *p, **head;
index fd92f26..678b547 100644 (file)
@@ -1,5 +1,10 @@
 2011-01-17  Richard Sandiford  <richard.sandiford@linaro.org>
 
+       * ld-arm/arm-rel32.s, ld-arm/arm-rel32.d: New testcase.
+       * ld-arm/arm-elf.exp: Run it.
+
+2011-01-17  Richard Sandiford  <richard.sandiford@linaro.org>
+
        * ld-arm/gc-thumb-lib.s, ld-arm/gc-thumb.s,
        ld-arm/gc-thumb.d: New test.
        * ld-arm/arm-elf.exp: Run it.
index 9efdaf0..798b2cb 100644 (file)
@@ -126,6 +126,9 @@ set armelftests {
     {"arm-rel31" "-static -T arm.ld" "" {arm-rel31.s}
      {{objdump -s arm-rel31.d}}
      "arm-rel31"}
+    {"arm-rel32" "-shared -T arm-dyn.ld" "" {arm-rel32.s}
+     {{objdump -Rsj.data arm-rel32.d}}
+     "arm-rel32"}
     {"arm-call" "-static -T arm.ld" "-meabi=4" {arm-call1.s arm-call2.s}
      {{objdump -d arm-call.d}}
      "arm-call"}
diff --git a/ld/testsuite/ld-arm/arm-rel32.d b/ld/testsuite/ld-arm/arm-rel32.d
new file mode 100644 (file)
index 0000000..919aaa4
--- /dev/null
@@ -0,0 +1,12 @@
+
+.*:     file format .*
+
+DYNAMIC RELOCATION RECORDS
+OFFSET +TYPE +VALUE 
+[^ ]+ R_ARM_REL32 +foo
+[^ ]+ R_ARM_REL32 +foo
+[^ ]+ R_ARM_JUMP_SLOT +foo
+
+
+Contents of section \.data:
+ [^ ]+ 00000000 00010000  .*
diff --git a/ld/testsuite/ld-arm/arm-rel32.s b/ld/testsuite/ld-arm/arm-rel32.s
new file mode 100644 (file)
index 0000000..885b87c
--- /dev/null
@@ -0,0 +1,8 @@
+       .globl  foo
+foo:
+       mov     pc,lr
+       bal     foo(PLT)
+
+       .data
+       .word   foo-.
+       .word   foo-.+0x100