* write.c (adjust_reloc_syms): Make sure that symbols are
authorIan Lance Taylor <ian@airs.com>
Thu, 12 Dec 1996 21:55:28 +0000 (21:55 +0000)
committerIan Lance Taylor <ian@airs.com>
Thu, 12 Dec 1996 21:55:28 +0000 (21:55 +0000)
resolved; expression symbols may have been skipped.
PR 11240.

gas/ChangeLog
gas/write.c

index d0620c2b39e7baaa56620bd260ca0ae773f3cf62..743073e700182cbb121adf7e8ca03dada52f167a 100644 (file)
@@ -1,3 +1,8 @@
+Thu Dec 12 16:40:47 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * 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  <meissner@tiktok.cygnus.com>
 
        * config/tc-ppc.c (ppc_elf_suffix): Move @plt to
index b85ffa7e4b3b9fd39af6bf8b71a43f497f93b384..a7649bf93f657bd6b7d729672f67e7f44600f03c 100644 (file)
@@ -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],