H8SでNORTiのライブラリリンク時にL1502のwarningが出た時の対処方法

H8S用のファームウェア(OSはNORTi)をHEWでビルドしたらリンカがwarning出した。解決にちょっと手間取ったので備忘録メモ。

ターゲットCPUはルネサスH8Sファミリ
OSはミスポのNORTiをライブラリリンクしています。

まずリンカの出力メッセージ。

Phase OptLinker starting
L1502 (W) Stack size in "os_core" conflicts with that in another file
Phase OptLinker finished

Build Finished
0 Errors, 1 Warning

スタックサイズが "os_core" と他のファイルで矛盾してる。。うーん、作成されたmapファイルを見たけど特に怪しいところはない。STACKセクションもちゃんと定義してるし。
os_coreなんて名前のファイル私は作っていないのでおそらくリンクしているライブラリの中か。


ということで、リンクしているNORTiのライブラリ(C:\NORTi\LIB\H8\CH386\n4eh8s2.lib)を生成するMakefile(C:\NORTi\LIB\H8\CH386\n4eh8s2.mak)を覗いてビルドオプションを確認してみる。
(Tool Chainのバージョンが7_0_0の場合は CH386 を CH387 に読み替えて下さい)

〜
CC       = ch38
CFLAGS   = -cp=2000a -nol -nologo -op=1 -sp=r,sh,l=2,sw,st,e -sta=l -i=$(INC)
〜

cp はCPU指定のオプション
nol はリストファイル出力しない指定
nologo はコピーライトの出力抑止指定
op と sp は最適化関連のオプション
sta はスタック計算サイズを指定するオプション。。あやしい!
ライブラリはlarge(4byte)の指定という事をφ(..)メモメモ。それを踏まえて自分のプロジェクト(HEW)の設定を確認します。
HEWの「ビルド」メニュー → 「H8S,H8/300 Standard Toolchain...」で表示されるダイアログの「CPU」タブにあります。

あっ、ライブラリ側の指定と違う!!
ここを「ラージ(4byte)」にしたらwarning消えました。めでたしめでたし。



PS
今回のターゲットCPUのRAMサイズは 32kbyte (kbyteですよ奥さん!!)で2バイトで収まるのでwarning出たままでも特に問題は発生しないと思います。でも気持ち悪いのでwarning消したいですよね。