5.4 リンク時のシンボルの場所を調べる方法

リンク時のシンボルの場所を調べるには、 シンボルを定義しているセクションを見つけ、そのリンカがそのセクションから削除されていないことを確認する必要があります。

これは、--keep="section_id " および --symbols オプションを使用して実行できます。たとえば、 object(section) がシンボルを含んでいるセクションの場合は、以下のコマンドを入力します。
armlink --keep="object(section)" --symbols s.o --output=s.axf

fromelf -s は、結果のイメージに対しても実行できます。
サンプルとして、以下を実行します。

手順

  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 --symbols s.o --output=s.axf
  4. 出力から STACK シンボルを検索します。以下に例を示します。
    ======================================================================
    
    イメージシンボルテーブル
    
        [ローカルシンボル](Local Symbols)
    
        Symbol Name                        Value     Ov Type        Size  Object(Section)
    …
        STACK                              0x00008200   Section       80  s.o(STACK)
    
        グローバルシンボル
    
        Symbol Name                        Value     Ov Type        Size  Object(Section)
    …
        altstack                           0x00008200   Data          80  s.o(STACK)
        Image$$ZI$$Limit                   0x00008250   Number         0  s.o(STACK)
    以上の結果から、スタックが ZI 実行領域に存在することがわかります。
非機密扱いPDF file icon PDF 版ARM DUI0474LJ
Copyright © 2010-2015 ARM.All rights reserved.