RENESAS TOOL NEWS 2005年04月16日 : RSO-SHC-050416D
SuperH RISC engine, H8, H8S, およびH8SX ファミリ用
最適化リンケージエディタ
ご使用上のお願い
|
SuperH RISC engine, H8, H8S, および H8SXファミリ用C/C++コンパイラパッケージに付属している最適化リンケージエディタ使用上の注意事項を連絡します。
- 最適化リンケージエディタが生成するリンケージリストファイルに関する注意事項
- 該当製品
下記バージョンのコンパイラパッケージに付属している最適化リンケージエディタ(以降リンカとする) V.9.00.00 以降が該当します。
- SuperH RISC engineファミリ用
C/C++コンパイラパッケージ V.9.00 Release 00 以降
- H8, H8S, およびH8SXファミリ用
C/C++コンパイラパッケージ V.6.01 Release 00 以降
リンカのバージョンは、下記手順により確認できます。
| (1) |
High-performance Embedded Workshopのメニュー「ツール」->「アドミニストレーション」を選択してください。 |
| (2) |
開いたツールアドミニストレーションダイアログボックスの「登録済コンポーネント」リストの「Toolchains」の中から使用中のコンパイラパッケージを選択し、プロパティボタンをクリックしてください。 |
| (3) |
表示されたプロパティダイアログボックスの情報タブを選択すると、リンカのバージョンが表示されます。
表示例:Optimizing Linkage Editor (V.9.00.02) |
以降、記載しているバージョンはリンカのものです。
- 内容
リンケージリストファイル(xx.map)に出力される変数名および関数名(以降シンボル名とする)について、V.8.00.08以前とV.9.00.00以降とでは次に示す相違がありますので、リンケージリストファイルを参照する際にはご注意ください。
リンケージリストファイルへ出力されるシンボル名の相違点
| V.8.00.08以前 : |
Cソースプログラムの場合、定義された変数および関数の名前に"_"を付加してシンボル名を表示します。
C++ソースプログラムの場合、ソースファイル記述の形式でシンボル名を表示します。 |
| V.9.00.00以降 : |
ツール内部で使用するためのシンボル名を出力する場合があります。 |
- 2.1 発生条件
-
下記の(1)~(3)の条件をすべて満たす場合に発生します。
| (1) |
リンカのlistオプションを使用している |
| (2) |
リンカのshowオプションのうち次のいずれかを使用している
・show
・show=symbol
・show=reference
・show=xreference |
| (3) |
リンカに入力するオブジェクトファイルが下記のいずれかの条件を満たす。
(a) static宣言されているシンボルが存在する。
(b) 拡張子が.cppであるソースファイル(*)をコンパイルしたものである。
(c) lang=cppオプションを使用して(*)コンパイルしたものである。 |
* コンパイラはコンパイル対象がC++ソースファイルであるとして処理します。
- 2.2 発生例
-
(1) static宣言されたシンボル名の出力例 (発生条件3-a)
ソース例
----------------------------------------------------------
static int a;
----------------------------------------------------------
出力例
V.8.00.08以前 : _a
V.9.00.00以降 : __$a
(2) C++プログラムとしてコンパイルした場合のシンボル名の出力例 (発生条件3-aおよび3-c)
ソース例1
----------------------------------------------------------
int f1(int a, int b)
{
return a+b;
}
----------------------------------------------------------
出力例1
V.8.00.08以前 : f1(int, int)
V.9.00.00以降 : _f1__FiT1
ソース例2
----------------------------------------------------------
int C::f1(int a, int b)
{
return a+b;
}
----------------------------------------------------------
出力例2
V.8.00.08以前 : C::f1(int, int)
V.9.00.00以降 : _f1__1CFiT1
- 恒久対策
本問題は、最適化リンケージエディタ V.9.00.03にて改修する予定です。
なお、リンカが出力する以下のメッセージは、該当コンパイラパッケージの全てのバージョンにおいてツール内部で使用するためのシンボル名を出力しておりましたがV.9.00.03以降では、リンケージリストファイルに出力されるシンボル名に統一するように仕様変更します。
| L0003 (I) |
"ファイル"-"シンボル" moved to "セクション" by optimization |
| L0004 (I) |
"ファイル"-"シンボル" deleted by optimization |
| L1321 (W) |
Entry symbol "シンボル" in "ファイル" conflicts |
| L2401 (E) |
near8,near16 symbol "シンボル" is outside near memory area |
| L2410 (E) |
Address value specified by map file differs from one after linkage as to "シンボル" |
| L2416 (E) |
Order of functions specified by map file differs from one after linkage as to "関数名" |