* elf32-spu.c (spu_elf_output_symbol_hook): New function.
	(elf_backend_link_output_symbol_hook): Define.
ld/testsuite/
	* ld-spu/ovl2.d: Update.
This commit is contained in:
Alan Modra 2007-04-05 07:01:53 +00:00
parent be26064bad
commit c1b2796f47
4 changed files with 53 additions and 2 deletions

View file

@ -1,3 +1,8 @@
2007-04-05 Alan Modra <amodra@bigpond.net.au>
* elf32-spu.c (spu_elf_output_symbol_hook): New function.
(elf_backend_link_output_symbol_hook): Define.
2007-04-02 Nick Clifton <nickc@redhat.com>
PR binutils/4292

View file

@ -1590,6 +1590,47 @@ spu_elf_relocate_section (bfd *output_bfd,
return ret;
}
/* Adjust _SPUEAR_ syms to point at their overlay stubs. */
static bfd_boolean
spu_elf_output_symbol_hook (struct bfd_link_info *info,
const char *sym_name ATTRIBUTE_UNUSED,
Elf_Internal_Sym *sym,
asection *sym_sec ATTRIBUTE_UNUSED,
struct elf_link_hash_entry *h)
{
struct spu_link_hash_table *htab = spu_hash_table (info);
if (!info->relocatable
&& htab->num_overlays != 0
&& h != NULL
&& (h->root.type == bfd_link_hash_defined
|| h->root.type == bfd_link_hash_defweak)
&& h->def_regular
&& strncmp (h->root.root.string, "_SPUEAR_", 8) == 0)
{
static Elf_Internal_Rela zero_rel;
char *stub_name = spu_stub_name (h->root.u.def.section, h, &zero_rel);
struct spu_stub_hash_entry *sh;
if (stub_name == NULL)
return FALSE;
sh = (struct spu_stub_hash_entry *)
bfd_hash_lookup (&htab->stub_hash_table, stub_name, FALSE, FALSE);
free (stub_name);
if (sh == NULL)
return TRUE;
sym->st_shndx
= _bfd_elf_section_from_bfd_section (htab->stub->output_section->owner,
htab->stub->output_section);
sym->st_value = (htab->stub->output_section->vma
+ htab->stub->output_offset
+ sh->off);
}
return TRUE;
}
static int spu_plugin = 0;
void
@ -1830,6 +1871,7 @@ spu_elf_section_processing (bfd *abfd ATTRIBUTE_UNUSED,
#define elf_backend_gc_mark_hook spu_elf_gc_mark_hook
#define elf_backend_relocate_section spu_elf_relocate_section
#define elf_backend_symbol_processing spu_elf_backend_symbol_processing
#define elf_backend_link_output_symbol_hook spu_elf_output_symbol_hook
#define bfd_elf32_new_section_hook spu_elf_new_section_hook
#define bfd_elf32_bfd_link_hash_table_create spu_elf_link_hash_table_create
#define bfd_elf32_bfd_link_hash_table_free spu_elf_link_hash_table_free

View file

@ -1,3 +1,7 @@
2007-04-05 Alan Modra <amodra@bigpond.net.au>
* ld-spu/ovl2.d: Update.
2007-04-02 H.J. Lu <hongjiu.lu@intel.com>
PR ld/4090

View file

@ -33,7 +33,7 @@ Disassembly of section \.text:
138: 42 00 00 ce ila \$78,1
13c: 32 00 08 80 br 180 <__ovly_load> # 180
00000140 <00000000\.ovl_call\._SPUEAR_f1_a2>:
00000140 <_SPUEAR_f1_a2>:
140: 42 02 00 4f ila \$79,1024 # 400
144: 40 20 00 00 nop \$0
148: 42 00 01 4e ila \$78,2
@ -46,7 +46,7 @@ Disassembly of section \.ov_a1:
\.\.\.
Disassembly of section \.ov_a2:
00000400 <_SPUEAR_f1_a2>:
00000400 <f1_a2>:
400: 32 7f a2 00 br 110 <longjmp> # 110
400: SPU_REL16 longjmp
\.\.\.