diff options
author | Daniel Jacobowitz <drow@false.org> | 2008-04-29 11:53:45 +0000 |
---|---|---|
committer | Daniel Jacobowitz <drow@false.org> | 2008-04-29 11:53:45 +0000 |
commit | 266b05cf7629d7cefecd2b31542a2332e3d5e385 (patch) | |
tree | 329c85db1221b44ff910b956ca91823f3688fb5f | |
parent | a0fe373c768a198d0eb78aecedcbe809708dc921 (diff) | |
download | gdb-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/ChangeLog | 8 | ||||
-rw-r--r-- | bfd/elf.c | 6 | ||||
-rw-r--r-- | bfd/elflink.c | 12 | ||||
-rw-r--r-- | ld/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | ld/testsuite/ld-arm/arm-elf.exp | 4 | ||||
-rw-r--r-- | ld/testsuite/ld-arm/symbian-seg1.d | 8 | ||||
-rw-r--r-- | ld/testsuite/ld-arm/symbian-seg1.s | 13 |
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 @@ -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 |