V2 [PATCH] gas: Extend .symver directive
H.J. Lu
hjl.tools@gmail.com
Tue Apr 7 23:15:35 GMT 2020
On Tue, Apr 7, 2020 at 2:23 PM Fangrui Song <i@maskray.me> wrote:
>
> On 2020-04-07, H.J. Lu via Binutils wrote:
> >On Tue, Apr 7, 2020 at 5:55 AM Andreas Schwab <schwab@linux-m68k.org> wrote:
> >>
> >> On Apr 07 2020, H.J. Lu wrote:
> >>
> >> > The optional argument VISIBILITY updates the visibility of
> >> > the original symbol. The valid visibilities are 'local', 'hidden', and
> >> > 'remove'. The 'local' visibility makes the original symbol a local
> >> > symbol (*note Local::). The 'hidden' visibility sets the visibility of
> >> > the original symbol to 'hidden' (*note Hidden::). The 'remove'
> >> > visibility removes the original symbol from the symbol table. If
> >> > visibility isn't specified, the original symbol is unchanged.
> >>
> >> Looks good.
> >
> >Here is the updated patch.
> >
> >--
> >H.J.
>
> Let me summarize the current status:
>
> @@@ has the renaming semantics. (invented in 2000)
> @ and @@ has the copying semantics. The original symbol remains which is usually cumbersome.
>
> We have received some requests:
>
> * Have a way to not retain the original symbol
> * Have a way to define multiple versions `.symver something,foo@v1; .symver something,foo@v2. symver something,foo@@v3`
>
>
> We have many choices.
>
> A. make @ @@ similar to @@@
> For @@, because of the linking rule (a @@ definition can satisfy a
> referenced without a version), there should be no difference.
>
> For @, this will be a semantic break. Personally I don't think this
> matters. I believe 99% projects don't need the original symbol and
> will not notice anything. I also checked with FreeBSD developers.
The original symbol name is used in glibc to bypass PLT within
libc.so.
> However, given the general conservative attitude of the binutils
> community, I think there might be some objection.
>
> Reusing the same stem name is very likely a mistake.
>
> .globl foo_v1
> .symver foo_v1,foo@v1
> foo_v1:
>
> A non-default version can be used to reject static archive linking
> while keep shared object compatibility. An undefined reference foo
> without a version cannot be satisfied by the definition.
>
> Keeping `foo` + .symver foo,foo@v1 will nullify the use case.
>
> B. Add an optional argument to change binding/visibility or remove the
> original symbol (this patch).
> I am mostly worried that this makes the .symver semantics even harder
> to understand / explain in the documentation.
>
> There seems to make @@@ even more inconsistent with @/@@.
>
> BTW, have you checked .localentry (which can set the non-visibility
> bits of st_other)
That is a PPC specific directive.
> I ask for clarification from GCC developers why some special
> attributes (local/hidden) are needed, not other general attribute
> flags.
.symver was designed to be used in assembly codes for glibc.
Only recently GCC is trying to use it. That is one reason why
it is the way it is.
--
H.J.
More information about the Binutils
mailing list