システムは、コードを正しく実行するために必要なさまざまな機能を提供できます。システムは、プロセスの確立に必要なサービス、またはそのプロセスのデバッグやモニタリングにとって重要である可能性のあるサービスも提供できます。オブジェクトは、capabilities セクション内でこれらの機能が必要とするものを定義することで、これらの要件を伝達します。
ある機能が利用可能な場合にだけ実行できるコードは、機能セクションで、これらの要件を指定する必要があります。オブジェクト内に機能要件を記録すると、関連コードの実行を試みる前に、システムがそのオブジェクトを検証できます。これらの要件によって、オブジェクトファミリの中からもっとも適したオブジェクトを、またはシンボルファミリの中からシンボルを、システムが選択できるフレームワークを規定することもできます。ファミリは同じオブジェクトまたはシンボルのインスタンスで構成され、各インスタンスはそれぞれ異なる機能を要求します。
次の機能はオブジェクトの検証を提供します。これらの機能によって、オブジェクトファミリまたはシンボルファミリから機能インスタンスを選択することもできます。
複数の機能インスタンスが同じシステムで実行できる場合、一連の優先規則を利用して 1 つのインスタンスを選択します。これらの規則は、オブジェクトファミリから選択する場合も、オブジェクト内のシンボルファミリから選択する場合も同じです。
プラットフォーム名を定義している機能グループは、プラットフォーム名を定義していないグループに優先します。
マシンのハードウェア名を定義している機能グループは、マシンのハードウェア名を定義していないグループに優先します。
ハードウェア機能の値は、大きい値が小さい値より優先します。
オブジェクトはプロセスの作成に影響する機能を使用することも、ほかのソフトウェア環境の要件を中継することもできます。これらの機能はオブジェクトの検証の一部として、あるいはオブジェクトまたはシンボルの選択の一部として検査されることはありませんが、プロセスに影響する可能性のある追加情報を提供します。次の機能はソフトウェアの情報を提供します。
これらの各機能は個々に定義したり、組み合わせて機能グループを作成したりできます。
動的オブジェクトに加えて、オブジェクト内の各関数または初期化済みデータ項目を、機能要件に関連付けることができます。一部の機能要件はコンパイラによって作成される再配置可能オブジェクトに記録され、コンパイル時に指定されたオプションまたは最適化を反映します。リンカーは入力再配置可能オブジェクトの機能を組み合わせて、出力ファイルの最終機能セクションを作成します。機能セクションを参照してください。
さらに、リンカーが出力ファイルを作成するときにも機能を定義できます。これらの機能は、mapfile とリンカーの –M オプションを使用して特定します。mapfile を使用して定義された機能は、入力再配置可能オブジェクト内で指定された機能を強化したり、オーバーライドしたりすることができます。mapfile は通常、必要な機能情報を生成しないコンパイラを増強したり、特殊な状況でコンパイラによって生成される機能情報をオーバーライドしたりするのに使用されます。
この章では、機能の作成と使用に加え、機能インスタンスを実行するための手法について説明します。