パッチプログラムをダウンロードするには、事前に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 Infocenter
をご参照ください。
ARM Compiler v6.02(Build 6) での変更点について
以前のバージョン ARM Compiler 6.01からの変更点は、ユニークなSDCOMP-
番号によって箇条書きで示されます。特定の項目で詳細な内容をARMへ連絡する場合には、該当する番号を一緒にご連絡ください。
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]*
を指定してください。
-march
,
-mcpu
, および
--target
については、ARM Compiler armclang Reference Guideに記載があります。ターゲットアーキテクチャ、プロセッサおよび命令セットの特定に関する詳細な情報は、ARM Compiler Software Development Guideで提供されます。
-
[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
オプションがすべてのライセンス管理警告へダウングレードするのに使用可能です。
-
-W
errorオプションは、ライセンス管理を除く全ての警告を厳密にエラーへアップグレードします。
armasm、armlink、fromelf
-
--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での拡張
ARM Compiler v6.02で修正された不具合
古いアセンブラ(armasm)
-
[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
と報告するようになりました。
リンカ(armlink)
-
[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を報告することがありました。
その他の不具合
-
[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] 複素数はサポートされません。