Go to main content
マニュアルページ セク ション 1: ユー ザーコマンド

印刷ビューの終了

更新: 2016年12月6日
 
 

pvs(1)

名前

pvs - 動的オブジェクトの内部バージョン情報の表示

形式

pvs [-Cdlnorsv] [-I 
index-expr] [-N name] 
file...

説明

pvs ユーティリティーは、ELF ファイル内に含まれている内部バージョン情報を表示します。一般に、これらのファイルは動的な実行可能ファイル、共有オブジェクト、および場合によっては再配置可能なオブジェクトです。このバージョン情報は、2 つのカテゴリのいずれかに分類できます。

  • バージョン定義

  • バージョン依存関係

バージョン定義は、ELF ファイルによって使用可能になるインタフェースについて記述します。各バージョン定義は、このファイルによって提供される一連の大域シンボルに関連付けられています。バージョン定義は、リンカーで –M オプションと関連付けられた mapfile 指令を使用することによって、作成時にファイルに割り当てることができます。詳細は、Oracle Solaris 11.3 リンカーとライブラリガイドを参照してください。

バージョン依存関係は、共有オブジェクトの依存関係があるバージョン定義での、動的オブジェクトのバインディングの要件について記述します。動的オブジェクトが共有オブジェクトとともに作成される場合、リンカーは共有オブジェクトが依存関係にあることを示す情報を動的オブジェクト内に記録します。この依存関係は実行時に満たされている必要があります。共有オブジェクトにバージョン定義も含まれている場合は、動的オブジェクトの大域シンボル要件を満たすそれらのバージョン定義も、作成される動的オブジェクトに記録されます。プロセスの初期化時に、プロセスを作成するために使用される動的オブジェクトのインタフェース要件を検証する手段として、実行時リンカーはバージョン依存関係を使用します。

オプション

以下のオプションがサポートされています。–d オプションまたは –r オプションのいずれも指定されていない場合は、両方が有効になります。

–C

DemanglesC++ シンボル名を復号化します。

–d

バージョン定義情報を出力します。

–I index-expr

特定のバージョンインデックスまたはインデックスの範囲で検査するバージョンを限定します。たとえば、オブジェクト内のインデックス 3 のバージョンを表示するには、次のように指定します。

% pvs -I 3 filename

index-expr には、上記の例に示したように、特定のバージョンを指定する負でない単一の整数値を指定できます。または、index-expr は、バージョンの範囲を示すコロン (:) で区切られらた 2 つの負でない単一の整数値で構成することもできます。次の例では、ファイル内のバージョン 3、4、および 5 を表示します。

% pvs -I 3:5 filename

インデックスの範囲を指定する場合、2 番目の値を省略すると、ファイル内の最後の項目を意味することができます。たとえば、次の文は 10 番目から最後までのすべてのバージョンを一覧表示します。

% pvs -I 10: filename

マッチングオプション (–I–N) の詳細な情報については、「マッチングオプション」を参照してください。

–l

バージョン管理のためにバインディングが大域からローカルに縮小された、すべてのシンボルを出力します。規約上、これらのシンボルエントリは、.symtab セクションに配置され、出力ファイルを表す FILE シンボルと、出力ファイルを生成するために使用される最初の入力ファイルを表す FILE シンボルの間に置かれます。これらの縮小されたシンボルエントリには、加工されたバージョン定義 _LOCAL_ が割り当てられます。ファイルが取り除かれている (strip(1) を参照) 場合、またはシンボルエントリの規約が判別できない場合、縮小されたシンボルは出力されません。

–l オプションを使用すると、–s オプションが暗黙的に有効になります。

–n

バージョン定義情報を正規化します。デフォルトでは、オブジェクト内のすべてのバージョン定義が表示されます。ただし、バージョン定義は別のバージョン定義を継承することがあります。正規化すると、各継承リストの先頭のみが表示されます。

–N name

–d オプションとともに –N を使用すると、指定されたバージョン定義 name とそれを継承したバージョン定義の情報のみが出力されます。

–r オプションとともに –N を使用すると、指定された依存関係ファイル name の情報のみが出力されます。ファイル名の後ろでバージョンを括弧で囲んで指定することで、依存関係ファイルを特定のバージョンに限定できます。

% pvs -N 'dependency (version)' filename

