PVS(1)                          User Commands                         PVS(1)
NAME
       pvs - display the internal version information of dynamic objects
SYNOPSIS
       pvs [
-Cdlnorsv] [
-I index-expr] [
-N name] 
file...
DESCRIPTION
       The 
pvs utility displays any internal version information contained
       within an 
ELF file. Commonly, these files are dynamic executables and
       shared objects, and possibly relocatable objects. This version
       information can fall into one of two categories:
           o      version definitions
           o      version dependencies
       Version 
definitions describe the interfaces that are made available
       by an 
ELF file. Each version definition is associated to a set of
       global symbols provided by the file.  Version definitions can be
       assigned to a file during its creation by the link-editor using the       
-M option and the associated 
mapfile directives. See the 
Linker and       Libraries Guide for more details.
       Version 
dependencies describe the binding requirements of dynamic
       objects on the version definitions of any shared object dependencies.
       When a dynamic object is built with a shared object, the link-editor
       records information within the dynamic object indicating that the
       shared object is a dependency.  This dependency must be satisfied at
       runtime.  If the shared object also contains version 
definitions,
       then those version definitions that satisfy the global symbol
       requirements of the dynamic object are also recorded in the dynamic
       object being created. At process initialization, the runtime linker
       uses any version 
dependencies as a means of validating the interface
       requirements of the dynamic objects used to construct the process.
OPTIONS
       The following options are supported. If neither the 
-d or 
-r options
       are specified, both are enabled.       
-C                         Demangles symbol names.       
-d                         Prints version definition information.       
-I  index-expr                         Qualifies the versions to examine with a specific
                         version index or index range.  For example, the
                         version with index 3 in an object can be displayed
                         using:
                           example% 
pvs -I 3 filename                         An 
index-expr can be a single non-negative integer
                         value that specifies a specific version, as shown
                         in the previous example. Alternatively, an 
index-                         expr can consist of two such values separated by a
                         colon (:), indicating a range of versions. The
                         following example displays the versions 3, 4, and 5
                         in a file:
                           example% 
pvs -I 3:5 filename                         When specifying an index range, the second value
                         can be omitted to indicate the final item in the
                         file. For example, the following statement lists
                         all versions from the tenth to the end:
                           example% 
pvs -I 10: filename                         See Matching Options for additional information
                         about the matching options (
-I, 
-N).       
-l                         Prints any symbols that have been reduced from
                         global to local binding due to versioning. By
                         convention, these symbol entries are located in the                         
.symtab section, and fall between the 
FILE symbol
                         representing the output file, and the 
FILE symbol
                         representing the first input file used to generate
                         the output file.  These reduced symbol entries are
                         assigned the fabricated version definition 
_LOCAL_.
                         No reduced symbols will be printed if the file has
                         been stripped (see 
strip(1)), or if the symbol
                         entry convention cannot be determined.
                         Use of the 
-l option implicitly enables the 
-s                         option       
-n                         Normalizes version definition information. By
                         default, all version definitions within the object
                         are displayed. However, version definitions can
                         inherit other version definitions. Under
                         normalization, only the head of each inheritance
                         list is displayed.       
-N name                         When used with the 
-d option, 
-N prints only the
                         information for the given version definition 
name                         and any of its inherited version definitions.
                         When used with the 
-r option, 
-N prints only the
                         information for the given dependency file 
name. It
                         is possible to qualify a specific version from the
                         dependency file by including the version in
                         parenthesis following the file name:
                           example% 
pvs -N 'dependency (version)' filename                         See Matching Options for additional information
                         about the matching options (
-I, 
-N).       
-o                         Creates one-line version definition output. By
                         default, file, version definitions, and any symbol
                         output is indented to ease human inspection. This
                         option prefixes each output line with the file and
                         version definition name and can be more useful for
                         analysis with automated  tools.       
-r                         Prints version dependency (requirements)
                         information.       
-s                         Prints the symbols associated with each version
                         definition. Any data symbols from versions defined
                         by the object are accompanied with the size, in
                         bytes, of the data item.       
