MSC TOOL NEWS: MSCT-CC16-970716D
M16ファミリ用クロスツールキットCC16のリンカlnk16に留意すべき点があることが判明しましたので、その内容および対処方法についてご連絡致します。
- 該当するバージョン
問題が発生するコンパイラのバージョンは、次のとおりです。
ご使用になられているコンパイラのバージョン番号を調べるには、"-V" オプションを指定してください。
(下記のカッコ内が、"-V" オプションで表示されるバージョンです。)
- CC16 V.2.00 (V2.00.00)
- CC16 V.3.00 (V3.00.00)
- CC16 V.3.10 Release 1 (V3.01.00)
- CC16 V.3.10 Release 2 (V.3.10 Release 2)
- CC16 V.3.10 Release 3 (V.3.10 Release 3)
- 内容
アセンブリソースで、リンク時まで解決されないシンボル (外部参照または、相対シンボル) を含む式に、「:32」以外のサイズを (:8、:16) 指定した場合に、意図しないアドレスにアクセス、または分岐する場合があります。
- 問題発生条件
- 3.1 アセンブリソースで、オペランドに下記のアドレッシングモードもしくは、命令フォーマット指定を行った場合に問題が発生します。ただし、下記のexpが、リンク時まで解決されないシンボルを含む式の場合に限ります。expが、絶対値であり、かつ外部参照ではない場合、問題はありません。
なお、「exp」は、式を表しています。
| (1) | 絶対モードのアドレスを示す式 exp に「:16」のサイズ指定を行っている場合
リンク時にexpが0x8000~0xFFFFの場合に誤ったアドレスにアクセスします。命令が分岐命令(JSR,JMP)の場合に誤ったアドレスに分岐します。
-----------------------------------------
例) JSR @exp:16
MOV @exp:16, R0
----------------------------------------- |
| (2) | レジスタ相対間接モード、PC相対間接モード、多段間接モードのディスプレースメントexpに:16のサイズ指定を行っている場合
リンク時にexpが0x8000~0xFFFFの場合に誤ったアドレスにアクセスします。命令が分岐命令(JSR,JMP)の場合に誤ったアドレスに分岐します。
-----------------------------------------
例) MOV @(exp:16,R0), R0
MOV @(exp:16,PC), R0
JSR @(exp:16,PC)
|