7.3 スキャッタロードを使用して名前付きセクションを明示的に配置する方法の例

この例では、スキャッタロードを使用して名前付きセクションを明示的に配置する方法を示しています。

以下のソースファイルを考えてみます。
init.c
------
int foo() __attribute__((section("INIT")));
int foo() {
  return 1;
}

int bar() {
  return 2;
}

data.c
------
const long padding=123;
int z=5;
以下のスキャッタファイルは、名前付きセクションを明示的に配置する方法を示しています。
LR1 0x0 0x10000
{
    ; 初期化コードを含むルート領域
    ER1 0x0 0x2000
    {
        init.o (INIT, +FIRST)   ; 初期化コードを 0x0 に正確に配置する
        *(+RO)                  ; 残りのコードと読み出し専用データ
    }
    ; RW データと ZI データを 0x400000 に配置する
    RAM_RW 0x400000 (0x1FF00-0x2000)
    {
        *(+RW)
    }
    RAM_ZI +0
    {
        *(+ZI)
    }
    ; 0x1FF00 の実行領域
    ; テーブルに使用可能な最大空間は 0xFF
    DATABLOCK 0x1FF00 0xFF
    {
        data.o(+RO-DATA)  ; RO データを 0x1FF00 と 0x1FFFF の間に配置する
    }
}
この例では、スキャッタロード記述によって、以下のように配置が行われます。
  • 初期化コードは、init.o ファイルの INIT セクションに配置されます。この例では、INIT セクションのコードが最初にアドレス 0x0 に配置され、その後に、RO コードの残りと、オブジェクト data.o 内の RO データを除くすべての RO データが配置されます。
  • すべてのグローバル RW 変数が RAM 内の 0x400000 に配置されます。
  • data.o 内の RO-DATA テーブルはアドレス 0x1FF00 に配置されます。
生成されるイメージのメモリマップは以下のようになります。
イメージのメモリマップ

  イメージのエントリポイント : 指定されていません。

  Load Region LR1 (Base: 0x00000000, Size: 0x00000018, Max: 0x00010000, ABSOLUTE)

    Execution Region ER1 (Base: 0x00000000, Size: 0x00000010, Max: 0x00002000, ABSOLUTE)

    Base Addr    Size         Type   Attr      Idx    E Section Name        Object

    0x00000000   0x00000008   Code   RO            4    INIT                init.o
    0x00000008   0x00000008   Code   RO            1    .text               init.o
    0x00000010   0x00000000   Code   RO           16    .text               data.o


    Execution Region DATABLOCK (Base: 0x0001ff00, Size: 0x00000004, Max: 0x000000ff, ABSOLUTE)

    Base Addr    Size         Type   Attr      Idx    E Section Name        Object

    0x0001ff00   0x00000004   Data   RO           19    .rodata             data.o


    Execution Region RAM_RW (Base: 0x00400000, Size: 0x00000004, Max: 0x0001df00, ABSOLUTE)

    Base Addr    Size         Type   Attr      Idx    E Section Name        Object

    0x00400000   0x00000000   Data   RW            2    .data               init.o
    0x00400000   0x00000004   Data   RW           17    .data               data.o


    Execution Region RAM_ZI (Base: 0x00400004, Size: 0x00000000, Max: 0xffffffff, ABSOLUTE)

    Base Addr    Size         Type   Attr      Idx    E Section Name        Object

    0x00400004   0x00000000   Zero   RW            3    .bss                init.o
    0x00400004   0x00000000   Zero   RW           18    .bss                data.o

            
関連する概念
7.2.3 ルート実行領域と FIXED 属性
8.3 ロード領域の記述
8.4 実行領域の記述
8.3.4 ロード領域のアドレス属性の継承規則
8.3.5 RELOC アドレス属性の継承規則
8.4.4 実行領域のアドレス属性の継承規則
関連する参考文書
8.3.3 ロード領域の属性
8.4.3 実行領域の属性
関連情報
ENTRY
ビットバンドオブジェクトへのリンクを含むスキャッタファイル
非機密扱いPDF file icon PDF 版ARM DUI0474LJ
Copyright © 2010-2015 ARM.All rights reserved.