パッチプログラムをダウンロードするには、事前にARM社のコネクトサービスのアカウントを取得し、ログインしておく必要があります。アカウントの取得は以下のURL から無償で行う事ができます:
https://login.arm.com/register.php
ARM Compiler toolchain v5.05(build 41)
このARM Compiler Toolchain v5.05 Build 41 は、ARM Compiler 5製品として使用されることを意図しています。このアップデートは、ARM DS-5プロダクト内のARM Compilerをアップデートするには適していません。ARM Compiler 5の様々な機能リリースは、同一のマシンに共存インストール可能です。同一の機能リリースに対する複数のアップデートバージョン(例:5.01u1と5.01u2)を同一マシンにインストールすることはサポートされておりません。
DS-5のパッチは、ARM社のWebサイトよりダウンロード可能です。
https://silver.arm.com/browse/DS500
このアップデートは、最新のコンパイラおよび、リンカ、アセンブラ、 fromelf、およびarmarの実行可能形式と、インクルードファイルおよびC / C++ ライブラリから構成されています。
サポートされるOSプラットフォーム
Windows XP Professional SP3 (32-bit only)
Windows Server 2012 (64-bit only)
Windows Server 2008 R2
Windows 7 Enterprise Edition SP1
Windows 7 Professional Edition SP1
Windows 8 (64-bit)
RedHat Enterprise Linux 6 Desktop and Workstation option, Standard
RedHat Enterprise Linux 5 Desktop and Workstation option, Standard
Ubuntu Desktop Edition 1404 LTS (64-bit only)
Ubuntu Desktop Edition 1204 LTS
Red Hat Enterprise Linux 6では時折デフォルトで32-bit互換ライブラリなしでインストールされることがあります。ARM CompilerをRed Hat Enterprise Linux 6で使用される場合は、32-bit Compatibility Libraryサポートをインストールする必要があります。
特にARM Compilerではglibcとlibmを必要とします。これらをインストールするには、yumコマンドが正しくセットアップされていることを確認したうえで、以下を入力してください:
# yum groupinstall "Compatibility Libraries"
パッチをインストールするには以下の手順で行います
Linux の場合
1.上記サイトからパッチプログラムをダウンロードしてください。
2.tgz ファイルをテンポラリディレクトリに解凍してください。
3.Installer ディレクトリ内の "setup.sh" を実行し、画面の指示に従って、ARM Compiler v5.05をインストールしてください。
4.これでアップデートツールがインストールされます。
Windows の場合
1.上記サイトからパッチプログラムをダウンロードしてください。
2.ZIP ファイルをテンポラリディレクトリに解凍してください。
3.Installer ディレクトリ内の "setup.exe" をダブルクリックし、インストーラの画面の指示に従って、ARM Compiler v5.05をインストールしてください。
4.これでアップデートツールがインストールされます。
ARM Compiler v5.05 ( Build 41 ) 改善と訂正
v5.05での全般的な変更
-
[SDCOMP-25727] ARM Compiler 5.05はFlexNet Publisher 11.12.1.0を使用します。このバージョンは以前のFlexNet Publisherライセンスサーバソフトウェアと互換性がありません。
フローティングライセンスをご使用の場合は、armlmdおよびlmgrdをversion 11.12.1.0以降にアップデートする必要があります。
旧バージョンのライセンスサーバソフトウェアを使用している場合、ARM Compiler 5.05は次のエラーをレポートします:
FLEXnet Licensing error:-7,10015[/red]
-
[SDCOMP-25728] Cortex-M7 CPUのサポートが追加されました。Cortex-M7をターゲットとする場合以下のいずれかのオプションを選択してください:
-
--cpu=Cortex-M7
(FPサポートなしの場合)
-
--cpu=Cortex-M7.fp.sp
(単精度FPサポートの場合)
-
--cpu=Cortex-M7.fp.dp
(倍精度FPサポートの場合)
-
[SDCOMP-23839] 単精度浮動小数点ハードウェアを使用するCortex-M4をターゲットとする場合のオプションが以下にリネームされました:
-
--cpu=Cortex-M4.fp.sp
この変更により、どのFPサポートタイプかが明確になります。旧
--cpu=Cortex-M4.fp
オプションは新しい名前のシノニムとして管理されますが
--cpu=list
のリストには表示されなくなります。
-
[SDCOMP-25583] 韓国語、中国語のエラーおよび警告メッセージサポートは廃止されました。以下の
--message_locale
設定のみサポートされます:
-
[SDCOMP-24563] Precompiled Header (PCH)ファイルのサポートはすべてのプラットフォームにおいて非推奨となりました。
-
[SDCOMP-22084] ARM Compiler 5.05では以下のサポートが追加されました:
-
Microsoft Windows Server 2012 (64-bit only)
-
Ubuntu 14.04 LTS (64-bit only)
以下のサポートは非推奨となります:
-
Microsoft Windows Server 2003 SP2
Cygwinサポート(32-bitプラットフォームのみ)はCygwin version 1.7.32に変更となりました。
-
[SDCOMP-22254] ARM Compilerの次期リリース、ARM Compiler 5.06は以下のホストプラットフォームサポートが非推奨となります:
-
Windows XP Professional SP3
-
Ubuntu Desktop Edition 12.04 LTS
-
RedHat Enterprise Linux 5 Desktop and Workstation option, Standard
-
[SDCOMP-24658] 多くのコンパイラメッセージの追加に加え、ARM Compilerが生成するエラーおよび警告が変更されています。より詳細については
ARM Compiler 5.05 Errors and Warnings Reference Guide
をご参照ください。
v5.05での改善
Compiler(armcc)
-
[SDCOMP-25733] ISO C++11ソースランゲージモードサポートが追加されました。ISO C++11ソースコードをコンパイルするには以下のオプションを使用してください:
-
[SDCOMP-24706] ARMv6-Mプロセッサ向けに--execute_onlyオプションがサポートされました。
-
[SDCOMP-24650] FPv5のサポートが追加されました。適切なターゲットに対してコンパイルされる場合選択されます。例:
-
--cpu=Cortex-M7.fp.sp
-
--cpu=Cortex-M7.fp.dp
Linker(armlink)
-
[SDCOMP-25159] ダイナミックリンク実行時、リンカは自動的に
--no_legacyalign
に切り替えていました。この動作は発生しなくなりました。
-
[SDCOMP-23499] 以下のオプションが追加されました:
-
--callgraph_subset
このオプションは標準の
--callgraph
の出力のサブセットとして、このオプションの引数として渡された関数についてのみ呼ぶ/呼ばれるといった情報を出力します。
全般的な改善
-
[SDCOMP-25726] 新しいオプションがコンパイラとリンカに追加されました:
--cpp
または
--cpp11
のいずれかとともにC++ソースコードがコンパイルされる場合、コンパイラオプション
--cpp_compat
は旧バージョンのARM Compilerで生成されたオブジェクトファイルに対する最大の下位互換性を持たせます。
--cpp11
とともにC++11ソースコードがコンパイルされる場合、コンパイラオプション
--cpp_compat
は
--cpp
オプションを使用して生成されたオブジェクトファイルに対する最大の下位互換性について制限することが可能です。
リンカオプションの
--cpp_compat
は、旧バージョンのARM Compilerによって生成されたオブジェクトファイルやバイナリとのリンク時、マングリングの互換性の有無をチェックするために使用できます。
v5.05での修正
Compiler(armcc)
-
[SDCOMP-25618] 128文字以上の長さの定数文字列を含む組み込みアセンブラ言語を処理する際、コンパイラは不正に以下のエラーを発生させることがありました:Error: A1154E: Unexpected operand, operator expected.
-
[SDCOMP-25411]
-O3 -Otime
使用時、関数が2つの変数AとBの定義および初期化を行っており、Bの初期化で関数F()がAに依存する引数を持って呼ばれる場合、コンパイラが不正にF()の呼び出しを2度行うことがありました。
-
[SDCOMP-25356] ARMv7-Mをターゲットとして、
-O3 -Otime --loop_optimization_level=2
のオプションを使用した場合、コンパイラは式とループ自体の制御の両方を行う配列をインデックスするために使われる変数をポストインクリメントする式の制御を行うwhileループで不正なコードを生成することがありました。
-
[SDCOMP-25335]
-O3 -Otime
指定時、
expression-3
が配列のコピーを行うようなfor文に対して不正なコードを生成することがありました
-
[SDCOMP-25332]
-O2
以上の最適化レベル指定時、変数に対するポインタのdereferenceのアサインを行い、異なった値へdereferenceされているロケーションを設定し、その後同じ式でポインタのdereferenceの新しい値と変数の両方を使用する場合、不正なコードを生成する可能性がありました。
-
[SDCOMP-25185] 1以上の値をnに用いた
aligned(n)
の属性指定を使用した、ビットフィールドメンバを持つ構造体、あるいはビットフィールドまたは構造体が
packed
であるとき、
aligned(n)
が誤って
aligned(1)
であるように扱われていました。
-
[SDCOMP-25156]
#pragma pack(2)
または
#pragma pack(4)
のスコープ内で宣言された構造体から読みだされた64-bit整数型引数を伴う関数呼び出しについて不正なコードを生成することがありました。
-
[SDCOMP-25136]
-O0
指定時、1ビットだけをセットされた大きな定数で
long long
式のビット単位の
AND
を行うオペランドを含む特定の関係式について不正なコードを生成することがありました。
-
構造体またはクラスタイプで右辺のオペランドが
volatile
でサイズ0の名前のないビットフィールドを含む代入のコンパイル時、不正なコードを生成するか、internal faultを発生させることがありました。
-
[SDCOMP-24891] 特定の環境下において、
--protect_stack
オプション付きでC++コードをコンパイルするとコンパイラがクラッシュすることがありました。
-
[SDCOMP-24751]
-O3 -Otime
指定時、ポストインクリメント変数を含むループで不正なコードを生成することがありました。プリインクリメントがポストインクリメントの代わりに生成されてしまい、不正なループ処理となってしまっていました。
-
[SDCOMP-24746]
-O1
以上の最適化レベル指定時、ARMv7-Mターゲットにおいて整数値の除算式をコンパイルすると、0除算のトラップを有効にしている場合にフォルトを引き起こすような誤ったコードを生成することがありました。
-
[SDCOMP-24741] class Aへのポインタが、Aからindirectに継承されたclass Bのオブジェクトを示す場合で、Aが継承されない状況から、Bも継承されるclass Cに対してのdynamic_castを伴うキャストであった場合にオブジェクトファイルの出力から不正に一部の情報を削除してしまうことがありました。これはRun-Time Type Information (RTTI)をリンカが削除する動作を引き起こし、ランタイムの型チェックの問題でdynamic_castが失敗する結果をもたらす可能性がありました。これはポインタに加え参照でも起こりえました。
-
[SDCOMP-24725]
-O1
以上の最適化レベル指定時、定数値で変数がインクリメントされ同一の定数値でデクリメントされるような条件式内で使用された場合に誤ったコードシーケンスとしてコンパイルを行う可能性がありました。
-
[SDCOMP-24718] クォートで囲まれた文字の構成をインラインアセンブラで使用した場合に、プリプロセッサは誤って文字中のアセンブラコードをプリプロセスしてしまうことがありました。例:__asm("MOV a, b");
-
[SDCOMP-24712] Thumb-2のコンパイルの際に特定の状況下で、
abs(x)
の計算を行いその直後に他の値との比較を行うようなごく近いタイミングでの比較処理においてフラグを設定する
SUBS
命令の代わりに、誤って
SUB
命令を生成することがありました。これにより誤った動作が引き起こされることがありました。
-
[SDCOMP-24685] 一部の状況下において、
packed
の
long long bitfield
に対して誤った読み出しおよび書き込みのコードを生成することがありました。
-
[SDCOMP-24632]
-O2
以上の最適化レベル指定時、特定の状況下で連続するメモリエリアへのロードまたはストアのシーケンスで、シーケンスの一部として未初期化または不正に初期化したベースレジスタを使って
LDM、STM、VLDM
および
VSTM
命令を生成することがありました。
-
[SDCOMP-24622]
__strt、__strex
または
__swp
の組み込み関数を使用して4バイトよりも小さな整数型のローカル変数に値をストアする際、コンパイラは誤って必要に応じて用いられる符号拡張やゼロ拡張に失敗するコードを生成することがありました。
-
[SDCOMP-24574]
--gnu
モード時、
friend
として非限定クラスが以前に宣言されたものを検索する際、Error: #265-D:
is inaccessibleのエラーを返す代わりに誤ってアクセスできないスコープを検索していました。
-
[SDCOMP-24474] C++インライン関数内の文字列リテラルが不正にROデータセクションではなくRWデータセクションに配置されることがありました。
-
[SDCOMP-24124] 64-bit整数の定数引数を限定された範囲の整数定数を期待するパラメータに対して渡した場合、定数が範囲内かどうかをチェックする前に32ビットの値に切り捨てを行っていました。結果として、値はout-of-rangeとなるべきものが誤って受け付けられることがありました。コンパイラは次のような適切なメッセージを返すようになりました:
-
Error: 1437: __breakpoint argument must be within 0-65535 when compiling for ARM
-
Error: 1438: __breakpoint argument must be within 0-255 when compiling for Thumb
-
Error: 2529: expression must be an integral constant in range
to
-
[SDCOMP-23954] Windows環境下でのコンパイル時、
--locale
スイッチが無視されていました。
-
[SDCOMP-23934]
-O2
以上の最適化レベル指定時、一部の状況下でMIからPLあるいはその逆の条件に変更を行うことによってMIあるいはPLの条件をテストする命令の前にある
CMP
命令を不正に変更し、
CMP
オペランドの順番を入れ替えてしまうことがありました。これは
CMP
オペランドが等しい、あるいは0x80000000と異なる場合に不正な動作を引き起こしていました。
-
[SDCOMP-22039] Shift-JISを使用するように設定された日本語Windowsマシンの環境で、日本語の文字を含むパスを伴うファイルをコンパイルした場合、破損した
DW_AT_comp_dir
属性を含むデバッグ情報を生成することがありました。
-
[SDCOMP-18346]
--gnu --gnu_version=40401
使用時、GCC version 4.4.1には存在しないテンプレート引数に依存するルックアップ中に、GCC version4.1.1のフォルトを誤ってエミュレートしていました。
Linker (armlink)
-
[SDCOMP-25472]
--no_legacyalign
オプション使用時、リンカはzero-initialized(ZI)データだけを含む実行リージョンのベースアドレスを整列させるため、ELFファイルに非効率なパディングバイトを書き込んでいました。
-
[SDCOMP-24593]
--rwpi、--ropi、--fpic、--reloc
オプションの使用およびスキャッタファイルにおける
PI
または
RELOC
属性指定時、べニアとそれに続くスキャッタローディングハンドラの間に2バイトのパディングを誤って挿入することがありました。
--pad
オプション使用時、パディングバイトは
--pad
の値がセットされ、不定または未定義な命令の実行を引き起こしていました。
-
[SDCOMP-24418] 正しいべニアを生成するために、リンカは1つの実行リージョン内のセクションの順番を最初に決定するべきです。稀な状況下で、巨大なプログラムをリンクする際にべニアが挿入された後からセクションの順番を不正に変更することがありました。もしインラインべニアが続いて移動されたセクションに対して生成されていると、期待されているものではなく異なったセクションに対して実行が移るためべニアが呼び出されると不正な動作を引き起こしていました。
Libraries
-
[SDCOMP-24901]
scanf
ファミリに対する
%*n
ディレクティブの使用が、C90の要求では何もしないものが、
%n
と同様の動作をしてしまっていました。
-
[SDCOMP-24762]
scanf
ファミリ関数において
%[
変換指定子があらゆる入力文字列のマッチに失敗すると、関連する引数には影響があるべきではありません。代わりに引数の最初のバイトに
''
が書かれることがありました。
-
[SDCOMP-24749] 比較とコンテナ引数のみを取るコンストラクタを使用して
std::priority_queue
型のオブジェクトの初期化時、ライブラリコードは
make_heap
の呼び出しに失敗していました。これによって不正な順番で先頭の戻り値を返すことがありました。