重要な情報
-
5.20ツールセットには、プログラム起動時にすべて(または大部分)のコードをRAMにコピー可能にする新しい機能が備わっています。これらの機能の1つでは、起動コードが参照するセクションが'initialize by copy'ディレクティブの影響を受けないようにリンカが保護し、コピー初期化が完了した後に実行されるコードのみがRAMにコピーされるようにします。
場合によっては、新しいリンカおよびライブラリとリンクしたときに、以前のプロジェクトが機能しなくなる可能性もあります。一例として、リリース5.1Xのいずれかのモジュールに基づいて独自のcstartupモジュールを提供し、'initialize by copy'ディレクティブで、プログラム起動時に割込みテーブルがRAMにコピーされるよう指定する場合が考えられます。
これを修正するには、割込みテーブルに特殊なシンボル__iar_init$$done
でマークを付け、必要となる前にコピー初期化を実行するよう指示します。こうしなければ、'initialize by copy'ディレクティブで記述されていても、割込みテーブルはコピーされません。Cortex-Mコプロセッサの場合、これを行う必要があるのは、独自のcmainモジュールも提供する場合のみです。Atmelの例はほとんどの場合、上記の方法で記述されています。修正する方法は、ラベル
__iar_init$$done
をベクタテーブルの前に置くことです。
例:SECTION .intvec:CODE:NOROOT(2) ARM __iar_init$$done:; ベクタテーブルはコピー初期化が ; 実行されるまで不要 __vector: LDR PC,Reset_Addr ; リセット : :
-
コードサイズ制限版では、リンカはベーシックなヒープ実装を選択します。つまり、リンカコマンドラインオプションの
--basic_heap
が標準版で使用される場合と同じです。 -
アプリケーションが純粋にアセンブラ言語で記述されて、ランタイムライブラリが使用されていない場合、リンカファイルには
readwrite
データを含む各セクションについて、do not initialize
ディレクティブを含める必要があります。たとえば、次のアセンブラコードは
次のディレクティブがリンカファイルに存在しなければならないことを意味します:SECTION variables_section:DATA(2) DATA var1:DS32 1 var2:DS8 64
リンカディレクティブが省略されると、リンカはdo not initialize { readwrite section variables_section };
variables_section
にゼロで初期化されるデータが含まれると想定し、ランタイムライブラリが使用されないためにError[Lp001]:no definition for init routine "__iar_zero_init3"
を出力します。 -
7.30.3の新機能:Cortex-M7でのVFPユニットのサポート(単精度派生品と倍精度派生品の両方)
数学関数用のビルト済ライブラリ。VFPユニットを持つCortex-M用で、新しい名称は以下の通りです:コンパイラの設定 7.30.2およびそれ以前 7.30.3以降 単精度、VFP、ビッグエンディアン: m7M_tbv.a
m7M_tbs.a
- 同じライブラリがCortex-M4とCortex-M7でも使用されます。単精度、VFP、リトルエンディアン: m7M_tlv.a
m7M_tls.a
- 同じライブラリがCortex-M4とCortex-M7でも使用されます。倍精度、VFP、ビッグエンディアン: (なし) m7M_tbv.a
倍精度、VFP、リトルエンディアン: (なし) m7M_tlv.a
同じライブラリファイル名が7.30.3でも再利用されますが、内容は別です。これは、ARM用IAR C/C++ 開発ガイドのビルド済ライブラリの使用の項で指定された命名規則を応用したものです。 -
7.50.1の新機能:
パッキング手法bwt
とlzw
が削除されました。これらへの明示的な参照を含むリンカ設定ファイルによってワーニングが発生し、代わりにlz77
が使用されます。
リンカは、圧縮されたイニシャライザ、単一のソースおよび目的地の範囲しか一度に処理できないルーチンに対して、より小さいアンパックルーチンへの呼出しを生成するよう変更されました。詳しくはinitialize by copy リンカ設定ディレクティブのドキュメントを参照してください。
一部の初期化がリクエストされて、プログラムに初期化ルーチンや初期化テーブルへの参照がない場合。リンカがエラーを表示するようになりました。
プログラムの起動時にどのセクションが自動的に初期化されるかを制御することができます。内容のないセクション(.bss
など)は、do not initialize
ディレクティブのセクション選択パターンに一致しない限り、ゼロに初期化されます。内容のあるセクション(.data
など)は、initialize by copy
ディレクティブに一致するセクション選択パターンがある場合にのみ初期化されます。
新機能
- なし
既知の問題
-
cstartup.s
を使用してビルドすると、MISRA-Cチェッカでエラーが誤って報告されます。
[EW19800]
プログラム修正
-
const
および__no_init
によって宣言された変数はどちらも、リンカによって実際のゼロとして出力されます。これらの変数については、リンカで内容が生成されるべきではありません。
[EW25771] -
ielftoolが、出力フォーマットが指定されていない場合に
--srec-s3only
または--srec-len
を使用すると自動的に--srec
を想定するように変更されました。また、他の出力フォーマットが指定されていると、--srec-s3only/--srec-len
を使用した場合にワーニングが出力されます。
[EW25699]
ユーザガイドの訂正
- なし
その他
- なし
リリース履歴
V7.40 2015-02-19
プログラム修正-
スタック使用量解析でコンパイラにより生成された注釈が、ITブロック内の命令に対する命令スケジューリングの際に失われていました。これによって、スタック使用量解析が不完全となる可能性がありました。
[EW25111] -
一部の絶対変数がアラインメントの要件を満たさないためにランタイムで初期化できないという診断の後、リンカがインターナルエラーで終了することがありました。
[EW25212] -
EWARM 7.40.2:
スタック使用量解析を実行し、最大コールチェーンに最大再帰深度が指定されている再帰呼出しネストが含まれる場合、ネスト内の関数のスタック使用量が間違った関数上にリストされる可能性があります。
[EW25264] -
EWARM 7.40.5:
スタック使用量制御ファイルにモジュールローカルシンボルのパターンと合うものが見つからない場合に生成される診断メッセージが、パターンがモジュールローカルシンボルとしか一致することがない点を明確にしていません。
[EW25457] -
EWARM 7.40.5:
関数の末尾が別の関数を呼び出す場合、この呼出しについてコンパイラがスタック使用量情報を生成できず、リンカでスタック使用量解析エラーが発生します。
[EW25463] -
EWARM 7.40.5:
デバッグヒープを使用する際、__iar_dlmalloc_usable_size
への参照が、__iar_debug_dlmalloc_usable_size
ではなく間違って__iar_debug_malloc_usable_size
にリダイレクトされます。多くの場合、これによってundefined external
エラーとなります。
[EW25552] -
EWARM 7.40.5:
__section_begin/__section_end/__segment_begin/__segment_end
演算子の結果のビット保持キャストを含む式が、定数式と見なされません。(E)C++では、これによってconst
変数がそうした式に初期化され、ROMではなくRAMに配置される可能性があります。
[EW25605] -
EWARM 7.40.5:
__no_init
かつconst
である変数が、書込み可能(書込み不可ではなく)のELFセクションに間違って生成され、リンカ一覧でreadwrite data
として数えられます。
[EW25627]
- なし
V7.30 2014-09-24
プログラム修正-
EWARM 7.30.3:
仮想関数除去をサポートするための情報を含まない画像入力ファイルについて、リンカが間違ったワーニングを出力します。
[EW24962] -
EWARM 7.30.3:
仮想関数呼出しを使用して、リンカでC++プログラムに対してスタック使用量解析を実行する際、仮想関数除去が何らかの理由で無効になっていると、潜在的な仮想関数呼出しの情報が収集されず、間違ったワーニングが発生してスタック使用量の出力が不正確となります。
[EW24964] -
EWARM 7.30.3:
メモリ範囲の最後にセクションやブロックを配置するにあたって、同じ範囲に他のセクションやブロックも配置する場合、スペースが不足したときにリンカがそれを検知せず、メッセージを表示することもないままセクションやブロックを重複した形で配置することがあります。
[EW24977] -
EWARM 7.30.3:
固定サイズのplace at
ディレクティブがたくさんあると、リンカでのセクション配置が間違って失敗することがあります。
[EW25053] -
EWARM 7.30.4:
ビルトインの演算子__section_begin
、__section_end
などが、リンカで作成されたセクション.iar.init_table
に対して常に0を返します。
[EW25073] -
EWARM 7.30.4:
RAMに直接ロードするために設定をリンクする際、リンカが誤って、中身(初期化済み変数)を持つリード/ライトのセグメントをゼロ初期化または初期化されていないセクションを含むセグメントとマージすることがあります。これによって、不要に大きいバイナリファイルが生成され、ロード時間が長くなります。
[EW25091] -
EWARM 7.30.4:
セクション配置の失敗や、圧縮されたイニシャライザのサイズに依存するアドレスへのセクション配置がある場合に、1つ以上の通常のエラーの後に、リンカがインターナルエラーにより終了することがあります。
[EW25098]
- なし
V7.20 2014-05-19
プログラム修正-
絶対でないルートセクションが、重複するシンボル定義を解決した結果、それらの中に定義されたシンボルが抑制されていると、間違ってビルドから除外されることがあります。
[EW24613] -
EWARM 7.20.2:
オーバレイ(ブロックまたはセクションパターンではなく)をリンカ設定ファイルのリンカ配置ディレクティブに配置した場合、last修飾子が効果がありません。
[EW24712] -
EWARM 7.20.2:
リンカがC-RUNライブラリ内のMISRA-C:2004規則5.1の違反を報告していましたが、この規則はシステムライブラリには適用されません。
[EW24714] -
EWARM 7.20.2:
C-RUNデバッグヒープ関数__iar_leaks_ignore_all()
が、リンカで正しく処理されません。回避策として__iar_debug_leaks_ignore_all()
を使用してください。
[EW24728] -
EWARM 7.20.2:
1つ以上の抑制されたweakシンボル定義を持つアセンブラのルートセクションが、リンクの際に間違ってドロップされることがあります。
[EW24757] -
EWARM 7.20.2:
Cortex-M4についてリンクする際に、リンカがビッグエンディアンを正しく処理するようになりました。
[EW24799] -
EWARM 7.20.5:
fixed orderブロックを定義する際にexcept
句を使用すると、想定した効果が得られません。
[EW24785] -
EWARM 7.20.5:
未使用のセクション削除を無効にするリンカオプション--no_remove
がC-RUNのサポートと十分に連携しないため、C-RUNのグローバル境界テーブルが必要でないときにも含まれます。
[EW24797] -
EWARM 7.20.5:
コンパイラのバグが原因で、リンカの仮想関数除去(--vfe
)が、集合オブジェクトのイニシャライザにおいて、メンバ関数定数に対するポインタからのみ参照される仮想関数を誤って破棄することがあります。
例:int (B::*arr[])() = { &B::fun };
[EW24822] -
EWARM 7.20.5:
(E)C++で複数ファイルのコンパイル(--mfc
)を使用する際、リンカがコンパイラにより生成される(空の)追加オブジェクトに存在しない仮想関数除去の情報について誤ったワーニングを出力します。
[EW24844]
- なし
V7.10 2014-02-21
プログラム修正-
どのセクション��も一致しないセクションの配置パターンについて、そのパターンで使用されるものと同様の名前を持つセクションが存在し、他の点で一致する場合、リンカがワーニングを発するようになりました。
[EW24096] -
デフォルトまたは指定によってパッキングアルゴリズム
lz77
が関係する場合、セクションの配置が失敗すると、セクション配置の失敗を報告した後に、リンカがインターナルエラーで停止することがあります。
[EW24179] -
エラー
Lp011
が出力され、セクションの配置が失敗した後、リンカがインターナルエラーで終了することがあります。
[EW24446] -
1つのセクション配置ディレクティブによって、複数のコンテンツが複数のアドレス範囲に配置されるとき、リンカは同じ名前を持つ複数のセクションを出力ファイルに作成することがあります。この出力ファイルをISymExport
--reserve_ranges
とともに使用して別のリンクジョブの入力ファイルを生成すると、この入力ファイルには同じ名前を持つ複数のシンボル定義が複数含まれることになり、後のリンクジョブが失敗します。
[EW24456] -
EWARM 7.10.3:
--no_remove
を使用してすべてのセクションを保持する場合、サイズを持つ絶対シンボル(多くの場合にISymExportによって生成されるものと同じく)は出力に含まれません。また、この場合にこれらのシンボルに--keep
を使用しても効果がありません。
[EW24528] -
EWARM 7.10.3:
仮想関数除去を実行するよう指示された場合に、リンカはすべてのモジュールに必要な情報が含まれているか確認し、いずれかのファイルでこの情報が不足している場合にはワーニングを表示して最適化を無効にすることになっています。このチェックが機能しておらず、リンカはワーニングを全く表示しないで、指示された場合は常に最適化を実行します。その結果、機能しないプログラムが生成される可能性があります。
[EW24556] -
EWARM 7.10.3:
セクションの最後の内容の後にあるThumbコードにアセンブララベルを配置すると、リンクの際にインターナルエラーが発生することがあります。
[EW24575]
- なし
V6.70 2013-10-29
プログラム修正-
ISymExportで、ステアリングファイルに何が含まれているかに関係なく、
--reserve_ranges
と--ram_reserve_ranges
からの範囲予約シンボルが常に含まれるようになりました。
[EW24132] -
リンカが、gccでコンパイルされたモジュールからのゼロ初期化された変数に間違ったアドレスを割り当てます。このアドレスは、各変数のアラインメント分だけずれているため、変数の後に配置されたものと部分的あるいは完全に重複する可能性があります。
[EW24155] -
EWARM 6.70.2:
移動可能なブロックの内側と外側にゼロ初期化されたセクションがある場合、initテーブルのサイズが間違って概算されることにより、サイズが急速に大きくなる出力ファイルを作成しながらリンカがループ状態になります。
[EW24228] -
EWARM 6.70.2:
ライブラリソースxwctomb.c
を、UTF-8エンコーディングを有効にした状態でコンパイルすることができません。
[EW24257] -
EWARM 6.70.2:
同じアドレスについて、複数の連続したゼロでないサイズの再配置を含むモジュールをリンクする際、リンカがインターナルエラーで停止していました。IARシステムズのツールでは現在こうしたモジュールを生成できません。
[EW24271] -
EWARM 6.70.2:
__root __no_init
により絶対配置された変数の複数のコピーが、リンカによって保持され、間違ってオーバラップエラーを招くことがありました。この問題は、AEABIモードでコンパイルする際には発生しません。
[EW24287] -
EWARM 6.70.2:
last
またはfirst
の修飾子によって配置されたセクションまたはブロックが、place in
ディレクティブのすぐ内部にあって有効なアドレス範囲が複数ある場合、間違って配置されることがあります。
[EW24333、EW24391]
- なし
V6.60 2013-06-27
プログラム修正-
ゼロサイズのROMセグメントを持つ実行可能なファイル上でフィル/チェックサム計算を実施するよう指示されたとき、間違った"チェックサム範囲に未初期化データが含まれる"エラーにより
ielftool
が失敗することがありました。
[EW23895] -
ミラーされたワイドなsum8チェックサムを生成するとき、
ielftool
は、チェックサム全体ではなく、8ビットのみをミラーしました。
[EW23921] -
--no_remove
により例外を用いてC++プログラムをリンクする際、リンカがインターナルエラーで終了することがあります。
[EW24673] -
EWARM 6.60.2:
ielftool
は、ローバイナリの出力を生成する際、入力ファイルの重複するセクションをチェックしません。これによって、出力ファイルに不明な文字が含まれてサイズが非常に大きくなります。
[EW24084]
- なし
V6.50 2012-11-10
プログラム修正-
仮想関数除去を実行する際、存在しない仮想関数への参照が行われると、リンカがインターナルエラーで終了することがありました(これは、あるクラスの競合する定義を使用して2つのモジュールがコンパイルされた場合に、発生する恐れがあります)。現在この条件は検出されて、エラーが生成されます。
[EW23038] -
ARM第4世代のプロセッサをリンクする際、コードセクションにスペースを割り当てるときに、ベニアのフォールスルーの可能性が考慮されていないことがありました。特に、そのようなベニアがコピー(
__ramfunc
属性またはリンカディレクティブを使用)により初期化されたコード内で生成された場合、インターナルエラーが発生する恐れがありました。これは修正されました。
[EW23256] -
スタックの深さの分析を実行する際、プログラムが未定義の仮想関数を参照しても、リンカがインターナルエラーで終了しなくなりました。
[EW23299] -
圧縮されたイニシャライザを使用する場合に、エラーメッセージが表示されないまま、リンカが配置範囲の終点より向こうにセクションに配置することがありました。これは修正されました。
[EW23396] -
iobjmanip
がセクションのアドレスプロパティを保持しませんでした。iobjmanip
を使用して何らかの絶対セクションを持つオブジェクトファイルからデバッグ情報を削除する場合、これらのセクションはすべて出力ファイルのアドレス0
に配置されていました。これは修正されました。
[EW23490] -
リンカで、ベニア(特にフォールスルーベニア)を含む可能性のあるRAM内のコード用に圧縮されたイニシャライザに必要なスペースが、誤って計算され、間違った
Lp020
エラー(圧縮されたイニシャライザが大きすぎて入りきらない)が発生することがありました。これは修正されました。
[EW23551] -
EWARM 6.50.3:
コピー初期化絶対セクションが必要な場合で、隣接した他の(コピー初期化ではない)絶対セクションがなければ、リンカはインターナルエラーで終了しました。これは修正されました。
[EW23662] -
EWARM 6.50.3:
関数ポインタ引数経由の再帰呼出しを含む一部のケースでは、スタック利用解析中にクラッシュすることがありました。あるケースでは、(putchar
のような)printf
実装によって呼び出された関数の1つが、printf
を呼び出す場合に、この問題が発生しました。これは修正されました。
[EW23696] -
EWARM 6.50.3:
セクションの最後にイニシャライザバイトを配置しようとする関数でエラーが発生しました。結果として、これを回避するためにセクションを配置すべきであったとき、エラーLp017
とLp021
が一部の環境に出力されることがありました。これは修正されました。
[EW23700] -
EWARM 6.50.3:
ゼロサイズのブロックを含むリンクジョブは、エラーLp011
(セクション配置失敗)によって失敗することがありました。これは修正されました。
[EW23721] -
EWARM 6.50.4:
複数の目的地範囲があるとき、lz77を用いて圧縮されたイニシャライザを解凍するためのライブラリルーチンが正常に機能しませんでした。これは修正されました。
[EW23790] -
EWARM 6.50.4:
UTCの西側 (__getzone
文字列でマイナスオフセットになる)に対するタイムゾーンの処理は、64ビットバージョンの時間関数で機能しませんでした。これは修正されました。
[EW23792]
- なし
V6.40 2012-06-05
プログラム修正-
リンカ設定ファイルの
==
および!=
演算子で、間違った結果が生成されていました。
[EW22755] -
シンボル引数を持たない2つ以上の
--image_input
コマンドラインオプションを使用すると、この場合、内部のリンカにより生成されたモードシンボルが間違ってパブリックになっていたため、シンボル定義の重複エラーが発生していました。
[EW22781] -
インライン関数が、誤ってMISRA-C:2004の規則8.10 (可能な場合には静的を使用)の違反と見なされていました。
[EW22833] -
リンカ設定ファイルに閉じられていない引用符で囲まれた文字列があると、リンカがフリーズしていました。
[EW22908] -
例外を持つC++コードで、セクションの配置が失敗したときに、ごくまれにリンカが通常のエラーではなく、インターナルエラーを出力することがありました。
[EW23044] -
ISymExportステアリングファイルディレクティブの後に行の末尾にC形式のコメントを付けると、解析エラーが発生していました。
[EW23079] -
引数として渡される関数ポインタを介して間接的な呼出しのみを実行する関数に対して、
possible calls
スタック使用率の制御ディレクティブを使用しても機能しませんでした。
[EW23107] -
呼出し関数を呼び出せる定数関数ポインタ引数を持つ関数呼出しがプログラムに含まれる場合、スタック使用率の解析中にリンカがクラッシュすることがありました。
[EW23127] -
複数のソースや目的地の範囲がある場合、パックビットアンパッカーが正しく機能しませんでした。
[EW23134] -
一部のターゲットで、zero-initルーチンおよび一部のcopy-initルーチンには、それらが初期化できる領域に対してアラインメントの条件があります。これらの場合は、絶対アドレスに明示的に配置された変数が適切なルーチンによって初期化できるかどうかを、リンカは正しくチェックしないことがあり、リンクの際にさまざまなインターナルエラーの原因となっていました。サポートされていないそれぞれのケースに対して、エラーがあるようになりました。
[EW23180] -
place at
ディレクティブの内容がアラインメントの問題で指定のアドレスに配置されていない場合、リンカでワーニングが出力されるようになりました。
[EW23215]
- なし
V6.30 2011-10-22
プログラム修正-
DATA
、CODE16
など間違ったモード記述を持つアセンブラファイルによって、リンカでインターナルエラーが発生しなくなりました。
[EW22464] -
ブロックを1つ持ち、自身のサイズよりも大きいアラインメントを持つ
place at end
リンカディレクティブで、インターナルエラーが発生しなくなりました。
[EW22620] -
EWARM 6.30.3:
デバッガにより使用される次のシンボルがリンカでインライン化されなくなりました:__iar_semihosting
,__iar_return_from_swi
,__iar_sh_stdout_swo
。
[EW22789] -
EWARM 6.30.3:
重複する絶対セクション(たとえば、同じアドレスにある異なるSFRからのものなど)を持つプロジェクトをリンクしても、1つまたは複数の不正なエラーLp015
(コミットされたセクションが大きすぎて合わない)メッセージが表示されなくなりました。
[EW22798] -
EWARM 6.30.3:
使用中のヒープが高度なバージョンdlmalloc
になります。ただし、アプリケーションがヒープを参照し(ライブラリ関数からの参照は含まず)、オプション--basic_heap
が使用されないことが条件です。
[EW22800] -
EWARM 6.30.3:
絶対セクション(およびそれらに定義されたシンボル)が、リンカによって間違ったアドレスに割り当てられることがありました。一般的な場合、通常はコードからの参照がアドレスを直接使用するため、コードには影響しませんが、マップファイルとデバッガには影響していました。この問題は修正されました。
[EW22836] -
EWARM 6.30.3:
リンクの際に存在するが最終のプログラムにはインクルードされない関数について、スタック使用情報をスタック使用量制御ファイルで提供しても、クラッシュしなくなりました。
[EW22846] -
EWARM 6.30.5:
オブジェクトファイルで提供されたスタック使用量情報をオーバライドするためにスタック使用量制御ファイルでoverride
キーワードを使用しても、リンカでインターナルエラーが発生しなくなりました。
[EW22874] -
EWARM 6.30.5:
アドレスゼロの周囲をラッピングする範囲に関して誤った領域を計算すると、不正なエラーLp022
(絶対配置が以前の絶対配置と重複している)が出力されたり、他の問題が発生することがありました。これは修正されました。
[EW22941]
- なし
V6.21 2011-07-05
プログラム修正- なし
- なし
V6.20 2011-04-29
プログラム修正-
place at end of
ディレクティブを高いアラインメントのセクションまたはブロックを含む内容に使用しても、インターナルエラーが発生しなくなりました。
[EW22255] -
--strip
とともにielftool
を使用しても、文字列テーブルなどELFセクションに関するすべてのバグ情報が削除されませんでした。これらも削除されるようになりました。
[EW22372]
- なし
V6.10 2010-11-04
プログラム修正-
リンカがエラーLp017 (compressed initializers needed an address that could not be determined until the size of compressed initializers is known - 圧縮されたイニシャライザに、圧縮されたイニシャライザが認識されるまで確定できないアドレスが必要)を出力した後で、インターナルエラーによりクラッシュすることがありました。
[EW21191] -
place at
ディレクティブに必要な内容がなく、メモリ範囲が部分的に他のセクション配置ディレクティブと重なっている場合に、インターナルエラーが発生することがありました。
[EW21572] -
place at
ディレクティブのセクション/ブロックが指定範囲に入りきらないときに、出力される診断メッセージが意味不明でした。例:Error[Lp011]:section placement failed:unable to allocate space for sections/blocks with a total estimated minimum size of 0x0 bytes in<> (total uncommitted space 0xffffffffffff372c).Needed:
[EW21849] -
ROMサイズの制限を持つ製品からリリースビルドの出力をロードするときに、一部のROM使用が上限に対して計算されない場合でも、C-SPYが誤ったエラー"ROM size limit exceeded"(ROMサイズ上限を超過)を出力することがありました。
[EW21909] -
ielftool
が、フィルとチェックサム関数を実行する際、セクションデータではなくセグメントデータを使用するようになりました。
[EW22329] -
silentオプションを使用する場合、Iarchiveが正しい終了ステータスを返すようになりました。
[EW21944]
- なし
V5.50 2010-04-21
プログラム修正-
必要なモジュールローカル絶対シンボルがリンカによって保持されず、スペースが予約されませんでした。
例:static __no_init int array[10] @ 0x100;
[EW21528] -
いくつかの
place at
コマンドが、ベニアが必要なときに重複が発生する形で使用されると、セクション配置が失敗することがありました。
[EW21647] -
偶数の4バイト境界上で終わらないELFセクションを拡張すると、エラーとなる場合がありました。
[EW21654] -
EWARM 5.50.5:
place at
セクション配置ディレクティブのシーケンスを同じメモリ領域に入れ、片方は圧縮されたイニシャライザがあって、後で内容を持たないブロックのみからなるものがある場合に、リンカでインターナルエラーが発生しなくなりました。
[EW21746] -
EWARM 5.50.5:
ilinkarm
5.50.0からは、リンカは常にinitテーブルセクションを生成するようになりました。initテーブルが必要でないビルドにおいて、これによりinitテーブルセクションに一致するセクション配置パターンを格納するための構成ファイルが無駄に必要となっていました。initテーブルセクションは、不要なときには生成されなくなりました。
[EW21761]
- なし
V5.41 2009-12-14
プログラム修正-
ベニアを必要とするコードの1ブロックをコピーすることによる初期化で、一部のコードセクションにベニアより小さいアラインメントがあった場合、リンカがエラーLp020(圧縮されたイニシャライザが大きすぎて合わない)によって失敗しなくなりました。
[EW21183] -
EWARM 5.41.2:
ある範囲のplace in
ディレクティブがplace at
ディレクティブの範囲の開始/終了位置をまたいでいても、リンカがインターナルエラーによって終了しなくなりました。
[EW21488] -
EWARM 5.41.2:
アセンブリコードにおいて、絶対アドレスを参照するpc
に相対する命令(分岐のような)によって、リンクの際に誤って未定義のシンボルエラーが発生しなくなりました。
[EW21525]
- なし
V5.40 2009-07-10
プログラム修正-
place at
コマンドで必要な範囲が、より大きな開始アドレスでplace in
コマンドと一部重複したときに、セクションの配置が[range allocation inconsistency]
というインターナルエラーにより失敗する場合がありました。
[EW20817] -
圧縮されたイニシャライザを圧縮アルゴリズムのパックビット、lzwまたはbwtとともに使用する場合、イニシャライザのサイズに依存するアドレスにイニシャライザの目的地を配置できません。これを行うと、インターナルエラーが発生していましたが、新しいエラー
Lp021
が出力されるようになりました。
[EW20842] -
locale.h
ファイルをインクルードすると、フルのDLIB (ロケールサポートを含む)とのリンクが強制されていました。これは、ロケールサポートが実際に要求されたときにだけ発生するように修正されました。
[EW20850] -
シンボルテーブルを入力として持たないELFファイルを使用している場合に、
ielftool
がクラッシュしなくなりました。
[EW20883] -
場合によって、
place at
ディレクティブによるリンクが失敗し、エラーLp011 (section placement failed)
が出力されることがありました。
[EW20901] -
ブロック外に複数のゼロまたはコピー領域を持つリンクジョブで初期化テーブルをビルドする際に、リンカでの内部計算エラーによって、セクション配置が失敗し、エラー
Lp011
が出力される場合がありました。
[EW20968, 20986] -
コンパイラが、定数のいずれかが使用されていれば、型自体が使用されていなくても列挙型のデバッグ情報を出力します。未指定の列挙型の場合、これらの定数はデバッガで表示されませんでした。これらが表示されるようになりました。
[EW21053] -
'at end'配置を使用してリンカにより生成されたinitテーブルを配置すると、リンカでインターナルエラーが発生する場合がありました。
[EW21065] -
EWARM 5.40.4:
リンカが変更されて、自動的に選択されたライブラリはコマンドラインオプションに一致すると想定するようなりました。
[EW21201] -
EWARM 5.40.4:
入力ELFファイルに複数のセクションを持つセグメントが含まれていると、ielftool
が正しい出力を生成するようになりました。
[EW21194、EW21196、EW21286]
- なし
V5.30 2009-01-23
プログラム修正
-
EWARM 5.30.2:
(__section_endまたは$$Limitシンボルを使用して)末端が参照されているブロック内の圧縮されたイニシャライザを使用してアプリケーションをリンクする場合、Ilinkで配列境界違反が発生し、インターナルエラーまたはより重大なエラーとなる可能性がありました。
[EW20796] -
ゼロサイズのフラグメントのみからなる1つのセクションを持つオブジェクトファイルをリンクすると、リンカでインターナルエラーが発生しました。
[EW19873] -
配置が空であるが、アラインメント用件を持つファイルをリンクする場合、インターナルエラー(
ApplyState - No allocation change
)によってリンカが終了することがありました。
[EW20353] -
非常に小さいセクションの場合に、セクションの配置が失敗することがありました。通常は、関数と変数が同じメモリ領域に配置され、リーチの限界に近い呼び出しが多くあった場合にこの問題が発生する可能性がありました。これによって、いくつのベニアが必要なのかが非常に不明確になっていました。
[EW20464] -
適切なエラーメッセ��ジが出力された後、プログラム内の一部のセクションがいずれかの配置ディレクティブと一致しなければ、インターナルエラーが発生してリンカが終了する場合がありました。
[EW20481] -
同じ開始アドレス上にある
place in
ディレクティブおよびplace at
ディレクティブが設定に含まれ、place at
ディレクティブがゼロバイトを占有する場合、リンカがインターナルエラーで終了する可能性がありました。
[EW20656] -
--interworkなしにコンパイルされ、静的関数とパブリック関数が混在する変換ユニット内の関数に対する互換性チェックは、これまでリンカで壊れていました。このために、誤った互換エラー(Lt020)が発生するだけでなく、報告すべきでありながらこうした問題を報告できないという結果になっていました。
[EW20745]
-
イニシャライザの圧縮
リンカは初期化したデータを圧縮して、フラッシュの使用を最小に抑えることができます。圧縮されたデータは、フラッシュからRAMに移動すると起動コードによって自動的に解凍されます。
V5.20 2008-06-24
プログラム修正
-
export
ディレクティブを使用してリンカ設定ファイルから不明なシンボルをエクスポートしても、問題を報告した後でilinkarm
がインターナルエラーにより終了しなくなりました。
[EW19729] -
ielftool
は、長さが4の倍数でないELFセクションについて、sum32チェックサムを計算できるようになりました。
[EW19817] -
ielftool
は、長さが4の倍数でないELFファイルについて、フィル処理を実行できるようになりました。
[EW19835] -
ilinkarm
が、ゼロ化されたinitテーブルのエントリを出力可能になりました。以前は、プログラム起動時に、ゼロでフィルされるべき1つまたは複数のメモリ範囲が、ゼロでフィルされなくなっていました。
[EW19853] -
MISRA-C規則23をチェックする際に、
ilinkarm
がツールの内部シンボルを誤って含むことがなくなり、不要な規則違反エラーとなることがなくなりました。また、エラーLi0005 (未定義のシンボル)が以前に発生した場合に、
ilinkarm
がクラッシュしなくなりました。
[EW19897] -
どのセクションにも一致せず、
place in
ディレクティブのメモリ範囲と重複し、ブロックを含まないplace at
ディレクティブによって、リンク時にインターナルエラーとなることがなくなりました。
[EW19952]
[EW20030] -
重複する範囲を含むプロジェクトをリンクする際に、重複のサイズが範囲と比較して小さい場合、
ilinkarm
がインターナルエラーで終了しなくなりました。
[EW19985] -
ソースELFファイルで新しいベースアドレスで始まるセクションの前にデータが含まれない場合、
ielftool
からのIntel hex出力に不正なベースアドレスレコードが含まれなくなりました。
[EW20031] -
ブロック内のコードのコピー初期化で、ブロックの最初がベニアの場合に、生成が正しく行われるようになりました。
[EW20040] -
リンカ設定ファイルでチェーンになっている
if
ディレクティブ(if...else if...else
)が、正しく機能するようになりました。
[EW20104] -
place at
およびplace in
セクション配置ディレクティブが同じ開始アドレスを使用する場合、リンカでインターナルエラー(範囲割当ての不一致)が発生しなくなりました。
[EW20183]
-
RAMへのコードのコピー
プログラム起動時にコードのすべてをRAMにコピーする機能が改善されました。上記を参照してください。 -
位置に依存しないベニア
リンカが、--pi_veneers
コマンドラインオプションを使用して、位置に依存しないベニアを生成できます。
V5.11 2007-12-11
ilinkarm
が、誤ってplace at
リンカディレクティブの始めにフォールスルーベニアを配置し、そこで終わるべきセクションを間違った位置に置いていました。
[EW19456]ielftool
(以前のichecksum
)が、ビッグエンディアンファイルのチェックサムを正しく処理するようになりました。
[EW19466]ielftool
(以前のichecksum
) が算術合計アルゴリズムを認識しませんでした。
[EW19490]場合によっては、
ielftool
(以前のichecksum
) がチェックサムの値を出力ファイルに書き込みませんでした。
[EW19496]リンカが、入力に同じシンボルの弱い定義が混在する場合、同じシンボルに対して複数の定義を誤ってインクルードしたため、一部の定義がELFセクショングループを使用し、他の定義でそれが使用されていないという状態になっていました。
[EW19502]ielftool
(以前のichecksum
) が、チェックサムのプレースホルダ変数がconst
として定義されていない場合に、エラーメッセージを出力するようになりました。
[EW19538]place in
範囲の真ん中でplace at
を使用すると、インターナルエラーが発生する場合がありました。
[EW19578]-
ilinkarm
が時おり、'place at'配置で必要のない余分なバイトを予約していました。
[EW19604] -
場合によっては、フォールスルーのモードを変更するベニアを、ベニアの目的地の直前以外の場所に配置することができ、コードが機能しなくなっていました。
[EW19726]
V5.10 2007-05-25
- 初回リリース。