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

印刷ビューの終了

更新: 2014 年 7 月
 
 

例: 定義済みセクションの変更

次の mapfile の例では、定義済みの text セグメントと data セグメント、ヘッダーオプション、およびセグメント内のセクションの順序付けを操作します。

使用例 8-2  定義済みセクションの操作とセクションからセグメントへの割り当て
        1    $mapfile_version 2
        2    HDR_NOALLOC;
        3
        4    LOAD_SEGMENT text {
        5            VADDR=0xf0004000;
        6            FLAGS=READ EXECUTE;
        7            OS_ORDER=.text .rodata;
        9            ASSIGN_SECTION {
        10                   TYPE=PROGBITS;
        11                   FLAGS=ALLOC !WRITE;
        12           };
        13   };
        14
        15   LOAD_SEGMENT data {
        16           FLAGS=READ WRITE EXECUTE;
        17           ALIGN=0x1000;
        18           ROUND=0x1000;
        19   };

先頭行は常に、使用する mapfile 言語のバージョンを宣言します。HDR_NOALLOC 指令 (2 行目) では、結果オブジェクトは、オブジェクトの最初に割り当て可能なセグメント (定義済み text セグメント) の内部に ELF ヘッダーまたはプログラムヘッダー配列を含んではならないということが指定されています。

4 行目から 13 行目のセグメント指令は、text セグメントに仮想アドレスとアクセス権フラグを設定します。この指令では、.text という名前のセクションがセグメントの先頭に配置され、.rodata という名前のすべてのセクションがその後に続き、その他のすべてのセクションはこれらの後に続く必要があることが指定されます。最後に、割り当てることができる書き込み不可の PROGBITS セクションがセグメントに割り当てられます。

15 行目から 19 行目のセグメント指令は、data セグメントを 0x1000 境界に配置する必要があることを指定します。これは、セグメント内の先頭セクションを同じ配置方法で整列する効果があります。セグメントの長さは、配置方法と同じ値の倍数値に切り上げられます。セグメントのアクセス権は、読み取り、書き込み、および実行に設定されます。