アップデートリリースをダウンロードするには、事前にARM社のコネクトサービスのアカウントを取得し、ログインしておく必要があります。アカウントの取得は以下のURL から無償で行う事ができます:
https://login.arm.com/register.php
ARM Compiler toolchain v5.06 update2 (build 183)
1.イントロダクション
ARM Compiler 5.06は、ARM Compiler 5の最終リリースのシリーズであり、ARM Compiler 6へ継承されます。
次のアップデートリリースであるARM Compiler 5.06 update 3が、通常のARM Compiler 5.06メンテナンス期間で最終リリースとなる予定です。それ以降のサポートとメンテナンスはARM Compiler 拡張保守(Extended Maintenance)を通して利用可能です。ARM Compiler 5.06の拡張保守(Extended Maintenance)リリースは、ARM Compiler Qualification Kitによってサポートされます。
詳細な情報は、以下のリンクをご参照ください。
ARM Compiler 5.06 update 2 (build 183)は、ARM Compiler 5.06のアップデートリリースであり、以下の使用を意図しています。
- DS-5 Professional Edition あるいは DS-5 Ultimate Editionと共に使用
- Keil MDK-Standard あるいは Keil-MDK Professionalと共に使用
- スタンドアロンでのツールインストレーション
ライセンスについてのご質問は購入元あるいは license.support@arm.comへのメールで行ってください。
フローティングライセンスをご使用の場合は、armlmdおよびlmgrdをversion 11.12.1.0以降にアップデートする必要があります。
2015年11月に、Flexera社は FlexNet Publisherのベンダデーモンコンポーネントとlmgrdで発見されたセキュリティの脆弱性を発表しました。Flexera社は脆弱性が利用されたと信じるに足る根拠はないものの、FlexNet Publisher version 11.13.1.2でセキュリティアップデートを提供しました。このため、ライセンスサーバを少なくともこのバージョンへアップグレードすることをお勧めします。FlexNet Publisher 11.13.1.2 のライセンスサーバソフトウェアは、https://silver.arm.com/browse/BX002 からダウンロード可能です。(登録およびログインが必要です)
2.インストール方法
ARM Compiler 5.06 update 2 が、ツールキット(DS-5あるいはKeik MDK)の一部として含まれている場合、ツールキットのインストーラがインストレーションプロセスを処理します。ツールキットのインストレーション指示を参照してください。
その他のケースの場合、ARM Compiler 5.06 update 2をどのように使用するかに依存して適切なインストレーションの場所を選択する必要があります。
- DS-5 5.20 以降に統合する
- Keil MDK 5.12 以降に統合する
- スタンドアロン製品として使用
2.1. DS-5 5.20 以降への統合
ARM Compiler 5.06 update 2 は、DS-5製品のインストレーションの外であるなら、デフォルトの場所を含み、任意の場所にインストールすることができます。
インストール後、http://ds.arm.com/developer-resources/tutorials/adding-new-compiler-toolchains-to-ds-5/のチュートリアルで示す方法に従って、DS-5 5.20以降のツールチェーンに統合することができます。
DS-5 Eclipse IDE あるいは DS-5 Command PromptからARM Compiler 5.06 Update2 を使用することをおすすめします。これら環境の外でツールチェーンを使用するとき、以下の環境変数の構成が必要となります。
- DS-5インストレーション内の sw/mappings ディレクトリへのパスをARM_PRODUCT_PATHにセットします
- DS-5 Ultimate Editionを使用する場合、ARM_TOOL_VARIANT=ultをセットします
2.2. Keil MDK 5.12 以降への統合
ARM Compiler 5.06 update 2は、Keil MDKインストレーションのARMサブディレクトリの下にインストールする必要があります。たとえば、Keil MDKインストレーションが C:Keil_v5ならば、C:Keil_v5ARMARM_Compiler_5.06u2にインストールすることをおすすめします。
インストール後、http://www.keil.com/appnotes/docs/apnt_267.aspで利用可能なアプリケーションノートの指示に従って、MDKプロジェクトへツールチェーンを統合することができます。
2.3. スタンドアロン製品としての使用
ARM Compiler 5.06 update 2は、DS-5製品およびKeil MDK製品のそれぞれのインストレーションの外であるなら、デフォルトの場所を含み、任意の場所にインストールすることができます。
ライセンスファイルあるいはライセンスサーバの場所を指定するARMLMD_LICENSE_FILE環境変数をセットしてください。Windows上ではダブルクォーテーションをこのパス内に含めないでください。パス内の空白はクォーツなしで、動作します。
2.4. Linux環境へのインストレーション
ARM Compiler 5.06 update 2は、以下のサポートされるプラットフォームでテストされています。
RedHat Enterprise Linux 6 Workstation option Ubuntu Desktop Edition 14.04 LTS (64-bit only)
Installer/setup.shを実行し、画面の指示に従ってください。
インストールされたいくつかのツールが32bitシステムライブラリに依存します。
ARM Compiler 5.06 update 2 を64-bit Linuxホストプラットフォームで使用するとき、32-bit互換のライブラリがインストールされていることを確認してください。 32-bit互換ライブラリがインストールされていない場合、ARM Compiler 5.06 update 2 ツールは、ライブラリが見つからず実行が失敗するあるいはエラーをレポートします。インストールに必要なライブラリは、ご使用のプラットフォームで管理者権限で適切なコマンドを実行して確認してください。
Red Hat
yum install glibc.i686
Ubuntu
apt-get install lib32stdc++6
2.5. Windows環境へのインストレーション
ARM Compiler 5.06 update 2は、以下のサポートされるプラットフォームでテストされています。
Windows Server 2012,64-bit only Windows 7 Enterprise SP1 Windows 7 Professional SP1 Windows 8.1,64-bit only
Installersetup.exeを実行し、画面の指示に従ってください。
32-bitのインストーラのみ提供されます。ツールパッケージは、64-bitホストプラットフォーム向けに、個別に64-bit版のarmlinkを含むバイナリセットを含みます。詳細は、ドキュメンテーションをご参照ください。
3. アンインストール方法
Linuxの場合、ARM Compiler 5.06 update 2をインストールディレクトリから削除してください
Windowsの場合、コントロールパネルのプログラムの追加と削除からARM Compiler 5.06 update 2を選択し、アンインストールボタンを押下してください
4. ドキュメンテーション
ARM Compiler v5.06リリースシリーズの以下ドキュメントが利用可能です。
- armar User Guide
- armasm User Guide.
- armcc User Guide.
- armlink User Guide.
- fromelf User Guide.
- ARM C and C++ Libraries and Floating-Point Support User Guide.
- Errors and Warnings Reference Guide.
- Getting Stated Guide.
- Migration and Compatibility Guide.
- Software Development Guide.
これ以上の情報は、ARM InfocenterのARM Compiler 5 documentationをご参照ください。
5. フィードバックとサポートについて
お客様からのフィードバックは我々にとって重要です。製品のあらゆる局面において、欠陥報告と改善に関する提案を歓迎します。フィードバックあるいはサポートについて、お客様の製品の購入元あるいは、support-sw@arm.comへメールでご連絡ください。必要に応じて、ツールからの--vsnの出力、問題を再現するのに必要なソースコードおよびその他のファイルとコマンドラインを提供してください。ARM Compiler 5.06 update 2の総合的なビルド番号は、このドキュメントの最初に見出すことができます。当社へのお問い合わせは、こちら。
6. リリース履歴と変更点について
以下に、ARM Compiler 5.06 シリーズのリリース日付を示します。
- 5.06 update 2 (2016年1月にリリースされました)
- 5.06 update 1 (2015年9月にリリースされました)
- 5.06 (2015年7月にリリースされました)
ARM Compiler v5.06 update 2 での変更点について
ARM Compiler v5.06 update 2 での拡張
Linker(armlink)
- [SDCOMP-30794]リンカオプション --no_unaligned_accessを新たに追加サポートしました。このオプションは、リンカが非整列アクセスを許すARM Cライブラリからオブジェクトを選択することを阻止します。そして、入力オブジェクトのいずれかが非整列アクセスを許可する場合、ダウングレード可能な以下のエラーをレポートします。
- Error: L6366E: <object> attributes<attr> are not compatible with the provided cpu and fpu attributes.
- Error: L6367E: <object>(<section>) attributes<attr> are not compatible with the provided cpu and fpu attributes.
- Error: L6368E: <symbol> defined in <object>(<section>) attributes<attr> are not compatible with the provided cpu and fpu attributes.
ARM Compiler v5.06 update 2 で修正された不具合
Compiler(armcc)
- [SDCOMP-30645] volatileアクセスや関数呼び出しのような副作用のためにのみ評価の必要な式をコンパイルするまれな条件で、コンパイラはInternal fault: [0xcddbd6:<ver>]を報告することがありました。この不具合は修正されました。
- [SDCOMP-30601] -Otime --vectorize と-O2以上を指定してコンパイルするまれな条件で、コンパイラは誤って"no source": Warning: #68-D: integer conversion resulted in a change of sign.を報告することがありました。この不具合は修正されました。
- [SDCOMP-30568]-O3 -Otimeを指定してコンパイルするまれな条件で、コンパイラは、オーバーフローするかもしれないかつ異なる型あるいは幅の整数を伴う積算で、誤ったコードを生成することがありました。この不具合は修正されました。
- [SDCOMP-30556] <condition> ? <expression1> : <expression2>の形式の式を含むC++コードで、<condition>がコンパイル時に定数になり、<expression1> と <expression2>の両方がclass rvalueをリターンするまれな条件で、コンパイラはInternal fault: [0x87ecef:<ver>]あるいは、WIndowsのAPPCRASHエラーを起こすことがありました。この不具合は修正されました。
- [SDCOMP-30412] -O2以上を使用してコンパイルするまれな条件で、コンパイラはInternal fault: [0x691cf6:<ver>]を発生することがありました。この不具合は修正されました。
- [SDCOMP-30374] std::nullptr_t型を含むC++11コードを--omf_browseオプションを使用してコンパイルするとき、コンパイラは誤って KB: Unexpected type: 16 std::nullptr_tを報告することがありました。この不具合は修正されました。
- [SDCOMP-30302] --use_frame_pointerおよび-O1以上を指定してコンパイルするまれな条件で、フレームポインタレジスタを破壊をもたらすテイルコール最適化のために、誤ったコードを生成することがありました。この不具合は修正されました。
- [SDCOMP-30286]浮動小数点コードに--cpu=7-M --fpu=FPv5_D16と-O1以上を指定してコンパイルするまれな条件で、コンパイラは、関連するフラグ設定命令の前に、VSEL命令が誤って現れるコードシーケンスを生成することがありました。この不具合は修正されました。
- [SDCOMP-30253]--gnuを指定しないでC++コードをコンパイルするとき、 GNUのビルトイン関数__sync_*ファミリが誤って必要とされる型の代わりにvoidが戻されるように指定されました。この不具合は修正されました。
- [SDCOMP-30109]-Otime --vectorizeと-O2以上を指定してコンパイルするまれな条件で、unsigned charからの明示的な型変換とshortからlongへの式をベクタライズするとき、コンパイラは誤ったコードを生成することがありました。この不具合は修正されました。
- [SDCOMP-30013] Thumb-2テクノロジをサポートするターゲットで、Thumbステートにおいて-O2以上でコンパイルするまれな条件で、コンパイラはビット単位のANDを含む条件式で誤ったコードを生成することがありました。この不具合は修正されました。
- [SDCOMP-30003]-O1以上を指定するまれな条件で、コンパイラは、アドレスが以前に取られた変数に関する式を符号拡張するとき、誤った結果を生成することがありました。この不具合は修正されました。
- [SDCOMP-30002]-O3 -Otimeを指定してコンパイルするまれな条件で、コンパイラは、continue分を含みコンパイル時に1回の繰り返しを行うと認識されるforループの繰り返し変数を更新しない誤ったコードを生成することがありました。この不具合は修正されました。
- [SDCOMP-30001]-O3 -Otimeを指定してコンパイルするまれな条件で、コンパイラは、ループ内部に無条件に実行するステートメントを含むにもかかわらず、ループが実行されないかもしれないコードを生成することがありました。
- [SDCOMP-30000]-O3 -Otimeを指定してコンパイルするまれな条件で、コンパイラは等式あるいは比較演算子の結果をintの代わりにunsigned intとして誤って取り扱うことがありました。この不具合は修正されました。
- [SDCOMP-29993]テンプレート基本クラスからのメソッドをオーバーライドするnoexcept指定子を持つ仮想メソッドを含むC++11コードをコンパイルするまれな条件で、コンパイラは誤ってError: #766-D: exception specification for virtual <entity> is incompatible with that of overridden <entity>を報告することがありました。この不具合は修正されました。
- [SDCOMP-29958]以前は、--cpu=7を指定してコンパイルするとき、コンパイラは誤って関数定義が__irqキーワードで修飾されることを許していました。これは、例外ハンドラエントリとExitシーケンスがARMv7-A, ARMv7-R, および ARMv7-Mにわたって共通でないため誤っています。この不具合は修正されました。コンパイラは、Error: #3733: __irq functions cannot be generated for this architecture.を報告するようになりました。正しいエントリとexitシーケンスを持つ__irq関数をコンパイルするためには、--cpu=7を、nameにプロセッサの名前あるいはアーキテクチャバリアントを指定して--cpu=nameへ置き換えてください。
- [SDCOMP-29947]-O1以上を指定し、unsigned intをdoubleへキャストし、doubleをlong longへキャストするまれな条件で、コンパイラは正しくないコードを生成することがありました。この不具合は修正されました。
- [SDCOMP-29854]constexprとして宣言されるコンストラクタを含むC++11コードをコンパイルするまれな条件で、コンパイラはInternal fault: [0x87ecef:<ver>]あるいはWindowsのAPPCRASHエラーを起こすことがありました。この不具合は修正されました。
- [SDCOMP-29758]-O1以上を指定してNEON組み込み関数をコンパイルする、あるいは-Otime --vectorizeおよび-O2以上を指定するとき、コンパイラは誤ってInternal fault: [0xb36758:<ver>]を報告することがありました。この不具合は修正されました。
- [SDCOMP-29388]コンストラクタへの引数として中括弧に含まれる文字構造体の初期化演算子を含むC++11コードをコンパイルするとき、コンパイラや誤ってInternal fault: [0x87ecef:<ver>]あるいはWindowsのAPPCRASHを引き起こすことがありました。この不具合は修正されました。
- [SDCOMP-29386]--omf_browseを指定し、enum class型を含むC++11コードをコンパイルするとき、コンパイラは誤ってInternal fault: [0x87ecef:<ver>]あるいはWindowsのAPPCRASHを引き起こすことがありました。この不具合は修正されました。
- [SDCOMP-29384]--multifileを指定してコンパイルし、同じ変数が複数のコンパイル単位で宣言されており、少なくともその一つの宣言が整列属性(alignment attribute)を持つ場合、コンパイラは誤ってInternal fault: [0x87ecef:<ver>]あるいはWindowsのAPPCRASHを引き起こすことがありました。この不具合は修正されました。
- [SDCOMP-29003]C++11を含むまれな条件で、可変値引数テンプレート T1がエイリアスされたテンプレート定義 AT1で使用され、AT1が他の可変値引数テンプレートT2でインスタンス化され、T2がインスタンス化されるとき、コンパイラが誤ってError: #304: no instance of <entity> matches the argument list.を報告することがありました。この不具合は修正されました。
- [SDCOMP-28973]可変値引数テンプレートを含むC++11コードをコンパイルする稀な条件で、与えられたテンプレートが既に同じ式を使用してインスタンス化されて、別個のものと考慮されるべきとき、コンパイラは可変値引数テンプレートの引数を適切に置き換えることに失敗することがあります。誤って、Error: #871: template instantiation resulted in unexpected function type of <type>.を報告することがありました。この不具合は修正されました。
- [SDCOMP-26533]-Otimeと-O2以上が指定されコンパイルされるまれな条件で、コンパイラや誤って"no source": Warning: #68-D: integer conversion resulted in a change of sign. を報告することがありました。この不具合は修正されました。
- [SDCOMP-26059]日本語Windowsマシンにおいて組込みアセンブラ関数を含むソースをコンパイルするまれな環境で、ユーザ名あるいはTMP環境変数に非ASCII文字を含むと、コンパイラがFatal error: A1023E: File "<filename"> could not be opened: No such file or directory.を誤って報告することがありました。この不具合は修正されました。
- [SDCOMP-26058]日本語Windowsマシンにおいて組込みアセンブラ関数を含むソースをコンパイルするまれな環境で、コンパイラは誤ってWindows BEXエラーを起こすことがありました。この不具合は修正されました。
- [SDCOMP-25631]--vectorizeと共に不適当な最適化レベルが指定されたとき、あるいはターゲットがNEONをサポートしないとき、コンパイラは誤ってWarning: C4361W: Loop optimizations can only be enabled at -O3 -Otime or --vectorizeを報告するか、警告の報告に失敗することがありました。この不具合は修正されました。コンパイラは、Warning: C4366W: Vectorization can only be enabled for targets with NEON capabilityあるいはWarning: C4367W: Vectorization can only be enabled at -O3 -Otime or -O2 -Otimeの両方かいずれかのレポートを行います。
- [SDCOMP-23625]RRX以外のシフトに関するインラインアセンブラ命令をコンパイルするまれな条件で、コンパイラは誤ってWarning: C4007E: Uninitialised or corrupted use of PSR. This code may not work correctly.を報告することがありました。この不具合は修正されました。
- [SDCOMP-15500] まれに、符号なしのビットフィールドを扱う式がカンマ演算子の右側に現われ、そして他のオペランドが符号付の整数型であるとき、コンパイラは符号なし型に誤って演算子の結果を伸張することがありました。この不具合は修正されました。
Assembler (armasm)
- [SDCOMP-30491] Large Physical Address Extension (LPAE)が実装されたターゲット向けに、システムレジスタ PAR,TTBR0あるいはTTBR1にアクセスするMRSあるいはMSR命令をアセンブルするとき、アセンブラは誤って、Error: A1902E: Specified special register not supported on target architecture.を報告することがありました。この不具合は修正されました。
Linker (armlink)
- [SDCOMP-24039]Error: L6788E: Scatter-loading of execution region <er1name> to [<base1>,<limit1>) will cause the contents of execution region <er2name> at [<base2>,<limit2>) to be corrupted at run-time. のメッセージにおいて、リンカはまれにロードアドレスを誤って報告することがありました。
Libraries
- [SDCOMP-30831]printf()ファミリ関数のARM Cライブラリ実装において、%a あるいは %Aを使用した16進形式で浮動小数点数をフォーマットする際に、#フラグは指定されますが16進小数点の後の値が0のとき、フォーマット出力から誤って16進小数点文字を省略することがありました。
- [SDCOMP-30329]標準ヘッダ stdint.hが誤って、標準のCマクロ UINTPTR_MAXを2^32-1の代わりに2^31-1として定義していました。この不具合は修正されました。
- [SDCOMP-29760]strtod() と scanf()ファミリ関数のARM Cライブラリ実装が、C99の16進浮動小数点シンタクスの文字列を構文処理するとき、16進小数点の前のすべての桁と16進小数点の後に続く少なくとも1つの桁が0、例えば"0x0.00E"であるとき、誤った結果を返すことがありました。この不具合は修正されました。
ARM Compiler v5.06 update 1での変更点について
ARM Compiler v5.06 update 1での全般的な変更
- [SDCOMP-29957]組込み関数__sync_*ファミリは、以前はコンパイル時に[maroon]--gnu[/maroon]が指定されGNUモードのときのみ利用可能でした。これらは、すべての言語モードで利用可能となりました。
v5.06 update 1 で修正された不具合
Compiler(armcc)
- [SDCOMP-29910] Cortex-Mプロセッサ以外の全てのプロセッサでコンパイルされるとき、ARM Compiler 5.06 (build 20)は__irqキーワードで修飾される関数で正しくないコードを生成しました。生成されたコードは、全てのレジスタを保存するのではなく、AAPCSで保持することが求められているレジスタのみを保存していました。これは修正されました。
- [SDCOMP-29862] 特定の条件で、後のコードで下位32bitのみ使用されるとき、コンパイラは、64-bit volatile変数の上位半分のロードに失敗することがありました。
- [SDCOMP-29798] -O3 -Otimeを使用する特定の条件で、コンパイラは誤って、等式あるいは比較演算子の結果をintの代わりにunsinged intとして取り扱うことがありまいた。これは修正されました。
- [SDCOMP-29797] -O3 -Otimeを使用する特定の条件で、戻り値を受け取る式がより大きな整数型を持つとき、コンパイラは符号付整数を返す関数の戻り値の符号拡張に失敗することがありました。
- [SDCOMP-29796] -O3 -Otimeを使用する特定の条件で、コンパイラは誤って、多次元配列における要素の値が、初期値から変化しないものと想定することがありました。これは、正しくないコードをもたらすことがありました。これは修正されました。
- [SDCOMP-29795] -O1以上が指定されたまれな条件で、コンパイラは、後に続くフラグをリードする命令で必要となるフラグを壊す、フラグをセットする命令が誤って使用されるコードのシーケンスを生成することがありました。これは修正されました。
- [SDCOMP-29794] インライン関数あるいはインラインクラスメンバ関数内のstatic変数がセクション属性を持つとき、この属性が無視され、変数は属性によって与えられる名前から異なる名前でセクションへ配置されることがありました。これは、Internal faultを同様に起こすことがありました。これは修正されました。
- [SDCOMP-29767] -O3 -Otimeを使用する特定の条件で、C99指示付きの初期化子が使用されるとき、コンパイラは正しくないコードを生成することがありました。これは修正されました。
- [SDCOMP-29585] -O3 -Otimeを使用する特定の条件で、コンパイラは、ループカウンタが最も内側のループの中で代入文の一部として使用される入れ子形ループを処理するとき、正しくないコードを生成することがありました。これは修正されました。
- [SDCOMP-29487] -O3 -Otimeを使用する特定の条件で、コンパイラは、ポインタをインクリメントしメモリアクセスを行うループで正しくないコードを生成することがありました。これは修正されました。
- [SDCOMP-29431] 特定の条件において、コンパイラは、部分的に構造体を初期化するとき、初期化定数のリードオンリーのデータと関連した #pragma arm section指令を無視することがありました。これは修正されました。
- [SDCOMP-29383]例外がディスエーブルで、クラスメンバー用の中括弧の初期化リストを含んでいる C++11コードをコンパイルするとき、コンパイラはInternal faultを起こすことがありました。これは修正されました。
Libraries
- [SDCOMP-29799] %Cと%hフォーマット指定子を使用するとき、C++ライブラリ関数strftime()が、正しくない結果を生成することがありました。これは修正されました。
その他の不具合
- [SDCOMP-29876] 特定の条件で、ファイルが非常に古いタイムスタンプを保持するファイルシステム内のファイルの場合、コンパイラは正しくないError: C9558E: System clock tampering detected.を生成し、ライセンスのチェックアウトに失敗することがありました。これは修正されました。
ARM Compiler v5.06 での変更点について
以前のリリース(ARM Compiler 5.05)からの変更点は、以下の通りです。ARM Compiler v5.06 での全般的な変更
- [SDCOMP-22253]ホストプラットフォームのサポートが変更されました。
- Windows 8(64bitのみ)→ Windows 8.1 (64bitのみ)
- 以下のホストプラットフォームは非推奨となりました
Windows XP Professional SP3
Windows Server 2008 R2
Ubuntu Desktop Edition 12.04 LTS
RedHat Enterprise Linux 5 Desktop and Workstation option, Standard
ARM Compiler 5.06 update 2では、非推奨のホストプラットフォームのサポートは行われません。
Cygwin (32-bit Windowsプラットフォームのみ) → Cygwin version 2.0.4
- [SDCOMP-29393] 以前は、インストーラはARM Compiler 5の異なるインストレーションの共存をサポートしていませんでした。既存のインストレーションは自動的に削除されるか、デスティネーションフォルダにかかわらずアップグレードされていました。この振る舞いは、インストーラが自動的に削除しないかあるいは既存のインストレーションをアップグレードするよう変更されました。
- 共存インストレーションを実施するために、既存のインストレーションを含まないデスティネーションをフォルダを選択します
- 既存のインストレーションを置き換えあるいはアップグレードするために、先に既存のバージョンをアンインストールします。
- [SDCOMP-24529] ARM Compiler 5.06は、以下のプロセッサのサポートを非推奨とします。
- 88FR101
- 88FR101.hw_divide
- 88FR111
- 88FR111.no_hw_divide
- 88FR121
- 88FR121.hw_divide
- 88FR131
- 88FR131.hw_divide
- 88FR301
- 88FR301.hw_divide
- 88FR321
- 88FR321.hw_divide
- 88FR331
- 88FR331.hw_divide
- ARM710T
- ARM740T
- ARM7TDM
- ARM7TM
- ARM7TM-S
- ARM810
- ARM940T
- ARM968E-S
- ARM9EJ-S
- ARM1022E
- ARM1026EJ-S
- ARM1156T2F-S
- SA-110
- SA-1100 将来のARM Compiler 5.06の更新では、非推奨のプロセッサはサポートされません。
- ・--cpu=ARM810, --cpu=SA-110, --cpu=SA-1100 → --cpu=4
- ・--cpu=ARM710T, --cpu=ARM740T, --cpu=ARM7TDM, --cpu=ARM7TM, --cpu=ARM7TM-S → --cpu=ARM7TDMI
- ・--cpu=ARM940T → --cpu=ARM9TDMI
- ・--cpu=88FR101, --cpu=88FR101.hw_divide, --cpu=88FR111, --cpu=88FR111.no_hw_divide, --cpu=88FR121, --cpu=88FR121.hw_divide, --cpu=88FR131, --cpu=88FR131.hw_divide, --cpu=88FR301, --cpu=88FR301.hw_divide, --cpu=88FR321, --cpu=88FR321.hw_divide, --cpu=88FR331, --cpu=88FR331.hw_divide, --cpu=ARM968E-S → --cpu=5TE
- ・--cpu=ARM9EJ-S → --cpu=5TEJ
- ・--cpu=ARM1022E , --cpu=ARM1026EJ-S → --cpu=ARM1020E
- ・--cpu=ARM1156T2F-S → --cpu=ARM1156T2-S --fpu=VFPv2
--cpu=nameオプションは、以下のように影響を受け置き換えられます。
- [SDCOMP-29208] ライセンス管理のワーニングへの制御が改善されました
- --diag_remarkと--diag_suppressオプションを使用して、全てのライセンス管理ワーニングをダウングレードおよび抑制することができます。
- --diag_error=warning オプションは、ライセンス管理ワーニングを除いて、全てのワーニングをエラーへアップグレードすることができます。
- コンパイラは、以下のメモリバリア命令の組み込み関数を完全にサポートします。
- __isb()
- __dsb()
- __dmb() 追加の最適化バリア組み込み関数をサポートします。
- __force_loads() これら組み込み関数に関する記載は、ARM Compilerユーザガイドを参照してください。
- [SDCOMP-25014] __declspec(noreturn) と __attribute__(noreturn) の振る舞いが変わりました。修飾された関数が、拡張して暗黙的あるいは明示的にリターンするなら、 コンパイラは、"__attribute__((noreturn))" あるいは"__declspec(noreturn)"を無視し、 "Warning: #1461-D: function declared with "noreturn"をレポートします。
- [SDCOMP-29571] 特定の条件において、C++11キーワード deleteを使用して削除されるよう宣言された関数をコンパイルするとき、コンパイラはWarning #177-D:
was declared but never referenced をレポートします。この振る舞いは変更されました。これらのケースでは警告をレポートしなくなりました。
- [SDCOMP-25883] ARM Compiler 5.05で、[maroon]--gnuモード[/maroon]は、オーバーロード解決における右辺値参照にマッチするものとして許可されるよう、const volatile引数への左辺値の参照を許していませんでした。これは、C++ Standardに厳密に準拠しています。特定の条件において、 ARM Compilerの以前のリリースではコンパイル成功していたC++ソースが、ARM Compiler 5.05ではエラーをレポートする現象を引き起こします。 --gnuモードのみの場合、この振る舞いは以前のものに戻されました。
- [SDCOMP-25881] ARM Compiler 5.05で、--gnuモードは、最適化外の特定の呼び出しであったとしても、コピーコンストラクタが呼び出し可能であることおよび正常にインスタンスが生成されることができるかを常にチェックするよう振る舞っていました。これは、C++ Standardに厳密に準拠しています。特定の条件において、例えば不完全な型を使用するコピーコンストラクタが完全な型宣言を利用できずインスタンス生成をする場合、ARM Compilerの以前のリリースではコンパイル成功していたC++ソースが、ARM Compiler 5.05ではエラーをレポートする現象を引き起こします。 --gnuモードのみの場合、この振る舞いは以前のものに戻されました。
- [SDCOMP-29787] コンパイラは以前は、インライン関数のアウトオブラインコピーでは #pragma arm section [section_type_list] を無視していました。この振る舞いは変更され、pragmaはインライン関数のアウトオブラインコピーへ影響を及ぼします。以前の振る舞いを復元するには、以下のオプションを使用してください。
- --no_ool_section_name
- [SDCOMP-29788]以前は、--partialを使用してリンクされるとき、リンカは、 ファイルスコープビルド属性を含むSHT_ARM_ATTRIBUTESを生成し、Tag_nodefaultsを設定していました。全てのビルド属性タグはSHF_ALLOCセクションごとに記述されます。この振る舞いは変更されました。リンカはSHT_ALLOCセクションの最も制限のある互換性必要条件が記述されたファイルスコープビルド属性を生成します。
v5.06で修正された不具合
Compiler(armcc)
- [SDCOMP-29640] 特定の条件において、ハードウェア浮動小数点ユニットがFPv5アーキテクチャの単精度バリアントに従ってコンパイルされ、浮動小数点の値あるいは変数に条件付きオペレータ ?を使う式を処理するとき、コンパイラはInternal faultをレポートすることがありました。
- [SDCOMP-29533] -Otime --vectorizeと-O2以上を指定しているとき、コンパイラは配列に書き込むループをベクタライジングするとき、正しくないコードをまれに生成することがありました。
- [SDCOMP-29526] -O3 -Otimeを使用する特定の条件で、#pragma pack(4)以下で宣言された構造体のメンバへのアクセスでコンパイラは正しくないコードを生成することがありました
- [SDCOMP-29363] ARMステートでコンパイルされるとき、コンパイラはロードおよびストアのアドレス算出において正しくないコードをまれに生成することがありました。これは結果として正しくない振る舞いをしていました。
- [SDCOMP-29354] -O2以上で、コンパイラは正確にバランスされたPUSHとPOP命令を持たない実行パスを含んでいるコードをまれに生成することがありました。これは、スタックを破壊し、結果として正しくない振る舞いをしていました。
- [SDCOMP-29254] -O3 -Otimeで、まれな条件で、最適化の組み合わせが正しく変換されず、コンパイラのInternal faultを引き起こすことがありました。
- [SDCOMP-29200] -O3とともにThumbステートでコンパイルされるとき、多くの式を含むまれな条件で、コンパイラがInternal faultをレポートすることがありました。
- [SDCOMP-29199] -O2以上とともにThumbステートでコンパイルされるとき、コンパイラはまれな条件で、フラグをセットしないNUL命令ではなく正しくないフラグをセットするMULS命令を含むコードシーケンスを生成することがありました。
- [SDCOMP-29166] -O2以上とともにARMステートでコンパイルするとき、コンパイラは条件式を含むまれな条件で、Internal faultをレポートすることがありました。
- [SDCOMP-28976] -O3 -Otimeで、AとB両方がinteger型であってコンパイル時にそれぞれの値が既知の場合、まれな条件で、コンパイラは”A 関係演算子 B"の式の正しくないコードを生成することがありました。
- [SDCOMP-28907] 特定の条件において、コンパイラは、一度も評価されていないzが結果として右辺値となる、構造体もしくはクラスに割り当てられチェーン化された正しくない式 x = y = z を生成することがありました。
- [SDCOMP-28856] -O2以上のとき、まれな条件で、使用されない値が割り当てられたとき、ネストされた条件を含む式の割り当てにおいて稀な条件でコンパイラは正しくないコードを生成することがありました。この割り当ては誤った変数への書き込みを行い、結果として正しくない振る舞いをしていました。
- [SDCOMP-28763] -O3 -Otimeで、まれな条件で、for()ループの繰り返し変数 X(Xが符号付のinteger型)でコンパイル時に初期値が知られていない場合、この型の値の範囲をオーバーフローあるいはアンダーフローするかもしれないXの予想された全ての初期値をループ体へ入力し失敗する正しくないコードを生成することがありました。
- [SDCOMP-28759] -O3 -Otimeで、まれな条件で、コンパイラは、制御された式の値が、副作用を除いてコンパイル時に評価できるifステートメントのコード生成に失敗することがありました。
- [SDCOMP-28755] -O3 -Otimeで、まれな条件で、for()ループの繰り返し変数 Xが ループの終了条件に到達するためにオーバーフローあるいはアンダーフローする必要があり、Xが符号的のcharあるいは符号付のshort型であるとき、コンパイラはループ体へ入力し失敗する正しくないコードを生成することがありました。
- [SDCOMP-28753] 特定の条件において、-O3 -Otime使用時のループアンローリングでコンパイラは正しくないコードを生成することがありました。
- [SDCOMP-28750] -O3 -Otimeを使用するまれな条件において、コンパイラはmain()関数をインライン化するとき、関数のインライン化によって誤ってグローバル変数への書き込み削除することがありました。
- [SDCOMP-28746] -O3 -Otimeを使用するまれな条件において、文字列の配列への参照を引数として取る関数に文字列リテラルを渡すコードをコンパイルするとき、コンパイラはその文字列の最初の文字へ文字列リテラルを取り除くことがありました。
- [SDCOMP-28720] 特定の条件で、--debugあるいは-gを指定してコンパイルしているとき、コンパイラはメモリよりもレジスタに割り当てられるデータについて不完全なデバッグ情報を生成することがありました。
- [SDCOMP-28708] --cpp11 -gあるいは--cpp11 --debugを使用してコンパイルしているとき、std::nullptr_t型の使用で、コンパイラがInternal faultを起こすことがありました。
- [SDCOMP-28707] --cpp11を使用してコンパイルしているとき、std::nullptr_t型の右辺値参照への割り当てを含む式が、コンパイラのInternal faultを引き起こすことがありました。
- [SDCOMP-28702] コンパイラは、__attribute__((section("name")))あるいは異なる__attribute__((at(address)))によって__attribute__((at(address))) がオーバーライトされたとき、コンパイラはワーニングを発行しません