From: Ian Lance Taylor Date: Thu, 12 Dec 1996 21:55:28 +0000 (+0000) Subject: * write.c (adjust_reloc_syms): Make sure that symbols are X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=73d257842747877c8fed65f4b2ae7aa34111cc66;p=binutils-gdb.git * write.c (adjust_reloc_syms): Make sure that symbols are resolved; expression symbols may have been skipped. PR 11240. --- diff --git a/gas/ChangeLog b/gas/ChangeLog index d0620c2b39e..743073e7001 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +Thu Dec 12 16:40:47 1996 Ian Lance Taylor + + * write.c (adjust_reloc_syms): Make sure that symbols are + resolved; expression symbols may have been skipped. + Thu Dec 12 15:18:21 1996 Michael Meissner * config/tc-ppc.c (ppc_elf_suffix): Move @plt to diff --git a/gas/write.c b/gas/write.c index b85ffa7e4b3..a7649bf93f6 100644 --- a/gas/write.c +++ b/gas/write.c @@ -669,6 +669,15 @@ adjust_reloc_syms (abfd, sec, xxx) sym = fixp->fx_addsy; symsec = sym->bsym->section; + /* All symbols should have already been resolved at this + point. It is possible to see unresolved expression + symbols, though, since they are not in the regular symbol + table. */ + if (sym != NULL && ! sym->sy_resolved) + resolve_symbol_value (sym); + if (fixp->fx_subsy != NULL && ! fixp->fx_subsy->sy_resolved) + resolve_symbol_value (fixp->fx_subsy); + if (sym != NULL && sym->sy_mri_common) { /* These symbols are handled specially in fixup_segment. */ @@ -912,7 +921,8 @@ write_relocs (abfd, sec, xxx) data = fixp->fx_frag->fr_literal + fixp->fx_where; if (fixp->fx_where + fixp->fx_size > fixp->fx_frag->fr_fix + fixp->fx_frag->fr_offset) - abort (); + as_bad_where (fixp->fx_file, fixp->fx_line, + "internal error: fixup not contained within frag"); for (j = 0; reloc[j]; j++) { s = bfd_install_relocation (stdoutput, reloc[j],