マッチングオプション (–I–N) の詳細な情報については、「マッチングオプション」を参照してください。

–o

バージョン定義を 1 行単位で出力します。デフォルトでは、ファイル、バージョン定義、およびシンボルの出力は、人間による検査を容易にするためにインデントされます。このオプションを使用すると、各出力行の前にファイル名とバージョン定義名が付けられ、自動化ツールで分析する場合、より便利になることがあります。

–r

バージョン依存関係 (要件) 情報を出力します。

–s

各バージョン定義に関連付けられているシンボルを出力します。オブジェクトによって定義されているバージョンのデータシンボルには、データ項目のサイズ (バイト単位) が一緒に出力されます。

–v

詳細情報を出力します。弱いバージョン定義とバージョン定義の継承を示します。–N オプションおよび –d オプションとともに使用すると、基本バージョン定義の継承も表示されます。–s オプションとともに使用すると、バージョンシンボル定義も表示されます。

オペランド

次のオペランドがサポートされています。

file

内部バージョン情報を表示する ELF ファイル。

使用法

マッチングオプション

–I オプションと –N オプションは、まとめてマッチングオプションと呼ばれます。これらのオプションは、インデックスまたは名前によって、検査するバージョンの範囲を絞り込むために使用されます。

任意の数およびタイプのマッチングオプションを組み合わせて、対象となる pvs の呼び出しで使用できます。この場合、pvs は使用されたすべてのマッチングオプションと一致する、すべてのバージョンの上位集合を表示します。この機能を使用すると、各項目の指定にもっとも簡単な形式を使用し、複雑な項目のグループを選択できます。

使用例 1 バージョン定義の表示

次の例では、libelf.so.1 のバージョン定義を表示します。

% pvs -d /lib/libelf.so.1
	libelf.so.1;
	SUNW_1.1
使用例 2 1 行単位の出力の作成

mapfile バージョン管理指令を作成するのに適した、正規化された 1 行単位の出力は、–n オプションと – o オプションを使用して作成できます。

% pvs -don /lib/libelf.so.1
/lib/libelf.so.1 -	SUNW_1.1;
使用例 3 バージョン要件の表示

次の例では、lddpvs のバージョン要件を表示します。

% 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);
使用例 4 依存関係シンボルのバージョンの判別

次の例では、ldd コマンドによって実行時に printf() 関数を見つけることが予期されている共有オブジェクトと、それが属するバージョンを表示します。

% pvs -ors /usr/bin/ldd | grep ' printf'
/usr/bin/ldd -  libc.so.1 (SYSVABI_1.3): printf;

使用例 5 特定バージョンのすべての依存関係シンボルの判別

–N オプションを使用すると、特定バージョンに属する依存関係のすべてのシンボルのリストを取得できます。lddlibc.so.1 のバージョン SYSVABI_1.3 から見つけるシンボルを判別するには、次のコマンドを実行します。

% 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;

ldd によって使用される具体的なシンボルのリストは、Solaris のリリースによって異なる場合があります。

使用例 6 基本として定義されているバージョンの、インデックスによる表示

規約上、オブジェクトによって定義されている基本大域バージョンは、そのオブジェクトの名前を持ちます。たとえば、pvs の基本バージョンには、'pvs' という名前が付けられます。オブジェクトの基本バージョンは、常にバージョンインデックス 1 です。したがって、–I オプションを使用すると、名前を指定することなく、オブジェクトの基本バージョンを表示できます。

% pvs -v -I 1 /usr/bin/pvs
       pvs [BASE];

終了ステータス

要求されたバージョン情報が見つからなかった場合は、ゼロ以外の値が返されます。それ以外の場合は、値 0 が返されます。

次のいずれかが真である場合は、バージョン情報が見つからなかったと判定されます。

  • –d オプションが指定され、バージョン定義が見つからない。

  • –r オプションが指定され、バージョン要件が見つからない。

  • –d オプションと –r オプションのいずれもが指定されず、バージョン定義またはバージョン要件が見つからない。

属性

属性についての詳細は、マニュアルページの attributes(5) を参照してください。

属性タイプ
属性値
使用条件
developer/base-developer-utilities

関連項目

elfdump(1), ld(1), ldd(1), strip(1), elf(3ELF), attributes(5)

Oracle Solaris 11.3 リンカーとライブラリガイド