5.5 マップファイル内でのシンボルの場所を調べる方法

マップファイル内のシンボルの場所を調べるには、シンボルを定義するセクションを検索し、リンカがセクションを削除していないことを確認する必要があります。

マップファイル内のシンボルの場所を調べるには、--keep=section_id オプションと --map オプションを使用して、イメージのメモリマップを表示します。例えば、 object(section) がシンボルを含むセクションの場合は、以下のコマンドを入力します。
armlink --keep=object(section) --map s.o --output=s.axf
メモリマップには、シンボルを含むセクションの場所が表示されます。
サンプルとして、以下を実行します。

手順

  1. 以下のソースコードを含む s.c という名前のファイルを作成します。
    long long altstack[10] __attribute__ ((section ("STACK"), zero_init));
    int main(void)
    {
        return sizeof(altstack);
    }
  2. ソースをコンパイルします。
    armcc -c s.c -o s.o
  3. オブジェクト s.o をリンクして、STACK シンボルを保持し、イメージのメモリマップを表示します。
    armlink --keep=s.o(STACK) --map s.o --output=s.axf
  4. 出力から STACK シンボルを検索します。以下に例を示します。
    …
    Execution Region ER_RW (…)
    **** この実行領域に割り当てられたセクションはありません ****
    Execution Region ER_ZI (…)
    Base Addr    Size         Type   Attr      Idx    E Section Name        Object
    …
    0x00008228   0x00000050   Zero   RW            2    STACK               s.o
    以上の結果から、スタックが ER_ZI 実行領域に存在することがわかります。
関連する参考文書
12.78 --keep=section_id
12.101 -o filename, --output=filename
12.94 --map、--no_map
関連情報
実行可能な ELF イメージ内のシンボルの場所を fromelf を使用して調べる方法
-c コンパイラオプション
-o filename コンパイラオプション
非機密扱いPDF file icon PDF 版ARM DUI0474LJ
Copyright © 2010-2015 ARM.All rights reserved.