* write.c (adjust_reloc_syms): Fix linkonce check for ELF.

This commit is contained in:
Ian Lance Taylor 1996-12-15 20:27:08 +00:00
parent c8f580cec6
commit 6259c65f73
2 changed files with 29 additions and 9 deletions

View File

@ -1,3 +1,7 @@
Sun Dec 15 15:26:37 1996 Ian Lance Taylor <ian@cygnus.com>
* write.c (adjust_reloc_syms): Fix linkonce check for ELF.
Sat Dec 14 22:37:27 1996 Ian Lance Taylor <ian@cygnus.com>
* config/tc-mips.c (prev_insn_reloc_type): New static variable.

View File

@ -718,23 +718,39 @@ 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))
if (symsec != sec)
{
fixp->fx_addsy->sy_used_in_reloc = 1;
boolean linkonce;
linkonce = false;
#ifdef BFD_ASSEMBLER
if ((bfd_get_section_flags (stdoutput, symsec) & SEC_LINK_ONCE)
!= 0)
linkonce = true;
#endif
#ifdef OBJ_ELF
/* The GNU toolchain uses an extension for ELF: a section
beginning with the magic string .gnu.linkonce is a
linkonce section. */
if (strncmp (segment_name (symsec), ".gnu.linkonce",
sizeof ".gnu.linkonce" - 1) == 0)
linkonce = true;
#endif
if (linkonce)
{
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;
if (fixp->fx_subsy != NULL)
fixp->fx_subsy->sy_used_in_reloc = 1;
#endif
goto done;
goto done;
}
}
#endif
/* Since we're reducing to section symbols, don't attempt to reduce
anything that's already using one. */