From: Ian Lance Taylor Date: Sun, 15 Dec 1996 20:27:08 +0000 (+0000) Subject: * write.c (adjust_reloc_syms): Fix linkonce check for ELF. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6259c65f733b8030324db077d09aaabf07707e8b;p=binutils-gdb.git * write.c (adjust_reloc_syms): Fix linkonce check for ELF. --- diff --git a/gas/ChangeLog b/gas/ChangeLog index 917bbab6d7f..d9c2e38dcd5 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,7 @@ +Sun Dec 15 15:26:37 1996 Ian Lance Taylor + + * write.c (adjust_reloc_syms): Fix linkonce check for ELF. + Sat Dec 14 22:37:27 1996 Ian Lance Taylor * config/tc-mips.c (prev_insn_reloc_type): New static variable. diff --git a/gas/write.c b/gas/write.c index daf8738ba91..ab026f1f5a9 100644 --- a/gas/write.c +++ b/gas/write.c @@ -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. */