From 185d09adc379a495103643c594a28d5f80110978 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Fri, 30 Jul 2004 15:37:04 +0000 Subject: 2004-07-30 H.J. Lu Nick Clifton 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. --- bfd/elflink.c | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) (limited to 'bfd/elflink.c') diff --git a/bfd/elflink.c b/bfd/elflink.c index e3411826f96..5eb0c935247 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -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; + } } -- cgit v1.2.1