動的トークン $CAPABILITY を使用すると、機能固有の共有オブジェクトがあるディレクトリを指定できます。このトークンは、フィルタまたは依存関係に対して使用できます。このトークンは複数のオブジェクトに拡張できるので、依存関係と使用する場合も管理できます。dlopen(3C) で取得された依存関係は、RTLD_FIRST モードでこのトークンを使用できます。このトークンを使用する明示的な依存関係は、最初に見つかった適切な依存関係を読み込みます。
パス名の指定は、$CAPABILITY トークンで終わるフルパス名で構成する必要があります。$CAPABILITY トークンで指定されたディレクトリ内の共有オブジェクトは、実行時に検査されます。これらのオブジェクトは、機能の要件を示す必要があります。機能要件の特定を参照してください。各オブジェクトは、プロセスで使用可能な機能に対して検証されます。プロセスで使用できるオブジェクトは、機能値の降順で保存されます。これらのソートされたフィルティーは、フィルタ内で定義されたシンボルを解決するために使用されます。
機能ディレクトリ内のフィルティーには、命名に関する制限はありません。次の例で、ハードウェア機能フィルティーにアクセスするために補助フィルタ libfoo.so.1 をどのように設計するかを示します。
$ LD_OPTIONS='-f /opt/ISV/lib/cap/$CAPABILITY' \ cc -o libfoo.so.1 -G -K pic -h libfoo.so.1 -R. foo.c $ elfdump -d libfoo.so.1 | egrep 'SONAME|AUXILIARY' [2] SONAME 0x1 libfoo.so.1 [3] AUXILIARY 0x96 /opt/ISV/lib/cap/$CAPABILITY $ elfdump -H /opt/ISV/lib/cap/* /opt/ISV/lib/cap/filtee.so.3: Capabilities Section: .SUNW_cap Object Capabilities: index tag value [0] CA_SUNW_HW_1 0x1000 [ SSE2 ] /opt/ISV/lib/cap/filtee.so.1: Capabilities Section: .SUNW_cap Object Capabilities: index tag value [0] CA_SUNW_HW_1 0x40 [ MMX ] /opt/ISV/lib/cap/filtee.so.2: Capabilities Section: .SUNW_cap Object Capabilities: index tag value [0] CA_SUNW_HW_1 0x800 [ SSE ]
フィルタ libfoo.so.1 を MMX と SSE のハードウェア機能を使用できるシステムで処理した場合、次のフィルティー検索順序が採用されます。
$ cc -o prog prog.c -R. -lfoo $ LD_DEBUG=symbols prog .... 01233: symbol=foo; lookup in file=libfoo.so.1 [ ELF ] 01233: symbol=foo; lookup in file=cap/filtee.so.2 [ ELF ] 01233: symbol=foo; lookup in file=cap/filtee.so.1 [ ELF ] ....
なお、filtee.so.2 の機能値は filtee.so.1 の機能値より大きくなります。SSE2 機能を使用できないので、filtee.so.3 がシンボル検索に含まれる可能性はありません。