パッチプログラムをダウンロードするには、事前に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.これでアップデートツールがインストールされます。
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
-
FlexNet Publisher 11.12.1.0以降のバージョンは https://silver.arm.com/browse/BX002 からダウンロード可能です。(登録およびログインが必要です)
- [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設定のみサポートされます:
- en_US
- ja_JP
- [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
- [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ソースコードをコンパイルするには以下のオプションを使用してください:
- --cpp11
- [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_compat
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の呼び出しに失敗していました。これによって不正な順番で先頭の戻り値を返すことがありました。