パッチプログラムをダウンロードするには、事前にARM社のコネクトサービスのアカウントを取得し、ログインしておく必要があります。アカウントの取得は以下のURL から無償で行う事ができます:
https://login.arm.com/register.php
ARM Compiler toolchain v5.04 u2(build 82)
このARM Compiler Toolchain v5.04 update 2 Build 82 は、既存の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.4 u2 ( Build 82 ) 改善と訂正
v5.04 u2での修正
コンパイラ(armcc)
-
-O3 -Otime
指定時、ポストインクリメントされる変数を含むループが正しくコード生成されない可能性がありました。ポストインクリメント処理がプリインクリメント処理としてコード生成され、ループ誤動作の原因となっていました。[SDCOMP-24893]
-
--protext_stack
オプションを指定してC++コードをコンパイルした際、コンパイラが異常終了してしまう可能性がありました。[SDCOMP-24747]
-
ダブルクォーテーションを使用したインラインアセンブラ(例えば、
__asm("MOV a,b");
など)を使用した際、プリプロセッサが誤って内部のアセンブラコードを処理してしまう可能性がありました。[SDCOMP-24731]
-
-O1
以上の最適化レベルを指定し、ARMv7-Mをターゲットとして整数除算をコンパイルした際、ゼロ除算エラーで実行に失敗する誤ったコードを生成する可能性がありました。[SDCOMP-24730]
-
もしclass A のポインタ(Class Aを継承したClass Bのオブジェクトを指すポインタ)が
dynamic_cast
によってClass C (Bを継承したクラス。Aは継承していない。) へキャストされた場合、コンパイラが誤って出力オブジェクトより複数の情報を削除する可能性がありました。これは、リンカーがRun-Time Type Information(RTTI)を削除することで、実行時のタイプチェックが失敗し
dynamic_cast
が失敗します。この事象は、ポインタと同様に参照でも発生します。[SDCOMP-24675]
-
-O1
以上の最適化レベル指定時、コンパイラは定数によってインクリメントされ、その後同様に定数でデクリメントされるような条件式内で使用される変数に対するコードの順序を誤ってコンパイルする可能性がありました。[SDCOMP-24655]
-
一部の状況下で、コンパイラはパックされた
long long
ビットフィールドの読み書きに対する誤ったコードを生成する可能性がありました。[SDCOMP-24526]
-
特定の状況下で、
abs(x)
の計算とそれに続きその結果を他の値と比較するような近接した連鎖する比較をThumb-2用にコンパイルする際、コンパイラはフラグを設定する
SUBS
命令ではなく、
SUB
命令を誤って生成する可能性がありました。これにより不正な動作を引き起こす可能性がありました。[SDCOMP-24520]
-
__strt
,
__strex
, または
__swp
組み込み関数を使用して4バイトよりも小さな整数型でローカル変数に値をストアする場合、変数を次に読み出す際に必要とされる符号拡張またはゼロ拡張に失敗するコードを生成することがありました。[SDCOMP-24506]
-
-O2
以上の最適化レベルで、特定の状況下で連続するメモリ領域に対するロードまたはストアのシーケンスに関して、コンパイラがシーケンスの部分に対し初期化されていないあるいは不正に初期化されたベースレジスタを使用した
LDM
,
STM
,
VLDM
または
VSTM
命令を生成する可能性がありました。[SDCOMP-24493]
-
-O2
以上の最適化レベルで、特定の状況下で
MI
から
PL
またはその反対に条件が変化することにより
MI
か
PL
かをテストする命令の前に誤って
CMP
命令を変形し、
CMP
オペランドの順番を入れ替えることがありました。これにより、
CMP
オペランドがイコールか、
0x80000000
と異なる際に誤った動作を引き起こす可能性がありました。[SDCOMP-23837]
リンカ(armlink)
-
--rwpi
,
--ropi
,
--fpic
,
--reloc
,または
PI
および
RELOC
属性をスキャッタファイルで使用したプログラムのリンク時に、リンカが誤ってベニアと連続するスキャッタローディングハンドラの間に2バイトのパディングを挿入することがありました。
--pad
オプション使用時、パディングされるバイトは
-pad
値にセットされ、その結果間違ったあるいは未定義命令が実行される可能性がありました。[SDCOMP-24101]
-
正しいベニアを生成するため、リンカは1つの実行リージョン内のセクションの順番を最初に決めなければなりません。稀な状況下で、巨大なプログラムをリンクする際、ベニアの挿入後に誤ってリンカがセクションの順序を変える可能性がありました。誤って移動されるセクションにインラインベニアが生成されていた場合、期待しているものとは異なるセクションに処理が移行してしまうため、ベニアが呼び出されると不正な動作となりました。[SDCOMP-24054]
ライブラリ
-
Compare
および
Container
引数だけを取るコンストラクタを使用するstd::
priority_queue
のオブジェクト型を初期化する際、ライブラリコードは
make_heap
の呼び出しに失敗することがありました。これは
top
が不正な順番で値を返す動作を引き起こす可能性があります。[SDCOMP-23977]
-
scanfファミリの関数で
%*n
ディレクティブを使用すると、C90で要求されている無操作の代わりに
%n
と同様な動作をする可能性がありました。[SDCOMP-23881]
-
scanfファミリ関数に対する%[ 変換指定子がすべての入力キャラクタにマッチしない場合、関連する引数は影響を受けるべきではありません。その代わりに引数は最初のバイトに
'0'
が書かれるべきでした。[SDCOMP-23765]