From 37f4508be1aa888df790dd6e2756df165458792a Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Wed, 30 Jul 2003 02:15:07 +0000 Subject: [PATCH] * elf-hppa.h (elf_hppa_relocate_section): Look up dyn_h for undefweak. * elf64-hppa.c (elf64_hppa_finalize_dlt): Check h->root.type. --- bfd/ChangeLog | 5 +++++ bfd/elf-hppa.h | 17 +++++++++++++++-- bfd/elf64-hppa.c | 4 +++- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 69e9a10..bf48d62 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,8 @@ +2003-07-30 Randolph Chung + + * elf-hppa.h (elf_hppa_relocate_section): Look up dyn_h for undefweak. + * elf64-hppa.c (elf64_hppa_finalize_dlt): Check h->root.type. + 2003-07-30 Alan Modra * elf.c: Convert to C90, remove unnecessary prototypes and casts. diff --git a/bfd/elf-hppa.h b/bfd/elf-hppa.h index f372746..90f6482 100644 --- a/bfd/elf-hppa.h +++ b/bfd/elf-hppa.h @@ -1491,12 +1491,25 @@ elf_hppa_relocate_section (output_bfd, info, input_bfd, input_section, (_("%s: warning: unresolvable relocation against symbol `%s' from %s section"), bfd_archive_filename (input_bfd), h->root.root.string, bfd_get_section_name (input_bfd, input_section)); - relocation = 0; } relocation = 0; } else if (h->root.type == bfd_link_hash_undefweak) - relocation = 0; + { + dyn_name = get_dyn_name (input_section, h, rel, + &dynh_buf, &dynh_buflen); + dyn_h = elf64_hppa_dyn_hash_lookup (&hppa_info->dyn_hash_table, + dyn_name, FALSE, FALSE); + + if (dyn_h == NULL) + { + (*_bfd_error_handler) + (_("%s: warning: unresolvable relocation against symbol `%s' from %s section"), + bfd_archive_filename (input_bfd), h->root.root.string, + bfd_get_section_name (input_bfd, input_section)); + } + relocation = 0; + } else { /* Ignore dynamic loader defined symbols. */ diff --git a/bfd/elf64-hppa.c b/bfd/elf64-hppa.c index 5d329e9..f3398c1 100644 --- a/bfd/elf64-hppa.c +++ b/bfd/elf64-hppa.c @@ -2258,7 +2258,9 @@ elf64_hppa_finalize_dlt (dyn_h, data) + hppa_info->opd_sec->output_offset + hppa_info->opd_sec->output_section->vma); } - else if (h->root.u.def.section) + else if ((h->root.type == bfd_link_hash_defined + || h->root.type == bfd_link_hash_defweak) + && h->root.u.def.section) { value = h->root.u.def.value + h->root.u.def.section->output_offset; if (h->root.u.def.section->output_section) -- 2.7.4