From 6259c65f733b8030324db077d09aaabf07707e8b Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Sun, 15 Dec 1996 20:27:08 +0000 Subject: [PATCH] * write.c (adjust_reloc_syms): Fix linkonce check for ELF. --- gas/ChangeLog | 4 ++++ gas/write.c | 34 +++++++++++++++++++++++++--------- 2 files changed, 29 insertions(+), 9 deletions(-) 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. */ -- 2.30.2