-v                         Verbose output. Indicates any weak version
                         definitions, and any version definition
                         inheritance. When used with the 
-N and 
-d options,
                         the inheritance of the base version definition is
                         also shown. When used with the 
-s option, the
                         version symbol definition is also shown.
OPERANDS
       The following operands are supported.       
file               The  
ELF file about which internal version information is
               displayed.
USAGE
   Matching Options
       The 
-I and 
-N options are collectively referred to as the 
matching       options. These options are used to narrow the range of versions to
       examine, by index or by name.
       Any number and type of matching option can be mixed in a given
       invocation of 
pvs. In this case, 
pvs displays the superset of all
       versions matched by any of the matching options used. This feature
       allows for the selection of complex groupings of items using the most
       convenient form for specifying each item.
EXAMPLES
       Example 1: Displaying version definitions
       The following example displays the version definitions of       
libelf.so.1:
         % 
pvs -d /lib/libelf.so.1              libelf.so.1;
              SUNW_1.1
       Example 2: Creating a one-liner display
       A normalized, one-liner display, suitable for creating a 
mapfile       version control directive, can be created using the 
-n and 
-o       options:
         % 
pvs -don /lib/libelf.so.1         /lib/libelf.so.1 -  SUNW_1.1;
       Example 3: Displaying version requirements
       The following example displays the version requirements of 
ldd and       
pvs:
         % 
pvs -r /usr/bin/ldd /usr/bin/pvs         /usr/bin/ldd:
              libelf.so.1 (SUNW_1.1);
              libc.so.1 (SUNW_1.1);
         /usr/bin/pvs:
              libelf.so.1 (SUNW_1.1);
              libc.so.1 (SUNW_1.1);
       Example 4: Determining a dependency symbol version
       The following example displays the shared object from which the 
ldd       command expects to find the printf function at runtime, as well as
       the version it belongs to:
         % 
pvs -ors /usr/bin/ldd | grep ' printf'         /usr/bin/ldd -  libc.so.1 (SYSVABI_1.3): printf;
       Example 5: Determine all dependency symbols from a specific version
       The 
-N option can be used to obtain a list of all the symbols from a
       dependency that belong to a specific version. To determine the
       symbols that 
ldd will find from version 
SYSVABI_1.3 of 
libc.so.1:
         % 
pvs -s -N 'libc.so.1 (SYSVABI_1.3)' /usr/bin/ldd                libc.so.1 (SYSVABI_1.3):
                        _exit;
                        strstr;
                        printf;
                        __fpstart;
                        strncmp;
                        lseek;
                        strcmp;
                        getopt;
                        execl;
                        close;
                        fflush;
                        wait;
                        strerror;
                        putenv;
                        sprintf;
                        getenv;
                        open;
                        perror;
                        fork;
                        strlen;
                        geteuid;
                        access;
                        setlocale;
                        atexit;
                        fprintf;
                        exit;
                        read;
                        malloc;
       Note that the specific list of symbols used by 
ldd may change between
       Solaris releases.
       Example 6: Display base defined version by index
       By convention, the base global version defined by an object has the
       name of the object. For example, the base version of 
pvs is named       
'pvs'. The base version of any object is always version index 1.
       Therefore, the 
-I option can be used to display the base version of
       any object without having to specify its name:
         % 
pvs -v -I 1 /usr/bin/pvs                pvs [BASE];
EXIT STATUS
       If the requested version information is not found, a non-zero value
       is returned. Otherwise, a 
0 value is returned.
       Version information is determined not found when any of the following
       is true:
           o      the 
-d option is specified and no version definitions are
                  found.
           o      the 
-r option is specified and no version requirements are
                  found.
           o      neither the 
-d nor 
-r option is specified and no version
                  definitions or version requirements are found.
SEE ALSO
       elfdump(1), 
ld(1), 
ldd(1), 
strip(1), 
elf(3ELF), 
attributes(7)       Linker and Libraries Guide                              December 19, 2018                       PVS(1)