diff options
Diffstat (limited to 'gas/write.c')
-rw-r--r-- | gas/write.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/gas/write.c b/gas/write.c index 253dfc4..e2c7bf2 100644 --- a/gas/write.c +++ b/gas/write.c @@ -1289,6 +1289,13 @@ write_relocs (bfd *abfd ATTRIBUTE_UNUSED, asection *sec, as_bad_where (fixp->fx_file, fixp->fx_line, _("internal error: fixup not contained within frag")); +#ifdef obj_fixup_removed_symbol + if (fixp->fx_addsy && symbol_removed_p (fixp->fx_addsy)) + obj_fixup_removed_symbol (&fixp->fx_addsy); + if (fixp->fx_subsy && symbol_removed_p (fixp->fx_subsy)) + obj_fixup_removed_symbol (&fixp->fx_subsy); +#endif + #ifndef RELOC_EXPANSION_POSSIBLE *reloc = tc_gen_reloc (sec, fixp); #else @@ -1755,9 +1762,10 @@ set_symtab (void) two. Generate unused section symbols only if needed. */ nsyms = 0; for (symp = symbol_rootP; symp; symp = symbol_next (symp)) - if (bfd_keep_unused_section_symbols (stdoutput) - || !symbol_section_p (symp) - || symbol_used_in_reloc_p (symp)) + if (!symbol_removed_p (symp) + && (bfd_keep_unused_section_symbols (stdoutput) + || !symbol_section_p (symp) + || symbol_used_in_reloc_p (symp))) nsyms++; if (nsyms) @@ -1768,9 +1776,10 @@ set_symtab (void) asympp = (asymbol **) bfd_alloc (stdoutput, amt); symp = symbol_rootP; for (i = 0; i < nsyms; symp = symbol_next (symp)) - if (bfd_keep_unused_section_symbols (stdoutput) - || !symbol_section_p (symp) - || symbol_used_in_reloc_p (symp)) + if (!symbol_removed_p (symp) + && (bfd_keep_unused_section_symbols (stdoutput) + || !symbol_section_p (symp) + || symbol_used_in_reloc_p (symp))) { asympp[i] = symbol_get_bfdsym (symp); if (asympp[i]->flags != BSF_SECTION_SYM |