* 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.
This commit is contained in:
Daniel Jacobowitz 2008-04-29 11:53:45 +00:00
parent a0fe373c76
commit 266b05cf76
7 changed files with 49 additions and 12 deletions

View File

@ -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

View File

@ -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))
{

View File

@ -6131,6 +6131,16 @@ _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)
&& !_bfd_elf_link_omit_section_dynsym (output_bfd, info, 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 | SEC_READONLY))
@ -6140,14 +6150,6 @@ _bfd_elf_init_2_index_sections (bfd *output_bfd, struct bfd_link_info *info)
break;
}
for (s = output_bfd->sections; s != NULL; s = s->next)
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)->data_index_section = s;
break;
}
if (elf_hash_table (info)->text_index_section == NULL)
elf_hash_table (info)->text_index_section
= elf_hash_table (info)->data_index_section;

View File

@ -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.

View File

@ -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*-*-*"] } {

View File

@ -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

View File

@ -0,0 +1,13 @@
.text
.globl _start
_start:
.word datavar
.word rodatavar
.section ".rodata", "a"
rodatavar:
.word 0
.section ".data", "aw"
datavar:
.word 0