本文へジャンプ

Hitachi

株式会社 日立超LSIシステムズ

オプションの追加

以下のオプションを追加しました。

  • DAta_stuff
    セクションの境界調整によりコンパイル単位ごとに生じる同一セクション内の空き領域を詰めて、データ領域サイズを削減する。

最適化指定時のデバッグ情報不正

リンク時の最適化により、デバッグ情報(行情報)が不正に編集されデバッガ上での表示が不正になる場合がある不具合を対策しました。

【発生条件】
次の条件をすべて満たす場合、発生する可能性があります。

  1. コンパイル(アセンブル)時にdebug,goptimizeオプションを指定している。
  2. リンク時の最適化が有効である。
  3. 最適化によって、デバッグ情報の行情報が出力される行の間隔が255行になる。

共通コード統合最適化によるオブジェクト不正(optlnk V.8.00.03以降)

共通コード統合最適化(optimize=same_code)が有効な場合にオブジェクト不正となる場合がある不具合を対策しました。不具合は、optlnk V.8.00.03以降で発生します。

【発生条件】
以下の条件1.〜3.をすべて満たす場合、発生する可能性があります。

  1. コンパイル時にgoptimizeオプションを指定している。
  2. 共通コード統合最適化(optimize=same_code)が有効である。
  3. 以下のa.からd.のいずれかの条件を満たしている。
    1. エントリ関数(#pragma entryもしくはentryオプション指定された関数)の前後に同一ソースファイル内で記述された関数が存在し、その関数が2.の最適化の対象となる。
    2. 【ソース例】
      #pragma entry f_entry
              void f_a(){
                  :
              }
              void f_entry(){    // エントリ関数
                  :
              }
              void f_b(){        // 以降の関数が最適化対象となる
                  :
              }

    3. リロケータブルファイルを入力時に、関数末尾のコードの直後にリテラルが存在しない関数が2.の最適化の対象となる。
    4. リロケータブルファイルを入力時に、2.の最適化によって関数のコード量が4n+2(2,6,10...)byte変化する。
    5. 連続して定義された関数(AとB)の両方が2.の最適化の対象となる、かつ、関数Aは最適化によってコード量が4n+2(2,6,10...)byte変化する。

mot/hexファイル出力時の空き領域出力不正

motファイル、もしくはhexファイルを出力した場合に、命令やデータが存在しない空き領域に対して、"0"(アスキーコード:0x30)を出力すべきところにNULL(アスキーコード:0x00)が不当に出力されてしまう不具合を対策しました。

【発生条件】
次の条件を全て満たす時、発生することがあります。

  1. コンパイル(アセンブル)時に、endian=littleオプションを指定している。
  2. リンク時に、form=stype(もしくはhex)オプションを指定している。
  3. 複数の入力オブジェクトファイルに、同一セクションに割りつくコード(もしくはデータ)が分かれて存在している。
  4. リンク時の境界調整により"0"が3.のセクションに埋め込まれる。

共通コード統合最適化指定時のオブジェクト不正

共通コード統合最適化を指定した場合に、共通化したサブルーチンへの分岐命令が不正になる場合がある不具合を対策しました。

【発生条件】
次の条件をすべて満たす場合、発生することがあります。

  1. 共通コード統合最適化(optimize=same_code)が有効である。
  2. コンパイル時にgoptimizeオプションを指定している。
  3. 最適化によって、2つ以上の共通サブルーチンが生成される。
  4. 生成された共通サブルーチン同士の距離が4096byte以内である。

change_messageオプションの複数エラーレベルの指定

change_messageオプションで、複数のエラーレベルを指定できない不具合を対策しました。

【例】
下記のようにchange_messageオプションを指定した場合、バージョンが8.0.03以前のリンカでは不当にエラーとなってしまいます。
optlnk -change_message=e=1000,w=2000 *.obj

未参照シンボル削除最適化指定時のオブジェクト不正

未参照シンボル削除最適化を指定した場合に、シンボル名を持たないリテラルを不当に削除する場合がある不具合を対策しました。

【発生条件】
次の条件を全て満たす時、発生することがあります。

  1. コンパイル時にgoptimizeオプションを指定している。
  2. Cソース内で、参照されないconst付き変数を記述している。
  3. 2.のCソース内で文字列リテラルを使用してる。
  4. 複数のオブジェクトファイルからリロケータブルファイルを生成している。
  5. 4.のリロケータブルファイルをリンク時に、未参照シンボル削除最適化(optimize=symbol_delete)が有効である。

stripオプション使用時の内部エラー(L4001)

optlnk V.8.00.04において、stripオプションを使用した場合に内部エラー(L4001)となる不具合を対策しました。

セクションのオーバーレイ配置指定時の不要なエラーメッセージ出力

初期値なしデータセクションをオーバーレイ配置した際、出力形式にbinary/HEX/S-typeを指定すると不要なエラーメッセージ(L2022)が出力される問題点を解決しました。

S-Type/HEXフォーマットファイル出力時の空き領域出力不正

最適化リンケージエディタ Ver.8.0.00〜Ver.8.0.03には次の不具合があります。本不具合は、SH C/C++コンパイラパッケージのみ発生します。申し訳ございませんが、ご使用時にはご注意ください。(Ver.8.0.04にて修正予定。)

【現象】
S-Type(もしくはHEX)フォーマットファイルを出力する場合に、命令やデータが存在しない空き領域に対して、 "0"(アスキーコード:0x30)を出力すべきところにNULL(アスキーコード:0x00)が不当に出力されてしまう場合があります。一部ROMライタでは、NULLは入力時にエラーになる可能性があります。

【発生条件】
次の条件をすべて満たす場合に発生します。

a.
コンパイル(アセンブル)時に endian=littleオプションを指定している。
b.
リンク時に form=stype(もしくはhexadecimal)オプションを指定している。
c.
複数の入力オブジェクトファイルに、同一セクションに割りつくコード(もしくはデータ)が分かれて存在している。
d.
リンク時の境界調整により"0"がc.のセクションに埋め込まれる。

【回避方法】
次の情報を修正してください。

a.
バイナリエディタを使用して、NULL文字(0x00)を "0"文字(0x30)へ書き換える。
b.
該当する行のチェックサムを再計算する。

メモリ使用量指定

memoryオプション指定により、内部のメモリ使用量を指定することができます。これにより大規模プログラム開発時にリンク速度を向上することが可能です。

空きエリア出力指定

spaceオプション指定により、空きエリアへ指定値を埋め込むことができます。

セクションアドレス重複時のエラーレベル変更

リンク時にセクションのアドレスが重なった場合のエラーレベルをFatalからErrorに変更しました。セクションアドレス重複時のリンケージマップ情報を出力することが可能です。