public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
From: Jozef Lawrynowicz <jozef.l@mittosystems.com>
To: Michael Matz <matz@suse.de>
Cc: "H.J. Lu" <hjl.tools@gmail.com>, Binutils <binutils@sourceware.org>
Subject: Re: [PATCH] Support SHF_GNU_RETAIN ELF section flag
Date: Wed, 23 Sep 2020 17:52:11 +0100	[thread overview]
Message-ID: <20200923165211.fr4rqzp5uqqmrufq@jozef-acer-manjaro> (raw)
In-Reply-To: <alpine.LSU.2.20.2009231347190.20802@wotan.suse.de>

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.

As an aside.. we would run into limitations in the ELF format if trying
to mark the symbol itself as "retained". You cannot define "retain" as a
new symbol type or binding, because there is not a one-to-one mapping of
"retain" to the existing symbol types and bindings i.e. a retained
symbol might be STT_OBJECT or STT_FUNC, or STB_LOCAL or STB_GLOBAL.
st_other could be another place to store the requirement to "retain" a
symbol, but all those available bits are used up (albeit some
unofficially).

I'm not saying there's no way it could be done, but these are the
hurdles I discovered when considering that path to implementing the
"retain" behavior.

> About the .retain syntactic sugar: I also think it's not necessary, the 
> .section directive with R flag merging is good enough IMHO.

I'm OK with removing the .retain directive, since there is some
consensus it is not necessary. Also, I thought it made life easier for
GCC to mark sections as retained by omitting the section name from the
directive, but I've discovered a way around that now.

Thanks,
Jozef

  reply	other threads:[~2020-09-23 16:52 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-22 20:29 Jozef Lawrynowicz
2020-09-22 23:24 ` Hans-Peter Nilsson
2020-09-22 23:58 ` H.J. Lu
2020-09-23  1:09 ` Fangrui Song
2020-09-23  9:58   ` Jozef Lawrynowicz
2020-09-23 13:39     ` H.J. Lu
2020-09-23 13:51       ` Michael Matz
2020-09-23 16:52         ` Jozef Lawrynowicz [this message]
2020-09-23 17:13           ` H.J. Lu
2020-09-23 18:47             ` Jozef Lawrynowicz
2020-09-23 19:03               ` H.J. Lu
2020-09-23 20:04                 ` Jozef Lawrynowicz
2020-09-23 20:17                   ` H.J. Lu
2020-09-23 23:29                     ` Fangrui Song
2020-09-24 11:39                       ` Jozef Lawrynowicz
2020-09-24 19:06                         ` Fangrui Song
2020-09-24 13:27                       ` Michael Matz
2020-09-24 13:18                     ` H.J. Lu
2020-09-24 13:49                       ` Jozef Lawrynowicz
2020-09-24 13:59                         ` H.J. Lu
2020-09-24 16:56                           ` Jozef Lawrynowicz
2020-09-24 17:04                             ` H.J. Lu
2020-09-24 17:18                               ` Jozef Lawrynowicz
2020-09-24 17:37                                 ` H.J. Lu
2020-09-23 12:13 ` Jozef Lawrynowicz
2020-09-23 13:59   ` Alan Modra
2020-09-23 16:54     ` Jozef Lawrynowicz
2020-09-28 11:35 ` Pedro Alves
2020-09-28 12:28   ` Jozef Lawrynowicz
2020-09-28 14:46     ` Pedro Alves
2020-09-29 13:18       ` Michael Matz
2020-09-29 13:22         ` Jozef Lawrynowicz
2020-09-29 13:48         ` Pedro Alves
2020-09-29 13:55           ` Michael Matz
2020-09-29 14:04             ` Pedro Alves
2020-09-29 14:10               ` Michael Matz
2020-09-29 14:11                 ` Pedro Alves

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=20200923165211.fr4rqzp5uqqmrufq@jozef-acer-manjaro \
    --to=jozef.l@mittosystems.com \
    --cc=binutils@sourceware.org \
    --cc=hjl.tools@gmail.com \
    --cc=matz@suse.de \
    /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).