プログラミングインタフェース

Solaris ABI の定義

Solaris ABI は Solaris のマニュアルページに説明されていますが、この ABI は Solaris ライブラリで定義されています。このような定義は、リンクエディタと実行時リンカーで使用されるライブラリバージョンの手法と方針によって行われます。

Solaris ライブラリにおけるシンボルバージョン管理

Solaris リンクエディタと実行時リンカーは、ファイルバージョン管理とシンボルバージョン管理の 2 種類のライブラリバージョン管理を使用します。ファイルバージョン管理では、ライブラリの名前にバージョン番号が追加されます (たとえば、libc.so.1)。このようなライブラリにある 1 つまたは複数の公開インタフェースに互換性のない変更を行ったとき、バージョン番号はインクリメントされます (たとえば、libc.so.2)。動的にリンクされるアプリケーションでは、構築時にバインドしたシンボルが実行時にライブラリに存在しないことがあります。シンボルのバージョンを管理するために、Solaris リンカーはシンボルのセットに名前を関連付けます。Solaris リンカーは次に、実行時のリンク中、その名前がライブラリに存在するかどうかを確認して、関連付けたシンボルが存在することを検証します。

ライブラリシンボルバージョン管理では、シンボルのセットにシンボルバージョン名を関連付け、その名前に番号付けスキーマがある場合は、マップファイルを使用して番号を関連付けます。次の例は、架空の Sun ライブラリ libfoo.so.1 のマップファイルです。

        SUNW_1.2 {
            global:
                symbolD;
                symbolE
        } SUNW_1.1;

        SUNW_1.1 {
            global:
                symbolA;
                symbolB;
                symbolC;
        };

        SUNWprivate {
            global:
                __fooimpl;
        };

        local: *

このマップファイルでは、symbolAsymbolB、および symbolC がバージョン SUNW_1.1 に関連付けられ、symbolD および symbolESUNW_1.2 に関連付けられています。そして、SUNW_1.2 SUNW_1.1 に関連付けられたすべてのシンボルを継承することを意味します。シンボル __fooimpl は、継承チェーンを持たない異なる名前付きセット SUNWprivate に関連付けられています。

構築時、リンクエディタはアプリケーションが使用しているシンボルを調査します。リンクエディタは次に、これらのシンボルが依存しているアプリケーションにセット名を記録します。(番号付け継承) チェーンを持っているセットの場合、リンクエディタは、アプリケーションが使用するすべてのシンボルが含まれる最小限の名前付きセットを記録します。例えばアプリケーションが symbolA および symbolB だけを使用する場合、リンクエディタは SUNW_1.1 への依存関係を記録します。また、アプリケーションが symbolAsymbolB、および symbolD を使用する場合、SUNW_1.2SUNW_1.1 を取り込んでいるためリンクエディタは SUNW_1.2 への依存関係を記録します。

実行時、リンカーは、依存関係としてアプリケーションに記録されたバージョン名がリンクされるライブラリに存在しているかどうかをチェックします。このプロセスによって、必要なシンボルが存在しているかどうかをすばやく確認できます。詳細については、『リンカーとライブラリ』を参照してください。


注 –

マップファイル内の「local: *」指令は、ライブラリ内のシンボルのうち、明示的に名前付きセットに関連付けられていないシンボルの有効範囲はライブラリにローカルであることを意味します。つまり、このように有効範囲がローカルに制限されたシンボルはライブラリの外からは見えないことを意味します。この規約は、シンボルが見えるのは、シンボルバージョン管理名に関連付けられているときだけであることを保証します。


シンボルバージョン管理による Solaris ABI へのラベル付け

ライブラリ内のシンボルのうち、表示できるシンボルはなんらかの名前付きセットに属しているので、名前付けスキーマを使用すると、シンボルの ABI 状態にラベルを付けることができます。このラベル付けを行うには、すべての非公開インタフェースを SUNWprivate から始まるセット名に関連付けます。公開インタフェースはほかの名前から始まり、特に、次のような名前があります。

このような公開名前付きセットには major.minor 番号付けスキーマによって番号が付け られます。minor 番号は、新しいシンボルが名前付きセットに追加されるたびにインクリメントされます。major 番号は、あまりありませんが、既存のシンボルに互換性のない変更が行われたときにインクリメントされます。既存のシンボルに互換性のない変更が行われたときは、ライブラリのファイル名のバージョン番号もインクリメントされます。

したがって、Solaris ライブラリ ABI の定義はライブラリに含まれており、SUNWprivate から始まらないシンボルバージョン名に関連付けられたシンボルセットから構成されます。pvs コマンドは、ライブラリ内にあるシンボルの一覧を表示します。