カスタマーサポートセンター

FAQ~よくある質問~ | FAQマスタ詳細表示

FAQ詳細情報

ID 10810907
FAQカテゴリ(大) コンパイラ
最終更新日 2015-12-30

質問内容

TN47972: インラインアセンブラでの未定義シンボル

回答内容

ターゲット:  AVR32 
コンポーネント  コンパイラ
公開  2015/02/05 11:27 

 

概要
AVR32用 IAR Embedded Workbench for  version 4.2xへ移行後、エラー...

Error[As011]: Undefined symbol: XXXXXX

... が、インラインアセンブラの所で出るようになりました。
(同じソースで 、AVR32 用 IAR Embedded Workbench バージョン4.10 またはそれ以前 では、エラーになりません。)

 

背景
IAR Embedded Workbench for AVR32 version 4.2x の中に、修正されたバグに依存するサードパーティーのソースコードがあります。

このバグ...
... は、1行のインラインアセンブラのラベルが、他の行のアセンブラからジャンプするのに利用されるかも知れないことによります。
AVR32用 IAR C/C++ Compiler は、このようなジャンプに使用するレジスタ等を取り扱いません。

 

修正...
... は、異なるインラインアセンブリ・ステートメント間のジャンプをブロックします。

 

このようなジャンプを記述しているサードパーティソースコードを修正して...
... ブロックします。

 

解決策
主なソリューション...
... は、ソースを、インライン アセンブリ文間のジャンプを行わないように修正することです。


1つのワークアラウンド...
... は、次のような構造にします。ご注意 - 重要: この回避策は、コンパイラのセキュリティ システムを破るので、このワークアラウンドを使用した結果に対してはご自身で責任を持つ必要があります。

このワークアラウンドは、ドキュメント  <installation directory>\avr32\doc\infocenter\iccavr32.ENU.html に書かれている --disable_inline_asm_label_replacement  を使用することです。

----------------------------------------------------------
次のオプションが追加されました。
 --disable_inline_asm_label_replacement

説明:
 このオプションを使用して、インラインアセンブラ文のラベル交換を無効にします。ラベルの置換を無効にすると、1つの関数内のインラインアセンブラ文のラベルを共有します。つまり、1つのインラインアセンブラ文が他のインラインアセンブラ文のラベルを参照することができます。

重要
 重要: コンパイラは、拡張インラインアセンブラで明示的に要求しない限り、レジスタの内容やインラインアセンブラ文の入口でのスタックフレームのレイアウトについて何も保証しません。2行のインラインアセンブラ文の間のブランチは「未定義」になります。 
----------------------------------------------------------


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

参考資料URL