RENESAS TOOL NEWS 2008年10月16日 : 081016/tn7
| M32Rファミリ用C/C++コンパイラパッケージ (M3T-CC32R)ご使用上のお願い
--float型演算用ランタイム演算ルーチンの スタック使用量の計算について-- |
M32Rファミリ用C/C++コンパイラパッケージ(M3T-CC32R)の使用上の注意事項を連絡
します。
- float型演算用ランタイム演算ルーチンのスタック使用量の計算に関する注意事項
1. 該当製品
M32Rファミリ用C/C++コンパイラパッケージ
V.4.20 Release 1 ~ V.5.01 Release 00
2. 内容
該当製品に含まれるstk32R (スタック使用量計算ユーティリティ)でスタック
使用量を計算する際、標準ライブラリに含まれる一部のランタイム演算ルーチン
のスタック使用量が算出されません。
2.1 発生条件
次の(1)~(4)の全ての条件を満たす場合に発生します。
(1) 次の(a)~(d)のいずれかに該当する演算が含まれるプログラムを、-stack
オプションを使用してコンパイルし、スタック使用量表示ファイル
(拡張子が.stk)を生成している。
(a) float型を符号なし整数型に変換
(b) float型同士の減算
(c) 符号なし整数をfloat型に変換
(d) double型を符号なし整数型に変換
(2) stk32Rでスタック計算している。このとき次の(a)および(b)を共に満たす。
(a) (1)で生成されたスタック使用量表示ファイルを入力している。
(b) -lオプションで、標準ライブラリ用スタック使用量表示ファイル
(m32RcR.stk, m32RcRM.stk, およびm32RcRL.stk) のいずれかを
指定している。
2.2 発生例
ソースコード例(sample.c):
---------------------------------------------------------------------
float f1,f2,f3;
unsigned u;
double d;
void func(void)
{
u = f1; /* 発生条件(1)(a) */
f1 = f2 - f3; /* 発生条件(1)(b) */
f2 = u; /* 発生条件(1)(c) */
u = d; /* 発生条件(1)(d) */
}
---------------------------------------------------------------------
コマンドライン例:
---------------------------------------------------------------------
cc32R -stack -c sample.c
stk32R -efunc -lm32RcR.stk sample.stk
---------------------------------------------------------------------
発生条件(1)の(a)~(d)に該当する場合に使用されるランタイム演算ルーチンの
スタックサイズ情報が標準ライブラリ用スタック使用量表示ファイルに含まれ
ていないため、スタックサイズが算出されず次のように画面上に表示されます。
---------------------------------------------------------------------
*** Stack Size ***
12 bytes
12 bytes + _100_Fdtou
12 bytes + _100_Futos
12 bytes + _100_Fsubs
12 bytes + _100_Fstou
---------------------------------------------------------------------
3. 回避策
次の手順を実施して回避してください。
(1) m32RcR_lacked.zip ファイルをダウンロードして解凍してください。
(2) 解凍されたm32RcR_lacked.stkファイルを環境変数M32RLIBが指す
ディレクトリに格納してください。
(3) stk32R のコマンドラインに -lm32RcR_lacked.stk を追加してください。
コマンドライン例:
----------------------------------------------------------------------
stk32R -efunc -lm32RcR.stk -lm32RcR_lacked.stk sample.stk
----------------------------------------------------------------------
以下のように算出したスタックサイズが表示されます。
----------------------------------------------------------------------
*** Stack Size ***
24 bytes
----------------------------------------------------------------------