aboutsummaryrefslogtreecommitdiff
path: root/gas/config/obj-elf.c
diff options
context:
space:
mode:
Diffstat (limited to 'gas/config/obj-elf.c')
-rw-r--r--gas/config/obj-elf.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/gas/config/obj-elf.c b/gas/config/obj-elf.c
index 4e7f3a36..0f49ab6 100644
--- a/gas/config/obj-elf.c
+++ b/gas/config/obj-elf.c
@@ -1742,6 +1742,21 @@ elf_frob_symbol (symp, puntp)
&& S_IS_DEFINED (symp))
symbol_get_bfdsym (symp)->flags |= BSF_OBJECT;
#endif
+
+ if (symbol_section_p (symp))
+ {
+ asection *symsec = S_GET_SEGMENT (symp);
+
+ if ((bfd_get_section_flags (stdoutput, symsec) & SEC_LINK_ONCE) != 0
+ || strncmp (segment_name (symsec), ".gnu.linkonce",
+ sizeof ".gnu.linkonce" - 1) == 0)
+ {
+ /* Make section syms global on ELF linkonce sections.
+ This way, any reference to the section symbol will
+ resolve to the section that actually stays in. */
+ S_SET_EXTERNAL (symp);
+ }
+ }
}
void