This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFC PATCH] gas .section directives with comdat inheritance


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]