forked from Imagelibrary/binutils-gdb
2004-07-30 H.J. Lu <hongjiu.lu@intel.com>
Nick Clifton <nickc@redhat.com> PR 290 * bfd.c (_bfd_default_error_handler): Make it global. * elf-bfd.h (elf_backend_data): Add link_order_error_handler. * elf.c (assign_section_numbers): Cope gracefully with sections which have SHF_LINK_ORDER set but no sh_link set up. * elflink.c (elf_get_linked_section_vma): Likewise. * elfxx-ia64.c (elf_backend_link_order_error_handler): New. Set it to NULL. * elfxx-target.h (elf_backend_link_order_error_handler): New. Set it to _bfd_default_error_handler. (elfNN_bed): Add elf_backend_link_order_error_handler. * libbfd-in.h (_bfd_default_error_handler): New. * libbfd.h: Regenerated.
This commit is contained in:
@@ -7220,8 +7220,32 @@ elf_get_linked_section_vma (struct bfd_link_order *p)
|
||||
elf_shdrp = elf_elfsections (s->owner);
|
||||
elfsec = _bfd_elf_section_from_bfd_section (s->owner, s);
|
||||
elfsec = elf_shdrp[elfsec]->sh_link;
|
||||
s = elf_shdrp[elfsec]->bfd_section;
|
||||
return s->output_section->vma + s->output_offset;
|
||||
/* PR 290:
|
||||
The Intel C compiler generates SHT_IA_64_UNWIND with
|
||||
SHF_LINK_ORDER. But it doesn't set theh sh_link or
|
||||
sh_info fields. Hence we could get the situation
|
||||
where elfsec is 0. */
|
||||
if (elfsec == 0)
|
||||
{
|
||||
const struct elf_backend_data *bed
|
||||
= get_elf_backend_data (s->owner);
|
||||
if (bed->link_order_error_handler)
|
||||
{
|
||||
char *name = bfd_get_section_ident (s);
|
||||
bed->link_order_error_handler
|
||||
(_("%s: warning: sh_link not set for section `%s'"),
|
||||
bfd_archive_filename (s->owner),
|
||||
name ? name : s->name);
|
||||
if (name)
|
||||
free (name);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
s = elf_shdrp[elfsec]->bfd_section;
|
||||
return s->output_section->vma + s->output_offset;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user