summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2013-08-14 12:20:40 +0000
committerNick Clifton <nickc@redhat.com>2013-08-14 12:20:40 +0000
commit21b1c25dd1576deaef5f555fd156b905b730ebf7 (patch)
tree0a98000635b054338ab29723ccd5f4a0f9a2b9df
parentb911b32672fe727f6710d06a7fc8e03d21843986 (diff)
downloadgdb-21b1c25dd1576deaef5f555fd156b905b730ebf7.tar.gz
PR ld/15787
* elf32-arm.c (elf32_arm_final_link_relocate): Use origin of output segment containing the relocating symbol instead of assuming 0 for sb group relocations. * ld-arm/group-relocs-ldr-bad.s: Redefine bar into foo section beyond 16 bit offset width. * ld-arm/group-relocs-ldrs-bad.s: Likewise. * ld-arm/group-relocs-ldr-bad.d: Adjust expected result. * ld-arm/group-relocs-ldrs-bad.d: Likewise. * ld-arm/group-relocs.s: Add comments. Move symbols used for sb group relocations into .data section. Drop section zero. Use pc/r0 as base register when pc/sb group relocations are used. * ld-arm/group-relocs.d: Adjust expected result. * ld-arm/group-relocs-alu-bad-2.d: New test for sb group relocation. * ld-arm/group-relocs-ldc-bad-2.d: Likewise. * ld-arm/group-relocs-ldr-bad-2.d: New test for pc group relocation. * ld-arm/group-relocs-ldrs-bad-2.d: Likewise. * ld-arm/unresolved-2.d: Add sb relocation failure test. * ld-arm/group-relocs-alu-bad-2.s: New test source. * ld-arm/group-relocs-ldr-bad-2.s: Likewise. * ld-arm/group-relocs-ldrs-bad-2.s: Likewise. * ld-arm/group-relocs-ldc-bad-2.s: Likewise. * ld-arm/unresolved-2.s: Likewise. * ld-arm/arm-elf.exp: For group-relocs, drop section zero start definition. Run the new tests.
-rw-r--r--bfd/ChangeLog7
-rw-r--r--bfd/elf32-arm.c8
2 files changed, 11 insertions, 4 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index ccbc820909f..fb0582efd4d 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,10 @@
+2013-08-14 John Tytgat <john@bass-software.com>
+
+ PR ld/15787
+ * elf32-arm.c (elf32_arm_final_link_relocate): Use origin of output
+ segment containing the relocating symbol instead of assuming 0 for
+ sb group relocations.
+
2013-08-09 Nick Clifton <nickc@redhat.com>
* elf32-rl78.c (rl78_elf_merge_private_bfd_data): Complain if G10
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index 4616ae9c77c..6d2d5534b14 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -9853,7 +9853,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
bfd_vma pc = input_section->output_section->vma
+ input_section->output_offset + rel->r_offset;
/* sb is the origin of the *segment* containing the symbol. */
- bfd_vma sb = sym_sec->output_section->vma;
+ bfd_vma sb = sym_sec ? sym_sec->output_section->vma : 0;
bfd_vma residual;
bfd_vma g_n;
bfd_signed_vma signed_value;
@@ -9987,7 +9987,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
bfd_vma pc = input_section->output_section->vma
+ input_section->output_offset + rel->r_offset;
/* sb is the origin of the *segment* containing the symbol. */
- bfd_vma sb = sym_sec->output_section->vma;
+ bfd_vma sb = sym_sec ? sym_sec->output_section->vma : 0;
bfd_vma residual;
bfd_signed_vma signed_value;
int group = 0;
@@ -10071,7 +10071,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
bfd_vma pc = input_section->output_section->vma
+ input_section->output_offset + rel->r_offset;
/* sb is the origin of the *segment* containing the symbol. */
- bfd_vma sb = sym_sec->output_section->vma;
+ bfd_vma sb = sym_sec ? sym_sec->output_section->vma : 0;
bfd_vma residual;
bfd_signed_vma signed_value;
int group = 0;
@@ -10155,7 +10155,7 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
bfd_vma pc = input_section->output_section->vma
+ input_section->output_offset + rel->r_offset;
/* sb is the origin of the *segment* containing the symbol. */
- bfd_vma sb = sym_sec->output_section->vma;
+ bfd_vma sb = sym_sec ? sym_sec->output_section->vma : 0;
bfd_vma residual;
bfd_signed_vma signed_value;
int group = 0;