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