Using section flags to indicate stripable or persistent sections

Michael Matz matz@suse.de
Mon Nov 7 13:33:53 GMT 2022


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.

> 
>     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
> 


More information about the Gnu-gabi mailing list