マップファイルの Linker created と Lc, Gb, Wk は何ですか?

テクニカル・ノート 81528

アーキテクチャ:

ARM, RiscV, RH850, RL78, RX, SH, STM8

コンポーネント:

linker

更新日:

2020/10/13 17:51

はじめに

このテクニカルノートは以下製品に適用されます:

IAR Embedded Workbench
ARM 
SH 
STM8 
RH850  
RX
RL78 
RiscV 

Versions      
5.10 and later            
2.10 and later
1.10 and later
1.10 and later
2.10 and later 
2.10 and later
1.10 and later

1. 'Linker created' は何ですか ?

答え

IAR ILINKリンカによって行われる、追加のアロケーションです。

マップファイル例からの抜粋:

Module ro code ro data rw data
------ ------- ------- -------
...
...
Linker created 140 123 2 980
-----------------------------------------------
Grand Total: 76 888 3 800 5 716

解説

3つの異なった欄見出しは、IAR ILINKリンカによって生成された以下の追加に対応します:

Kind of section Section type 解説
ro code Veneer これらは、アドレスエリア全体でのジャンプを実行するために使用される"helpers"です。例えば +-4 MB / +-32 MB 以上(Thumb/Arm mode).
ro data .iar.init_table 初期化制御のためにstart-upに使用されるテーブル
ro data Initializer bytes RAMに配置されたシンボルがinitialize manuallyで初期化されるとき、リンカは "Initialize bytes'を生成します。
rw data
ro data
uninit

.icf ファイル内に、sizeパラメータを持つ define block ディレクティブがあると、リンカは size で指定されたブロックを作成します。リンク時に、これらのブロックはリンカにより埋められます。

スタックを形成するブロックのための、リンカディレクティブは sizeパラメータを持たなくてはなりません。スタックはリンクされた時点では空なので、ブロック全体は uninit でマークされます。

スタック以外の、size パラメータを持つ define block ディレクティブの場合、定義された変数をブロックに置くことができます。全ての未使用の部分は uinit でマークされます。

rw data .iar.dynexit exitで呼び出されるテーブルを保持

2. 'Lc','Gb','Wk' は何ですか?

答え

ELF内で次の4つのプロパティが定義されており、この欄に示されます:

- Lc = local.
- Gb = global.
- Wk = weak.
- ?? = unknown.

マップファイル例からの抜粋:

Undefined_Handler     0x00000274          Code   Wk   vectortrap.o [4]

Region$$Table$$Base   0x08002d2c          --     Gb   - Linker created -
Region$$Table$$Limit  0x08002d50          --     Gb   - Linker created -

SysTick_Config        0x08002667   0x32   Code   Lc   main.o [1]

全ての製品名は、それぞれの所有者の商標または登録商標です

申し訳ございませんが、弊社サイトではInternet Explorerをサポートしていません。サイトをより快適にご利用いただくために、Chrome、Edge、Firefoxなどの最新ブラウザをお使いいただきますようお願いいたします。