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:
H.J. Lu
2004-07-30 15:37:04 +00:00
parent ddc9cd0f63
commit 185d09adc3
9 changed files with 93 additions and 7 deletions

View File

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