as: Symver

1 
1 7.91 '.symver'
1 ==============
1 
1 Use the '.symver' directive to bind symbols to specific version nodes
1 within a source file.  This is only supported on ELF platforms, and is
1 typically used when assembling files to be linked into a shared library.
1 There are cases where it may make sense to use this in objects to be
1 bound into an application itself so as to override a versioned symbol
1 from a shared library.
1 
1    For ELF targets, the '.symver' directive can be used like this:
1      .symver NAME, NAME2@NODENAME
1    If the symbol NAME is defined within the file being assembled, the
1 '.symver' directive effectively creates a symbol alias with the name
1 NAME2@NODENAME, and in fact the main reason that we just don't try and
1 create a regular alias is that the @ character isn't permitted in symbol
1 names.  The NAME2 part of the name is the actual name of the symbol by
1 which it will be externally referenced.  The name NAME itself is merely
1 a name of convenience that is used so that it is possible to have
1 definitions for multiple versions of a function within a single source
1 file, and so that the compiler can unambiguously know which version of a
1 function is being mentioned.  The NODENAME portion of the alias should
1 be the name of a node specified in the version script supplied to the
1 linker when building a shared library.  If you are attempting to
1 override a versioned symbol from a shared library, then NODENAME should
1 correspond to the nodename of the symbol you are trying to override.
1 
1    If the symbol NAME is not defined within the file being assembled,
1 all references to NAME will be changed to NAME2@NODENAME.  If no
1 reference to NAME is made, NAME2@NODENAME will be removed from the
1 symbol table.
1 
1    Another usage of the '.symver' directive is:
1      .symver NAME, NAME2@@NODENAME
1    In this case, the symbol NAME must exist and be defined within the
1 file being assembled.  It is similar to NAME2@NODENAME.  The difference
1 is NAME2@@NODENAME will also be used to resolve references to NAME2 by
1 the linker.
1 
1    The third usage of the '.symver' directive is:
1      .symver NAME, NAME2@@@NODENAME
1    When NAME is not defined within the file being assembled, it is
1 treated as NAME2@NODENAME.  When NAME is defined within the file being
1 assembled, the symbol name, NAME, will be changed to NAME2@@NODENAME.
1