11.1 ベースプラットフォームモデルでのスキャッタファイルの使用に関する制限

ベースプラットフォームモデルはスキャッタファイルをサポートしますが、いくつかの制限があります。

スキャッタファイル内で使用できるキーワードには制限がありませんが、使用できるスキャッタファイルのタイプには以下の制限があります。
  • RELOC 属性でマークされたロード領域には、 +offset の相対ベースアドレスを持つ実行領域のみが含まれている必要があります。以下の例では、RELOC 属性と +offset 相対ベースアドレスを使用する有効なスキャッタファイルと無効なスキャッタファイルを示します。
    使用する有効なスキャッタファイルの例
    # これは有効です。すべての実行領域に +offset アドレスが指定されています。
    LR1 0x8000 RELOC
    {
        ER_RELATIVE +0
        {
            *(+RO)
        }
    }
    使用する無効なスキャッタファイルの例
    # これは有効ではありません。実行領域の 1 つに絶対ベースアドレスが指定されています。
    LR1 0x8000 RELOC
    {
        ER_RELATIVE +0
        {
            *(+RO)
        }
        ER_ABSOLUTE 0x1000
        {
            *(+RW)
        }
    }
  • PLT セクションを必要とするロード領域には、 OVERLAY としてマークされていない、コードを含む実行領域が少なくとも 1 つ含まれている必要があります。この実行領域には PLT セクションがあります。PLT は常にメモリ内に存在している必要があるため、OVERLAY 領域は使用できません。以下の例では、PLT セクションを必要とする実行領域を定義する有効なスキャッタファイルと無効なスキャッタファイルを示します。
    PLT セクションを必要とするロード領域の有効なスキャッタファイルの例
    # これは有効です。ER_1 にはコードが含まれ、OVERLAY ではありません。
    LR_NEEDING_PLT 0x8000
    {
        ER_1 +0
        {
            *(+RO)
        }
    }
    PLT セクションを必要とするロード領域の無効なスキャッタファイルの例
    # これは有効ではありません。コードを含むすべての実行領域が OVERLAY としてマークされています。
    LR_NEEDING_PLT 0x8000
    {
        ER_1 +0 OVERLAY
        {
            *(+RO)
        }
        ER_2 +0
        {
            *(+RW)
        }
    }
  • ロード領域で PLT セクションが必要な場合は、PLT セクションをロード領域内に配置する必要があります。デフォルトでは、ロード領域で PLT セクションが必要な場合、PLT セクションは、リンカによってコードを含む最初の実行領域内に配置されます。スキャッタロードセレクタを使用して、この配置先をオーバーライドできます。
    コードを含むロード領域が複数ある場合、 name という名前のロード領域の PLT セクションの名前は .plt_name になります。コードを含むロード領域が 1 つだけの場合、PLT セクションの名前は .plt になります。
    以下の例では、PLT セクションを配置する有効なスキャッタファイルと無効なスキャッタファイルを示します。
    PLT セクションを配置する有効なスキャッタファイルの例
    # これは有効です。LR1 の PLT セクションは LR1 に配置されます。
    LR1 0x8000
    {
        ER1+0
        {
            *(+RO)
        }
        ER2+0
        {
            *(.plt_LR1)
        }
    }
    LR2 0x10000
    {
        ER1+0
        {
            *(other_code)
        }
    }
    PLT セクションを配置する無効なスキャッタファイルの例
    # これは有効ではありません。LR1 の PLT セクションは LR2 に配置されています。
    LR1 0x8000
    {
        ER1+0
        {
            *(+RO)
        }
    }
    LR2 0x10000
    {
        ER1+0
        {
            *(.plt_LR1)
        }
    }
関連する概念
2.5 ベースプラットフォームリンクモデル
11.3 ベースプラットフォームモデルを使用した PLT シーケンスの配置
8.3.4 ロード領域のアドレス属性の継承規則
8.3.5 RELOC アドレス属性の継承規則
8.4.4 実行領域のアドレス属性の継承規則
関連する参考文書
8.3.3 ロード領域の属性
8.4.3 実行領域の属性
非機密扱いPDF file icon PDF 版ARM DUI0474LJ
Copyright © 2010-2015 ARM.All rights reserved.