パッチプログラムをダウンロードするには、事前にARM社のコネクトサービスのアカウントを取得し、ログインしておく必要があります。アカウントの取得は以下のURL から無償で行う事ができます:
https://login.arm.com/register.php
ARM Compiler toolchain v5.04 (build 27)
このARM Compiler Toolchain v5.04 Build 27 は、既存のDS-5を更新することを目的として使用されます。このパッチは、RVCT/RVDS での使用は適切でありません。
異なったバージョン番号を持つARMコンパイラの複数の機能リリースは、同一のマシンに共存インストール可能です。同一の機能リリースに対する複数のアップデートバージョン(例:5.03u2と5.03u3)を同一マシンにインストールすることはサポートされておりません。
DS-5のパッチは、ARM社のWebサイトよりダウンロード可能です。
https://silver.arm.com/browse/DS500
このアップデートは、最新のコンパイラおよび、リンカ、アセンブラ、 fromelf、およびarmarの実行可能形式と、インクルードファイルおよびC / C++ ライブラリから構成されています。
サポートされるOSプラットフォーム
Windows XP Service Pack 3 (32-bit only)
Windows Server 2003
Windows Server 2008 R2
Windows 7 Enterprise Service Pack 1
Windows 7 Professional Service Pack 1
Windows 8 (64-bit)
Red Hat Linux Enterprise 5 for x86, 32-bit & 64-bit
Red Hat Linux Enterprise 6 for x86, 32-bit & 64-bit
Ubuntu Linux 12.04 LTS, 32-bit & 64-bit
パッチをインストールするには以下の手順で行います
Linux の場合
1.上記サイトからパッチプログラムをダウンロードしてください。
2.tgz ファイルをテンポラリディレクトリに解凍してください。
3.Installer ディレクトリ内の "setup.sh" を実行し、画面の指示に従って、ARM Compiler v5.04をインストールしてください。
4.これでアップデートツールがインストールされます。
Windows の場合
1.上記サイトからパッチプログラムをダウンロードしてください。
2.ZIP ファイルをテンポラリディレクトリに解凍してください。
3.Installer ディレクトリ内の "setup.exe" をダブルクリックし、インストーラの画面の指示に従って、ARM Compiler v5.03をインストールしてください。
4.これでアップデートツールがインストールされます。
ARM Compiler v5.04 ( Build 27 ) 機能改善
v5.04での追加機能
アセンブラ(armasm)
-
アセンブラは、M プロファイルコアにおいて条件実行 MSR インストラクションの IT ブロックの生成に失敗する場合があり、代わりに条件なしの命令を生成していました。この不具合は修正されました。 [SDCOMP-22671]
コンパイラ( armcc )
-
データフロー解析の診断 [bule]C4017: <entity> may be used before being set[/bule]は全ての最適化レベルにおいてデフォルトで抑制されるようになりました。これは
--diag_warning=C4017
によって有効にすることができます。 [SDCOMP-23470]
-
リテラルプールと分岐テーブルの生成を制御するオプションが追加されました。リテラルプールと分岐テーブルの生成を無効にすることでコンパイラがコードセクションにデータを配置することを、データをデータセクションに配置するか行に定数を統合することによって抑止します。デフォルトでは全てのリテラルプールと分岐テーブルが生成されます。新しいオプションは次の通りです:
-
--integer_literal_pools / --no_integer_literal_pools
-
--float_literal_pools / --no_float_literal_pools
-
--string_literal_pools / --no_string_literal_pools
-
--branch_tables / --no_branch_tables
[SDCOMP-22700]
ライブラリ
-
ライブラリ関数
__rt_sdiv32by16, __rt_udiv32by16
および
__rt_sdiv64by32
は非推奨となりました。[SDCOMP-22595]
その他の改善
-
ARM CompilerはカレントワーキングディレクトリがWindows UNCパスである場合、サブプロセスの呼び出しをサポートします。この変更によって行われるサブプロセスの呼び出しは以下に影響します:
-
armcc による armlink または armasm の呼び出し
-
armasm による armcc の呼び出し
-
armlink による armcc の呼び出し
[SDCOMP-23370]
-
ARM Compiler 5.04 では armar, armasm, armcc, armlink および fromelfによって出力されるバージョン文字列に変更があります。次のような形式で3つのパートに分けて表示されます:
-
Product: ARM Compiler 5.04
-
Component: ARM Compiler 5.04
-
Tool: armcc
[5040027]
-
Productの文字列はそのツールチェインがコンポーネントである製品を、例えばDS-5やARM Compiler 5.04のように反映します。Componentの文字列は使用されているARM Compilerのバージョンを反映します。Toolは使用されている個別のツールの固有の識別子を表示します。[SDCOMP-23344]
-
ARM Compiler 5.04では ARMv7-M のビルド時にexecute-onlyのメモリリージョンをサポートします。この機能の詳細な情報については、ARM Compiler ドキュメンテーションを参照してください。[SDCOMP-23284]
-
ARM Compiler 5.04 では以下のサポートを追加しました:
-
以下のサポートは非推奨となりました:
-
Ubuntu 10.04 LTS (32-bit) platform
-
Cygwinサポート(32-bit platforms only)は、Cygwin version 1.7.25に移行しました。[SDCOMP-23283]
-
以下のプラットフォームサポートは将来のARM Compiler 5.05で非推奨となる予定です:
-
Windows Server 2003 (32-bit)
-
Red Hat Enterprise Linux 5 (32-bit and 64-bit)
[SDCOMP-22083]
ARM Compiler v5.04 ( Build 27) 改善と訂正
v5.04での不具合修正
アセンブラ(armasm)
-
ABIで定義されていないセクションフラグを使用するオブジェクトは
ABI-compliant
とマークされなくなりました。[SDCOMP-23039]
-
アセンブラは以前Mプロファイルのコアの条件付きMSR命令に対してITブロックを生成しないことがあり、条件なしの命令を不正に生成することがありました。この問題は修正されました。[SDCOMP-22554]
コンパイラ( armcc )
-
-O3 -Otime
使用時、単純な配列の初期化シーケンスにおいて不正なコード生成を引き起こす可能性のある
memset
を使用してさらにインライニングを行う方法に置き換えを行うことがありました。この問題は修正されました。[SDCOMP-23465]
-
-O3 -Otime
使用時ループの展開を行う事がありますが、特定の状況でループ変数の計算を誤り、不正なコード生成を引き起こすことがありました。この問題は修正されました。[SDCOMP-23413]
-
--multifile
が使用されたとき、二番目以降の入力ファイルがインラインアセンブリ内で数値のラベルを使用しているとクラッシュする可能性がありました。この問題は修正されました。[SDCOMP-23317]
-
ローカルで非スタティックなオブジェクトはnewの呼び出しを引き起こすコンストラクタで
T obj(new S())
のフォーマットで初期化され、スローされる例外のためにオブジェクトのスコープ範囲外に制御が渡り、オブジェクトのデストラクタが呼び出されない可能性がありました。この問題は修正されました。[SDCOMP-23297]
-
-O3 -Otime
使用時、定数且つ奇数のイテレーションが、二度のループ外にリフトされた単一のイテレーションに展開してしまうことがありました。コンパイラはループ外にリフトされたシーケンス内で、依存性を保持することができなくなり、不正な結果を引き起こすことがありました。この問題は修正されました。[SDCOMP-23265]
-
-O3 -Otime
使用時、ループカウンタを用いて配列の初期化をするループに続いて、配列を使用するループがある場合に、1つのループにまとめられることがありました。配列の参照に対しての不正な変更となるために新しいループは本来のコードと等価ではなくなります。この問題は修正されました。[SDCOMP-23264]
-
--multifile
使用時、コンパイラは2番目以降の入力ファイルでNOPを使用するインラインアセンブラがある場合にクラッシュする可能性がありました。この問題は修正されました。[SDCOMP-23263]
-
-O0
指定時のみ、
64-bit整数のbit 31
を判断する条件式においてコンパイルを失敗し、不正な結果を引き起こす可能性がありました。この問題は修正されました。[SDCOMP-23237]
-
if-elseブロック内の
memset()
呼び出しの後に、ビットフィールドへの書き込み(コンパイラが read-modify-write のシーケンスを生成しなければならないような)が発生する場合、ビットフィールドコンテナに間違った値の書き込みを引き起こす、ビットフィールドのコンテナの読み出しを
memset
の処理の前に移動する可能性がありました。この問題は修正されました。[SDCOMP-23136]
-
ABIで定義されていないセクションフラグを使用するオブジェクトは
ABI-compliant
とマークされなくなりました。[SDCOMP-23039]
-
--multifile
使用時、コンパイラは2番目以降の入力ファイルで1つ以上のオペランドをもつ命令を使用するインラインアセンブラがある場合にクラッシュする可能性がありました。この問題は修正されました。[SDCOMP-23023]
-
-O3 -Otime
使用時、2つの個別のループが1つの共用型の配列の処理があり、1番目のループでそこに書き込みを行い、2番目のループがそこから読み出しを行うようなコードをコンパイルする際、2つのループをマージして書き込みの前に読み込みを行うようなコード移動を行う可能性がありました。これによりランタイムに不正な動作を引き起こしていました。この問題は修正されました。 [SDCOMP-23016]
-
-O3 -Otime
使用時、小さい定数のリミット値の場合ループを展開することができますが、イテレーション変数の全ての使用について検出を失敗する可能性がありました。これにより不正なコード生成が起きる可能性がありました。この問題は修正されました。[SDCOMP-23015]
-
-O3 -Otime
使用時、ローカルの整数型変数がループ内でポインタを経由してアクセスおよびインクリメントされ、値が加算される時コンパイラが不正なコードを生成することがありました。この問題は修正されました。[SDCOMP-23013]
-
-O3 -Otime
使用時、if文の条件において使用される
(INT_MIN / -INT_MAX)
の形式の式で不正な変形が行われる可能性がありました。この問題は修正されました。[SDCOMP-23011]
-
-O3 -Otime
使用時、if文内の条件を単純化しようとした場合に大きな整数の定数値に関する整数式の計算を間違う可能性がありました。この問題は修正されました。[SDCOMP-23010]
-
-O3 -Otime
使用時、
char
または
short
型変数を用いたループの最適化において変数をintと誤り、予期しない結果を引き起こすことがありました。この問題は修正されました。[SDCOMP-23009]
-
-O3 -Otime
使用時、
INT_MIN
に反するような定数の比較を誤り、不正な結果を引き起こす可能性がありました。この問題は修正されました。[SDCOMP-23007]
-
-O3 -Otime
使用時、ポインタを経由した読み込みを伴う変数への書き込みを含むループ内の処理において誤った値を読み出す可能性がありました。この問題は修正されました。[SDCOMP-23006]
-
-O3 -Otime
使用時、配列の要素に対する代入を伴う単純でネストしたループの展開を行う際に、一部の代入を不正に削除する可能性がありました。この問題は修正されました。[SDCOMP-23005]
-
-O3 -Otime
使用時、初期化において定数の代入を伴う変数に対して条件代入を行うループで不正なコードを生成する可能性がありました。この問題は修正されました。[SDCOMP-23004]
-
-O3 -Otime
使用時、
INT_MIN
で始まる
forループ
がオーバーフローする可能性のある式によってガードされた条件式内に誤って展開される可能性がありました。この問題は修正されました。[SDCOMP-23003]
-
-O1
以上の最適化レベルにおいて、不正なコード生成に結び付く、不正なコード解析法で小さなグローバルの配列に対する
memset
の呼び出しがインライン展開される可能性がありました。この問題は修正されました。[SDCOMP-23002]
-
-O3 -Otime
使用時、多次元配列がスパースリストによって初期化されている場合、未初期化の要素の値について誤った想定を行う可能性がありました。この問題は修正されました。[SDCOMP-23001]
-
-O3 -Otime
使用時、本体が空の
switch式
についてターミネーションを誤る可能性がありました。この問題は修正されました。[SDCOMP-22995]
-
Windows環境下で
-O3 -Otime
の使用時、一部の整数式において
INT_MIN
に対して誤った値を使用する可能性がありました。これは典型的には整数の限界値を必要とする式において条件実行を単純化したりループの変形を伴う場合に発生します。この問題は修正されました。[SDCOMP-22994]
-
-O3 -Otime
使用時、ループカウンタ変数へのポインタがループの後に参照先の値を取得する場合、ループの前にカウンタの値を返すようなコードを誤って生成することがありました。この問題は修正されました。[SDCOMP-22993]
-
Windows環境下で
-O3 -Otime
の使用時、一部の
INT_MIN
に関連する算術処理が整数のオーバーフローフォルトを伴ってコンパイラを停止させることがありました。この問題は修正されました。[SDCOMP-22992]
-
構造体のアドレスを構造体のメンバに対してストアするようなコードを不正に変形し、メンバのアドレスをストアしてしまうことがありました。この問題は修正されました。[SDCOMP-22884]
-
-O3 -Otime
使用時、構造体または共用体のフィールド上での
volatile修飾子
を不正に無視することがありました。この問題は全てのアクセスが例えば構造体または共用体を単一のオブジェクトとして読み出すように間接的である場合のみ発生します。この問題は修正されました。[SDCOMP-22879]
-
xが
int型
でxとyの差が負ではない
intの値
の最大のよりも大きい場合にx <= yを不正に解釈することがありました。この問題は修正されました。[SDCOMP-22770]
-
ベース型が
long long
であるビットフィールドへのアクセスにおいて、値の破壊をおこしたり、間違ったメモリ位置へのアクセスを起こすコードを生成することがありました。この問題は修正されました。[SDCOMP-22760]
-
ターゲットの命令セットにおいて
LDR命令
で使用できる直値の最大を超すようなスタックオフセットを伴う可能性がある
long long
または
double
を関数の引数として渡す場合に、引数の値を誤る可能性がありました。この問題は修正されました。[SDCOMP-22712]
-
-O1
以上の最適化レベルにおいて、制限付きポインタ引数を伴う関数がインライン化されると関数にインライン化されたコードが不正である可能性がありました。この問題は修正されました。[SDCOMP-22538]
-
特定の条件でポインタの参照先の値を代入する場合に
-O3 -Otime
によってインライン化された関数が
internal fault 0x87ecef
を起こすことがありました。この問題は修正されました。[SDCOMP-22511]
-
-O3 -Otime --vectorize
使用時、ポインタのオーバーラップを経由して
char型
のデータをshort型のデータにコピーする際に誤ったベクタライズの方法を選択する事がありました。加えて、ベクタライズを行わないコード内でデクリメントループをインクリメントループに誤って変形することがありました。これら両方の問題は修正されました。[SDCOMP-22486]
-
1つ以上の
volatileメンバ
を含む構造体に対する代入において非効率なコードを生成することがありました。この問題は修正されました。適切であれば
非volatileなメンバ
に対しては
memcpy
を使うようになりました。[SDCOMP-22471]
-
関数属性__attribute__((weakref))
がエイリアスされた関数への参照をweakとしてマークしていませんでした。この問題は修正されました。[SDCOMP-22376]
-
-O3
指定時に例外を有効にしたC++コードをコンパイルすると
internal fault 0xe35e83
が発生することがありました。この
internal fault
の原因は修正されました。[SDCOMP-22337]
-
-O3 -Otime
使用時、浮動小数点演算を伴うループの最適化においてint型の中間変数を生成させることがありました。この変数は浮動小数点値をストアする際に使用され、値の切り捨てと小数点部が破棄されて
float
から
int
への型変換が行われるために、不正な計算を引き起こしていました。この問題は修正されました。[SDCOMP-22321]
-
__stack_chk_guard
を誤ってデータではなくコードとして定義した場合に
error 3094
を返し、また
__stack_chk_fail
を誤ってデータではなくコードとして定義した場合には
error 3095
をそれぞれ返すようになりました。[SDCOMP-22301]
-
初期化あり/初期化なしのファイルスコープ変数が混在するファイルにおいて
--no_data_reorder
が正しく動作しませんでした。この問題は修正されました。[SDCOMP-19892]
-
1つ以上の
volatileメンバ
を含むクラスに対する代入において非効率なコードを生成することがありました。この問題は修正されました。適切であれば
非volatileなメンバ
に対しては
memcpy
を使うようになりました。[SDCOMP-18315]
-
ある条件下で、
error 137: expression must be a modifiable lvalue
のエラーに対し
warning 1441-D: nonstandard cast on lvalue
を誤って伴う事がありました。この問題は修正されました。[SDCOMP-11964]
リンカ( armlink )
-
ABIで定義されていないセクションフラグを使用するオブジェクトは[navyABI-compliant[/navy]とマークされなくなりました。[SDCOMP-23039]
-
ロード時と実行時でアドレスが同じであり、RWデータ圧縮が適用されたデータを含む実行リージョンはリンカによって圧縮されたRWデータを上書きする前に、圧縮されたRWデータをテンポラリエリアに展開しなければなりません。この目的に対して
EMPTY
および
UNINIT
属性を持つ実行リージョンではリンカはテンポラリエリアを使用しなくなりました。[SDCOMP-22938]
-
未使用である
__thread変数
に関連したデバッグ情報の処理時に発生していた
internal fault 0x3d9eed
は発生しなくなりました。[SDCOMP-22483]
-
--feedback_image
オプションに関連する以下の問題は修正されました:
none
または
noerrors
使用時:
-
FIXED
リージョンのアドレスが他とオーバーラップするときクラッシュする可能性がありました。
-
スキャッタファイルの
.ANYセレクタ
に関連するエラー(
L6406E, L6407E
)がダウングレードできませんでした。
-
スキャッタローディングの失敗の可能性に関連するエラー(
L6788E
)がダウングレードできませんでした。
-
ScatterAssert式に起因するエラー(
L6388E
)がダウングレードできませんでした。
simple
使用時:
-
ビットバンドリージョンがサポートされず、
error L6191E
が起きていました。
-
__at
セクションのアドレスがデフォルトでスキャッタファイル内にすでに存在するアドレスとオーバーラップしているとエラーを起こすことがありました。
[SDCOMP-22246]
見つからないシンボルを伴う不正なC++プログラムをリンクしようとした際に、仮想関数の削除エラーを起こさなくなりました。見つからないシンボルについてのエラーを返すようになりました。[SDCOMP-22145]
--paged
使用時、スキャッタファイルの
FILL
と
PADVALUE
属性は
EMPTY ZEROPAD
が指定されたかのように不正な動作をしていました。この問題は修正されました。[SDCOMP-20307]
--feedback_image=simple
使用時、必要なリンカ定義シンボルが定義されない事があり、
error L6218E
を起こす可能性がありました。この問題は修正されました。[SDCOMP-19471]
LoadBase
および
LoadLimit関数
をロードリージョンベースではなく実行リージョンベース相対でScatterAssert式において計算する事がありました。これは失われるかあるいは見せかけだけのアサーションエラーを起こすことがありました。この問題は修正されました。[SDCOMP-18236]
$Sub
および
$Super
メカニズムが複数の実装によるCライブラリ関数のラッパの記述に使用された場合、
$Super
バージョンのためにライブラリから選ばれる関数を誤る可能性がありました。影響のある関数は
long
型ですがマルチスレッド対応とリアルタイムヒープバージョンを含む
malloc
、およびあらゆる
高レベルI/O関数のマルチスレッドバージョン
です。この問題は修正されました。[SDCOMP-17693]
サイズゼロのデータセクションの後にあるべニアの挿入によってセクション配置順のルールが破られる事がありました。この問題は修正されました。[SDCOMP-17034]
OVERLAY
リージョンのあとに2つの不正なオーバーラップする実行リージョンがある場合に
error L6221E
の通知に失敗することがありました。この問題は修正されました。[SDCOMP-13661]
Image$$実行リージョンシンボル
は変更されました。ERという名前の以下実行リージョンのシンボル
Image$$ER$$Base, Image$$ER$$RO$$Base, Image$$ER$$RW$$Base, Image$$ER$$ZI$$Base, Image$$ER$$Limit, Image$$ER$$RO$$Limit, Image$$ER$$RW$$Limit, Image$$ER$$ZI$$Limit
は、ELFファイルの実行リージョンに示されるRO, RWおよびZIセクションの
Base
および
Limit
をアラインさせるためにリンカによって挿入されるパディングを含むようになりました。
この変更により、パディングに関して
Image$$シンボル
と
Load$$シンボル
がマッチするようになりました。
--no_legacyalign
の振る舞いが固定されました。全てのELFセクションはELFの仕様に定められているセクションアライメントの要求事項に従うようになりました。以前は実行リージョンを示す最初のELFセクションのベースおよびファイルオフセットのみが実行リージョンアライメントに合致していました。
--no_legacyalign
とともにスキャッタファイルの
ALIGN
キーワードが使用された場合の振る舞いが変わりました。実行リージョンのアライメントは
ALIGNディレクティブ
によって指定された値か、より大きければ入力セクションアライメント要求のいずれかとなります。
以前は
ALIGNディレクティブ
で指定された値が入力セクションアライメントの代わりに使用されていました。[SDCOMP-11735]