[PATCH] Support SHF_GNU_RETAIN ELF section flag
Fangrui Song
i@maskray.me
Wed Sep 23 23:29:43 GMT 2020
More information about the Binutils mailing list
Wed Sep 23 23:29:43 GMT 2020
- Previous message (by thread): [PATCH] Support SHF_GNU_RETAIN ELF section flag
- Next message (by thread): [PATCH] Support SHF_GNU_RETAIN ELF section flag
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hi Jozef, I saw your proposal https://sourceware.org/pipermail/gnu-gabi/2020q3/000429.html I did not subscribe to gnu-gabi before yesterday so it is inconvenient for me to reply there. Since SHF_GNU_RETAIN is a new feature, and we already have facility for making arbitrary sections alive with R_*_NONE, can you highlight the selling point of a new flag? Copying me previous reply here > We already have a way to create an artificial reference: > > .reloc ., R_X86_64_NONE, target_symbol > > If we allow a relocation number for the second operand > > .reloc ., 0, target_symbol > > this will be generic. You can insert the directives in a GC root (e.g. > _start or a symbol referenced by -u or maybe an .init_array) If you do not want to touch the section containing the -e (--entry) symbol, you can use: .section .init_array.1,"a",@init_array .reloc ., R_X86_64_NONE, retained_section (I find that gold has an internal error with such a relocation.) But GNU ld should have been supported this for a very long time. (I added these directives to llvm last year: https://reviews.llvm.org/D62014 ) --- For a new section flag, there are a bunch of things needing thoughts * assembler The .retain directive seems to be discouraged... For section flags: .section .foo,"a" .section .foo,"aR" # is this a new section .pushsection .foo,"aR" # is this a new section Does the compiler need to remember that a section has the flag? (Think how this works with __attribute__((section(...))); many asm streamers are one-pass) * linker - What does -r do on two sections of the same, one with the flag and the other without? (as HJ mentioned) - Does the output section have the flag? - Does the flag retain other sections in the same section group? On 2020-09-23, H.J. Lu via Binutils wrote: >On Wed, Sep 23, 2020 at 1:04 PM Jozef Lawrynowicz ><jozef.l@mittosystems.com> wrote: >> >> On Wed, Sep 23, 2020 at 12:03:28PM -0700, H.J. Lu via Binutils wrote: >> > On Wed, Sep 23, 2020 at 11:47 AM Jozef Lawrynowicz >> > <jozef.l@mittosystems.com> wrote: >> > > >> > > On Wed, Sep 23, 2020 at 10:13:37AM -0700, H.J. Lu via Binutils wrote: >> > > > On Wed, Sep 23, 2020 at 9:52 AM Jozef Lawrynowicz >> > > > <jozef.l@mittosystems.com> wrote: >> > > > > >> > > > > On Wed, Sep 23, 2020 at 01:51:56PM +0000, Michael Matz wrote: >> > > > > > Hello, >> > > > > > >> > > > > > On Wed, 23 Sep 2020, H.J. Lu via Binutils wrote: >> > > > > > >> > > > > > > > I think that: >> > > > > > > > >> > > > > > > > > .section .text,"ax" >> > > > > > > > > ... >> > > > > > > > > foo: >> > > > > > > > > ... >> > > > > > > > > .retain >> > > > > > > > > retained_fn: >> > > > > > > > > ... >> > > > > > > > >> > > > > > > > is some nice syntactic sugar compared to: >> > > > > > > > >> > > > > > > > > .section .text,"ax" >> > > > > > > > > ... >> > > > > > > > > foo: >> > > > > > > > > ... >> > > > > > > > > .section .text,"axR" >> > > > > > > > > retained_fn: >> > > > > > > > > ... >> > > > > > > > >> > > > > > > > It's also partly for convenience; we have other directives which are >> > > > > > > > synonyms or short-hand for each other. >> > > > > > > > >> > > > > > > >> > > > > > > You don't need to keep the whole section when only one symbol should >> > > > > > > be kept. Please drop the .retain directive. GCC, as and ld should do the >> > > > > > > right thing with >> > > > > > > >> > > > > > > .section .text,"ax" >> > > > > > > ... >> > > > > > > foo: >> > > > > > > ... >> > > > > > > .section .text,"axR" >> > > > > > > >> > > > > > > retained_fn: >> > > > > > > >> > > > > > > where foo can be dropped and retained_fn will be kept. >> > > > > > >> > > > > > This is not what we discussed at the ABI list, the flag is per section, so >> > > > > > either the whole section is retained or not. What you describe is >> > > > > > something else that would work on a per symbol basis, which would have to >> > > > > > be specified in a different way and might or might not be a good idea. >> > > > > > But let's not conflate these two. >> > > > > >> > > > > Also, the linker cannot currently dissect a section and remove a >> > > > > particular unused symbol anyway. Since garbage collection only operates >> > > > > on the section level, marking the section itself as "retained" seems >> > > > > most appropriate. >> > > > >> > > > It can be done. If you put your branch on >> > > > >> > > > https://gitlab.com/x86-binutils/binutils-gdb >> > > > >> > > > I can help you implement it. >> > > >> > > It's not something I have time to look into at the moment, for now the >> > > aim is just to prevent garbage collection of sections. >> > >> > Linker and assembler already support it. You just need to add SHF_GNU_RETAIN >> > to the framework. Check how SHF_GNU_MBIND works. >> >> Sorry, I don't understand. >> >> Are you saying that LD already supports the garbage collection of >> individual unused symbol definitions from input sections? Whilst >> retaining other symbol definitions which are required by the program? >> I cannot find any reference to this. >> >> How does that relate to SHF_GNU_MBIND? I looked at all the references >> to "mbind" in Binutils and nothing seemed related garbage collection of >> sections, since SHF_GNU_MBIND is just used to indicate a particular >> section should be placed in a special memory area. > >For > >section .text,"ax" > ... >foo: > ... > .section .text,"axR" >retained_fn: > >you need to create a new .text section with SHF_GNU_RETAIN for >retained_fn. See get_section in obj-elf.c. If you want to avoid >merging .text section with SHF_GNU_RETAIN with other .text >sections by ld -r, linker needs to distinguish sections of the >same name with and without SHF_GNU_RETAIN.
- Previous message (by thread): [PATCH] Support SHF_GNU_RETAIN ELF section flag
- Next message (by thread): [PATCH] Support SHF_GNU_RETAIN ELF section flag
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Binutils mailing list