* write.c (adjust_reloc_syms): Don't reduce a reloc against a
authorIan Lance Taylor <ian@airs.com>
Fri, 13 Dec 1996 18:27:28 +0000 (18:27 +0000)
committerIan Lance Taylor <ian@airs.com>
Fri, 13 Dec 1996 18:27:28 +0000 (18:27 +0000)
linkonce section into a reloc against the section symbol.

gas/ChangeLog
gas/write.c

index 9df5fd37f22eb1cd0e3a24be3907f53dbb395677..22567b9e1a1a033ca518a042a2289ea6f9bfffab 100644 (file)
@@ -1,5 +1,8 @@
 Fri Dec 13 13:00:33 1996  Ian Lance Taylor  <ian@cygnus.com>
 
+       * write.c (adjust_reloc_syms): Don't reduce a reloc against a
+       linkonce section into a reloc against the section symbol.
+
        * config/tc-mips.c (mips16_macro): Remove nop instructions after
        branch instructions.
 
index a7649bf93f657bd6b7d729672f67e7f44600f03c..daf8738ba913776d101070a5b6e615ee067cb894 100644 (file)
@@ -718,6 +718,24 @@ adjust_reloc_syms (abfd, sec, xxx)
            goto done;
          }
 
+#ifdef BFD_ASSEMBLER
+       /* Don't try to reduce relocs which refer to .linkonce
+           sections.  It can lead to confusion when a debugging
+           section refers to a .linkonce section.  I hope this will
+           always be correct.  */
+       if (symsec != sec
+           && ((bfd_get_section_flags (stdoutput, symsec) & SEC_LINK_ONCE)
+               != 0))
+         {
+           fixp->fx_addsy->sy_used_in_reloc = 1;
+#ifdef UNDEFINED_DIFFERENCE_OK
+           if (fixp->fx_subsy != NULL)
+             fixp->fx_subsy->sy_used_in_reloc = 1;
+#endif
+           goto done;
+         }
+#endif
+
        /* Since we're reducing to section symbols, don't attempt to reduce
           anything that's already using one.  */
        if (sym->bsym->flags & BSF_SECTION_SYM)