パッチプログラムをダウンロードするには、事前にARM社のコネクトサービスのアカウントを取得し、ログインしておく必要があります。アカウントの取得は以下のURL から無償で行う事ができます:
https://login.arm.com/register.php
ARM Compiler toolchain v6.02(build 6)
はじめに
ARM Compiler 6.02 はARMv8-A およびARMv7-A のアーキテクチャをサポートし、DS-5とともに使用することでARMv8-A またはARMv7-A の実行可能コードのビルドおよびデバッグが可能です。このリリースではAArch32 またはAArch64をターゲットとしたARMv8-A またはARMv7-A 向けベアメタルアプリケーションの実行可能バイナリをビルドするために必要なすべてのツールを含んでいます。ARM Compiler 6.02ではARMv7-MとARMv6-Mアーキテクチャファミリのベータサポートが追加されています。このリリースに含まれる新しい機能として、C++例外を含むC++ライブラリ libc++のベータサポートも含んでいます。
ARM Compiler 6 の構成
[Compiler]- armclang はarmcc の後継であり、LLVM テクノロジをベースとしています。armclangでは現状、ARMv8-A およびARMv7-A アーキテクチャプロファイルをサポートし、ARMv7-MおよびARMv6-MのベータサポートとARMv7-Rのアルファサポートを行っています。 将来のリリースではその他のARM アーキテクチャサポートも追加される予定です。ARM Compiler 5 およびそれ以前のバージョンからの移行に関する情報については、製品ドキュメントに含まれるMigration and Compatibility Guide をご参照ください。
[armlink、armasm、fromelf、armar]
- armlink、armasm、fromelf およびarmar は完全ではありませんがARM Compiler 5 同様ARMv8-A をサポートするようになりました。製品ドキュメントに含まれるMigration and Compatibility Guide をご参照ください。
- アセンブラに関する注意事項
- ARM Compiler 6 ではGNU とARM Compiler ツールチェイン間での移植性を改善のため、よりGNU アセンブラの書式により近くなるようにLLVM 統合アセンブラを採用しています。LLVM 統合アセンブラではarmclangからデフォルトで呼び出されます。そのため、旧armcc のインラインまたは組み込みアセンブラを含むC/C++ のソースファイルがARM Compiler 6 でコンパイルできないという副作用があります。
- armasm はデフォルトで呼び出されませんが、旧armasm の書式で記述されたアセンブラファイルをアセンブルするためにARM Compiler 6 内に含まれています。
[組み込みシステム向けARM C およびC++ ライブラリ]
- 標準のARM Compiler 組み込みライブラリは完全ではありませんがARM Compiler 5 同様ARMv8-A をサポートするように拡張済みです。製品ドキュメントに含まれるMigration and Compatibility Guide をご参照ください。
- このリリースでは、デフォルトでlibc++ライブラリ(ベータサポート)を含みます。 また、レガシーなアプリケーションのために、Rogue Wave C++ standard libraryを含みます。
ARM Compiler 6.02 でのサポート
アーキテクチャとプロセッサ | サポートレベル |
ARMv8-A と準拠するプロセッサ | サポート済み |
ARMv7-A と準拠するプロセッサ | サポート済み |
ARMv7-R と準拠するプロセッサ | アルファサポート-将来のリリースでサポート 現状はARM Compiler 5 の使用を検討してください |
ARMv7-M、ARMv6-M および準拠するプロセッサ | ベータサポート-将来のリリースでサポート 現状はARM Compiler 5 の使用を検討してください |
ARMv6-M 以前のアーキテクチャ | 未サポート ARM Compiler 5 をご使用ください |
ARM 以外のアーキテクチャ | 未サポート |
サポートレベル | 詳細 |
サポート済み | 製品品質を保ち、一番高位のサポート優先度 |
ベータ | 実装は完了済みだが、テストは部分的。お客様の試用とフィードバックを歓迎 |
アルファ | 実装は未完了でテストは部分的 お客様の試用とフィードバックを歓迎 |
未サポート | 機能がツールチェインに含まれていないか非推奨になっており、テストは未実施 使用する場合は完全な自己責任 |
インストール手順
ARM Compiler 6.02 単体のインストールを行うには以下の手順に従ってください。例えばDS-5 のようなツールキットの一部としてARM Compiler 6.02 が提供されている場合は、インストールはツールキット側のインストーラで対応しています。そのような場合はツールキットのインストール手順に従ってください。サポートされるOSプラットフォーム
ARM Compiler 6.02 は以下のプラットフォームをサポートしています。
- Red Hat Enterprise Linux 5 32-bit and 64-bit
- Red Hat Enterprise Linux 6 64-bit
- Red Hat Enterprise Linux 7 64-bit
- Ubuntu Desktop Edition 12.04 LTS 32-bit and 64-bit
- Ubuntu Desktop Edition 14.04 LTS 64-bit
- Windows 7 32-bit and 64-bit
- Windows 8.1 64-bit
- Windows 2012 Server 64-bit
[Linux でのインストール]
ARM Compiler 6.02 をLinux にインストールするには、(source ではなく)64-bit Linux ホスト環境ではinstall_x86_64.sh を、32-bit Linux ホスト環境ではinstall_x86_32.shを実行し、スクリーン上の手順に従ってください。インストーラは選択したディレクトリにARM Compiler 6.02 を解凍します。
-
●依存性について
armclang バイナリはARM Compiler 6.02 の一部としてインストール時に指定されたディレクトリ内にインストールされるlibstdc++ のコピーと動的にリンクされます。
インストールされる一部のツールは32-bit システムライブラリに対する依存性があります。ARM Compiler 6.2 を64-bit Linux ホストプラットフォームにインストールした場合、32-bit互換ライブラリがインストールされていることを確認する必要があります。32-bit互換ライブラリがインストールされていない場合、ARM Compiler 6.02 ツールの実行に失敗したり、ライブラリが見つからない為にエラーがレポートされる可能性があります。要求されるライブラリをインストールするにはroot権限を用いてプラットフォームに応じた適切なコマンドを実行してください:
Red Hat
yum install glibc.i686
Ubuntu
apt-get install lib32stdc++6
[Windowsでのインストール]
ARM Compiler 6.02 をWindows にインストールするには、64-bit Windows ホスト環境ではwin-x86_64setup.exe を、32-bit Windows ホスト環境ではwin-x86_32setup.exe を実行し、スクリーン上の手順に従ってください。以前のバージョンのARM Compiler 6 がすでにインストールされており、アップグレードしたい場合は、以前のバージョンを一旦アンインストールしてから新しいバージョンのARM Compiler 6 をインストールいただくことを推奨します。
[インストール後]
ARM Compiler 6.02 はライセンス管理される製品であり、DS-5 およびARM Compiler ライセンスの両方とともに動作します。
- DS-5 Ultimate ライセンスではすべての機能が使用できます
- DS-5 Professional または ARM Compiler ライセンスではARMv8 を除くすべての機能が使用できます
ライセンスの取得については弊社またはlicense.support@arm.com にお問い合わせください。
ARMLMD_LICENSE_FILE 環境変数がライセンスファイルを指すように設定して下さい。Windows 環境ではpath の設定にダブルクォートを含む必要がないことに注意してください。スペースを含むpath はダブルクォートがなくとも動作します。
[アンインストール]
ARM Compiler 6.02 をWindows 上からアンインストールするにはコントロールパネルの"プログラムと機能"の"プログラムのアンインストール"でARM Compiler 6.02 を選択してアンインストールボタンをクリックします。
ARM Compiler 6.02 をLinux 上からアンインストールするには、インストールディレクトリを削除します。
単純なプログラムのビルド
ベアメタルAArch64 システム用の非常に単純なプログラムをコンパイルするには:- (Unix) echo "int main() {}" > simple.c
- (Windows) echo int main() {} > simple.c
- (両システム) armclang --target=aarch64-arm-none-eabi simple.c -o simple
armclang はClang コンパイラと同じオプションが使用できます。より詳細についてはhttp://clang.llvm.org/docs/UsersManual.html をご参照ください。旧バージョンのARM Compiler に対する下位互換性のため、一部のarmcc コマンドラインオプションをarmclang コマンドラインオプションに変換するコマンドライン変換ツールを提供しています。製品ドキュメントに含まれるMigration and Compatibility Guide をご参照ください。
ドキュメンテーション
以下のドキュメンテーションがARM Compiler 6.02 用に提供されます:- armar User Guide
- armasm Reference Guide
- armasm User Guide
- armclang Reference Guide
- armlink Reference Guide
- armlink User Guide
- fromelf User Guide
- ARM C and C++ Libraries and Floating-Point Support User Guide
- Errors and Warnings Reference Guide
- Getting Started Guide
- Migration and Compatibility Guide
- Software Development Guide
ARM Compiler v6.02(Build 6) での変更点について
以前のバージョン ARM Compiler 6.01からの変更点は、ユニークなSDCOMP-
ARM Compiler v6.02(Build 6) での一般的な変更
- [SDCOMP-28540] DS-5環境の外で使用される場合、以前のツールではDS-5 Ultimateの構成がデフォルトとなっていましたが、これは変更されました。
今バージョンでは、DS-5 Professionalの構成がデフォルトとなります。
DS-5 Ultimateの有効なライセンスをお持ちの場合、環境変数ARM_TOOL_VARIANT=ultを設定し、ARMv8用のすべてのコンポーネントを有効となるようにしてください。 - [SDCOMP-29264] 以前のインストーラは、異なるARM Compiler v6の共存インストールをサポートしていませんでした。既存のインストレーションは、自動的に削除あるいはインストールされているフォルダに関係なくアップグレードされていました。
自動的な削除や既存のインストレーションのアップグレードは、自動的に行われないように変更されました。 - 共存インストレーションを作成する場合、既存のインストレーションを含まないフォルダをインストール先に選択してください。
- 既存のインストレーションを置き換えあるいはアップグレードする場合、置き換えるバージョンをインストールする前に既存のバージョンをアンインストールしてください。
- [SDCOMP-29140] ターゲットを選択するコンパイラのコマンドラインオプションが変更されました。:
-
--target=aarch64-arm-none-eabi(AArch64ステート)
--target=arm-arm-none-eabi(AArch32ステート) - 特定のアーキテクチャをターゲットとするには、最初に--targetオプションで適切なターゲットを選択し、適切な-march=nameを指定してください。
- 特定のプロセッサをターゲットとするには、最初に--targetオプションで適切なターゲットを選択し、適切な-mcpu=name[+[no]feature]*を指定してください。
- [SDCOMP-29432] Cortex-A72プロセッサのサポートが追加されました。Cortex-A72をターゲットとする場合、以下のオプションを選択してください。:
- --target=aarch64-arm-none-eabi -mcpu=cortex-a72 (AArch64ステート)
- --target=arm-arm-none-eabi -mcpu=cortex-a72 (AArch32ステート)
- [SDCOMP-29428] ARMv8.1-Aアーキテクチャのサポートが追加されました。ARMv8.1-Aをターゲットとする場合、以下のオプションを選択してください。:
- --target=aarch64-arm-none-eabi -march=armv8.1-a (AArch64ステート)
- --target=arm-arm-none-eabi -march=armv8.1-a (AArch32ステート)
- [SDCOMP-29328] ライセンス管理警告の制御が改善されました。 armclang
- -Wno-license-managementオプションがすべてのライセンス管理警告へダウングレードするのに使用可能です。
- -Werrorオプションは、ライセンス管理を除く全ての警告を厳密にエラーへアップグレードします。
- --diag_remark と --diag_suppress オプションが全てのライセンス管理の警告をダウングレードあるいは抑制するのに使用可能です。
- --diag_error=warningオプションがライセンス管理警告を除く全ての警告を厳密にエラーへアップグレードします。
- [SDCOMP-29311] 以前のARM Compiler 6で提供されていたコマンドライン置き換えラッパは、廃止され削除されました。
- [SDCOMP-29551] ARM Compiler 6の次のリリースARM Compiler 6.3で、以下のホスト環境は非推奨となります。
- RedHat Enterprise Linux 5
- Ubuntu Desktop Edition 12.04 LTS
ARM Compiler v6.02での拡張
- [SDCOMP-28947] C++例外のサポートを含む、 libc++標準ライブラリのベータサポートが追加されました。 libcの++ライブラリがサポートしていないアトミック操作とスレッドライブラリを除いて、C++11標準に準拠しています。libc++ライブラリは、サイズの最適化はまだ行われていません。
以前のRogue Wave libraryがデフォルトで選択されていた振る舞いが変更され、libc++がデフォルトで選択されます。レガシーなアプリケーションのためにRogue Wave libraryを選択するには、-stdlib=legacy_cpplib 、 -fno-exceptionsコンパイラオプションと --stdlib=legacy_cpplib リンカオプションを使用してください。 - [SDCOMP-28824] ARM Cortex-A53 エラッタNo:843419の回避のために、以下のリンカオプションが追加されました。
- --branchpatch=cortex-a53-843419
- --info=patches
- [SDCOMP-29541] 以下のリンカオプションが追加されました。
- --stdlib=library_choice
-
--stdlib=infer オプションは入力オブジェクトをベースとしてC++ライブラリを選択します。これがデフォルトです。
少なくとも一つのオブジェクトがARM Compiler 5で--exceptionオプションとともにコンパイルされたC++/Cソースである場合、Rogue Wave librariesが選択されます。これ以外のケースは、libc++が使用されます。 - --stdlib=legacy_cpplibは、Rogue Wave C++ librariesを選択します。
- --stdlib=libc++は、libc++ライブラリを選択します。
コンパイラと統合されたアセンブラ(armclang)
リンカ(armlink)
一般的な拡張
C++ ライブラリの使用に関する詳細な情報は、ARM Compiler Software Development Guideをご参照ください。
ARM Compiler v6.02で修正された不具合
- [SDCOMP-28392] ARMv8-AターゲットのMRS、MSR命令がアセンブルされたとき、統合されたアセンブラは、ID_MMFR4_EL1レジスタを認識できませんでした。
コンパイラと統合されたアセンブラ(armclang)
- [SDCOMP-28390] ARMv8-AターゲットのMRS、MSR命令がアセンブルされたとき、アセンブラは、ID_MMFR4_EL1レジスタを認識できませんでした。
- [SDCOMP-26082] オペランドにR13やSPを含むすべての命令がT32ステートでアセンブルされたとき、アセンブラは正しくないError: A1477E: This register combination results in UNPREDICTABLEをレポートすることがありました。
アセンブラは、Warning: A1786W: This instruction using SP is deprecated and may not work in future architecture revisionsと報告するようになりました。
古いアセンブラ(armasm)
- [SDCOMP-28957] 空の実行リージョンのImage$$region_name$$Lengthシンボルを参照するとき、リンカはError: L6286E: ARM Linker: Execution interrupted due to an illegal storage access あるいはSegmentation faultを報告することがありました。
- [SDCOMP-28757] リンカが生成したLoad$$シンボルの再配置を解決するとき、1つまたは複数の先行する実行領域内のRWデータが圧縮されている場合、リンカが正しくない計算結果をシンボルの値として使用することがありました。
- [SDCOMP-28370] --veneer_inject_type=poolオプションを使用したとき、リンカが稀にInternal faultを報告することがありました。
リンカ(armlink)
- [SDCOMP-29540]以前は、ARMライブラリとコンパイラによって生成されたオブジェクトをリンクするため、リンカオプション --force_scanlibを使用する必要がありました。この振る舞いは変更されました。
--force_scanlibオプションは廃止され不要となりました。
リンカは、--force_scanlibオプションを選択せずとも、参照を解決するために自動的にARMライブラリをスキャンします。 - [SDCOMP-28701] スキャッタファイルをプリプロセッサを通すと、リンク段階において、同時に2つのコンパイラのライセンスが必要になる場合がありました。この問題は修正されました。
その他の不具合
ARM Compiler6.02の既知の不具合
- [SDCOMP-29520] AArch64のイメージをリンクするとき、C++例外がイネーブルになっており、オブジェクト内に try…catchブロックがない場合、リンカは、正しくないError: L6218E: Undefined symbol
(referred from <objname>) を報告することがあります。 - リンク時に--keep="*(.eh_frame)"オプションを使用する
- ソースコードに try…catch ブロックを追加する
-
ソースコードに次のインラインアセンブリを追加することにより、例外フレームテーブルへの明示的な参照を作成します。
asm(" .global .eh_frame$$Basen"
" .global .eh_frame$$Lengthn"); - [SDCOMP-28246] Red Hat Enterprise Linuxにおいて、リンク時最適化機能を使用すると、ARM Linker: Execution interrupted due to an illegal storage access. メッセージを表示して32bit版のリンカが終了することがあります。
- [SDCOMP-25973] リンク時に --cpu=cortex-a5オプションが使用されるとき、リンカはError: L6366E: <object> attributes are not compatible with the provided cpu and fpu attributesを報告することがあります。コンパイル時に --target=armv7-arm-none-eabi -mcpu=cortex-a5オプションを指定されて生成されたオブジェクトは、VFPv4とNEONが有効なことを前提としていますが、 リンカオプション--cpu=cortex-a5は、VFPとNEONが無効なことを意図しています。この問題を回避するには、リンク時に --cpu=cortex-a5.neonオプションを使用してください。
- [SDCOMP-25971] AArch64では、long doubleはサポートされていません。
- [SDCOMP-25970] --cpu=cortex-a53あるいは--cpu=cortex-a57をリンク時に使用すると、リンカが誤ってFatal error: L3903U: Argument '<feature_name>' not permitted for option 'cpu'を報告することがあります。この問題を回避するには、リンク時には--cpuオプションを指定しないでください。
- [SDCOMP-25967] __fp16 半精度浮動小数点データタイプはサポートされていません。
- [SDCOMP-25966] fromelf --fieldoffsets --expandarraysは、配列の各要素についての情報を表示することを期待しています。armclangを使用してコンパイルされたオブジェクトの場合、現在、配列の最初の要素についてのみ表示されます。
- [SDCOMP-25965] 複素数はサポートされません。
これを回避するには、以下の回避策を使用してください。