From: Fangrui Song <i@maskray.me>
To: Nick Clifton <nickc@redhat.com>
Cc: Michael Matz <matz@suse.de>,
gnu-gabi@sourceware.org,
"Guillermo E. Martinez" <guillermo.e.martinez@oracle.com>
Subject: Re: Using section flags to indicate stripable or persistent sections
Date: Mon, 7 Nov 2022 10:51:36 -0800 [thread overview]
Message-ID: <20221107185136.5zpzi4gnnzmbqxrm@gmail.com> (raw)
In-Reply-To: <alpine.LSU.2.20.2211071320320.29399@wotan.suse.de>
On 2022-11-07, Michael Matz via Gnu-gabi wrote:
>Hey,
>
>On Mon, 7 Nov 2022, Nick Clifton via Gnu-gabi wrote:
>
>> We would like to suggest an extension the ELF section flags which can be
>> used to indicate sections that should, or should not, be stripped when
>> removing debug information.
>
>Okay, so stripping of sections intended for debug purposes ...
>
>> The problem we are trying to address is that different stripping tools
>> (strip, eu-strip, llvm-strip) have different heuristics for deciding
>> which sections should be removed when stripping debug information. In
>> order to fix this we are proposing two new section flags:
>>
>> GNU_SHF_CAN_BE_STRIPPED
>> GNU_SHF_DO_NOT_STRIP
>
>... but here you have "can be stripped?". The immediate question is: for
>which purposes? A section might be strippable in other context than debug
>info. And other sections might be non-strippable for still other
>purposes. Just saying "please don't strip this one" conveys no useful
>information, except of course to inhibit each and all stripping. But was
>it perhaps set for other reasons than debug info? Even with those flags
>tools will continue to wonder if maybe this-and-that DO_NOT_STRIP option
>can actually be stripped in some cases.
>
>IOW: if you really want what you said, make the flags more specific (to
>debug info purposes). But then of course it's unclear why you wouldn't
>want still other flags to mean "strip-for-something-else" purposes. At
>which point you quickly come to the conclusion that one wants to specify
>some sort of type per section, and not lump everything under SHT_PROGBITS.
>
>So, I think two flag bits are not the right solution. Maybe we could use
>some bits of sh_type to specify a more detailed type: the low bits would
>just be set to the ELF SHT_xxx as appropriate, and higher bits would
>contain a detailed type:
>
> 0x60XXYYZZ
>
>(ZZ would be the old SHT_xxx type, and XX/YY be a detail type).
>
>
>Ciao,
>Michael.
Agree that the different purposes can be difficult to capture with just
one or two bits. As a concrete example, llvm-strip/llvm-objcopy has this
piece of logic for various --strip-* modes: --strip-dwo, --strip-debug,
--strip-sections, --strip-all-gnu, --strip-all
https://github.com/llvm/llvm-project/blob/c997fe658655b42237f556c11c7f5bc8ec60658b/llvm/lib/ObjCopy/ELF/ELFObjcopy.cpp#L380-L446
--strip-all-gnu exists because it is determined GNU strip's default
--strip-all doesn't strip all :( https://github.com/llvm/llvm-project/commit/6ad72d05f5ebaada700487d3d0fe1d107b32468a
I feel that whether .ctf is strippable in various strip modes may be a
related question. (I tend to suggest a more intuitive rule instead of
doing some magic to ease the adoption of a new section. Let users do
--keep-section=xxx for new sections.)
>>
>> These would be set by the assembler and/or linker to indicate sections
>> that should be removed when stripping and sections which must not be
>> removed when stripping. It would be an error if both flags were present
>> on a given section, and if neither flag is present then the stripping
>> tool would fall back on its built in heuristics.
>>
>> In addition we need new flags for the assembler's .section directive
>> (suggestion: 'D': can be stripped, 'K' do not strip).
>> This email is to ask if you think that this idea has merit, and if so,
>> are there any guidelines for writing and submitting a formal specification
>> ?
>>
>> Cheers
>> Nick
>>
next prev parent reply other threads:[~2022-11-07 18:51 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-07 11:22 Nick Clifton
2022-11-07 13:33 ` Michael Matz
2022-11-07 18:51 ` Fangrui Song [this message]
2022-11-07 23:07 ` Alan Modra
2022-11-09 11:09 ` Nick Clifton
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20221107185136.5zpzi4gnnzmbqxrm@gmail.com \
--to=i@maskray.me \
--cc=gnu-gabi@sourceware.org \
--cc=guillermo.e.martinez@oracle.com \
--cc=matz@suse.de \
--cc=nickc@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).