MESC TOOL NEWS:
MESCT-AS308-000301D
AS308, AS30, AS79
ご使用上のお願い
|
アセンブラAS308,AS30,AS79の使用上の注意事項を連絡します。
-
該当製品
| M16C/80シリーズ用リロケータブルアセンブラ | AS308 V.1.00 Release 1 ~ V.2.00 Release 1 |
| M16C/60,M16C/20シリーズ用リロケータブルアセンブラ | AS30 V.1.00 Release 1 ~ V.3.20 Release 1 |
| 7900シリーズ用リロケータブルアセンブラ | AS79 V.1.00 Release 1 ~ V.3.20 Release 1 |
※ NC308WA,NC30WAおよびNC79WAに含まれるアセンブラも該当します。
-
内容
ラベルの二重定義を行なった場合、リンク時にエラーが出力されない場合があります。
- 2.1 発生条件
- 以下の条件をすべて満たしている場合に発生します。
- (1) 同一ファイル内の同一セクション中に、関数呼び出しと呼び出される関数、サブルーチン呼び出しと呼び出されるサブルーチン、または分岐命令と分岐先ラベルが存在する。
- (2) 上記とは別のファイルに同一名称の関数/サブルーチン/ラベルが存在する。
- (3)上記の関数/サブルーチン/ラベルがグローバルとして定義されている。
- 2.2 発生例
- (1) C言語記述例
[fa.c]
-----------------------------------------------------------------
main()
{
func();
}
func()
{
}
-----------------------------------------------------------------
[fb.c]
-----------------------------------------------------------------
func()
{
}
-----------------------------------------------------------------
※ fa.cとfb.cをリンクしたとき、"func()"に対する二重定義エラーが検出されません。
このとき、fa.cのmain()で呼び出されるのは、fa.cのfunc()です。
- (2)アセンブリ言語記述例
[fd.a30]
-----------------------------------------------------------------
.glb label
.section prg1
jmp label
;
label:
.end
-----------------------------------------------------------------
[fe.a30]
-----------------------------------------------------------------
.glb label
.section prg2
label:
;
.end
-----------------------------------------------------------------
※ fd.a30とfe.a30をリンクしたとき、labelに対する二重定義エラーが検出されません。
このとき、fd.a30のjmp命令の飛び先は、fd.a30のlabelです。
-
回避策
グローバルで、かつ同一名称の関数/サブルーチン/ラベルが複数ファイルで定義されていないかソースファイルでご確認ください。該当する記述がある場合は、異なる名称に変更してください(次期バージョンでは、二重定義エラーとなります)。
-
恒久対策
本内容は、次期バージョンアップの際に改修する予定です。