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

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

FAQ詳細情報

ID 10811021
FAQカテゴリ(大) リンカ
最終更新日 2016-11-20

質問内容

ワーニング[Lo009] の対処方法

回答内容

エラーメッセージは、スタック容量解析を有効化すると表示されることがあり、エラーメッセージの全文は下記のようになっています。

ワーニング[Lo009]: [stack usage analysis] the program contains at least one indirect call. Example: from "xxxx" in yyyyy.o [1]. A complete list of such functions is in the map file. 

和訳すると、「少なくとも1つの間接呼び出し、例えば yyyyy.oのxxxxx があります。このような関数の完全なリストは .map ファイルにあります」となります。

スタック使用量解析は静的解析ですので、関数へのポインタを使用した関数呼び出しを行っていると、呼び出し先を確定できずワーニングを出力しています。具体的な対処方法は、以下のいずれかの方法で、関数ポインタから呼び出す可能性のある関数をリンカに知らせまます。

【#pragmaによる記述例】
void Caller(void (*fp)(void))
{
#pragma calls = Fun1, Fun2
    (*fp)();
}

【スタック使用量解析制御ファイルによる記述例】
possible calls MyFunc7: MyFunc8, MyFunc9;

スタック使用量解析についての詳細は、ヘルプメニュー > C/C++開発ガイド> パート1.ビルドツールの使用 > ILINKを使用したリンク> スタック使用量解析
および、
> パート2.リファレンス情報 > スタック使用量解析制御ファイル
をご参照ください。


参考資料URL