This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [RFC PATCH] gas .section directives with comdat inheritance
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: Roland McGrath <roland at redhat dot com>
- Cc: binutils at sourceware dot org
- Date: Wed, 11 Aug 2010 07:12:54 -0700
- Subject: Re: [RFC PATCH] gas .section directives with comdat inheritance
- References: <20100811063101.CE214402C8@magilla.sf.frob.com>
On Tue, Aug 10, 2010 at 11:31 PM, Roland McGrath <roland@redhat.com> wrote:
> This patch adds a new magic flag to .section directives.
> If ? appears among the "FLAGS" letters, then it means to
> imply any G flag and NAME[,comdat] from the current section
> to the new section.
>
> This scenario I'm trying to get at is using inline asm to emit annotation
> sections. ?That is, C code will contain:
>
> ? ? ? ?asm("0: someinstruction\n"
> ? ? ? ? ? ?".pushsection .annotations,\"\"\n"
> ? ? ? ? ? ?".long 0b\n"
> ? ? ? ? ? ?".popsection");
>
> This works fine in C and in lots of C++ code. ?But when this appears inside
> C++ methods that are being compiled into comdat sections, it breaks down.
> We really need that to be doing:
>
> ? ? ? ? ? ?.pushsection .annotations,"G",current_comdat_name,comdat
>
> for whatever "current_comdat_name" the compiler is compiling to.
> With this patch, it can do:
>
> ? ? ? ?asm("0: someinstruction\n"
> ? ? ? ? ? ?".pushsection .annotations,\"?\"\n"
> ? ? ? ? ? ?".long 0b\n"
> ? ? ? ? ? ?".popsection");
>
> and this has the effect of either:
> ? ? ? ? ? ?.pushsection .annotations,""
> or
> ? ? ? ? ? ?.pushsection .annotations,"G",the_right_comdat_name,comdat
> as appropriate.
>
> There may be better ways to attack this on the compiler side. ?But I
> haven't really thought of them. ?OTOH, this gas change was really easy to
> get working.
>
>
> Thanks,
> Roland
>
>
> 2010-08-10 ?Roland McGrath ?<roland@redhat.com>
>
> ? ? ? ?* config/obj-elf.c (obj_elf_parse_section_letters): Take new
> ? ? ? ?boolean result parameter CLONE; set it if '?' flag letter seen.
> ? ? ? ?(obj_elf_section): Update caller. ?Handle that flag by copying
> ? ? ? ?the LINKONCE and GROUP_NAME state from NOW_SEG.
> ? ? ? ?* doc/as.texinfo (Section): Document the ? flag.
>
You should include some testcases to show/make sure that
gas is doing the thing you intended.
H.J.