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

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

armlink --keep=object(section) --map s.o --output=s.axf

メモリマップには、シンボルを含むセクションの場所が表示されます。

Show/hide

以下の手順に従います。

  1. 以下のソースコードを含む s.c という名前のファイルを作成します。

    long long altstack[10] __attribute__ ((section ("STACK"), zero_init));
    
    int main()
    {
        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 (Base: 0x000081c8, Size: 0x00000000, Max: 0xffffffff, ABSOLUTE)
    
    **** この実行領域に割り当てられたセクションはありません ****
    
    
    Execution Region ER_ZI (Base: 0x000081c8, Size: 0x000000b0, Max: 0xffffffff, ABSOLUTE)
    
    Base Addr    Size         Type   Attr      Idx    E Section Name        Object
    
    0x000081c8   0x00000060   Zero   RW           42    .bss                libspace.o(c_4.l)
    0x00008228   0x00000050   Zero   RW            2    STACK               s.o
    

    以上の結果から、スタックが ER_ZI 実行領域に存在することがわかります。

Show/hide関連項目

Copyright © 2010-2012 ARM. All rights reserved.ARM DUI 0474GJ
Non-ConfidentialID051612