On 4/12/21 2:18 PM, Jakub Jelinek wrote: > On Mon, Apr 12, 2021 at 02:15:16PM +0200, Martin Liška wrote: >> The old syntax with the alias is quite ugly.. > > Not that much. And users have no other option (besides inline asm > but that doesn't work with LTO well). > >>> so that people who don't have gcc configured against >>> binutils 2.35 or newer know what to do instead. >> >> ... and symver support for older binutils releases is fragile due to: >> >> Changes in 2.35: >> >> * Extend .symver directive to update visibility of the original symbol >> and assign one original symbol to different versioned symbols. > > That is a change that allows the new syntax. > The old syntax (on the as/ld side) have worked for the last 20+ years > just fine. > > Jakub >
All right, so something like this? Thanks, Martin
>From 750b715225d480fcb74e765623d54acc42ac25e3 Mon Sep 17 00:00:00 2001 From: Martin Liska <mli...@suse.cz> Date: Mon, 12 Apr 2021 13:42:33 +0200 Subject: [PATCH] docs: update symver attribute description gcc/ChangeLog: * doc/extend.texi: Be more precise in documentation of symver attribute. --- gcc/doc/extend.texi | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/gcc/doc/extend.texi b/gcc/doc/extend.texi index e28e1860990..75e4a43a8c5 100644 --- a/gcc/doc/extend.texi +++ b/gcc/doc/extend.texi @@ -3848,23 +3848,27 @@ foo_v1 (void) Will produce a @code{.symver foo_v1, foo@@VERS_1} directive in the assembler output. -One can also define multiple version for a given symbol. +One can also define multiple version for a given symbol +(starting from binutils 2.35). @smallexample __attribute__ ((__symver__ ("foo@@VERS_2"), __symver__ ("foo@@VERS_3"))) int symver_foo_v1 (void) @{ @} - -__attribute__ ((__symver__ ("bar@@VERS_2"))) -__attribute__ ((__symver__ ("bar@@VERS_3"))) -int symver_bar_v1 (void) -@{ -@} @end smallexample -This example creates an alias of @code{foo_v1} with symbol name -@code{symver_foo_v1} which will be version @code{VERS_2} of @code{foo}. +This example creates a symbol name @code{symver_foo_v1} +which will be version @code{VERS_2} and @code{VERS_3} of @code{foo}. + +If you have an older release of binutils release, then symbol alias needs to +be used: + +@smallexample +__attribute__ ((__symver__ ("foo@@VERS_2"))) +__attribute__ ((alias ("foo_v1"))) +int symver_foo_v1 (void); +@end smallexample Finally if the parameter is @code{"@var{name2}@@@@@var{nodename}"} then in addition to creating a symbol version (as if -- 2.31.1