gc sections and .eh_frame
Eric Botcazou
ebotcazou@adacore.com
Tue Jun 7 18:00:00 GMT 2005
> I believe I have tracked this down to a change enclosed in full at the end
> of this mail, made by Eric Botcazou on 2004-04-21. I've looked at the
> mailing list archives, and not found any posting or discussion of the
> patch, or its rationale. Is that right?
http://sourceware.org/ml/binutils/2004-03/msg00424.html
> Anyway, the most relevant bit in elflink.c:bfd_elf_gc_sections() is:
>
> for (o = sub->sections; o != NULL; o = o->next)
> {
> if (o->flags & SEC_KEEP)
> - if (!elf_gc_mark (info, o, gc_mark_hook))
> - return FALSE;
> + {
> + /* _bfd_elf_discard_section_eh_frame knows how to discard
> + orphaned FDEs so don't mark sections referenced by the
> + EH frame section. */
> + if (strcmp (o->name, ".eh_frame") == 0)
> + o->gc_mark = 1;
> + else if (!elf_gc_mark (info, o, gc_mark_hook))
> + return FALSE;
> + }
> }
> }
>
> This change doesn't make sense to me. _bfd_elf_discard_section_eh_frame
> does not set gc_mark on any section. So as a result, I would assume none
> of the reloc dependencies of .eh_frame would ever get marked and that's
> how those sections get GC'd. Am I missing something?
Presumably:
2004-04-21 Eric Botcazou <ebotcazou@act-europe.fr>
* scripttempl/elf.sc (.text): Add KEEP for .text.*personality*.
(.data): Add KEEP for .gnu.linkonce.d.*personality*.
(.gcc_except_table): Add KEEP for self and accept .gcc_except_table.*.
--
Eric Botcazou
More information about the Binutils
mailing list