最適化リンケージエディタ V.7情報
V7.1.06制限事項の対策
- 内部エラーの解決
次の内部エラーが生じる不具合を解決しました。
- 共通コード統合最適化指定時の内部エラー(1703)
- 定数/文字列統合最適化指定時の内部エラー (1704)
- 分岐命令最適化指定時の内部エラー (8899)
- アセンブラ出力Objectについて分岐命令最適化指定時の内部エラー (8705)
- form={ binary | stype | hexadecimal }指定時の不正動作
outputオプションで存在しないディレクトリを指定した際、binary/stype/hexadecimal形式で出力指定をした場合に、出力ファイルが作成されないにも関わらずエラーメッセージが出力されない問題を解決しました。
- 未参照シンボル削除最適化指定時のオブジェクト不正
次の条件を満たす場合、最適化によってアクセスする配列の要素が不正となる場合がある不具合を解決しました。
- アクセスされる配列A_arr[ ]が存在する。
- 最適化にて削除対象となる配列B_arr[ ](もしくは変数)が存在する。
- A_arr[ ],B_arr[ ]はそれぞれ別セクションに存在している。ここではそれぞれのセクションをA,Bとする。
- startオプション指定により、AセクションとBセクションのアドレスが重複するようにセクションを配置する。
- 未参照シンボル削除最適化を有効にする。
- C++オブジェクトをリンクする際の不正なエラー出力
C++で、templateを使用して作成したオブジェクトをリンクした際に、不正にP3300(F)エラーが生じる場合がある不具合を解決しました。
- SYSROF形式へ変換した際のデータ欠如
次の条件を満たす場合、データが不正に欠落してしまう場合がある不具合を解決しました。
- C++によりソースが記述されている。
- リンク時に、未参照シンボル削除最適化を有効にしている。
- コンバータによりオブジェクトフォーマットをELF->sysrofに変換している。
V7.1.05制限事項の対策
- 最適化指定時の内部エラー
最適化指定時に、内部エラー(1703,1704,8710,8874)が発生する場合がある不具合を解決しました。
- outputオプション指定時の内部エラー
outputオプションにおいて、出力範囲をアドレスで指定した場合に内部エラー(7707)となる場合がある不具合を解決しました。
- HEX,BIN,Stype出力の内部エラー
C++にてソースを記述した場合、出力形式がHEX,BIN,Stypeの場合に内部エラー(3304)となる場合がある不具合を解決しました。
- mapオプション指定時の内部エラー
mapオプションを指定した際に内部エラー(8093)となる場合がある不具合を解決しました。
- レジスタ退避/回復最適化指定時のObject不正
レジスタ退避/回復コード最適化を指定した際、次のいずれかの条件を満たす時、不正なObjectコードが生成される場合がある不具合を解決しました。
- ファイル内の最後の関数にリテラルが存在しない。
- レジスタ回復コード列の直後に分岐先が存在する。
- 最適化対象関数にSUBC命令が含まれており、そのSUBC命令自体がレジスタ番号の変換対象である。
V7.1.04制限事項の対策
- outputオプションでアドレス範囲指定時の内部エラー(7041)
outputオプションを指定した際、アドレス範囲で出力指定した場合に内部エラー(7041)となる場合がある不具合を解決しました。
- 最適化抑止指定時の不当な最適化
次の条件を全て満たす時、最適化抑止範囲が有効にならない不具合を解決しました。
- goptimizeオプション指定ありのファイルを入力。
- optlnkで最適化を指定。
- absolute_forbidオプションを指定。
- 最適化抑止範囲を2つ以上記述(2つ目以降の指定が無効となる)。
- relocateファイル生成時のObject不正
次の条件を全て満たす時、不正なObjectコードが生成される不具合を解決しました。
- 入力にrelocateファイルを指定。
- 出力にrelocateファイルを指定。
- deleteまたはrenameオプションを指定。
- map最適化使用時の不当なエラー(L2410)出力
map最適化指定時、オーバーレイを使用している場合に不当なエラーが出力される不具合を解決しました。
- レジスタ退避/回復コード最適化指定時のインターナルエラー(1703)
レジスタ退避/回復コード最適化を指定時に、インターナルエラー(1703)となる場合がある不具合を解決しました。
- profileオプション指定の最適化で内部エラー(8899,8876,8921)
goptimizeオプション指定ありのobjectファイルについて、profileオプションを指定する最適化を行なった際に内部エラー(8899,8876,8921)となる不具合を解決しました。
- 異なるCPU種別の混在したrelocatableファイルリンク時の内部エラー(3081)
CPU種別の2600aと2600nが混在したRelocateファイルのリンク時に、compress,delete,renameオプションまたは最適化を指定すると内部エラーとなる不具合を解決しました。
V7.1.02制限事項の対策
- compressオプション指定時のデバッグ情報不正
compressオプション指定によりデバッグ情報を圧縮した際、型情報の参照先が不正となる不具合を解決しました。
- 外部変数アクセス最適化に関するアドレスチェック
コンパイラのmapオプション指定(外部変数アクセス最適化)時のシンボルアドレスについて、リンク時にmapオプションを指定したときのみチェックしていたのを、常にアドレスチェックを行なうように修正しました。
- binaryファイル入力指定時のセクション属性不正
次の条件を全て満たす時、セクションの属性が不正となる不具合を解決しました。
- objectファイルとbinaryファイルを入力。
- objectファイル内でサイズ0のセクションを定義。
- binaryオプションでサイズ0のセクションを指定。
- ファイルの入力指定順:b.のobjectファイル -> c.のbinaryファイル。
- relocateファイル生成時の異常終了
次の条件を全て満たす時、異常終了する不具合を解決しました。
- 入力objectファイルの先頭: goptimizeオプション指定ありのファイル。
- 入力objectファイルの2番目以降の入力: goptimizeオプション指定なしのファイルまたはアセンブラ出力ファイル。
- 出力形式にrelocateファイルを指定。
- profileオプション指定あり。
- 最適化指定あり。
- 未参照シンボル削除とレジスタ最適化実施時の内部エラー(1703)
次の条件を全て満たす時、内部エラーが生じる不具合を解決しました。
- goptimizeオプション指定ありのobjectファイルを入力。
- a.のobjectファイル内に分岐幅が境界(-4096または4094)のBSR、またはBRA命令が存在。
- 未参照シンボル削除最適化、およびレジスタ最適化を指定。
- 複数関数が同一リテラルを指す場合のリテラル参照不正
次の条件を全て満たす時、参照するリテラルの値が不正となる不具合を解決しました。
- goptimizeオプション指定ありのobjectファイルを入力。
- a.のobjectファイル内で、複数関数が同一リテラルを参照。
- レジスタ退避/回復コード最適化を指定。
V7.1制限事項の対策
- rename指定時のデバッグ情報不正
-form=relocate 指定時に-rename を指定すると、当該セクション内シンボルのデバッグ情報が削除される不具合を解決しました。
発生条件:
次の条件を全て満たす時、発生します。
- -form=relocateを指定している。
- -renameを指定している。
- const、リテラルデータ最適化不正
-optimize=string_unifyを指定すると不正にシンボルの統合最適化を実施する不具合を解決しました。
発生条件:
次の条件を全て満たす時、発生する可能性があります。
- Cソースファイルを-goptimizeオプション指定でコンパイルする。
- 最適化リンカで、-optimize=string_unifyを指定する。
- キャッシュ最適化指定時内部エラー
-optimizeオプションと-cacheオプションを同時に指定すると内部エラーが発生する不具合を解決しました。
オプションの追加
- map[=<ファイル名>]
コンパイラで外部変数アクセス最適化を行うためのファイルを出力。(SH製品のみ)
- compress/nocompress
デバッグ情報の圧縮有無を指定する。
V7.0A制限事項の対策
- Internal error解決
次のInternal errorとなる問題点を解決しました。
- (1703) "File:oc_updat.cpp Line:5496 /This lDisp is Limit Over" /"oc_update_jsrdsp()"
- (1704) "File:oc_updat.cpp Line:6129 /This lDisp is Limit Over" /"oc_update_movdsp()"
- (3061) "File:dw_arng.cpp Line:209 /Cannot find relocation table" /"DWArangeList::createArange()"
- (3081) "File:dw_loc.cpp Line:191 /Illegal address size" /"createLocation()"
- (8090) "File:in_devtb.cpp Line:9177 /Unexpected table end(add,sub,mov...etc..)"/"in_lastcode_chk_SH"
- (8833) "File : ca_updat.cpp Line : 3163 /The contents of the OFFINF_SH->LITRINF table are not literal data." /"ca_update_Add_Literal _Operation"
- (8870) "File:oc_updat.cpp Line:10251 /Position is NULL" /"OBF_AT"
- (8874) "File:oc_serch.cpp Line:2583 /Position is NULL" /"SUB_AT"
- ライブラリ作成時エラー
UNIX版ライブラリ構築ツールを用いて、標準ライブラリ作成時にHLNK_DIRが指定されている時、「L3310 (F) Cannot open temporary file」のエラーメッセージが表示されライブラリが作成できない問題点を解決しました。
- 絶対アドレスセクション同士のリンク時不正
絶対アドレスセクションの後ろに同名でサイズ0の絶対アドレスセクションをリンクすると、オブジェクト不正となる問題点を解決しました。
- goptimizeによる実行不正
goptimizeオプション指定無しの関数(アセンブリ関数を含む)と指定有りの関数からgoptimizeオプション指定有りの関数呼び出し関係がある時、実行不正になる問題点を解決しました。
- シンボル分岐幅不正
共通コードの最適化で作成したシンボルへの分岐幅が不正になる問題点を解決しました。
発生条件:
次の条件を全て満たす時、発生します。
- 入力オブジェクトは、goptimizeオプション指定有り。
- romオプションでコードセクションを指定。
- リンク時、optimizeオプション指定あり。
- 不当シンボル削除
不当にシンボル削除を行う問題点を解決しました。
発生条件:
次の条件を全て満たす時、発生します。
- goptimizeオプション無しオブジェクトからgoptimizeオプション有りオブジェクトを参照するコードが存在する。
- ENTRY指定有り。
- 未参照変数/関数削除最適化(optimize=symbol_delete指定時)を行う。
- 退避/回復レジスタ不正
同一Cソース内のある関数から次に定義されている関数を呼び出した場合、レジスタ退避/回復コード最適化を不正に行う問題点を解決しました。
- リテラルプール値不正 (SH製品のみ)
レジスタ退避/回復コードの最適化で、リテラルプールの値が不正になる問題点を解決しました。
発生条件:
次の条件を全て満たす時、発生します。
- 該当関数のレジスタ退避/回復コードが最適化される。
- 該当関数には、レジスタ退避/回復領域をまたぐスタックアクセスが存在する。
- スタック渡し引数があり、そのSPオフセットが2byteである。
V7.0制限事項の対策
- フォーマットコンバータ(helfcnv)実行時のG2003エラー
1.1 事例1
未参照関数削除時、helfcnvでG2003 (E) Illegal file formatとなる問題点を解決しました。
発生条件:
次の条件を全て満たす時、発生します。
- コンパイル時にgoptimizeオプション、debugオプションを同時に指定。
- optimize=symbol_delete(またはoptimize)オプションを指定。
- a.を指定したファイルに未参照シンボル削除最適化の対象となる関数がある。
1.2 事例2
リロケータブルロードモジュール最適化時、helfcnvでG2003 (E) Illegal file formatとなる問題点を解決しました。
発生条件:
次の条件を全て満たす時、発生します。
- コンパイル時にgoptimizeオプション、debugオプションを同時に指定。
- a.のファイルを入力し、form=relocateオプションでリンク指定。
- b.のファイルを入力し、optimizeオプションを指定。
- c.の出力ファイルをhelfcnvでSYSROFに変換。
- form=relocate指定時の3101エラー
0番地の絶対アドレスセクションを含むobjectをform=relocateオプションでリンクすると、
L3101 (F) Section "section名" overlaps section "section名"となる問題点を解決しました。
発生条件:
次の条件を全て満たす時、発生します。
- アセンブリプログラムに0番地の絶対アドレスセクション(.section制御命令でlocateを指定)を記述する。
またはCプログラムに#pragma interrupt/entry/indirect,__interrupt,__entry,__indirectを用いて0番地にベクタテーブル生成(vect=<ベクタ番号>)を指定。
- form=relocateオプションを指定。
- 内部エラーL4000(8874)
未参照の外部定義EQUシンボル記述時に、内部エラー
L4000(-) Internal error : (8874) "File:in_devtb.cpp Line:5422 / Position is NULL" / "SUB_AT"
が出力される問題点を解決しました。
発生条件:
次の条件を全て満たす時、発生します。
- アセンブリプログラムに外部定義の.equを記述。
- a.のプログラム内に別の外部定義シンボルが存在する。
- a.のプログラムのオブジェクトをライブラリに入力する。
- b.のシンボルを参照し、かつa.のシンボルは未参照のプログラムをリンクする。
- defineオプション指定時の内部エラーL4000(8971)
defineオプション指定時に内部エラー
L4000(-) Internal error : (8971) "File:oc_input.cpp Line:2469 / oc_offset_to_abs" / "sub_pos is NULL"
となる問題点を解決しました。
発生条件:
次の条件を全て満たす時、発生します。
- defineオプションでシンボルをアドレス指定する。
- オブジェクトファイル内にa.のシンボルに対し、シンボル+定数値が存在する。
- 内部エラーL4000(7041)
絶対アドレスセクションを含むobjectをform=relocateでリンク後、form=absoluteで再リンクするときに
内部エラーL4000(-) Internal error : (7041) "File:ob_obj.cpp "が出力される問題点を解決しました。
発生条件:
次の条件を全て満たす時、発生します。
- アセンブリプログラムに絶対アドレスセクション(.section制御命令でlocateを指定)を記述する。
またはCプログラムに#pragma interrupt/entry/indirect,__interrupt,__entry,__indirectを用いてベクタテーブル生成(vect=<ベクタ番号>)を指定。
- a.の絶対アドレスセクションに外部参照シンボルまたは相対アドレスセクション内シンボルの参照がある。
- 上記絶対セクションを含むobjectをform=relocateでリンクする。
- c.のリロケータブルロードモジュールをform=absoluteで再リンクする。
- Duplicate symbol発生時のシンボル優先順
L2300 (E) Duplicate symbol "シンボル" in "ファイル"エラー発生時、-change_messageで2300をInformationまたはWarningレベルに変更した場合、シンボル優先順位が入力ファイル順とならない問題点を解決しました。
発生条件:
次の条件を全て満たす時、発生する可能性があります。
- L2300 (E) Duplicate symbol "シンボル" in "ファイル"エラーが発生。
- change_message=i=2300または、change_message=w=2300を指定。
- profile最適化不正
profileオプション指定時、オブジェクトが不正になる問題点を解決しました。
発生条件:
次の条件を全て満たす時、発生する可能性があります。
- profileオプションを指定。
- 最適化(optimize)オプションを指定。
- リテラルデータ統合時の参照位置不正 (SH製品のみ)
optimize=string_unify最適化により、リロケータブルロードモジュールに含まれる同一オブジェクトファイル内のリテラルデータを統合したとき、リテラルデータ参照位置が不正になる問題点を解決しました。
発生条件:
次の条件を全て満たす時、発生する可能性があります。
- 同一セクション内に同じ外部変数リテラルが2回以上あるファイルをgoptimizeオプション、debugオプションでコンパイルする。
- a.のファイルを入力し、form=relocateオプションを指定。
- b.のファイルを入力し、optimize=string_unify(またはoptimize)オプションを指定。
- 最適化処理の高速化
最適化時の処理が極端に遅くなる不具合について、一部処理を見直し、対策を実施しました。
従来のOPTLNK,LNK,LIB,CNVSを統合
従来のモジュール間最適化ツール、リンケージエディタ、ライブラリアン、オブジェクトコンバータを統合しました。
入出力ファイルの充実
バイナリファイルの入出力、およびインテルHEXタイプファイルの出力をサポートしました。
その他
- 標準ELF/DWARF2フォーマット対応
- 制限値の緩和
- リスト表示の改善(アドレス昇順、シンボルサイズ表示)
- 入力ファイル、startオプションのセクション名にワイルドカード指定をサポート
- ディレクトリ名、ファイル名にハイフン(-)指定不可の制限を解除
- information/warning/errorメッセージのレベル、出力有無の指定をサポート
- logo/nologoオプション追加