最適化リンケージエディタ V.9情報
最適化リンケージエディタ V.9.05.01情報
改修内容
下記の問題を改修しました。
- デバッガに表示するアドレス値がコードとずれる問題を改修しました。
- リストファイルのクロスリファレンス情報に間違った参照アドレスを出力する問題を改修しました。
最適化リンケージエディタ V.9.05.00情報
新機能
- 以下のオプションを追加しました。
- cpu=strideオプション
セクションがセクションの割り付けアドレスに対して、割り付けるメモリ範囲に収まらない場合に、次の同メモリ種別のセクションに配置、または、そのセクションを分割して配置することが可能になります。
- contiguous_sectionオプション
本オプションで指定したセクションは、cpu=strideオプションが有効なときに、分割せずに同メモリ種別の割り付け可能なアドレス領域に割り付けます。
- show=allオプション
showオプションのサブオプションにallを追加しました。
全てのリスト内容の出力を有効にします。
- 以下の機能を追加しました。
- エラー終了時にリンケージマップを出力します。
- リロケータブルファイル出力時にバイナリファイルを入力ファイルに指定できるようになります。
改修内容
下記の問題を改修しました。
2009年03月02日掲載「SuperH RISC engine C/C++コンパイラパッケージ V.9の使用上の注意事項」の6.〜9.
最適化リンケージエディタ V.9.04.00情報
新機能
以下のオプションを追加しました。
- RTs_file
特定エミュレータ向けの情報ファイルを出力します。
- CRc
指定した範囲のCRC(Cyclic Redundancy Check)演算を行い、計算結果を指示したアドレスのメモリに埋め込みます。
改修内容
下記の問題を改修しました。
2008/04/01掲載 「最適化リンケージエディタでリテラルプールを参照する命令を最適化した場合の注意事項」
最適化リンケージエディタ V.9.03.00情報
新機能
次のオプションを最適化リンケージエディタ(以降、リンカと略します)に追加しました。
- total_size
total_sizeオプションを使用すると、標準出力へ下記種別ごとのセクション合計サイズを出力できます。
- 実行可能セクション
- ROM配置データセクション
- RAM配置データセクション
- show=total_size
show=total_sizeオプションを使用すると、上記種別ごとのセクションの合計サイズをリンケージリストに出力できます。
改修内容
- 下記番号のメッセージ表示を改善しました。
該当メッセージ番号: L3110
該当メッセージの原因となるファイルがライブラリファイル内の特定ライブラリモジュールである場合、V.9.03.00以降ではそのライブラリモジュール名まで表示します。
改善前(リンカV.9.02.00以前)のメッセージ例
** L3110 (F) Illegal cpu type "<CPU;種別>" in "<ライブラリ名>"
改善後(リンカV.9.03.00以降)のメッセージ例
** L3110 (F) Illegal cpu type "<CPU;種別>" in "<ライブラリ名> (<モジュール名>)"
リンカのバージョンは以下の操作で確認できます。
- 統合開発環境High-performance Embedded Workshopのメニュー「ツール」->「アドミニストレーション」を選択します。
- 開いたツールアドミニストレーションダイアログボックスの「登録済みコンポーネント」リストの「Toolchains」の中から使用中のコンパイラパッケージを選択し、プロパティボタンをクリックします。
- 表示されたプロパティダイアログボックスの「情報」タブを選択するとバージョンが表示されます。
表示例: Optimizing Linkage Editor (V.9.00.02)
- スタック解析ツールCall Walkerで、プログラムのスタック使用量が正しく表示されない(実際の使用量より少なく表示する)場合がありましたが、これを改修しました。
問題の発生条件:
以下の条件をすべて満たす場合に発生することがあります。
- コンパイル時に、最適化オプション -optimize=1を使用している。
- C言語ソースファイル内で、直後に記述した関数を呼び出している関数がある。
Cソース例
-----------------------------------------
void f()
{
:
g(); /*直後の関数gを呼び出している*/
}
void g()
{
:
}
-----------------------------------------
注意事項:
コンパイル時に、goptimizeオプションを使用していない場合、最新のリンカ(V.9.03.00)を使用しても本件が再現する場合があります。
本問題を回避するためには、コンパイル時にgoptimizeオプションを使用してください。
この注意事項に記載の問題は、次回のコンパイラリのビジョンアップ時に改修する予定です。
- 以下の内部エラーが発生する問題を改修しました。
- L4000 (-) Internal Error : (1153)
- L4000 (-) Internal Error : (3081)
- L4001 (-) Internal Error
最適化リンケージエディタ V.9.02.00情報
新機能
- オプションps_checkを新規追加しました。
ps_checkオプションを使用することにより、32bitの仮想アドレス空間をサポートするマイコンにおいて、物理アドレス空間上でのオブジェクトコードの重なりを検出することができます。
- オプションbyte_countを新規追加しました。
byte_countオプションを使用することにより、インテルHEX形式ファイルのデータレコードの最大バイト数を変更することができます。
- MCUの空きROMエリアへ乱数を充填する機能を追加しました。
下記形式のファイルの空きエリアに、乱数を埋め込むことができるspace=randomオプションを新規追加しました。
- Sタイプファイル
- インテルHEX形式ファイル
- バイナリファイル
- メモリ使用量を削減するオプションmemory=lowが、ライブラリファイル作成時にも使用できるようになりました。
改修内容
- レジスタ退避および回復の最適化機能を使用している場合に、誤ったオブジェクトコードを生成する問題を改修しました。
問題の発生条件:
以下の条件をすべて満たす場合に発生することがあります。
- マイコン種別が、SH-2AかSH2A-FPUのいずれかである。
- コンパイル時にgoptimizeオプションを選択している。
- リンク時に、レジスタ退避および回復の最適化機能(例えば、optimize=registerオプション)を使用している。
- 下記いずれかの条件に該当している。
(d-1) コンパイル時にsizeオプションを選択している。
(d-2) コンパイルにより、4byteサイズ命令位置へ分岐する命令が生成される。
補足:
(d-2)に該当するかどうかは、コンパイルリスト(.lst)ファイルから確認できます。コンパイルリストを生成するには、コンパイル時に、listオプションshow=objectを選択してください。
- 下記3つのオプションのパラメータであるファイル名やフォルダ名が文字コードに0x7cを含む文字(たとえば"ポ")を含む場合、誤ってエラーL3300となり、リンクできない問題を改修しました。
・inputオプション(入力オブジェクトファイル選択)
・libraryオプション
・binaryオプション
- 未参照シンボル削除の最適化オプションoptimize=symbol_deleteの使用によって、内部エラーが発生する、もしくは、誤ったオブジェクトコードが生成されることがある問題を改修しました。
問題の発生条件:
以下の条件をすべて満たす場合に発生することがあります。
- リンカのバージョンが V.9.00.00 以降*である。
- コンパイル時に最適化オプションoptimize=1を使用している。
- コンパイル時にgoptimizeオプションを選択している。
- コンパイル後に、サイズが0byteになる関数が存在する。
- リンク時に、未参照シンボル削除の最適化オプションoptimize=symbol_deleteを使用している。
- eの最適化によって、dの関数が削除される。
補足:
削除された関数とそのサイズは、リンケージリストファイル(.map)から確認できます。リンケージリストを生成するには、リンク時に、listオプションshow=symbolを選択してください。
* バージョン確認方法
- 統合開発環境High-performance Embedded Workshopのメニュー「ツール」->「アドミニストレーション」を選択する。
- 開いたツールアドミニストレーションダイアログボックスの「登録済コンポーネント」リストの「Toolchains」フォルダの中から使用中のコンパイラパッケージを選択し、プロパティボタンをクリックする。
- 表示されたプロパティダイアログボックスの情報タブを選択するとバージョンが表示される。
表示例: Optimizing Linkage Editor (V.9.02.00)
- 下記2つの機能を同時に使用した場合に、誤ってエラーL2330となることがある問題を改修しました。
・コンパイラのmapオプション
・リンカの未参照シンボル削除の最適化オプション
optimize=symbol_delete
- リンカが生成するインテルHEX形式ファイルの内容について、下記3点を変更しました。
- 04レコードを出力する際に、これまで同時にベースアドレス0の02レコードを出力してきましたが、02レコードを出力しないようにしました。
- スタートアドレスを表すレコード(03レコードと05レコード)の出力位置を、エンドレコード(01レコード)の直前へと変更しました。
- 03レコードでのスタートアドレス表現が、インテルHEX形式仕様に準拠していなかった問題を改修しました。
補足:
インテルHEX形式ファイルの内容については、下記を参照してください。
SuperH RISC engine C/C++コンパイラ、アセンブラ、最適化リンケージエディタユーザーズマニュアル
18.1.2 インテルHEXファイル形式
最適化リンケージエディタ V.9.01.00情報
新機能
- SEction_forbidオプションを追加しました。
本オプションはセクション単位で最適化を抑止します。
機能の詳細は、製品に添付の資料「最適化リンケージエディタV.9.01仕様追加オプションについて」を参照ください。
- STARtオプションの機能を拡張し、"()" の記法を新たに導入しました。
機能の詳細は、製品に添付の資料「最適化リンケージエディタV.9.01仕様追加オプションについて」を参照ください。
- SH-2A用のオブジェクトに対して、レジスタ退避および回復コードの最適化
(optimize=register)を追加しました。
改修内容
- レジスタ退避/回復の最適化 (optimize=register)によって、誤ったオブジェクトコードを生成する問題を改修しました。
問題の発生条件:
以下の条件をすべて満たす場合に発生することがあります。
- C/C++ソースファイル中にswitch文を記述している。
- コンパイルにより、switch文を持つ関数内のアセンブリコードとしてMOVA命令が生成される。*
- コンパイル時にgoptimizeオプションを選択している。
- リンク時の最適化で、レジスタ退避/回復の最適化(optimize=register)を使用している。
* コンパイルによって生成された命令は、コンパイルリスト(.lst)ファイルから確認できます。コンパイルリストを生成するには、コンパイル時に、listオプション、show=objectオプションを選択してください。
- 内部エラーが発生する場合がある問題を改修しました。
問題の発生条件:
以下のいずれかの条件を満たす場合に発生することがあります。
- EQUラベルをアセンブリソース内で記述し、リンク時の最適化を使用している。
(発生する内部エラー: L4001)
- outputオプションで、アドレス範囲を記述して出力ファイルを分割している。
(発生する内部エラー: L4000-5560)
- リロケータブル (.rel) ファイル入力時、リンク時の最適化を使用している。
(発生する内部エラー: L4000-8150)
- プログラムセクションをリンカのromオプションに記述していて、リンク時の最適化を使用している。
(発生する内部エラー: L4000-8151)
最適化リンケージエディタ V.9.00.03情報
改修内容
- リンカが生成するリンケージリストファイルに関する問題を改修しました。
- 以下のエラー L0103が誤って出力される問題を改修しました。
** L0103 (I) Multiple stack sizes specified to the symbol "関数名"
問題の発生条件:
以下の条件をすべて満たす場合に発生することがあります。
- リンカのバージョンが V.9.00.00 以降である (*)。
- C/C++ソースファイルで定義した関数と同じ名前の変数 (extern修飾 子付き)が別のC/C++ソースファイルに存在する。 もしくは、「_<関数名>」というimportラベルがアセンブリソース ファイルに存在する。
- リンク時にmessageオプションを使用している。
- リンク時にstackオプションを使用している。
- 誤ったスタック情報ファイル (.sni) を出力する問題を改修しました。
問題の発生条件:
以下の条件をすべて満たす場合に発生することがあります。
- リンカのバージョンが V.9.00.00 以降である(*)。
- C/C++ソースファイルで定義した関数と同じ名前の変数 (extern修飾 子付き)が別のC/C++ソースファイルに存在する。 もしくは、「_<関数名>」というimportラベルがアセンブリソース ファイルに存在する。
- リンク時にstackオプションを使用している。
注意:
該当の.sniファイルを、スタック解析ツール (Call Walker)に 入力すると、誤ったスタック使用量が表示されます。
- 未参照シンボル削除の最適化 (optimize=symbol_delete) によって、 誤ったオブジェクトコードが生成される問題を改修しました。
問題の発生条件:
以下の条件をすべて満たす場合に発生することがあります。
- リンカのバージョンが V.9.00.00 以降である(*)。
- コンパイル時にgoptimizeオプションを使用している。
- コンパイル時にpack=1オプションを使用している。 もしくは、C/C++ソースファイル中に「#pragma pack 1」を記述して いる。
- リンカの未参照シンボル削除の最適化が有効になっている。 以下のいずれかの場合に有効になります。
- optimize=symbol_deleteオプションを使用している
- optimize=speedオプションを使用している
- optimizeオプションを使用している
- nooptimizeオプションを使用していない
- d.の最適化で、定数 (const修飾子付き変数)、もしくは初期値 付き変数が、参照されない変数として削除される。
- デバッグ情報圧縮機能(compressオプション)を使用すると、誤った デバッグ情報を生成する問題を改修しました。
問題の発生条件:
以下の条件をすべて満たす場合に発生することがあります。
- リンカのバージョンが V.7.0 以降である (*)。
- コンパイル時にdebugオプションを使用している。
- リンカでcompressオプションを使用して、リロケータブルファイル (.rel)を生成している。
- c.の.relファイルをリンカに入力し、compressオプションを使用 してロードモジュールを生成している。
注意:
該当のロードモジュールをデバッガにロードすると誤った内容を表示します。
- 使用する最適化オプションの組み合わせによって、以下のエラーL3320を 誤って出力する問題を改修しました。
** L3320 (F) Memory overflow
問題の発生条件:
以下の条件をすべて満たす場合に発生することがあります。
- リンカのバージョンが V.9.00.00 以降である (*)。
- コンパイル時にgoptimizeオプションを使用している。
- リンク時の最適化オプションが以下のいずれかである。
- optimize=symbol_delete, register, string_unify の3種類の最適化を同時に使用している
- optimize=speedオプションを使用している
- optimizeオプションを使用している
- nooptimizeオプションを選択していない
- c.の最適化によって、削除される関数がある。
- 内部エラーを出力する問題を改修しました。
問題の発生条件:
以下のいずれかを満たすと、問題が発生する場合があります。
- アセンブリ言語記述の.EQUシンボルを含んだ .relファイルを、 リンカに入力している。
(発生する内部エラー: L4000-8010)
- .EQUシンボルを呼び出す関数コールを持つオブジェクトファイルを リンカに入力している。
(発生する内部エラー: L4000-8874)
- .relファイルをリンカに入力している。
(発生する内部エラー: L4000-8027または L4001)
* リンカのバージョンの確認方法
- 統合開発環境High-performance Embedded Workshopの メニュー「ツール」->「アドミニストレーション」を選択する。
- 開いたツールアドミニストレーションダイアログボックスの 「登録済コンポーネント」リストの「Toolchains」の中から 使用中のコンパイラパッケージを選択し、プロパティボタンを クリックする。
- 表示されたプロパティダイアログボックスの情報タブを選択すると リンカのバージョンが表示される。
表示例: Optimizing Linkage Editor (V.9.00.02)
最適化リンケージエディタ V.9.00.02情報
改修内容
以下の問題点を改修しました。
- align16およびalign32オプション指定時のオブジェクト不正コンパイル時にalign16もしくはalign32オプションを指定したオブジェクトを入力した際、リンク時の最適化によって間違ったコードが生成される場合がある。
発生条件:以下の条件をすべて満たす場合、発生する可能性があります。
- コンパイル時にalign16もしくはalign32オプションを指定している。
- コンパイル時にgoptimizeオプションを指定している。
- リンク時にnooptimizeオプションを指定していない。
最適化リンケージエディタ V.9.00.01情報
改修内容
以下の5件の問題点を改修しました。
- 共通コード統合最適化(optimize=same_code)が有効な場合、生成されたデバッグ情報を使ってデバッガでステップ実行を行うと間違った関数へ分岐する場合がある。
- .stack制御命令を、定義シンボルには記述せずに参照シンボルのみに指定した場合に、その情報がsniファイルに出力されない。
- 共通コード統合最適化が有効な場合、リロケータブルファイルを入力すると間違ったコードが生成される場合がある。
発生条件:以下の条件をすべて満たす場合、発生する可能性があります。
- コンパイル時にgoptimizeオプションを指定している。
- 共通コード統合最適化(optimize=same_code)が有効である。
- 最適化リンケージエディタ V.8.00.03以降のバージョンを使用している。
- リンク時に、リロケータブルファイルを入力している。
- d.のリロケータブルファイルのコードが、b.の最適化により4n+2バイト(4の倍数でないサイズ)で共通化される。
- 定数および文字列統合最適化が有効な場合、不適切なエラー(L2330)が出力される場合がある。
発生条件:以下の条件をすべて満たす場合、発生する可能性があります。
- コンパイル時にgoptimizeオプションを指定している。
- 定数および文字列統合最適化(optimize=string_unify)が有効である。
- コンパイル時にabs16オプションを指定している、または#pragma abs16宣言されているconst指定変数がある。
- 以下に該当する場合に内部エラーが発生する。
- 未参照シンボル削除最適化(optimize=symbol_delete)が有効な場合に出力ファイルをoutputオプションを使用して複数ファイルに分割するように指定している。
(内部エラー(7041)発生)
- profileオプション使用時に、binaryオプションを指定している。
(内部エラー(L4001)発生)
最適化リンケージエディタ V.9.00.00情報
新CPUのサポート
CPU種別がSH-2A、SH2A-FPUのオブジェクトファイルの入力をサポートしました。
binaryオプション入力セクションへの境界調整数指定
binaryオプションに指定するセクションに対して、境界調整数の指定ができます。
クロスリファレンス情報出力
show=xreferenceオプション指定により、クロスリファレンス情報がリンケージリスト内に出力されます。これにより、変数/関数がどこから参照されているのかを知ることができます。
参照されないシンボルの通知オプション
msg_unusedオプション指定により、最適化を使用しない状況でも参照されないシンボルの存在を知ることができます。