JavaScript is required to for searching.
Skip Navigation Links
Exit Print View
Programming Interfaces Guide     Oracle Solaris 11.1 Information Library
search filter icon
search icon

Document Information

Preface

1.  Memory and CPU Management

2.  Session Description Protocol API

3.  Process Scheduler

4.  Locality Group APIs

5.  Input/Output Interfaces

6.  Interprocess Communication

7.  Socket Interfaces

8.  Programming With XTI and TLI

9.  Packet Filtering Hooks

10.  Transport Selection and Name-to-Address Mapping

11.  Real-time Programming and Administration

12.  The Oracle Solaris ABI and ABI Tools

What is the Oracle Solaris ABI?

Defining the Oracle Solaris ABI

Symbol Versioning in Oracle Solaris Libraries

Using Symbol Versioning to Label the Oracle Solaris ABI

Oracle Solaris ABI Tools

appcert Utility

What appcert Checks

Private Symbol Usage

Static Linking

Unbound Symbols

What appcert Does Not Check

Working with appcert

appcert Options

Using appcert for Application Triage

appcert Results

Correcting Problems Reported by appcert

Using apptrace for Application Verification

Application Verification

Running apptrace

Interpreting apptrace Output

A.  UNIX Domain Sockets

Index

Defining the Oracle Solaris ABI

The Oracle Solaris ABI is defined in the Oracle Solaris libraries. These definitions are provided by means of the library versioning technology and policies used in the link editor and run-time linker.

Symbol Versioning in Oracle Solaris Libraries

The Oracle Solaris link editor and run-time linker use two kinds of library versioning: file versioning and symbol versioning. In file versioning, a library is named with an appended version number, such as libc.so.1. In a few cases, when an incompatible change is made to one or more public interfaces in that library, the version number is incremented (for example, to libc.so.2).

Library symbol versioning associates a set of symbols with a symbol version name. The following is an example mapfile for a hypothetical Solaris library, libfoo.so.1.

$mapfile_version 2
        SYMBOL_VERSION SUNWpublic {
            global:
                symbolA;
                symbolB;
                symbolC;
        };

        SYMBOL_VERSION SUNWprivate {
            global:
                __fooimpl;
            local:
                *;
        };

This mapfile indicates that symbolA, symbolB, and symbolC are associated with version SUNWpublic. The symbol __fooimpl is associated with SUNWprivate.


Note - The local: * directive in the mapfile causes any symbol in the library that is not explicitly associated with a named version, to be scoped locally to the library. Such locally scoped symbols are not visible outside the library. This convention ensures that symbols are only visible when associated with a symbol versioning name.


Using Symbol Versioning to Label the Oracle Solaris ABI

Since all visible symbols in a library belong to a named version, the naming scheme can be used to label the symbols' ABI status. This labeling is done by associating all private interfaces with a version name beginning with SUNWprivate. Public interfaces begin with other names, specifically:

The definition of the Oracle Solaris library ABI is therefore contained in the libraries, and consists of the set of symbols that are associated with symbol version names that do not begin with SUNWprivate. The pvs command lists the symbols in a library.