ARM Compiler 6.7は、以下のように使用されることを意図しています。
ARM Compiler 6は、ARM Compiler 5の後継であり、以下にリストされたコンポーネントを含みます。以前のプロジェクトからプロジェクトを移行するための情報は、製品ドキュメンテーション内の
Migration and Compatibility Guide
をご覧ください。
アーキテクチャとプロセッサ | サポートレベル |
ARMV8-A(アップデートリリースを含む)およびARMv7-A と準拠するプロセッサ | サポート済み |
ARMv8-RおよびARMv7-R と準拠するプロセッサ | サポート済み |
ARMv8-M、ARMv7-M、ARMv6-M および準拠するプロセッサ |
サポート済み |
ARMv6-M 以前のアーキテクチャ |
未サポート ARM Compiler 5 をご使用ください |
ARM 以外のアーキテクチャ | 未サポート |
サポートレベル | 詳細 |
サポート済み | 製品品質を保ち、一番高位のサポート優先度 |
ベータ | 実装は完了済みだが、テストは部分的。お客様の試用とフィードバックを歓迎 |
アルファ |
実装は未完了でテストは部分的 お客様の試用とフィードバックを歓迎 |
コミュニティ |
オープンソーステクノロジで利用可能な追加の機能がARM Compiler 6に構築 お客様の試用とフィードバックを歓迎 |
未サポート |
機能がツールチェインに含まれていないか非推奨になっており、テストは未実施 使用する場合は完全な自己責任 |
ARM Compiler 6.7 が、ツールキット(例:DS-5)の一部として含まれている場合、ツールキットのインストーラがインストレーションプロセスを処理します。ツールキットのインストレーション方法を参照してください。
その他のケースの場合、ARM Compiler 6.7 をどのように使用するかに依存して適切なインストレーションの場所を選択する必要があります。
ARM Compiler 6.7 は、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 6.7 を使用することをおすすめします。これら環境の外でツールチェーンを使用するとき、以下の環境変数の構成が必要となります。
ARM Compiler 6.7 は、Keil MDKインストレーションのARMサブディレクトリ以下にインストールする必要があります。たとえば、Keil MDKインストレーションがC:Keil_v5の場合、C:Keil_v5ARMARMCompiler6.7へインストールすることをおすすめします
インストール後、 http://www.keil.com/support/man/docs/uv4/uv4_armcompilers.htm のチュートリアルで示す方法に従って、MDKのプロジェクトへツールチェーンの統合が可能です。
ARM Compiler 6.7 は、DS-5製品のそれぞれのインストレーションの外であるなら、デフォルトの場所を含み、任意の場所にインストールすることができます。
ライセンスファイルあるいはライセンスサーバの場所を指定するARMLMD_LICENSE_FILE環境変数をセットしてください。Windows上ではダブルクォーテーションをこのパス内に含めないでください。パス内の空白はクォーツなしで、動作します。
ARM Compiler 6.7 は、以下のサポートされるプラットフォームでテストされています。
ARM Compiler 6.7 は、古いプロットフォームでは動作しません。
ARM Compiler 6.7をインストールするには、 install_x86_64.shを実行(soourceではありません)し、画面の指示に従ってください。インストーラは、ARM Compiler 6.7 をお客様が指定したディレクトリに解凍します。
armclangバイナリは、お客様の指定したディレクトリ内にARM Compiler 6.7 の一部としてインストールされたlibstdc++のコピーへ動的にリンクされています。
インストールされたいくつかのツールが32bitシステムライブラリに依存します。
ARM Compiler 6.7 を64-bit Linuxホストプラットフォームで使用するとき、32-bit互換のライブラリがインストールされていることを確認してください。 32-bit互換ライブラリがインストールされていない場合、ARM Compiler 6.7 ツールは、ライブラリが見つからず実行が失敗するあるいはエラーをレポートします。インストールに必要なライブラリは、ご使用のプラットフォームで管理者権限で適切なコマンドを実行して確認してください。
ARM Compiler 6.7 は、以下のサポートされるプラットフォームでテストされています。
Windows 64-bitホストプラットフォーム上でARM Compiler 6.7 をインストールするために、win-x86_64setup.exeを実行し、画面の指示に従ってください。Windows 32-bitホストプラットフォーム上でARM Compiler 6.7をインストールするために、win-x86_32setup.exeを実行し、画面の指示に従ってください。以前のバージョンのARM Compiler 6 がすでにインストールされており、アップグレードしたい場合は、以前のバージョンを一旦アンインストールしてから新しいバージョンのARM Compiler 6 をインストールいただくことを推奨します。
ARM Compiler 6は、Microsoft Visual Studio 2015のランタイムライブラリがインストールされることを必要とします。プロダクトインストーラを使用するか、あるいはこのツールチェンがDS-5の一部としてインストールされるなら、ランタイムライブラリは製品と共にインストールされます。後からコピーあるいは別のPCへインストレーションを移動される場合、ランタイムライブラリがホスト上で利用可能であることを保証する必要があります。
Linuxの場合、ARM Compiler 6.7 をインストールディレクトリから削除してください
Windowsの場合、コントロールパネルのプログラムの追加と削除からARM Compiler 6.7 を選択し、アンインストールボタンを押下してください
ARM Compiler 6.7 の以下ドキュメントが利用可能です。
これ以上の情報は、 developer.arm.com の ARM Compiler 6 documentation をご参照ください。
お客様からのフィードバックは我々にとって重要です。製品のあらゆる局面において、欠陥報告と改善に関する提案を歓迎します。フィードバックあるいはサポートについて、お客様の製品の購入元あるいは、support-sw@arm.comへメールでご連絡ください。必要に応じて、ツールからの--vsnの出力、問題を再現するのに必要なソースコードおよびその他のファイルとコマンドラインを提供してください。当社へのお問い合わせは、 こちら 。
以下に、ARM Compiler 6.7 シリーズのリリース日付を示します。
以下に、新しい機能と修正された不具合を含むそれぞれのリリースで変更された概要を示します。特に指定がない限り、一つ前のリリースからの変更点を示します。それぞれの項目別に分類され、ユニークな識別子SDCOMP-<NNNNN>を伴います。もしARMへこのリリースノート内の特定の問題について連絡が必要な場合、適切な識別子を通知してください。
ARM Compiler 6.7 での変更点について
以下に以前のリリースであるARM Compiler 6.6 からの変更点を示します。
ARM Compiler 6.7 での一般的な変更点
[SDCOMP-47776]DS-5 Professionalのライセンスで、ARMv8-Mターゲットをサポートするようになりました
[SDCOMP-46101] ARM Compiler 6.7は、FlexNet Publisher 11.14.1.0クライアントライブラリを含みます。このバージョンのライセンスクライアントは、以前のバージョンのFlexNet Publisherライセンスサーバソフトウェアと互換性がありません。11.14.1.0よりも古いバージョンの armlmd および lmgrd がライセンスサーバとして動作しているとき、ARM Compiler 6.7は、以下のように報告します:
armlmd および lmgrd を実行するライセンスサーバ バージョン 11.14.1.0(またはそれ以降)は、ARM Compiler 6.7および以前のリリースのARMツールと互換性があります。
ARM社は、 https://developer.arm.com/products/software-development-tools/license-management/downloads から使用可能な、ライセンスサーバソフトウェアの最新版を使用することをおすすめします。
[SDCOMP-22268] 以前は、execute-onlyセクションを生成するとき、ツールはELFセクションヘッダフラグへ SHF_ARM_NOREAD を設定していました。 間もなく発行される Application Binary Interface (ABI) for the ARM Architecture の変更に準拠するため、この振る舞いは変更されました。execute-onlyセクションは、ツールはELFセクションヘッダフラグへ SHF_ARM_PURECODE を設定します。
ARM Compiler 6.7 での拡張
コンパイラと統合されたアセンブラ (armclang)
[SDCOMP-47906] 浮動小数点標準準拠のレベルを指定するために使用可能な -ffp -mode= model オプションのサポートが追加されました。:
ARMは、 -ffast -math あるいは -fno -fast-math よりも、 -ffp -mode の使用を推奨します。
このオプションに関する更なる情報は、 armclang Reference Guide をご参照ください。
[SDCOMP-46994] ARM Compiler v5の機能との互換性を向上させるために、 __attribute__((value_in_regs)) 関数属性のサポートが拡張されました。
更なる情報については、 armclang Reference Guide 内、 __attribute__((value_in_regs)) function attribute 章をご参照ください。
[SDCOMP-45510] T32ステート用にアセンブルするとき、暗黙の IT ブロックを生成するためのサポートが追加されました。 IT ブロック外に条件付き命令がある場合、インラインアセンブラと統合アセンブラの動作を指定するには、次のオプションを使用します:
このオプションに関する更なる情報は、 armclang Reference Guide をご参照ください。
[SDCOMP-32841] これまで、 -Os でコンパイルすると、コンパイラはベクトル化中に生成されたリテラルプールを128ビットの境界にオーバーライドしていました。この振る舞いは変更されました。コンパイラは過剰なパディングの追加を避けるようになりました。
リンカ (armlink)
[SDCOMP-45933] .bss.ARM.__at_<address> という __at セクションのサポートが追加されました。リンカは、関連付けられた ZI データを指定されたアドレスに配置します。
ARM Compiler 6.7 で修正された不具合
コンパイラと統合されたアセンブラ (armclang)
[SDCOMP-47603] インラインアセンブラおよび統合アセンブラは、 MSR 命令の無効な特殊レジスタマスクを誤って受け取り、マスクビットをすべて設定した命令を生成します。これは修正されました。インラインアセンブラと統合アセンブラで、 error: invalid operand for instruction が報告されるようになりました。
[SDCOMP-47531] T32ステート用にアセンブルするとき、インラインアセンブラおよび統合アセンブラは、誤って、 IT ブロック内の PC に書き込む命令の診断に失敗し、 IT ブロック内の最後の命令は UNPREDICTABLE ではありませんでした。これは修正されました。インサインアセンブラおよび統合アセンブラは、 error: instruction must be outside of IT block or the last instruction in an IT block を報告します。
[SDCOMP-47098] __attribute__((value_in_regs)) で注釈され、戻り値の型が不完全な関数をコンパイルすると、コンパイラは誤って Segmentation fault (core dumped) を報告することがあります。これは修正されました。コンパイラは、 error: cannot qualify incomplete type <type> for 'value_in_regs' calling convention を報告します。
[SDCOMP-47039] M-プロファイルターゲット用にコンパイルするとき、コンパイラは、 xPSR 以外のシステムレジスタにアクセスする __arm_wsr 組み込み関数用に UNDEFINED な命令を誤って生成します。これは修正されました。
[SDCOMP-47031] 特定の状況で、 -O0 以外の最適化レベルでコンパイルすると、コンパイラは、 __builtin_arm_get_fpscr 組み込み関数を少なくとも2回呼び出す関数に対して不正なコードを生成する可能性があります。これは修正されました。
[SDCOMP-46934] T32ステートでアセンブルするとき、インラインアセンブラおよび統合アセンブラは、フラグ設定バリアントとしてのみ使用可能な命令のフラグ保存バリアントを含むソースに対して error: invalid instruction を報告します。これは修正されました。インラインアセンブラおよび統合アセンブラは、今、 error: no flag-preserving variant of this instruction available を報告します
[SDCOMP-46899] 特定の状況で、T32ステート用にコンパイルするときに、コンパイラが条件付きコプロセッサ命令のA32エンコーディングを誤って生成する可能性があります。これは修正されました。
[SDCOMP-46865] まれに、 <expression1> あるいは <expression2> にビットシフト操作が含まれる、 <condition> ? <expression1> : <expression2> という形式の式に対して誤ったコードを生成する可能性があります。これは修正されました。
[SDCOMP-46731] T32ステート用にアセンブルするとき、インラインアセンブラおよび統合アセンブラは、 PC を変更する16-bit LDR 命令に誤って error: instruction requires: arm-mode を報告します。 これは修正されました。
[SDCOMP-46697] まれに、 -O2 以上あるいは -Os でコンパイルすると、コンパイル時に評価可能なインデックスを使用するデータアクセスに対して、コンパイラが誤ったコードを生成する可能性があります。これは修正されました。
[SDCOMP-46600] まれに、ARMv6-Mターゲットまたはメイン拡張なしのARMv8-Mターゲット用に -O0 でコンパイルすると、コンパイラが一連の算術演算の誤ったコードを生成する可能性があります。これは修正されました。
[SDCOMP-46445] まれに、定数式をコンパイルするときに、コンパイラが fatal error: error in backend: expected relocatable expression というエラーを誤って報告します。これは修正されました。
[SDCOMP-46415] まれに、ARMv6-Mターゲットあるいはメイン拡張なしのARMv8-Mターゲット用に -O0 でコンパイルすると、コンパイラが誤ったコードを生成し、大きな関数から戻ったときにスタックポインタが壊れてしまう可能性があります。これは修正されました。
[SDCOMP-46399] -march =armv8.3-a+nofp を指定してアセンブルすると、インラインアセンブラおよび統合アセンブラは、誤って FJCVTZS 命令を許していました。これは修正されました。インラインアセンブラおよび統合アセンブラは、今、 error: instruction requires: fp-armv8 と報告します。
[SDCOMP-46397] ARMv8.3-Aターゲット用にAArch64ステートでアセンブルするとき、 インラインアセンブラおよび統合アセンブラは、ポインタ符号キーレジスタに書き込む MSR 命令を誤って拒否します。これは修正されました。
[SDCOMP-45722] -march =armv8-m.main+dsp でアセンブルするとき、インラインアセンブラおよび統合アセンブラは、 UXTB16 および SXTB16 命令に対して、誤って error: instruction requires: arm-mode を報告します。これは修正されました。
[SDCOMP-45626] ARMコンパイラで提供されている libc++ ライブラリとシンボル __use_no_semihosting を定義するオブジェクトをリンクすると、セミホスティングなしの __sys_open() を再実装しているにもかかわらず、リンカは誤って Error: L6915E: Library reports error: __use_no_semihosting_swi was requested, but _sys_open was referenced を報告します。これは修正されました。
[SDCOMP-32908] 特定の状況で、 #0 の即時シフトを持ち、 IT ブロックに含まれている LSL 命令をアセンブルするとき、インラインアセンブラと統合アセンブラは、予測不可能な動作の MOV 命令を誤って生成する可能性があります。これは修正されました。
[SDCOMP-30185] 特定の状況で、C++例外を使用してビルドされたオブジェクトをリンクするとき、リンカーは、非アラインなアクセスを許可するライブラリコードを選択することがありました。非アラインなデータアクセスが無効になっているか、ターゲットが非アラインなデータアクセスをサポートしていない場合、データアボートが発生する可能性があります。これは修正されました。
[SDCOMP-29396] コンパイル時に評価することができない .equ ディレクティブを含む別のアセンブリファイルを含むファイルをアセンブルする場合、統合アセンブラは <unknown>:0: error: expression could not be evaluated のみ報告します。これは修正されました。統合アセンブラは、関連するファイル名、行番号、およびソース行も報告するようになりました。
古いアセンブラ (armasm)
[SDCOMP-47141] アセンブラは、 1.79769313486231571e+308 より大きく 1.0e+309 より小さい浮動小数点リテラルを誤って受け取り、浮動小数点値 -0.0 としてそれらを表現します。これは修正されました。アセンブラは、今、 Error: A1407E: Overlarge floating point value を報告します。
[SDCOMP-46908] 特定の状況で、 .32 , .I32 , .S32 , あるいは .U32 サフィックスを持つ VMOV 命令をアセンブルするとき、アセンブラは誤って Error: A1887E: Specified source data type not allowed; must be one of: F32 を報告します。これは修正されました。
[SDCOMP-46661] 特定の状況で、 --cpu =8-M.Main.dsp を使用してアセンブルする場合、アセンブラは、リンカが最適なライブラリを選択しないビルド属性を含むオブジェクトを生成する可能性があります。これは修正されました。
リンカ (armlink)
[SDCOMP-47040] まれに、少なくとも1つのC++オブジェクトを含むコードを静的記憶域期間でリンクすると、リンカーは __cpp_initialize__aeabi_() ライブラリ関数を含むことを誤って失敗することがありました。これにより、静的なC++オブジェクトが正しく初期化されなくなります。これは修正されました。
[SDCOMP-46703] 特定の状況で、AArch32でAArch64に --paged あるいはリンクし、 ZI セクションのアラインメント要件が同じ実行領域内の RW セクションよりも大きいスキャッタファイルを使用する場合、リンカは出力セクションを重複するイメージを誤って生成することがありました。これにより、データが誤った値に初期化されました。これは修正されました。
[SDCOMP-46598] 特定の状況で、プログラムに __at セクションが含まれていると、リンカはシンボルへの参照を誤って解決する可能性があります。これにより、影響を受けるプログラムが誤ったメモリ位置にアクセスしたり、予期しないアドレスでコードを実行したりする可能性があります。これは修正されました。
[SDCOMP-46588] 例えば --cpu =Cortex-M4.no_fp , --cpu =Cortex-M7.no_fp , あるいは --cpu =Cortex-R5.no_vfp のような、浮動小数点サポートのない --cpu = name でリンクするとき、リンカは誤って浮動小数点命令を含むオブジェクトがリンクされるのを許していました。これは修正されました。
[SDCOMP-22630] 特定の状況で、読み出し/書き込みデータを含む2つ以上の __at セクションが、少なくとも1つのリードオンリー専用セクションを含む実行領域内に配置されている場合、リンカーは Internal fault: [0xc0fbf2:<ver>] を報告しました。これは修正されました。
ライブラリおよびシステムヘッダ
[SDCOMP-47541] expf() のARMコンパイラライブラリの実装では、入力引数が -0x1p -24 〜 -0x1p -25 のとき、最終桁単位(ULP)で不正確な結果が返されました。これは修正されました。現在、結果の値は、正確な値に近い値となります。
[SDCOMP-47475] microlibライブラリには、 HLT 命令を使用するセミホスト機能の変形が含まれていませんでした。したがって、シンボル __use_full_stdio を定義する入力オブジェクトをmicrolibとリンクするとき、リンカは SVC 命令を含むセミホスティングされたライブラリ関数を選択します。これにより、生成されたイメージは、 SVC ではなく HLT をサポートするターゲット上でアボートする可能性があります。これは修正されました。
[SDCOMP-47275] 特定の状況で、副作用を持つ式で assert() マクロを呼び出すコードをコンパイルすると、コンパイラは誤って、 warning: the argument to '__builtin_assume' has side effects that will be discarded [-Wassume] を報告する可能性があります。これは修正されました。
[SDCOMP-47150] 特定の状況で、入力文字列が範囲 (1.79769313486231571e+308, 1.0e+309) にある数を表すときに、 strtod() および wcstod() のARMコンパイラライブラリ実装が inf の代わりに -0.0 を誤って返すことがありました。これは修正されました。
[SDCOMP-47048] まれに、 expm1f() のARMコンパイラライブラリの実装では、入力引数が 0.8110728 〜 0.8231074 のときに、最終桁単位((ULP))で不正確な結果が返されることがありました。これは修正されました。
[SDCOMP-46050] 特定の状況下で、プログラムが完全なIEEE 754浮動小数点標準に準拠するように構築されている場合、以下の文字列を浮動小数点へ変換する関数のARMコンパイラライブラリの実装は正しく動作しません:
影響を受ける機能:
これは修正されました。
[SDCOMP-45329] まれに、microlibの printf() ファミリ関数の実装で、フォーマット変換指定 %% を処理するときに % の代わりに %% を間違って記述することがありました。これは修正されました。
[SDCOMP-30369] 入力文字列によって表される数値が float ではなく double の範囲内にある場合、 strtof() のARMコンパイラライブラリの実装で errno が誤って ERANGE に設定されていました。これは修正されました。
[SDCOMP-29945] setlocale() のARMコンパイラライブラリの実装では、 * 文字で始まり無効な形式のロケール文字列を誤って受け取り、無効なポインタを含むようにCライブラリの内部ロケールの状態を更新します。これにより予期しない動作が発生する可能性があります。これは修正されました。
その他の不具合
[SDCOMP-29403] 特定の状況で、Linuxホストプラットフォームで、64bit iノードが有効になっているファイルシステムを使用する場合、ツールは次のいずれかを報告することがあります:
これは修正されました。
ARM Compiler 6.7 の既知の不具合
[SDCOMP-47864] Scalable Vector Extension(SVE)をサポートするターゲットに対して、 -march = name +sve を指定してコンパイルするとき、リンク時間の最適化(LTO)はサポートされません。LTOの使用を避けるには:
[SDCOMP-47620] 特定の状況で、ハードウェア浮動小数点リンケージを持つターゲットに対して -mexecute -only を指定してコンパイルすると、コンパイラはexecute-onlyコード内でリテラルプールを誤って生成する可能性があります。この結果リンカは、 Error: L6837E: Illegal data mapping symbol found in execute-only section <object>(<section>) at offset <offset> をレポートします。この問題の回避策は、 -mfloat -abi=soft でコンパイルすることです。
[SDCOMP-28016] AArch64では、 long double をサポートしていません。
[SDCOMP-26080] 複素数はサポートされません。
[SDCOMP-25308] --cpu =cortex-a32 , --cpu =cortex-a35 , --cpu =cortex-a53 , --cpu =cortex-a57 , --cpu =cortex-a72 , or --cpu =cortex-a73 のいずれかを使用してリンクすると、リンカは誤って Fatal error: L3903U: Argument '<feature_name>' not permitted for option 'cpu' を報告することがあります。この問題の回避方法は、 --cpu オプションなしでリンクすることです。
この解答はお客様のお役に立てましたでしょうか?