From dfeffb9fe1d18c568b06be976da294b928753821 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Thu, 21 Oct 2004 15:28:33 +0000 Subject: [PATCH] bfd/ 2004-10-21 H.J. Lu PR 463 * aoutx.h (aout_link_input_section_std): Pass proper hash entry to linker reloc_overflow callback. (aout_link_input_section_ext): Likewise. (aout_link_reloc_link_order): Likewise. * coff-a29k.c (coff_a29k_relocate_section): Likewise. * coff-alpha.c (alpha_ecoff_get_relocated_section_contents): Likewise. (alpha_relocate_section): Likewise. * coff-arm.c (coff_arm_relocate_section): Likewise. * coff-h8300.c (h8300_reloc16_extra_cases): Likewise. * coff-h8500.c (extra_case): Likewise. * coff-i960.c (coff_i960_relocate_section): Likewise. * coff-mcore.c (coff_mcore_relocate_section): Likewise. * coff-mips.c (mips_relocate_section): Likewise. * coff-or32.c (coff_or32_relocate_section): Likewise. * coff-ppc.c (coff_ppc_relocate_section): Likewise. * coff-rs6000.c (xcoff_ppc_relocate_section): Likewise. * coff-sh.c (sh_relocate_section): Likewise. * coff-tic80.c (coff_tic80_relocate_section): Likewise. * coff-w65.c (w65_reloc16_extra_cases): Likewise. * coff-z8k.c (extra_case): Likewise. * coff64-rs6000.c (xcoff64_ppc_relocate_section): Likewise. * cofflink.c (_bfd_coff_reloc_link_order): Likewise. (_bfd_coff_generic_relocate_section): Likewise. * ecoff.c (ecoff_reloc_link_order): Likewise. * elf-hppa.h (elf_hppa_relocate_section): Likewise. * elf-m10200.c (mn10200_elf_relocate_section): Likewise. * elf-m10300.c (mn10300_elf_relocate_section): Likewise. * elf32-arm.h (elf32_arm_relocate_section): Likewise. * elf32-avr.c (elf32_avr_relocate_section): Likewise. * elf32-cr16c.c (elf32_cr16c_relocate_section): Likewise. * elf32-cris.c (cris_elf_relocate_section): Likewise. * elf32-crx.c (elf32_crx_relocate_section): Likewise. * elf32-d10v.c (elf32_d10v_relocate_section): Likewise. * elf32-fr30.c (fr30_elf_relocate_section): Likewise. * elf32-frv.c (elf32_frv_relocate_section): Likewise. * elf32-h8300.c (elf32_h8_relocate_section): Likewise. * elf32-hppa.c (elf32_hppa_relocate_section): Likewise. * elf32-i370.c (i370_elf_relocate_section): Likewise. * elf32-i386.c (elf_i386_relocate_section): Likewise. * elf32-i860.c (elf32_i860_relocate_section): Likewise. * elf32-ip2k.c (ip2k_elf_relocate_section): Likewise. * elf32-iq2000.c (iq2000_elf_relocate_section): Likewise. * elf32-m32r.c (m32r_elf_relocate_section): Likewise. * elf32-m68hc1x.c (elf32_m68hc11_relocate_section): Likewise. * elf32-m68k.c (elf_m68k_relocate_section): Likewise. * elf32-mcore.c (mcore_elf_relocate_section): Likewise. * elf32-msp430.c (elf32_msp430_relocate_section): Likewise. * elf32-openrisc.c (openrisc_elf_relocate_section): Likewise. * elf32-ppc.c (ppc_elf_relocate_section): Likewise. * elf32-s390.c (elf_s390_relocate_section): Likewise. * elf32-sh.c (sh_elf_relocate_section): Likewise. * elf32-sparc.c (elf32_sparc_relocate_section): Likewise. * elf32-v850.c (v850_elf_relocate_section): Likewise. * elf32-vax.c (elf_vax_relocate_section): Likewise. * elf32-xstormy16.c (xstormy16_elf_relocate_section): Likewise. * elf64-alpha.c (elf64_alpha_relocate_section): Likewise. * elf64-mmix.c (mmix_elf_relocate_section): Likewise. * elf64-ppc.c (ppc64_elf_relocate_section): Likewise. * elf64-s390.c (elf_s390_relocate_section): Likewise. * elf64-sh64.c (sh_elf64_relocate_section): Likewise. * elf64-sparc.c (sparc64_elf_relocate_section): Likewise. * elf64-x86-64.c (elf64_x86_64_relocate_section): Likewise. * elflink.c (elf_reloc_link_order): Likewise. * elfxx-ia64.c (elfNN_ia64_relocate_section): Likewise. * elfxx-mips.c (_bfd_mips_elf_relocate_section): Likewise. (_bfd_elf_mips_get_relocated_section_contents): Likewise. * linker.c (_bfd_generic_reloc_link_order): Likewise. * pdp11.c (pdp11_aout_link_input_section): Likewise. (aout_link_reloc_link_order): Likewise. * reloc.c (bfd_generic_get_relocated_section_contents): Likewise. * xcofflink.c (xcoff_reloc_link_order): Likewise. * simple.c (simple_dummy_reloc_overflow): Updated. include/ 2004-10-21 H.J. Lu PR 463 * bfdlink.h (bfd_link_callbacks): Add a pointer to struct bfd_link_hash_entry to reloc_overflow. ld/ 2004-10-21 H.J. Lu PR 463 * ldmain.c (reloc_overflow): Accept a pointer to struct bfd_link_hash_entry. Report symbol location for relocation overflow. --- bfd/ChangeLog | 78 +++++++++++++++++++++++++++++++++++++++++++ bfd/aoutx.h | 14 ++++---- bfd/coff-a29k.c | 8 ++--- bfd/coff-alpha.c | 6 ++-- bfd/coff-arm.c | 7 ++-- bfd/coff-h8300.c | 21 ++++++++---- bfd/coff-h8500.c | 6 ++-- bfd/coff-i960.c | 7 ++-- bfd/coff-mcore.c | 2 +- bfd/coff-mips.c | 6 ++-- bfd/coff-or32.c | 8 ++--- bfd/coff-ppc.c | 4 +-- bfd/coff-rs6000.c | 7 ++-- bfd/coff-sh.c | 7 ++-- bfd/coff-tic80.c | 7 ++-- bfd/coff-w65.c | 6 ++-- bfd/coff-z8k.c | 12 ++++--- bfd/coff64-rs6000.c | 7 ++-- bfd/cofflink.c | 9 ++--- bfd/ecoff.c | 2 +- bfd/elf-hppa.h | 34 ++++++++++--------- bfd/elf-m10200.c | 5 +-- bfd/elf-m10300.c | 5 +-- bfd/elf32-arm.h | 5 +-- bfd/elf32-avr.c | 7 ++-- bfd/elf32-cr16c.c | 5 +-- bfd/elf32-cris.c | 4 +-- bfd/elf32-crx.c | 5 +-- bfd/elf32-d10v.c | 5 +-- bfd/elf32-fr30.c | 8 +++-- bfd/elf32-frv.c | 4 +-- bfd/elf32-h8300.c | 5 +-- bfd/elf32-hppa.c | 4 +-- bfd/elf32-i370.c | 3 +- bfd/elf32-i386.c | 5 +-- bfd/elf32-i860.c | 4 +-- bfd/elf32-ip2k.c | 4 +-- bfd/elf32-iq2000.c | 4 +-- bfd/elf32-m32r.c | 4 +-- bfd/elf32-m68hc1x.c | 2 +- bfd/elf32-m68k.c | 5 +-- bfd/elf32-mcore.c | 6 ++-- bfd/elf32-msp430.c | 5 +-- bfd/elf32-openrisc.c | 4 +-- bfd/elf32-ppc.c | 1 + bfd/elf32-s390.c | 5 +-- bfd/elf32-sh.c | 7 ++-- bfd/elf32-sparc.c | 7 ++-- bfd/elf32-v850.c | 5 +-- bfd/elf32-vax.c | 7 ++-- bfd/elf32-xstormy16.c | 4 +-- bfd/elf64-alpha.c | 7 ++-- bfd/elf64-mmix.c | 4 +-- bfd/elf64-ppc.c | 3 +- bfd/elf64-s390.c | 5 +-- bfd/elf64-sh64.c | 7 ++-- bfd/elf64-sparc.c | 7 ++-- bfd/elf64-x86-64.c | 5 +-- bfd/elflink.c | 3 +- bfd/elfxx-ia64.c | 8 ++--- bfd/elfxx-mips.c | 5 +-- bfd/linker.c | 2 +- bfd/pdp11.c | 9 ++--- bfd/reloc.c | 3 +- bfd/simple.c | 1 + bfd/xcofflink.c | 2 +- include/ChangeLog | 6 ++++ include/bfdlink.h | 14 ++++---- ld/ChangeLog | 7 ++++ ld/ldmain.c | 32 ++++++++++++++++-- 70 files changed, 356 insertions(+), 176 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index b640031e1f..f561ab98fc 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,81 @@ +2004-10-21 H.J. Lu + + PR 463 + * aoutx.h (aout_link_input_section_std): Pass proper hash entry + to linker reloc_overflow callback. + (aout_link_input_section_ext): Likewise. + (aout_link_reloc_link_order): Likewise. + * coff-a29k.c (coff_a29k_relocate_section): Likewise. + * coff-alpha.c (alpha_ecoff_get_relocated_section_contents): + Likewise. + (alpha_relocate_section): Likewise. + * coff-arm.c (coff_arm_relocate_section): Likewise. + * coff-h8300.c (h8300_reloc16_extra_cases): Likewise. + * coff-h8500.c (extra_case): Likewise. + * coff-i960.c (coff_i960_relocate_section): Likewise. + * coff-mcore.c (coff_mcore_relocate_section): Likewise. + * coff-mips.c (mips_relocate_section): Likewise. + * coff-or32.c (coff_or32_relocate_section): Likewise. + * coff-ppc.c (coff_ppc_relocate_section): Likewise. + * coff-rs6000.c (xcoff_ppc_relocate_section): Likewise. + * coff-sh.c (sh_relocate_section): Likewise. + * coff-tic80.c (coff_tic80_relocate_section): Likewise. + * coff-w65.c (w65_reloc16_extra_cases): Likewise. + * coff-z8k.c (extra_case): Likewise. + * coff64-rs6000.c (xcoff64_ppc_relocate_section): Likewise. + * cofflink.c (_bfd_coff_reloc_link_order): Likewise. + (_bfd_coff_generic_relocate_section): Likewise. + * ecoff.c (ecoff_reloc_link_order): Likewise. + * elf-hppa.h (elf_hppa_relocate_section): Likewise. + * elf-m10200.c (mn10200_elf_relocate_section): Likewise. + * elf-m10300.c (mn10300_elf_relocate_section): Likewise. + * elf32-arm.h (elf32_arm_relocate_section): Likewise. + * elf32-avr.c (elf32_avr_relocate_section): Likewise. + * elf32-cr16c.c (elf32_cr16c_relocate_section): Likewise. + * elf32-cris.c (cris_elf_relocate_section): Likewise. + * elf32-crx.c (elf32_crx_relocate_section): Likewise. + * elf32-d10v.c (elf32_d10v_relocate_section): Likewise. + * elf32-fr30.c (fr30_elf_relocate_section): Likewise. + * elf32-frv.c (elf32_frv_relocate_section): Likewise. + * elf32-h8300.c (elf32_h8_relocate_section): Likewise. + * elf32-hppa.c (elf32_hppa_relocate_section): Likewise. + * elf32-i370.c (i370_elf_relocate_section): Likewise. + * elf32-i386.c (elf_i386_relocate_section): Likewise. + * elf32-i860.c (elf32_i860_relocate_section): Likewise. + * elf32-ip2k.c (ip2k_elf_relocate_section): Likewise. + * elf32-iq2000.c (iq2000_elf_relocate_section): Likewise. + * elf32-m32r.c (m32r_elf_relocate_section): Likewise. + * elf32-m68hc1x.c (elf32_m68hc11_relocate_section): Likewise. + * elf32-m68k.c (elf_m68k_relocate_section): Likewise. + * elf32-mcore.c (mcore_elf_relocate_section): Likewise. + * elf32-msp430.c (elf32_msp430_relocate_section): Likewise. + * elf32-openrisc.c (openrisc_elf_relocate_section): Likewise. + * elf32-ppc.c (ppc_elf_relocate_section): Likewise. + * elf32-s390.c (elf_s390_relocate_section): Likewise. + * elf32-sh.c (sh_elf_relocate_section): Likewise. + * elf32-sparc.c (elf32_sparc_relocate_section): Likewise. + * elf32-v850.c (v850_elf_relocate_section): Likewise. + * elf32-vax.c (elf_vax_relocate_section): Likewise. + * elf32-xstormy16.c (xstormy16_elf_relocate_section): Likewise. + * elf64-alpha.c (elf64_alpha_relocate_section): Likewise. + * elf64-mmix.c (mmix_elf_relocate_section): Likewise. + * elf64-ppc.c (ppc64_elf_relocate_section): Likewise. + * elf64-s390.c (elf_s390_relocate_section): Likewise. + * elf64-sh64.c (sh_elf64_relocate_section): Likewise. + * elf64-sparc.c (sparc64_elf_relocate_section): Likewise. + * elf64-x86-64.c (elf64_x86_64_relocate_section): Likewise. + * elflink.c (elf_reloc_link_order): Likewise. + * elfxx-ia64.c (elfNN_ia64_relocate_section): Likewise. + * elfxx-mips.c (_bfd_mips_elf_relocate_section): Likewise. + (_bfd_elf_mips_get_relocated_section_contents): Likewise. + * linker.c (_bfd_generic_reloc_link_order): Likewise. + * pdp11.c (pdp11_aout_link_input_section): Likewise. + (aout_link_reloc_link_order): Likewise. + * reloc.c (bfd_generic_get_relocated_section_contents): + Likewise. + * xcofflink.c (xcoff_reloc_link_order): Likewise. + * simple.c (simple_dummy_reloc_overflow): Updated. + 2004-10-20 Andreas Schwab * elf32-m68k.c (elf_m68k_plt_sym_val): New function. diff --git a/bfd/aoutx.h b/bfd/aoutx.h index 4fa529cf50..d629d80d46 100644 --- a/bfd/aoutx.h +++ b/bfd/aoutx.h @@ -5158,7 +5158,7 @@ aout_link_input_section_std (finfo, input_bfd, input_section, relocs, const char *name; if (h != NULL) - name = h->root.root.string; + name = NULL; else if (r_extern) name = strings + GET_WORD (input_bfd, syms[r_index].e_strx); @@ -5170,8 +5170,9 @@ aout_link_input_section_std (finfo, input_bfd, input_section, relocs, name = bfd_section_name (input_bfd, s); } if (! ((*finfo->info->callbacks->reloc_overflow) - (finfo->info, name, howto->name, - (bfd_vma) 0, input_bfd, input_section, r_addr))) + (finfo->info, (h ? &h->root : NULL), name, + howto->name, (bfd_vma) 0, input_bfd, + input_section, r_addr))) return FALSE; } break; @@ -5569,7 +5570,7 @@ aout_link_input_section_ext (finfo, input_bfd, input_section, relocs, const char *name; if (h != NULL) - name = h->root.root.string; + name = NULL; else if (r_extern || r_type == (unsigned int) RELOC_BASE10 || r_type == (unsigned int) RELOC_BASE13 @@ -5584,7 +5585,8 @@ aout_link_input_section_ext (finfo, input_bfd, input_section, relocs, name = bfd_section_name (input_bfd, s); } if (! ((*finfo->info->callbacks->reloc_overflow) - (finfo->info, name, howto_table_ext[r_type].name, + (finfo->info, (h ? &h->root : NULL), name, + howto_table_ext[r_type].name, r_addend, input_bfd, input_section, r_addr))) return FALSE; } @@ -5753,7 +5755,7 @@ aout_link_reloc_link_order (finfo, o, p) abort (); case bfd_reloc_overflow: if (! ((*finfo->info->callbacks->reloc_overflow) - (finfo->info, + (finfo->info, NULL, (p->type == bfd_section_reloc_link_order ? bfd_section_name (finfo->output_bfd, pr->u.section) diff --git a/bfd/coff-a29k.c b/bfd/coff-a29k.c index 444dbc2a77..a78eb9339a 100644 --- a/bfd/coff-a29k.c +++ b/bfd/coff-a29k.c @@ -532,7 +532,7 @@ coff_a29k_relocate_section (output_bfd, info, input_bfd, input_section, if (symndx == -1) name = "*ABS*"; else if (h != NULL) - name = h->root.root.string; + name = NULL; else if (sym == NULL) name = "*unknown*"; else if (sym->_n._n_n._n_zeroes == 0 @@ -546,9 +546,9 @@ coff_a29k_relocate_section (output_bfd, info, input_bfd, input_section, } if (! ((*info->callbacks->reloc_overflow) - (info, name, howto_table[rel->r_type].name, (bfd_vma) 0, - input_bfd, input_section, - rel->r_vaddr - input_section->vma))) + (info, (h ? &h->root : NULL), name, + howto_table[rel->r_type].name, (bfd_vma) 0, input_bfd, + input_section, rel->r_vaddr - input_section->vma))) return FALSE; } } diff --git a/bfd/coff-alpha.c b/bfd/coff-alpha.c index 2acb800cb5..68dd765278 100644 --- a/bfd/coff-alpha.c +++ b/bfd/coff-alpha.c @@ -1145,7 +1145,8 @@ alpha_ecoff_get_relocated_section_contents (abfd, link_info, link_order, break; case bfd_reloc_overflow: if (! ((*link_info->callbacks->reloc_overflow) - (link_info, bfd_asymbol_name (*rel->sym_ptr_ptr), + (link_info, NULL, + bfd_asymbol_name (*rel->sym_ptr_ptr), rel->howto->name, rel->addend, input_bfd, input_section, rel->address))) goto error_return; @@ -1960,7 +1961,8 @@ alpha_relocate_section (output_bfd, info, input_bfd, input_section, name = bfd_section_name (input_bfd, symndx_to_section[r_symndx]); if (! ((*info->callbacks->reloc_overflow) - (info, name, alpha_howto_table[r_type].name, + (info, NULL, name, + alpha_howto_table[r_type].name, (bfd_vma) 0, input_bfd, input_section, r_vaddr - input_section->vma))) return FALSE; diff --git a/bfd/coff-arm.c b/bfd/coff-arm.c index 1c3a7e3c39..05229caeab 100644 --- a/bfd/coff-arm.c +++ b/bfd/coff-arm.c @@ -1795,7 +1795,7 @@ coff_arm_relocate_section (output_bfd, info, input_bfd, input_section, if (symndx == -1) name = "*ABS*"; else if (h != NULL) - name = h->root.root.string; + name = NULL; else { name = _bfd_coff_internal_syment_name (input_bfd, sym, buf); @@ -1804,8 +1804,9 @@ coff_arm_relocate_section (output_bfd, info, input_bfd, input_section, } if (! ((*info->callbacks->reloc_overflow) - (info, name, howto->name, (bfd_vma) 0, input_bfd, - input_section, rel->r_vaddr - input_section->vma))) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_vaddr - input_section->vma))) return FALSE; } } diff --git a/bfd/coff-h8300.c b/bfd/coff-h8300.c index 4cd8829f9a..0e07fb1673 100644 --- a/bfd/coff-h8300.c +++ b/bfd/coff-h8300.c @@ -685,7 +685,8 @@ h8300_reloc16_extra_cases (bfd *abfd, struct bfd_link_info *link_info, if (gap < -128 || gap > 126) { if (! ((*link_info->callbacks->reloc_overflow) - (link_info, bfd_asymbol_name (*reloc->sym_ptr_ptr), + (link_info, NULL, + bfd_asymbol_name (*reloc->sym_ptr_ptr), reloc->howto->name, reloc->addend, input_section->owner, input_section, reloc->address))) abort (); @@ -716,7 +717,8 @@ h8300_reloc16_extra_cases (bfd *abfd, struct bfd_link_info *link_info, if (gap > 32766 || gap < -32768) { if (! ((*link_info->callbacks->reloc_overflow) - (link_info, bfd_asymbol_name (*reloc->sym_ptr_ptr), + (link_info, NULL, + bfd_asymbol_name (*reloc->sym_ptr_ptr), reloc->howto->name, reloc->addend, input_section->owner, input_section, reloc->address))) abort (); @@ -805,7 +807,8 @@ h8300_reloc16_extra_cases (bfd *abfd, struct bfd_link_info *link_info, else { if (! ((*link_info->callbacks->reloc_overflow) - (link_info, bfd_asymbol_name (*reloc->sym_ptr_ptr), + (link_info, NULL, + bfd_asymbol_name (*reloc->sym_ptr_ptr), reloc->howto->name, reloc->addend, input_section->owner, input_section, reloc->address))) abort (); @@ -828,7 +831,8 @@ h8300_reloc16_extra_cases (bfd *abfd, struct bfd_link_info *link_info, if (gap < -128 || gap > 126) { if (! ((*link_info->callbacks->reloc_overflow) - (link_info, bfd_asymbol_name (*reloc->sym_ptr_ptr), + (link_info, NULL, + bfd_asymbol_name (*reloc->sym_ptr_ptr), reloc->howto->name, reloc->addend, input_section->owner, input_section, reloc->address))) abort (); @@ -874,7 +878,8 @@ h8300_reloc16_extra_cases (bfd *abfd, struct bfd_link_info *link_info, if (gap < -128 || gap > 126) { if (! ((*link_info->callbacks->reloc_overflow) - (link_info, bfd_asymbol_name (*reloc->sym_ptr_ptr), + (link_info, NULL, + bfd_asymbol_name (*reloc->sym_ptr_ptr), reloc->howto->name, reloc->addend, input_section->owner, input_section, reloc->address))) abort (); @@ -1073,7 +1078,8 @@ h8300_reloc16_extra_cases (bfd *abfd, struct bfd_link_info *link_info, if (gap < -128 || gap > 126) { if (! ((*link_info->callbacks->reloc_overflow) - (link_info, bfd_asymbol_name (*reloc->sym_ptr_ptr), + (link_info, NULL, + bfd_asymbol_name (*reloc->sym_ptr_ptr), reloc->howto->name, reloc->addend, input_section->owner, input_section, reloc->address))) abort (); @@ -1155,7 +1161,8 @@ h8300_reloc16_extra_cases (bfd *abfd, struct bfd_link_info *link_info, else { if (! ((*link_info->callbacks->reloc_overflow) - (link_info, bfd_asymbol_name (*reloc->sym_ptr_ptr), + (link_info, NULL, + bfd_asymbol_name (*reloc->sym_ptr_ptr), reloc->howto->name, reloc->addend, input_section->owner, input_section, reloc->address))) abort (); diff --git a/bfd/coff-h8500.c b/bfd/coff-h8500.c index a94e4a30ec..3c5cf2295b 100644 --- a/bfd/coff-h8500.c +++ b/bfd/coff-h8500.c @@ -254,7 +254,8 @@ extra_case (in_abfd, link_info, link_order, reloc, data, src_ptr, dst_ptr) if (gap > 128 || gap < -128) { if (! ((*link_info->callbacks->reloc_overflow) - (link_info, bfd_asymbol_name (*reloc->sym_ptr_ptr), + (link_info, NULL, + bfd_asymbol_name (*reloc->sym_ptr_ptr), reloc->howto->name, reloc->addend, input_section->owner, input_section, reloc->address))) abort (); @@ -277,7 +278,8 @@ extra_case (in_abfd, link_info, link_order, reloc, data, src_ptr, dst_ptr) if (gap > 32767 || gap < -32768) { if (! ((*link_info->callbacks->reloc_overflow) - (link_info, bfd_asymbol_name (*reloc->sym_ptr_ptr), + (link_info, NULL, + bfd_asymbol_name (*reloc->sym_ptr_ptr), reloc->howto->name, reloc->addend, input_section->owner, input_section, reloc->address))) abort (); diff --git a/bfd/coff-i960.c b/bfd/coff-i960.c index 3a04753dcd..62b8a92af1 100644 --- a/bfd/coff-i960.c +++ b/bfd/coff-i960.c @@ -555,7 +555,7 @@ coff_i960_relocate_section (output_bfd, info, input_bfd, input_section, if (symndx == -1) name = "*ABS*"; else if (h != NULL) - name = h->root.root.string; + name = NULL; else { name = _bfd_coff_internal_syment_name (input_bfd, sym, buf); @@ -564,8 +564,9 @@ coff_i960_relocate_section (output_bfd, info, input_bfd, input_section, } if (! ((*info->callbacks->reloc_overflow) - (info, name, howto->name, (bfd_vma) 0, input_bfd, - input_section, rel->r_vaddr - input_section->vma))) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_vaddr - input_section->vma))) return FALSE; } } diff --git a/bfd/coff-mcore.c b/bfd/coff-mcore.c index 7e0b28c5b7..865e3980a7 100644 --- a/bfd/coff-mcore.c +++ b/bfd/coff-mcore.c @@ -556,7 +556,7 @@ coff_mcore_relocate_section (output_bfd, info, input_bfd, input_section, case bfd_reloc_overflow: if (! ((*info->callbacks->reloc_overflow) - (info, my_name, howto->name, + (info, (h ? &h->root : NULL), my_name, howto->name, (bfd_vma) 0, input_bfd, input_section, rel->r_vaddr - input_section->vma))) return FALSE; diff --git a/bfd/coff-mips.c b/bfd/coff-mips.c index 39f7f22b8f..d89db54c3b 100644 --- a/bfd/coff-mips.c +++ b/bfd/coff-mips.c @@ -1261,12 +1261,12 @@ mips_relocate_section (output_bfd, info, input_bfd, input_section, const char *name; if (int_rel.r_extern) - name = h->root.root.string; + name = NULL; else name = bfd_section_name (input_bfd, s); if (! ((*info->callbacks->reloc_overflow) - (info, name, howto->name, (bfd_vma) 0, - input_bfd, input_section, + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, int_rel.r_vaddr - input_section->vma))) return FALSE; } diff --git a/bfd/coff-or32.c b/bfd/coff-or32.c index b21cdf3f4a..af30afdb7f 100644 --- a/bfd/coff-or32.c +++ b/bfd/coff-or32.c @@ -545,7 +545,7 @@ coff_or32_relocate_section (output_bfd, info, input_bfd, input_section, if (symndx == -1) name = "*ABS*"; else if (h != NULL) - name = h->root.root.string; + name = NULL; else if (sym == NULL) name = "*unknown*"; else if (sym->_n._n_n._n_zeroes == 0 @@ -559,9 +559,9 @@ coff_or32_relocate_section (output_bfd, info, input_bfd, input_section, } if (! ((*info->callbacks->reloc_overflow) - (info, name, howto_table[rel->r_type].name, (bfd_vma) 0, - input_bfd, input_section, - rel->r_vaddr - input_section->vma))) + (info, (h ? &h->root : NULL), name, + howto_table[rel->r_type].name, (bfd_vma) 0, input_bfd, + input_section, rel->r_vaddr - input_section->vma))) return FALSE; } } diff --git a/bfd/coff-ppc.c b/bfd/coff-ppc.c index 38d0099748..28d7985bfe 100644 --- a/bfd/coff-ppc.c +++ b/bfd/coff-ppc.c @@ -1563,7 +1563,7 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section, if (symndx == -1) name = "*ABS*"; else if (h != NULL) - name = h->root.root.root.string; + name = NULL; else if (sym == NULL) name = "*unknown*"; else if (sym->_n._n_n._n_zeroes == 0 @@ -1577,7 +1577,7 @@ coff_ppc_relocate_section (output_bfd, info, input_bfd, input_section, } if (! ((*info->callbacks->reloc_overflow) - (info, name, howto->name, + (info, (h ? &h->root.root : NULL), name, howto->name, (bfd_vma) 0, input_bfd, input_section, rel->r_vaddr - input_section->vma))) return FALSE; diff --git a/bfd/coff-rs6000.c b/bfd/coff-rs6000.c index d1df0a2d42..1257fbb143 100644 --- a/bfd/coff-rs6000.c +++ b/bfd/coff-rs6000.c @@ -3481,7 +3481,7 @@ xcoff_ppc_relocate_section (output_bfd, info, input_bfd, } else if (h != NULL) { - name = h->root.root.string; + name = NULL; } else { @@ -3492,8 +3492,9 @@ xcoff_ppc_relocate_section (output_bfd, info, input_bfd, sprintf (reloc_type_name, "0x%02x", rel->r_type); if (! ((*info->callbacks->reloc_overflow) - (info, name, reloc_type_name, (bfd_vma) 0, input_bfd, - input_section, rel->r_vaddr - input_section->vma))) + (info, (h ? &h->root : NULL), name, reloc_type_name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_vaddr - input_section->vma))) return FALSE; } diff --git a/bfd/coff-sh.c b/bfd/coff-sh.c index ce9ae94aa1..93d0da1df8 100644 --- a/bfd/coff-sh.c +++ b/bfd/coff-sh.c @@ -2946,7 +2946,7 @@ sh_relocate_section (output_bfd, info, input_bfd, input_section, contents, if (symndx == -1) name = "*ABS*"; else if (h != NULL) - name = h->root.root.string; + name = NULL; else if (sym->_n._n_n._n_zeroes == 0 && sym->_n._n_n._n_offset != 0) name = obj_coff_strings (input_bfd) + sym->_n._n_n._n_offset; @@ -2958,8 +2958,9 @@ sh_relocate_section (output_bfd, info, input_bfd, input_section, contents, } if (! ((*info->callbacks->reloc_overflow) - (info, name, howto->name, (bfd_vma) 0, input_bfd, - input_section, rel->r_vaddr - input_section->vma))) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_vaddr - input_section->vma))) return FALSE; } } diff --git a/bfd/coff-tic80.c b/bfd/coff-tic80.c index 50f43041ec..30da206f37 100644 --- a/bfd/coff-tic80.c +++ b/bfd/coff-tic80.c @@ -695,7 +695,7 @@ coff_tic80_relocate_section (output_bfd, info, input_bfd, if (symndx == -1) name = "*ABS*"; else if (h != NULL) - name = h->root.root.string; + name = NULL; else { name = _bfd_coff_internal_syment_name (input_bfd, sym, buf); @@ -704,8 +704,9 @@ coff_tic80_relocate_section (output_bfd, info, input_bfd, } if (! ((*info->callbacks->reloc_overflow) - (info, name, howto->name, (bfd_vma) 0, input_bfd, - input_section, rel->r_vaddr - input_section->vma))) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_vaddr - input_section->vma))) return FALSE; } } diff --git a/bfd/coff-w65.c b/bfd/coff-w65.c index 63634b70e9..cbc2179506 100644 --- a/bfd/coff-w65.c +++ b/bfd/coff-w65.c @@ -324,7 +324,8 @@ w65_reloc16_extra_cases (abfd, link_info, link_order, reloc, data, src_ptr, if (gap < -128 || gap > 127) { if (! ((*link_info->callbacks->reloc_overflow) - (link_info, bfd_asymbol_name (*reloc->sym_ptr_ptr), + (link_info, NULL, + bfd_asymbol_name (*reloc->sym_ptr_ptr), reloc->howto->name, reloc->addend, input_section->owner, input_section, reloc->address))) abort (); @@ -348,7 +349,8 @@ w65_reloc16_extra_cases (abfd, link_info, link_order, reloc, data, src_ptr, if ((gap & 0xf0000) != (dot & 0xf0000)) { if (! ((*link_info->callbacks->reloc_overflow) - (link_info, bfd_asymbol_name (*reloc->sym_ptr_ptr), + (link_info, NULL, + bfd_asymbol_name (*reloc->sym_ptr_ptr), reloc->howto->name, reloc->addend, input_section->owner, input_section, reloc->address))) abort (); diff --git a/bfd/coff-z8k.c b/bfd/coff-z8k.c index cf4da77c29..5fd09e0457 100644 --- a/bfd/coff-z8k.c +++ b/bfd/coff-z8k.c @@ -233,7 +233,8 @@ extra_case (bfd *in_abfd, if (gap > 128 || gap < -128) { if (! ((*link_info->callbacks->reloc_overflow) - (link_info, bfd_asymbol_name (*reloc->sym_ptr_ptr), + (link_info, NULL, + bfd_asymbol_name (*reloc->sym_ptr_ptr), reloc->howto->name, reloc->addend, input_section->owner, input_section, reloc->address))) abort (); @@ -261,7 +262,8 @@ extra_case (bfd *in_abfd, if (gap > 0 || gap < -127) { if (! ((*link_info->callbacks->reloc_overflow) - (link_info, bfd_asymbol_name (*reloc->sym_ptr_ptr), + (link_info, NULL, + bfd_asymbol_name (*reloc->sym_ptr_ptr), reloc->howto->name, reloc->addend, input_section->owner, input_section, reloc->address))) abort (); @@ -288,7 +290,8 @@ extra_case (bfd *in_abfd, if (gap > 4096 || gap < -4095) { if (! ((*link_info->callbacks->reloc_overflow) - (link_info, bfd_asymbol_name (*reloc->sym_ptr_ptr), + (link_info, NULL, + bfd_asymbol_name (*reloc->sym_ptr_ptr), reloc->howto->name, reloc->addend, input_section->owner, input_section, reloc->address))) abort (); @@ -314,7 +317,8 @@ extra_case (bfd *in_abfd, if (gap > 32767 || gap < -32768) { if (! ((*link_info->callbacks->reloc_overflow) - (link_info, bfd_asymbol_name (*reloc->sym_ptr_ptr), + (link_info, NULL, + bfd_asymbol_name (*reloc->sym_ptr_ptr), reloc->howto->name, reloc->addend, input_section->owner, input_section, reloc->address))) abort (); diff --git a/bfd/coff64-rs6000.c b/bfd/coff64-rs6000.c index b33658a885..c4dd1d8e15 100644 --- a/bfd/coff64-rs6000.c +++ b/bfd/coff64-rs6000.c @@ -1335,7 +1335,7 @@ xcoff64_ppc_relocate_section (output_bfd, info, input_bfd, } else if (h != NULL) { - name = h->root.root.string; + name = NULL; } else { @@ -1346,8 +1346,9 @@ xcoff64_ppc_relocate_section (output_bfd, info, input_bfd, sprintf (reloc_type_name, "0x%02x", rel->r_type); if (! ((*info->callbacks->reloc_overflow) - (info, name, reloc_type_name, (bfd_vma) 0, input_bfd, - input_section, rel->r_vaddr - input_section->vma))) + (info, (h ? &h->root : NULL), name, reloc_type_name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_vaddr - input_section->vma))) return FALSE; } diff --git a/bfd/cofflink.c b/bfd/cofflink.c index ca144cc492..c277b85800 100644 --- a/bfd/cofflink.c +++ b/bfd/cofflink.c @@ -2735,7 +2735,7 @@ _bfd_coff_reloc_link_order (bfd *output_bfd, abort (); case bfd_reloc_overflow: if (! ((*finfo->info->callbacks->reloc_overflow) - (finfo->info, + (finfo->info, NULL, (link_order->type == bfd_section_reloc_link_order ? bfd_section_name (output_bfd, link_order->u.reloc.p->u.section) @@ -3016,7 +3016,7 @@ _bfd_coff_generic_relocate_section (bfd *output_bfd, if (symndx == -1) name = "*ABS*"; else if (h != NULL) - name = h->root.root.string; + name = NULL; else { name = _bfd_coff_internal_syment_name (input_bfd, sym, buf); @@ -3025,8 +3025,9 @@ _bfd_coff_generic_relocate_section (bfd *output_bfd, } if (! ((*info->callbacks->reloc_overflow) - (info, name, howto->name, (bfd_vma) 0, input_bfd, - input_section, rel->r_vaddr - input_section->vma))) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_vaddr - input_section->vma))) return FALSE; } } diff --git a/bfd/ecoff.c b/bfd/ecoff.c index b94de12abb..74306f1ad1 100644 --- a/bfd/ecoff.c +++ b/bfd/ecoff.c @@ -4697,7 +4697,7 @@ ecoff_reloc_link_order (output_bfd, info, output_section, link_order) abort (); case bfd_reloc_overflow: if (! ((*info->callbacks->reloc_overflow) - (info, + (info, NULL, (link_order->type == bfd_section_reloc_link_order ? bfd_section_name (output_bfd, section) : link_order->u.reloc.p->u.name), diff --git a/bfd/elf-hppa.h b/bfd/elf-hppa.h index a6d3d691f1..415ad30ada 100644 --- a/bfd/elf-hppa.h +++ b/bfd/elf-hppa.h @@ -1338,7 +1338,6 @@ elf_hppa_relocate_section (bfd *output_bfd, asection *sym_sec; bfd_vma relocation; bfd_reloc_status_type r; - const char *sym_name; const char *dyn_name; char *dynh_buf = NULL; size_t dynh_buflen = 0; @@ -1463,19 +1462,6 @@ elf_hppa_relocate_section (bfd *output_bfd, } } - if (h != NULL) - sym_name = h->root.root.string; - else - { - sym_name = bfd_elf_string_from_elf_section (input_bfd, - symtab_hdr->sh_link, - sym->st_name); - if (sym_name == NULL) - return FALSE; - if (*sym_name == '\0') - sym_name = bfd_section_name (input_bfd, sym_sec); - } - r = elf_hppa_final_link_relocate (rel, input_bfd, output_bfd, input_section, contents, relocation, info, sym_sec, @@ -1489,9 +1475,25 @@ elf_hppa_relocate_section (bfd *output_bfd, abort (); case bfd_reloc_overflow: { + const char *sym_name; + + if (h != NULL) + sym_name = NULL; + else + { + sym_name = bfd_elf_string_from_elf_section (input_bfd, + symtab_hdr->sh_link, + sym->st_name); + if (sym_name == NULL) + return FALSE; + if (*sym_name == '\0') + sym_name = bfd_section_name (input_bfd, sym_sec); + } + if (!((*info->callbacks->reloc_overflow) - (info, sym_name, howto->name, (bfd_vma) 0, - input_bfd, input_section, rel->r_offset))) + (info, (h ? &h->root : NULL), sym_name, + howto->name, (bfd_vma) 0, input_bfd, + input_section, rel->r_offset))) return FALSE; } break; diff --git a/bfd/elf-m10200.c b/bfd/elf-m10200.c index c9e32be102..7fb44754dd 100644 --- a/bfd/elf-m10200.c +++ b/bfd/elf-m10200.c @@ -410,8 +410,9 @@ mn10200_elf_relocate_section (output_bfd, info, input_bfd, input_section, { case bfd_reloc_overflow: if (! ((*info->callbacks->reloc_overflow) - (info, name, howto->name, (bfd_vma) 0, - input_bfd, input_section, rel->r_offset))) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_offset))) return FALSE; break; diff --git a/bfd/elf-m10300.c b/bfd/elf-m10300.c index d882eb4f77..4470387890 100644 --- a/bfd/elf-m10300.c +++ b/bfd/elf-m10300.c @@ -1510,8 +1510,9 @@ mn10300_elf_relocate_section (output_bfd, info, input_bfd, input_section, { case bfd_reloc_overflow: if (! ((*info->callbacks->reloc_overflow) - (info, name, howto->name, (bfd_vma) 0, - input_bfd, input_section, rel->r_offset))) + (info, (h ? &h->root.root : NULL), name, + howto->name, (bfd_vma) 0, input_bfd, + input_section, rel->r_offset))) return FALSE; break; diff --git a/bfd/elf32-arm.h b/bfd/elf32-arm.h index 88636d2c05..0d9ae49ca3 100644 --- a/bfd/elf32-arm.h +++ b/bfd/elf32-arm.h @@ -2265,8 +2265,9 @@ elf32_arm_relocate_section (bfd * output_bfd, if ((! h || h->root.type != bfd_link_hash_undefined) && (!((*info->callbacks->reloc_overflow) - (info, name, howto->name, (bfd_vma) 0, - input_bfd, input_section, rel->r_offset)))) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_offset)))) return FALSE; break; diff --git a/bfd/elf32-avr.c b/bfd/elf32-avr.c index 06e398b542..1026bfb15c 100644 --- a/bfd/elf32-avr.c +++ b/bfd/elf32-avr.c @@ -736,7 +736,7 @@ elf32_avr_relocate_section (output_bfd, info, input_bfd, input_section, struct elf_link_hash_entry * h; bfd_vma relocation; bfd_reloc_status_type r; - const char * name = NULL; + const char * name; int r_type; /* This is a final link. */ @@ -765,6 +765,8 @@ elf32_avr_relocate_section (output_bfd, info, input_bfd, input_section, r_symndx, symtab_hdr, sym_hashes, h, sec, relocation, unresolved_reloc, warned); + + name = h->root.root.string; } r = avr_final_link_relocate (howto, input_bfd, input_section, @@ -778,7 +780,8 @@ elf32_avr_relocate_section (output_bfd, info, input_bfd, input_section, { case bfd_reloc_overflow: r = info->callbacks->reloc_overflow - (info, name, howto->name, (bfd_vma) 0, + (info, (h ? &h->root : NULL), + name, howto->name, (bfd_vma) 0, input_bfd, input_section, rel->r_offset); break; diff --git a/bfd/elf32-cr16c.c b/bfd/elf32-cr16c.c index e722335601..8c579e519b 100644 --- a/bfd/elf32-cr16c.c +++ b/bfd/elf32-cr16c.c @@ -754,8 +754,9 @@ elf32_cr16c_relocate_section (bfd *output_bfd, { case bfd_reloc_overflow: if (!((*info->callbacks->reloc_overflow) - (info, name, howto->name, (bfd_vma) 0, - input_bfd, input_section, rel->r_offset))) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_offset))) return FALSE; break; diff --git a/bfd/elf32-cris.c b/bfd/elf32-cris.c index f0c88dcc6d..ad93071f97 100644 --- a/bfd/elf32-cris.c +++ b/bfd/elf32-cris.c @@ -1357,8 +1357,8 @@ cris_elf_relocate_section (output_bfd, info, input_bfd, input_section, { case bfd_reloc_overflow: r = info->callbacks->reloc_overflow - (info, symname, howto->name, (bfd_vma) 0, - input_bfd, input_section, rel->r_offset); + (info, (h ? &h->root : NULL), symname, howto->name, + (bfd_vma) 0, input_bfd, input_section, rel->r_offset); break; case bfd_reloc_undefined: diff --git a/bfd/elf32-crx.c b/bfd/elf32-crx.c index 79b9c64fea..50d2ea1ef1 100644 --- a/bfd/elf32-crx.c +++ b/bfd/elf32-crx.c @@ -868,8 +868,9 @@ elf32_crx_relocate_section (bfd *output_bfd, struct bfd_link_info *info, { case bfd_reloc_overflow: if (!((*info->callbacks->reloc_overflow) - (info, name, howto->name, (bfd_vma) 0, - input_bfd, input_section, rel->r_offset))) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_offset))) return FALSE; break; diff --git a/bfd/elf32-d10v.c b/bfd/elf32-d10v.c index e845a254e4..87ae582788 100644 --- a/bfd/elf32-d10v.c +++ b/bfd/elf32-d10v.c @@ -547,8 +547,9 @@ elf32_d10v_relocate_section (output_bfd, info, input_bfd, input_section, { case bfd_reloc_overflow: if (!((*info->callbacks->reloc_overflow) - (info, name, howto->name, (bfd_vma) 0, - input_bfd, input_section, rel->r_offset))) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_offset))) return FALSE; break; diff --git a/bfd/elf32-fr30.c b/bfd/elf32-fr30.c index 5f70e3f186..3cf87452e5 100644 --- a/bfd/elf32-fr30.c +++ b/bfd/elf32-fr30.c @@ -532,7 +532,7 @@ fr30_elf_relocate_section (output_bfd, info, input_bfd, input_section, struct elf_link_hash_entry *h; bfd_vma relocation; bfd_reloc_status_type r; - const char *name = NULL; + const char *name; int r_type; r_type = ELF32_R_TYPE (rel->r_info); @@ -572,6 +572,8 @@ fr30_elf_relocate_section (output_bfd, info, input_bfd, input_section, r_symndx, symtab_hdr, sym_hashes, h, sec, relocation, unresolved_reloc, warned); + + name = h->root.root.string; } r = fr30_final_link_relocate (howto, input_bfd, input_section, @@ -585,8 +587,8 @@ fr30_elf_relocate_section (output_bfd, info, input_bfd, input_section, { case bfd_reloc_overflow: r = info->callbacks->reloc_overflow - (info, name, howto->name, (bfd_vma) 0, - input_bfd, input_section, rel->r_offset); + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, rel->r_offset); break; case bfd_reloc_undefined: diff --git a/bfd/elf32-frv.c b/bfd/elf32-frv.c index 53deac7d09..9564671af7 100644 --- a/bfd/elf32-frv.c +++ b/bfd/elf32-frv.c @@ -2544,8 +2544,8 @@ elf32_frv_relocate_section (output_bfd, info, input_bfd, input_section, { case bfd_reloc_overflow: r = info->callbacks->reloc_overflow - (info, name, howto->name, (bfd_vma) 0, - input_bfd, input_section, rel->r_offset); + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, rel->r_offset); break; case bfd_reloc_undefined: diff --git a/bfd/elf32-h8300.c b/bfd/elf32-h8300.c index 3daef62c93..d4deac6c27 100644 --- a/bfd/elf32-h8300.c +++ b/bfd/elf32-h8300.c @@ -477,8 +477,9 @@ elf32_h8_relocate_section (bfd *output_bfd, struct bfd_link_info *info, { case bfd_reloc_overflow: if (! ((*info->callbacks->reloc_overflow) - (info, name, howto->name, (bfd_vma) 0, - input_bfd, input_section, rel->r_offset))) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_offset))) return FALSE; break; diff --git a/bfd/elf32-hppa.c b/bfd/elf32-hppa.c index dbe6d06553..00fd99048c 100644 --- a/bfd/elf32-hppa.c +++ b/bfd/elf32-hppa.c @@ -3819,8 +3819,8 @@ elf32_hppa_relocate_section (bfd *output_bfd, else { if (!((*info->callbacks->reloc_overflow) - (info, sym_name, howto->name, 0, input_bfd, input_section, - rel->r_offset))) + (info, (h ? &h->elf.root : NULL), sym_name, howto->name, + (bfd_vma) 0, input_bfd, input_section, rel->r_offset))) return FALSE; } } diff --git a/bfd/elf32-i370.c b/bfd/elf32-i370.c index 18d4a2558e..f4cd9c15c8 100644 --- a/bfd/elf32-i370.c +++ b/bfd/elf32-i370.c @@ -1438,7 +1438,7 @@ i370_elf_relocate_section (output_bfd, info, input_bfd, input_section, const char *name; if (h != NULL) - name = h->root.root.string; + name = NULL; else { name = bfd_elf_string_from_elf_section (input_bfd, @@ -1452,6 +1452,7 @@ i370_elf_relocate_section (output_bfd, info, input_bfd, input_section, } (*info->callbacks->reloc_overflow) (info, + (h ? &h->root : NULL), name, howto->name, (bfd_vma) 0, diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index 5763acc00e..bca9f5fae7 100644 --- a/bfd/elf32-i386.c +++ b/bfd/elf32-i386.c @@ -2941,8 +2941,9 @@ elf_i386_relocate_section (bfd *output_bfd, if (r == bfd_reloc_overflow) { if (! ((*info->callbacks->reloc_overflow) - (info, name, howto->name, 0, - input_bfd, input_section, rel->r_offset))) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_offset))) return FALSE; } else diff --git a/bfd/elf32-i860.c b/bfd/elf32-i860.c index 010ac2e761..a5499a2881 100644 --- a/bfd/elf32-i860.c +++ b/bfd/elf32-i860.c @@ -1183,8 +1183,8 @@ elf32_i860_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, { case bfd_reloc_overflow: r = info->callbacks->reloc_overflow - (info, name, howto->name, (bfd_vma) 0, - input_bfd, input_section, rel->r_offset); + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, rel->r_offset); break; case bfd_reloc_undefined: diff --git a/bfd/elf32-ip2k.c b/bfd/elf32-ip2k.c index 758842b837..70c05abaef 100644 --- a/bfd/elf32-ip2k.c +++ b/bfd/elf32-ip2k.c @@ -1545,8 +1545,8 @@ ip2k_elf_relocate_section (output_bfd, info, input_bfd, input_section, { case bfd_reloc_overflow: r = info->callbacks->reloc_overflow - (info, name, howto->name, (bfd_vma) 0, - input_bfd, input_section, rel->r_offset); + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, rel->r_offset); break; case bfd_reloc_undefined: diff --git a/bfd/elf32-iq2000.c b/bfd/elf32-iq2000.c index 60dab3483c..bb2df9f5c8 100644 --- a/bfd/elf32-iq2000.c +++ b/bfd/elf32-iq2000.c @@ -653,8 +653,8 @@ iq2000_elf_relocate_section (output_bfd, info, input_bfd, input_section, { case bfd_reloc_overflow: r = info->callbacks->reloc_overflow - (info, name, howto->name, (bfd_vma) 0, - input_bfd, input_section, rel->r_offset); + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, rel->r_offset); break; case bfd_reloc_undefined: diff --git a/bfd/elf32-m32r.c b/bfd/elf32-m32r.c index fd259cd201..3b1cf26572 100644 --- a/bfd/elf32-m32r.c +++ b/bfd/elf32-m32r.c @@ -3236,8 +3236,8 @@ m32r_elf_relocate_section (output_bfd, info, input_bfd, input_section, { case bfd_reloc_overflow: if (! ((*info->callbacks->reloc_overflow) - (info, name, howto->name, (bfd_vma) 0, - input_bfd, input_section, offset))) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, offset))) return FALSE; break; diff --git a/bfd/elf32-m68hc1x.c b/bfd/elf32-m68hc1x.c index 01529430a8..eeab9d53f4 100644 --- a/bfd/elf32-m68hc1x.c +++ b/bfd/elf32-m68hc1x.c @@ -1173,7 +1173,7 @@ elf32_m68hc11_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, { case bfd_reloc_overflow: if (!((*info->callbacks->reloc_overflow) - (info, name, howto->name, (bfd_vma) 0, + (info, NULL, name, howto->name, (bfd_vma) 0, input_bfd, input_section, rel->r_offset))) return FALSE; break; diff --git a/bfd/elf32-m68k.c b/bfd/elf32-m68k.c index f1c6ea7931..42a3764d9b 100644 --- a/bfd/elf32-m68k.c +++ b/bfd/elf32-m68k.c @@ -1731,8 +1731,9 @@ elf_m68k_relocate_section (output_bfd, info, input_bfd, input_section, if (r == bfd_reloc_overflow) { if (!(info->callbacks->reloc_overflow - (info, name, howto->name, (bfd_vma) 0, - input_bfd, input_section, rel->r_offset))) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_offset))) return FALSE; } else diff --git a/bfd/elf32-mcore.c b/bfd/elf32-mcore.c index b51649c4b9..4d11bb00e9 100644 --- a/bfd/elf32-mcore.c +++ b/bfd/elf32-mcore.c @@ -520,7 +520,7 @@ mcore_elf_relocate_section (output_bfd, info, input_bfd, input_section, const char * name; if (h != NULL) - name = h->root.root.string; + name = NULL; else { name = bfd_elf_string_from_elf_section @@ -534,8 +534,8 @@ mcore_elf_relocate_section (output_bfd, info, input_bfd, input_section, } (*info->callbacks->reloc_overflow) - (info, name, howto->name, (bfd_vma) 0, input_bfd, input_section, - offset); + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, offset); } break; } diff --git a/bfd/elf32-msp430.c b/bfd/elf32-msp430.c index ba59cf7f87..ac38fec494 100644 --- a/bfd/elf32-msp430.c +++ b/bfd/elf32-msp430.c @@ -489,8 +489,9 @@ elf32_msp430_relocate_section (bfd * output_bfd ATTRIBUTE_UNUSED, { case bfd_reloc_overflow: r = info->callbacks->reloc_overflow - (info, name, howto->name, (bfd_vma) 0, - input_bfd, input_section, rel->r_offset); + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_offset); break; case bfd_reloc_undefined: diff --git a/bfd/elf32-openrisc.c b/bfd/elf32-openrisc.c index af1c2221f8..af20dcf97b 100644 --- a/bfd/elf32-openrisc.c +++ b/bfd/elf32-openrisc.c @@ -402,8 +402,8 @@ openrisc_elf_relocate_section (output_bfd, info, input_bfd, input_section, { case bfd_reloc_overflow: r = info->callbacks->reloc_overflow - (info, name, howto->name, (bfd_vma) 0, - input_bfd, input_section, rel->r_offset); + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, rel->r_offset); break; case bfd_reloc_undefined: diff --git a/bfd/elf32-ppc.c b/bfd/elf32-ppc.c index edc4efc1b9..0605da64f9 100644 --- a/bfd/elf32-ppc.c +++ b/bfd/elf32-ppc.c @@ -5746,6 +5746,7 @@ ppc_elf_relocate_section (bfd *output_bfd, } if (! (*info->callbacks->reloc_overflow) (info, + (h ? &h->root : NULL), sym_name, howto->name, rel->r_addend, diff --git a/bfd/elf32-s390.c b/bfd/elf32-s390.c index 65c27e0220..4bf34faeb7 100644 --- a/bfd/elf32-s390.c +++ b/bfd/elf32-s390.c @@ -3029,8 +3029,9 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section, { if (! ((*info->callbacks->reloc_overflow) - (info, name, howto->name, (bfd_vma) 0, - input_bfd, input_section, rel->r_offset))) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_offset))) return FALSE; } else diff --git a/bfd/elf32-sh.c b/bfd/elf32-sh.c index 4304a4ec40..de827f39f0 100644 --- a/bfd/elf32-sh.c +++ b/bfd/elf32-sh.c @@ -5848,7 +5848,7 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, const char *name; if (h != NULL) - name = h->root.root.string; + name = NULL; else { name = (bfd_elf_string_from_elf_section @@ -5859,8 +5859,9 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, name = bfd_section_name (input_bfd, sec); } if (! ((*info->callbacks->reloc_overflow) - (info, name, howto->name, (bfd_vma) 0, - input_bfd, input_section, rel->r_offset))) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_offset))) return FALSE; } break; diff --git a/bfd/elf32-sparc.c b/bfd/elf32-sparc.c index c44a50a1d3..378f14db4b 100644 --- a/bfd/elf32-sparc.c +++ b/bfd/elf32-sparc.c @@ -3014,7 +3014,7 @@ elf32_sparc_relocate_section (output_bfd, info, input_bfd, input_section, const char *name; if (h != NULL) - name = h->root.root.string; + name = NULL; else { name = bfd_elf_string_from_elf_section (input_bfd, @@ -3026,8 +3026,9 @@ elf32_sparc_relocate_section (output_bfd, info, input_bfd, input_section, name = bfd_section_name (input_bfd, sec); } if (! ((*info->callbacks->reloc_overflow) - (info, name, howto->name, (bfd_vma) 0, - input_bfd, input_section, rel->r_offset))) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_offset))) return FALSE; } break; diff --git a/bfd/elf32-v850.c b/bfd/elf32-v850.c index 763220acce..09eb1ab65a 100644 --- a/bfd/elf32-v850.c +++ b/bfd/elf32-v850.c @@ -1729,8 +1729,9 @@ v850_elf_relocate_section (output_bfd, info, input_bfd, input_section, { case bfd_reloc_overflow: if (! ((*info->callbacks->reloc_overflow) - (info, name, howto->name, (bfd_vma) 0, - input_bfd, input_section, rel->r_offset))) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_offset))) return FALSE; break; diff --git a/bfd/elf32-vax.c b/bfd/elf32-vax.c index 9a8f040743..6d5493b240 100644 --- a/bfd/elf32-vax.c +++ b/bfd/elf32-vax.c @@ -1814,7 +1814,7 @@ elf_vax_relocate_section (output_bfd, info, input_bfd, input_section, const char *name; if (h != NULL) - name = h->root.root.string; + name = NULL; else { name = bfd_elf_string_from_elf_section (input_bfd, @@ -1826,8 +1826,9 @@ elf_vax_relocate_section (output_bfd, info, input_bfd, input_section, name = bfd_section_name (input_bfd, sec); } if (!(info->callbacks->reloc_overflow - (info, name, howto->name, (bfd_vma) 0, - input_bfd, input_section, rel->r_offset))) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_offset))) return FALSE; } break; diff --git a/bfd/elf32-xstormy16.c b/bfd/elf32-xstormy16.c index 8c96348ac4..9d8635aa03 100644 --- a/bfd/elf32-xstormy16.c +++ b/bfd/elf32-xstormy16.c @@ -940,8 +940,8 @@ xstormy16_elf_relocate_section (output_bfd, info, input_bfd, input_section, { case bfd_reloc_overflow: r = info->callbacks->reloc_overflow - (info, name, howto->name, (bfd_vma) 0, - input_bfd, input_section, rel->r_offset); + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, rel->r_offset); break; case bfd_reloc_undefined: diff --git a/bfd/elf64-alpha.c b/bfd/elf64-alpha.c index 6480612651..a55ebe6d15 100644 --- a/bfd/elf64-alpha.c +++ b/bfd/elf64-alpha.c @@ -4802,7 +4802,7 @@ elf64_alpha_relocate_section (output_bfd, info, input_bfd, input_section, break; if (h != NULL) - name = h->root.root.root.string; + name = NULL; else { name = (bfd_elf_string_from_elf_section @@ -4813,8 +4813,9 @@ elf64_alpha_relocate_section (output_bfd, info, input_bfd, input_section, name = bfd_section_name (input_bfd, sec); } if (! ((*info->callbacks->reloc_overflow) - (info, name, howto->name, (bfd_vma) 0, - input_bfd, input_section, rel->r_offset))) + (info, (h ? &h->root.root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_offset))) ret_val = FALSE; } break; diff --git a/bfd/elf64-mmix.c b/bfd/elf64-mmix.c index 777b5fe770..8a4bea251f 100644 --- a/bfd/elf64-mmix.c +++ b/bfd/elf64-mmix.c @@ -1500,8 +1500,8 @@ mmix_elf_relocate_section (output_bfd, info, input_bfd, input_section, { case bfd_reloc_overflow: check_ok = info->callbacks->reloc_overflow - (info, name, howto->name, (bfd_vma) 0, - input_bfd, input_section, rel->r_offset); + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, rel->r_offset); break; case bfd_reloc_undefined: diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c index db0bc8f53b..c21d0272d8 100644 --- a/bfd/elf64-ppc.c +++ b/bfd/elf64-ppc.c @@ -9963,7 +9963,8 @@ ppc64_elf_relocate_section (bfd *output_bfd, } if (!((*info->callbacks->reloc_overflow) - (info, sym_name, ppc64_elf_howto_table[r_type]->name, + (info, (h ? &h->elf.root : NULL), sym_name, + ppc64_elf_howto_table[r_type]->name, rel->r_addend, input_bfd, input_section, rel->r_offset))) return FALSE; } diff --git a/bfd/elf64-s390.c b/bfd/elf64-s390.c index 796c4f7c53..b428233e46 100644 --- a/bfd/elf64-s390.c +++ b/bfd/elf64-s390.c @@ -3026,8 +3026,9 @@ elf_s390_relocate_section (output_bfd, info, input_bfd, input_section, { if (! ((*info->callbacks->reloc_overflow) - (info, name, howto->name, (bfd_vma) 0, - input_bfd, input_section, rel->r_offset))) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_offset))) return FALSE; } else diff --git a/bfd/elf64-sh64.c b/bfd/elf64-sh64.c index c2e1034020..15f7a43857 100644 --- a/bfd/elf64-sh64.c +++ b/bfd/elf64-sh64.c @@ -2130,7 +2130,7 @@ sh_elf64_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, const char *name; if (h != NULL) - name = h->root.root.string; + name = NULL; else { name = (bfd_elf_string_from_elf_section @@ -2141,8 +2141,9 @@ sh_elf64_relocate_section (bfd *output_bfd ATTRIBUTE_UNUSED, name = bfd_section_name (input_bfd, sec); } if (! ((*info->callbacks->reloc_overflow) - (info, name, howto->name, (bfd_vma) 0, - input_bfd, input_section, rel->r_offset))) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_offset))) return FALSE; } break; diff --git a/bfd/elf64-sparc.c b/bfd/elf64-sparc.c index 6a8977c438..01b80cda4d 100644 --- a/bfd/elf64-sparc.c +++ b/bfd/elf64-sparc.c @@ -2652,7 +2652,7 @@ sparc64_elf_relocate_section (output_bfd, info, input_bfd, input_section, break; } - name = h->root.root.string; + name = NULL; } else { @@ -2666,8 +2666,9 @@ sparc64_elf_relocate_section (output_bfd, info, input_bfd, input_section, name = bfd_section_name (input_bfd, sec); } if (! ((*info->callbacks->reloc_overflow) - (info, name, howto->name, (bfd_vma) 0, - input_bfd, input_section, rel->r_offset))) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_offset))) return FALSE; } break; diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index f039fa7eb4..00d6997222 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -2436,8 +2436,9 @@ elf64_x86_64_relocate_section (bfd *output_bfd, struct bfd_link_info *info, continue; if (! ((*info->callbacks->reloc_overflow) - (info, name, howto->name, (bfd_vma) 0, - input_bfd, input_section, rel->r_offset))) + (info, (h ? &h->root : NULL), name, howto->name, + (bfd_vma) 0, input_bfd, input_section, + rel->r_offset))) return FALSE; } else diff --git a/bfd/elflink.c b/bfd/elflink.c index 6e3f91ff8a..4180042893 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -7216,7 +7216,8 @@ elf_reloc_link_order (bfd *output_bfd, else sym_name = link_order->u.reloc.p->u.name; if (! ((*info->callbacks->reloc_overflow) - (info, sym_name, howto->name, addend, NULL, NULL, 0))) + (info, NULL, sym_name, howto->name, addend, NULL, + NULL, (bfd_vma) 0))) { free (buf); return FALSE; diff --git a/bfd/elfxx-ia64.c b/bfd/elfxx-ia64.c index 093adbc47c..917e2c3bbf 100644 --- a/bfd/elfxx-ia64.c +++ b/bfd/elfxx-ia64.c @@ -4497,7 +4497,7 @@ elfNN_ia64_relocate_section (output_bfd, info, input_bfd, input_section, const char *name; if (h) - name = h->root.root.string; + name = NULL; else { name = bfd_elf_string_from_elf_section (input_bfd, @@ -4506,10 +4506,10 @@ elfNN_ia64_relocate_section (output_bfd, info, input_bfd, input_section, if (name == NULL) return FALSE; if (*name == '\0') - name = bfd_section_name (input_bfd, input_section); + name = bfd_section_name (input_bfd, sym_sec); } - if (!(*info->callbacks->reloc_overflow) (info, name, - howto->name, + if (!(*info->callbacks->reloc_overflow) (info, &h->root, + name, howto->name, (bfd_vma) 0, input_bfd, input_section, diff --git a/bfd/elfxx-mips.c b/bfd/elfxx-mips.c index 64eff153c4..2c98354a34 100644 --- a/bfd/elfxx-mips.c +++ b/bfd/elfxx-mips.c @@ -6416,7 +6416,7 @@ _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info, { BFD_ASSERT (name != NULL); if (! ((*info->callbacks->reloc_overflow) - (info, name, howto->name, 0, + (info, NULL, name, howto->name, (bfd_vma) 0, input_bfd, input_section, rel->r_offset))) return FALSE; } @@ -8020,7 +8020,8 @@ _bfd_elf_mips_get_relocated_section_contents break; case bfd_reloc_overflow: if (!((*link_info->callbacks->reloc_overflow) - (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr), + (link_info, NULL, + bfd_asymbol_name (*(*parent)->sym_ptr_ptr), (*parent)->howto->name, (*parent)->addend, input_bfd, input_section, (*parent)->address))) goto error_return; diff --git a/bfd/linker.c b/bfd/linker.c index 8abf359670..5f4e935f8a 100644 --- a/bfd/linker.c +++ b/bfd/linker.c @@ -2529,7 +2529,7 @@ _bfd_generic_reloc_link_order (bfd *abfd, abort (); case bfd_reloc_overflow: if (! ((*info->callbacks->reloc_overflow) - (info, + (info, NULL, (link_order->type == bfd_section_reloc_link_order ? bfd_section_name (abfd, link_order->u.reloc.p->u.section) : link_order->u.reloc.p->u.name), diff --git a/bfd/pdp11.c b/bfd/pdp11.c index 1188a9215b..f1aa421a9d 100644 --- a/bfd/pdp11.c +++ b/bfd/pdp11.c @@ -4775,7 +4775,7 @@ fprintf (stderr, "TODO: change the address of the relocation\n"); const char *name; if (h != NULL) - name = h->root.root.string; + name = NULL; else if (r_extern) name = strings + GET_WORD (input_bfd, syms[r_index].e_strx); @@ -4787,8 +4787,9 @@ fprintf (stderr, "TODO: change the address of the relocation\n"); name = bfd_section_name (input_bfd, s); } if (! ((*finfo->info->callbacks->reloc_overflow) - (finfo->info, name, howto->name, - (bfd_vma) 0, input_bfd, input_section, r_addr))) + (finfo->info, (h ? &h->root : NULL), name, + howto->name, (bfd_vma) 0, input_bfd, + input_section, r_addr))) return FALSE; } break; @@ -4954,7 +4955,7 @@ aout_link_reloc_link_order (finfo, o, p) abort (); case bfd_reloc_overflow: if (! ((*finfo->info->callbacks->reloc_overflow) - (finfo->info, + (finfo->info, NULL, (p->type == bfd_section_reloc_link_order ? bfd_section_name (finfo->output_bfd, pr->u.section) diff --git a/bfd/reloc.c b/bfd/reloc.c index 1df18408fe..78d19d260c 100644 --- a/bfd/reloc.c +++ b/bfd/reloc.c @@ -4499,7 +4499,8 @@ bfd_generic_get_relocated_section_contents (bfd *abfd, break; case bfd_reloc_overflow: if (!((*link_info->callbacks->reloc_overflow) - (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr), + (link_info, NULL, + bfd_asymbol_name (*(*parent)->sym_ptr_ptr), (*parent)->howto->name, (*parent)->addend, input_bfd, input_section, (*parent)->address))) goto error_return; diff --git a/bfd/simple.c b/bfd/simple.c index 41aa950955..5d98452bb8 100644 --- a/bfd/simple.c +++ b/bfd/simple.c @@ -48,6 +48,7 @@ simple_dummy_undefined_symbol (struct bfd_link_info *link_info ATTRIBUTE_UNUSED, static bfd_boolean simple_dummy_reloc_overflow (struct bfd_link_info *link_info ATTRIBUTE_UNUSED, + struct bfd_link_hash_entry *entry ATTRIBUTE_UNUSED, const char *name ATTRIBUTE_UNUSED, const char *reloc_name ATTRIBUTE_UNUSED, bfd_vma addend ATTRIBUTE_UNUSED, diff --git a/bfd/xcofflink.c b/bfd/xcofflink.c index ccb9c90558..8142e16833 100644 --- a/bfd/xcofflink.c +++ b/bfd/xcofflink.c @@ -6043,7 +6043,7 @@ xcoff_reloc_link_order (output_bfd, finfo, output_section, link_order) abort (); case bfd_reloc_overflow: if (! ((*finfo->info->callbacks->reloc_overflow) - (finfo->info, link_order->u.reloc.p->u.name, + (finfo->info, NULL, link_order->u.reloc.p->u.name, howto->name, addend, (bfd *) NULL, (asection *) NULL, (bfd_vma) 0))) { diff --git a/include/ChangeLog b/include/ChangeLog index 5f7d368736..53935eccf1 100644 --- a/include/ChangeLog +++ b/include/ChangeLog @@ -1,3 +1,9 @@ +2004-10-21 H.J. Lu + + PR 463 + * bfdlink.h (bfd_link_callbacks): Add a pointer to struct + bfd_link_hash_entry to reloc_overflow. + 2004-10-12 Paul Brook * elf/arm.h (EF_ARM_EABI_VER4): Define. diff --git a/include/bfdlink.h b/include/bfdlink.h index db276b02c9..b5673421fe 100644 --- a/include/bfdlink.h +++ b/include/bfdlink.h @@ -481,16 +481,18 @@ struct bfd_link_callbacks bfd_boolean (*undefined_symbol) (struct bfd_link_info *, const char *name, bfd *abfd, asection *section, bfd_vma address, bfd_boolean fatal); - /* A function which is called when a reloc overflow occurs. NAME is - the name of the symbol or section the reloc is against, - RELOC_NAME is the name of the relocation, and ADDEND is any - addend that is used. ABFD, SECTION and ADDRESS identify the + /* A function which is called when a reloc overflow occurs. ENTRY is + the link hash table entry for the symbol the reloc is against. + NAME is the name of the local symbol or section the reloc is + against, RELOC_NAME is the name of the relocation, and ADDEND is + any addend that is used. ABFD, SECTION and ADDRESS identify the location at which the overflow occurs; if this is the result of a bfd_section_reloc_link_order or bfd_symbol_reloc_link_order, then ABFD will be NULL. */ bfd_boolean (*reloc_overflow) - (struct bfd_link_info *, const char *name, const char *reloc_name, - bfd_vma addend, bfd *abfd, asection *section, bfd_vma address); + (struct bfd_link_info *, struct bfd_link_hash_entry *entry, + const char *name, const char *reloc_name, bfd_vma addend, + bfd *abfd, asection *section, bfd_vma address); /* A function which is called when a dangerous reloc is performed. The canonical example is an a29k IHCONST reloc which does not follow an IHIHALF reloc. MESSAGE is an appropriate message. diff --git a/ld/ChangeLog b/ld/ChangeLog index 8909eaa341..1536e73ad5 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,10 @@ +2004-10-21 H.J. Lu + + PR 463 + * ldmain.c (reloc_overflow): Accept a pointer to struct + bfd_link_hash_entry. Report symbol location for relocation + overflow. + 2004-10-21 H.J. Lu * genscripts.sh (libpath.exp): Really generate for first diff --git a/ld/ldmain.c b/ld/ldmain.c index dc2efa2230..7344da2098 100644 --- a/ld/ldmain.c +++ b/ld/ldmain.c @@ -137,8 +137,8 @@ static bfd_boolean undefined_symbol (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma, bfd_boolean); static bfd_boolean reloc_overflow - (struct bfd_link_info *, const char *, const char *, bfd_vma, - bfd *, asection *, bfd_vma); + (struct bfd_link_info *, struct bfd_link_hash_entry *, const char *, + const char *, bfd_vma, bfd *, asection *, bfd_vma); static bfd_boolean reloc_dangerous (struct bfd_link_info *, const char *, bfd *, asection *, bfd_vma); static bfd_boolean unattached_reloc @@ -1386,6 +1386,7 @@ int overflow_cutoff_limit = 10; static bfd_boolean reloc_overflow (struct bfd_link_info *info ATTRIBUTE_UNUSED, + struct bfd_link_hash_entry *entry, const char *name, const char *reloc_name, bfd_vma addend, @@ -1408,7 +1409,32 @@ reloc_overflow (struct bfd_link_info *info ATTRIBUTE_UNUSED, return TRUE; } - einfo (_(" relocation truncated to fit: %s %T"), reloc_name, name); + if (entry) + { + while (entry->type == bfd_link_hash_indirect + || entry->type == bfd_link_hash_warning) + entry = entry->u.i.link; + switch (entry->type) + { + case bfd_link_hash_undefined: + case bfd_link_hash_undefweak: + einfo (_(" relocation truncated to fit: %s against undefined symbol `%T'"), + reloc_name, entry->root.string); + break; + case bfd_link_hash_defined: + case bfd_link_hash_defweak: + einfo (_(" relocation truncated to fit: %s against symbol `%T' defined in %A section in %B"), + reloc_name, entry->root.string, + entry->u.def.section, entry->u.def.section->owner); + break; + default: + abort (); + break; + } + } + else + einfo (_(" relocation truncated to fit: %s against `%T'"), + reloc_name, name); if (addend != 0) einfo ("+%v", addend); einfo ("\n");