aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Jacobowitz <drow@false.org>2008-04-29 11:53:45 +0000
committerDaniel Jacobowitz <drow@false.org>2008-04-29 11:53:45 +0000
commit266b05cf7629d7cefecd2b31542a2332e3d5e385 (patch)
tree329c85db1221b44ff910b956ca91823f3688fb5f
parenta0fe373c768a198d0eb78aecedcbe809708dc921 (diff)
downloadgdb-266b05cf7629d7cefecd2b31542a2332e3d5e385.zip
gdb-266b05cf7629d7cefecd2b31542a2332e3d5e385.tar.gz
gdb-266b05cf7629d7cefecd2b31542a2332e3d5e385.tar.bz2
* elf.c (_bfd_elf_get_dynamic_reloc_upper_bound)
(_bfd_elf_canonicalize_dynamic_reloc): Find dynamic relocations even if they are not loaded. * elflink.c (_bfd_elf_init_2_index_sections): Set data_index_section first. * ld-arm/symbian-seg1.s, ld-arm/symbian-seg1.d: New files. * ld-arm/arm-elf.exp: Run symbian-seg1.
-rw-r--r--bfd/ChangeLog8
-rw-r--r--bfd/elf.c6
-rw-r--r--bfd/elflink.c12
-rw-r--r--ld/testsuite/ChangeLog4
-rw-r--r--ld/testsuite/ld-arm/arm-elf.exp4
-rw-r--r--ld/testsuite/ld-arm/symbian-seg1.d8
-rw-r--r--ld/testsuite/ld-arm/symbian-seg1.s13
7 files changed, 46 insertions, 9 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index d652d97..6253bb5 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,11 @@
+2008-04-29 Daniel Jacobowitz <dan@codesourcery.com>
+
+ * elf.c (_bfd_elf_get_dynamic_reloc_upper_bound)
+ (_bfd_elf_canonicalize_dynamic_reloc): Find dynamic relocations
+ even if they are not loaded.
+ * elflink.c (_bfd_elf_init_2_index_sections): Set data_index_section
+ first.
+
2008-04-25 Jay Foad <jay.foad@gmail.com>
* reloc16.c (bfd_coff_reloc16_get_value): Add support for
diff --git a/bfd/elf.c b/bfd/elf.c
index f1019d6..c4a88ee 100644
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -6520,8 +6520,7 @@ _bfd_elf_get_dynamic_reloc_upper_bound (bfd *abfd)
ret = sizeof (arelent *);
for (s = abfd->sections; s != NULL; s = s->next)
- if ((s->flags & SEC_LOAD) != 0
- && elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
+ if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
&& (elf_section_data (s)->this_hdr.sh_type == SHT_REL
|| elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
ret += ((s->size / elf_section_data (s)->this_hdr.sh_entsize)
@@ -6557,8 +6556,7 @@ _bfd_elf_canonicalize_dynamic_reloc (bfd *abfd,
ret = 0;
for (s = abfd->sections; s != NULL; s = s->next)
{
- if ((s->flags & SEC_LOAD) != 0
- && elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
+ if (elf_section_data (s)->this_hdr.sh_link == elf_dynsymtab (abfd)
&& (elf_section_data (s)->this_hdr.sh_type == SHT_REL
|| elf_section_data (s)->this_hdr.sh_type == SHT_RELA))
{
diff --git a/bfd/elflink.c b/bfd/elflink.c
index 28282f6..de1939a 100644
--- a/bfd/elflink.c
+++ b/bfd/elflink.c
@@ -6131,20 +6131,22 @@ _bfd_elf_init_2_index_sections (bfd *output_bfd, struct bfd_link_info *info)
{
asection *s;
+ /* Data first, since setting text_index_section changes
+ _bfd_elf_link_omit_section_dynsym. */
for (s = output_bfd->sections; s != NULL; s = s->next)
- if (((s->flags & (SEC_EXCLUDE | SEC_ALLOC | SEC_READONLY))
- == (SEC_ALLOC | SEC_READONLY))
+ if (((s->flags & (SEC_EXCLUDE | SEC_ALLOC | SEC_READONLY)) == SEC_ALLOC)
&& !_bfd_elf_link_omit_section_dynsym (output_bfd, info, s))
{
- elf_hash_table (info)->text_index_section = s;
+ elf_hash_table (info)->data_index_section = s;
break;
}
for (s = output_bfd->sections; s != NULL; s = s->next)
- if (((s->flags & (SEC_EXCLUDE | SEC_ALLOC | SEC_READONLY)) == SEC_ALLOC)
+ if (((s->flags & (SEC_EXCLUDE | SEC_ALLOC | SEC_READONLY))
+ == (SEC_ALLOC | SEC_READONLY))
&& !_bfd_elf_link_omit_section_dynsym (output_bfd, info, s))
{
- elf_hash_table (info)->data_index_section = s;
+ elf_hash_table (info)->text_index_section = s;
break;
}
diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog
index 5a850f3..275bb07 100644
--- a/ld/testsuite/ChangeLog
+++ b/ld/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2008-04-29 Daniel Jacobowitz <dan@codesourcery.com>
+ * ld-arm/symbian-seg1.s, ld-arm/symbian-seg1.d: New files.
+ * ld-arm/arm-elf.exp: Run symbian-seg1.
+
2008-04-28 Nathan Sidwell <nathan@codesourcery.com>
* ld-scripts/rgn-over8.s: Tweak.
diff --git a/ld/testsuite/ld-arm/arm-elf.exp b/ld/testsuite/ld-arm/arm-elf.exp
index 81b9f75..7447b7c 100644
--- a/ld/testsuite/ld-arm/arm-elf.exp
+++ b/ld/testsuite/ld-arm/arm-elf.exp
@@ -47,6 +47,10 @@ if {[istarget "arm-*-vxworks"]} {
run_dump_test "emit-relocs1-vxworks"
}
+if { [istarget "arm*-*-symbianelf*"] } {
+ run_dump_test "symbian-seg1"
+}
+
# Exclude non-ARM-ELF targets.
if { ![is_elf_format] || ![istarget "arm*-*-*"] } {
diff --git a/ld/testsuite/ld-arm/symbian-seg1.d b/ld/testsuite/ld-arm/symbian-seg1.d
new file mode 100644
index 0000000..21d8a00
--- /dev/null
+++ b/ld/testsuite/ld-arm/symbian-seg1.d
@@ -0,0 +1,8 @@
+#source: symbian-seg1.s
+#ld: -Ttext 0x10000 -Tdata 0x400000
+#objdump: -dR
+#...
+ +10000: 00400000 .word 0x00400000
+ +10000: R_ARM_RELATIVE .data
+ +10004: 00010008 .word 0x00010008
+ +10004: R_ARM_RELATIVE .text
diff --git a/ld/testsuite/ld-arm/symbian-seg1.s b/ld/testsuite/ld-arm/symbian-seg1.s
new file mode 100644
index 0000000..8f893a2
--- /dev/null
+++ b/ld/testsuite/ld-arm/symbian-seg1.s
@@ -0,0 +1,13 @@
+ .text
+ .globl _start
+_start:
+ .word datavar
+ .word rodatavar
+
+ .section ".rodata", "a"
+rodatavar:
+ .word 0
+
+ .section ".data", "aw"
+datavar:
+ .word 0