Arm Compiler 6.16のリリースノート
目次
-
紹介
-
Arm Compiler 6 ツールチェイン
-
Arm Compiler 6.16 でサポートされたこと
-
インストール方法
-
Arm Development Studio 2018.0 以降への統合
-
Keil MDK 5.22 以降への統合
-
スタンドアロン製品として使用
-
Linuxへのインストール
-
Windowsへのインストール
-
アンインストール
-
ドキュメンテーション
-
フィードバックとサポート
-
リリース履歴と変更
1. 紹介
Arm Compiler は、ベアメタルソフトウェア、ファームウェア、およびリアルタイムオペレーティングシステム(RTOS) アプリケーションを開発するための、Arm の最新の組み込みC/C++コンパイルツールチェインです。
Arm Compiler は、Arm アーキテクチャの最新のアーキテクチャ機能と拡張のために、最も早く、最も完全で、正確なサポートを提供します。
開発中のものも含め、すべての最新のArm プロセッサをサポートします。
強力な最適化手法と最適化されたライブラリを通して、Arm Compiler は組み込みシステム開発者が挑戦的なパフォーマンス目標とメモリ制約を満たすことを可能にします。
Arm Compiler は、自動車(ISO 26262)、家電、産業(IEC 61508)、医療(IEC 62304)、ネットワーク、鉄道(EN 50128)、ストレージ、通信など、さまざまな業界のリーディングカンパニーで使用されています。
long-term maintenanceまたは機能安全要件を備えたプロジェクトでは、
認証バージョン
のArm Compiler の使用を検討してください。
Arm Compiler 6.16 は、2021年03月現在の最新リリースであり、それ以前のリリースの置き換えとなります。
Arm Compiler 6.16のキーとなる機能は以下の通りです:
-
最近リリースされたプロセッサ:
-
Cortex-A78、Cortex-A78AE、Cortex-R52+のサポート
-
A アーキテクチャプロファイルにおける将来的なアーキテクチャテクノロジのearlyサポート:
-
Branch Record Buffer Extensions(BRBE) のアセンブリ
-
Armv8.7-A:
-
アセンブリのサポート
-
オプションのAccelerator Support Extension用組み込み関数のサポート
-
Armv8.2-A:
-
オプションのFlag Manipulation命令のサポート
-
オプションのPointer Authentication Extensionのサポート
-
C++ ライブラリに使用されるApplication Binary Interface(ABI) の更新
Arm Compiler 6.16は以下のように使用されることを意図しています:
-
Arm Development Studioに組み込み使用
-
Keil MDKに組み込み使用
-
適切なツールキット用ライセンスを用いて、スタンドアロンでツールチェインをインストールして使用
ライセンスの購入については
info-arm@dts-insight.co.jp
へご連絡ください。
ライセンスの管理およびトラブルシューティングは以下のArm社webサイトをご覧いただくか、
https://developer.arm.com/support/licensing
弊社
FAQ
のwebサイトをご覧ください。
フローティングライセンスをご使用の場合は、
armlmd
および
lmgrd
をversion 11.14.1.0以降にアップデートする必要があります。ARMでは、常に
https://developer.arm.com/products/software-development-tools/license-management/downloads
から入手できる最新バージョンのライセンスサーバーソフトウェアを使用することをお勧めします。
1.1 Arm Compiler 6 ツールチェイン
Arm Compiler 6.16は以下を含みます。
-
armclang:
LLVMとClangテクノロジをベースとしたコンパイラおよび統合アセンブラ
-
armasm:
armasm-syntaxアセンブリコード用のアセンブラ。新しいアセンブリファイルではarmclang統合アセンブラの使用を推奨
-
armar:
ELFオブジェクトファイル群をまとめるアーカイバ
-
armlink:
オブジェクトやライブラリをまとめ、実行可能形式を生成するリンカ
-
fromlef:
イメージ変換ユーティリティ兼逆アセンブラ
-
Arm C++ libraries:
LLVM libc++プロジェクトベースのライブラリ
-
Arm C libraries:
組込みシステム向けのランタイムサポートライブラリ
1.2 Arm Compiler 6.16 でサポートされたこと
Arm Compiler は、Arm Development Studio(Arm DS)やKeil Microcontroller Development Kit(MDK)などのArm開発スイートの一部として提供されています。
お手持ちのツールのライセンスに従い、Armコンパイラ6.16は次のArmアーキテクチャとプロセッサのサポートを提供します:
アーキテクチャ
|
プロセッサ*
|
将来のアーキテクチャ |
− |
8.7-AまでのArmv8-A |
Neoverse V1/N2/N1/E1 |
Cortex-X1/A78C/A78AE/A78/A77/76AE/76/75/73/72/65AE/65/57/55/53/35/34/32 |
Armv7-A |
Cortex-A17/15/12/9/8/7/5 |
Armv8-R |
Cortex-R82/R52/R52+ |
Armv7-R |
Cortex-R8/7/5/4F/4 |
8.1-MまでのArmv8-M |
Star |
Cortex-M55/M35P/33/23 |
Armv7-M |
SC300 |
Cortex-M7/4/3 |
Armv6-M |
SC000 |
Cortex-M1/0/0+ |
アーキテクチャとプロセッサのサポートレベルの詳細については、開発スイートのドキュメントを参照してください。
Arm Compiler 6.16のダウンロードおよびArm DSまたはKeil MDKとともに使用する場合の設定方法については以下のサイトをご参照ください:
https://developer.arm.com/tools-and-software/embedded/arm-compiler/downloads/version-6
* 将来のアーキテクチャテクノロジおよび特定のプロセッサのサポートは、Arm DS Platinum Editionの一部としてのみ利用できます。Arm DS Platinum Editionは、最新のIPを開発するArmパートナー向けにデバイスがリリースされる前の開発用にのみ提供されています。Arm DS Gold Editionのすべての機能が含まれ、さらにArmから発表された最新のIPをサポートしています。詳細については、弊社
info-arm@dts-insight.co.jp
までお問い合わせください。
2. インストール方法
Arm Compiler 6.16が、ツールキット(例:Arm Development Studio)の一部として含まれている場合、ツールキットのインストーラがインストレーションプロセスを処理します。ツールキットのインストレーション方法を参照してください。
その他のケースの場合、Arm Compiler 6.16をどのように使用するかに依存して適切なインストレーションの場所を選択する必要があります:
-
Arm Development Studio 2018.0 以降へ統合
-
Keil MDK 5.22 以降へ統合
-
スタンドアロン製品として使用
Keil MDKを使用していない場合は、Arm Compiler 6.16はデフォルトのインストレーションディレクトリを含む、その他任意の場所にインストールすることができます。ただし、Arm Development Studio製品のインストールディレクトリ外でなければなりません。
コンフィギュレーションの手順については以下のArm社サイトの手順に従ってください:
https://developer.arm.com/tools-and-software/software-development-tools/license-management/resources/product-and-toolkit-configuration
※本内容は弊社FAQページでも日本語での解説を行っております。内容の一部は保守契約ユーザ様にのみ公開をしておりますのであらかじめFAQページにログインの上ご参照ください:
Arm Compilerを呼びだす環境別のライセンスおよび設定について ( LIC-D-25 )
2.1. Arm Development Studio 2018.0 以降への統合
Arm Compiler 6.14.1 は、Arm Development Studioのデフォルトのインストレーションディレクトリを含む、その他任意の場所にインストールすることができます。
https://developer.arm.com/docs/101470/latest/configure-arm-development-studio/register-a-compiler-toolchain
で示す方法に従って、ツールチェーンをArm Development Studio 2018.0以降に統合することができます。
2.2. Keil MDK 5.22 以降への統合
Arm Compiler 6.16はKeil MDKインストレーションの
ARM
サブディレクトリ以下にインストールする必要があります。たとえば、Keil MDKインストレーションがC:Keil_v5の場合、C:Keil_v5ARMARMCompiler6.16へインストールすることをおすすめします。
インストール後、
http://www.keil.com/support/man/docs/uv4/uv4_armcompilers.htm
のチュートリアルで示す方法に従って、MDKのプロジェクトへツールチェーンの統合が可能です。
Arm Compiler 6.16
32-bit Windows
バージョンのみが、Keil シングルユーザライセンスまたはKeil フローティングユーザライセンスと一緒に使用できます。
MDK-Armのライセンスを使用する場合、Arm Compiler 6.16は Windows環境のみサポートします。
2.3. スタンドアロン製品として使用
環境変数
ARMLMD_LICENSE_FILE
がライセンスファイルまたはライセンスサーバーを指していることを確認してください。
2.4. Linuxへのインストール
Arm Compiler 6.16は、以下のサポート済み64-bitプラットフォームでテストされています:
-
Red Hat Enterprise Linux 7 Workstation, 64-bit only
-
Red Hat Enterprise Linux 8 Workstation, 64-bit only
-
Ubuntu Desktop Edition 16.04 LTS, 64-bit only
-
Ubuntu Desktop Edition 18.04 LTS, 64-bit only
-
Ubuntu Desktop Edition 20.04 LTS, 64-bit only
Arm Compiler 6.16 は、古いプラットフォームでは動作しません。
Arm Compiler 6.16 をインストールするには、
install_x86_64.sh
を実行(
source
ではありません) し、画面の指示に従ってください。インストーラは、Arm Compiler 6.16 をお客様が指定したディレクトリに解凍します。
armclang
バイナリは、お客様の指定したディレクトリ内にArm Compiler 6.16 の一部としてインストールされたlibstdc++のコピーへ動的にリンクされています。
2.5. Windowsへのインストール
Arm Compiler 6.16 は、以下のサポート済み64-bitプラットフォームでテストされています:
-
Windows Server 2012
-
Windows Server 2016
-
Windows 8.1
-
Windows 10
Arm Compiler 6.16 は、古いプラットフォームでは動作しません。
Arm Compiler 6.16 は、Windows 10 v1909上でテストされています。以降のアップデートでも問題なく動作することが期待されます。
Windows 64-bitホストプラットフォーム上でArm Compiler 6.16 をインストールするために、win-x86_64setup.exeを実行し、画面の指示に従ってください。
Windows 32-bitホストプラットフォーム上でArm Compiler 6.16 をインストールするために、 win-x86_32setup.exeを実行し、画面の指示に従ってください。
以前のバージョンのArm Compiler 6 がすでにインストールされており、アップグレードしたい場合は、以前のバージョンを一旦アンインストールしてから新しいバージョンのArm Compiler 6 をインストールいただくことを推奨します。
Arm Compiler 6.16 はMicrosoft Visual Studio 2017で構築されており、WindowsのUniversal C Runtimeをインストールする必要があります。詳細な情報は、
https://support.microsoft.com/en-gb/help/2999226/update-for-universal-c-runtime-in-windows
をご確認ください。
3. アンインストール
Linuxでは、Arm Compiler 6.16 インストールディレクトリを削除してください。
Windowsでは、コントロールパネルのプログラムの追加と削除からArm Compiler 6.16 を選択し、アンインストールボタンを押下してください。
4. ドキュメンテーション
Arm Compiler 6.16 のドキュメント
は以下が利用可能です。
-
User Guide
-
Reference Guide
-
Arm C and C++ Libraries and Floating-Point Support User Guide
-
Migration and Compatibility Guide
-
Errors and Warnings Reference Guide
5. フィードバックとサポート
お客様からのフィードバックは我々にとって重要です。
製品のあらゆる局面において、欠陥報告と改善に関する提案を歓迎します。フィードバックあるいはサポートについて、お客様の製品の購入元あるいは、
https://support.developer.arm.com
へご連絡ください。
必要に応じて、ツールからの
--vsn
の出力、問題を再現するのに必要なソースコードおよびその他のファイルとコマンドラインを提供してください。
当社へのお問い合わせは、
こちら
。
6. リリース履歴と変更
以下に、Arm Compiler 6.16 シリーズのリリース日付を示します:
-
6.16 (2021年03月にリリースされました)
以下に、前回のリリースと比較した場合の新しい機能と修正された不具合の概要を示します。
この情報には、技術的な不正確さや組版上の誤りが含まれている可能性があり、リリースノートの将来の版で変更される可能性があります。
それぞれの変更点には、ユニークな識別子SDCOMP-
が割り振られています。
もしArmへこのリリースノート内の特定の問題について連絡が必要な場合、適切な識別子を通知してください
Arm Compiler 6.16 での変更点
以下に直前のリリースであるArm Compiler 6.15からの変更点を示します。
Arm Compiler 6.16 での一般的な変更
-
[SDCOMP-57434] Armv8.7-A に対するオプションのAccelerator Support Extensionのアセンブリおよび組み込み関数のサポートが追加されました。Armv8.7-A をターゲットとしてAccelerator Support Extension を使用するには以下のarmclangオプションを使用してください:
-
--target=aarch64-arm-none-eabi -march=armv8.7-a+ls64
-
[SDCOMP-57433] A アーキテクチャプロファイルにおける将来的なアーキテクチャテクノロジとなるBRBE(Branch Record Buffer Extensions)のearlyサポートがアセンブリに追加されました。BRBEをターゲットとするには以下のarmclangオプションを使用してください:
-
--target=aarch64-arm-none-eabi -march=armv8-a+brbe
-
[SDCOMP-57389] Armv8.2-A 以降に対するオプションのFlag Manipulation 命令のサポートが追加されました。Armv8.2-A 以降をターゲットとしてこれらの命令を使用するには以下のarmclangオプションを使用してください:
-
Arm v8.< ext >
-A のAArch64をターゲットとするには
--target=aarch64-arm-none-eabi -march=armv8.< ext >
-a+flagm
を使用。< ext >
は2以上。
これらのオプションのより詳細については、
Reference Guide
の
-march
と
-mcpu
の項目を参照してください。
-
[SDCOMP-57387] Armv8.2-A 以降に対するオプションのFPointer Authentication Extensionのサポートが追加されました。Armv8.2-A 以降をターゲットとしてこのExtensionを使用するには以下のarmclangオプションを使用してください:
-
Arm v8.< ext >
-A のAArch64をターゲットとするには
--target=aarch64-arm-none-eabi -march=armv8.< ext >
-a+pauth
を使用。< ext >
は2以上。
これらのオプションのより詳細については、
Reference Guide
の
-march
と
-mcpu
の項目を参照してください。
-
[SDCOMP-57209] Cortex-R52+ プロセッサのサポートが追加されました。
Cortex-R52+ をターゲットとして特定の機能セットをコンフィギュレーションするには、以下のオプションから選択します:
D16 Single-Precision FPU
|
Advanced SIMD Extension
|
RAS Extension
|
armclang
|
armlinkとfromelf
|
あり |
あり |
あり |
-mcpu=cortex-r52plus+ras |
--cpu=Cortex-R52plus |
あり |
あり |
なし |
-mcpu=cortex-r52plus |
--cpu=Cortex-R52plus |
あり |
なし |
あり |
-mcpu=cortex-r52plus+ras |
--cpu=Cortex-R52plus.no_neon --fpu=FPv5-SP |
あり |
なし |
なし |
-mcpu=cortex-r52plus |
--cpu=Cortex-R52plus.no_neon --fpu=FPv5-SP |
なし |
なし |
あり |
-mcpu=cortex-r52plus+ras |
--cpu=Cortex-R52plus.no_neon --fpu=softvfp |
なし |
なし |
なし |
-mcpu=cortex-r52plus |
--cpu=Cortex-R52plus.no_neon --fpu=softvfp |
-
[SDCOMP-57085] Cortex-A78C プロセッサのサポートが行われました。Cortex-A78Cをターゲットとするには以下のarmclangオプションから選択してください:
-
AArch64状態では
--target=aarch64-arm-none-eabi -mcpu=cortex-a78c
-
AArch32状態では
--target=arm-arm-none-ebei -mcpu=cortex-a78c
-
[SDCOMP-56239] Armv8.7-A アーキテクチャのアセンブリを完全にサポートしました。Armv8.7-Aをターゲットとするには以下のarmclangオプションから選択してください:
-
AArch64状態では
--target=aarch64-arm-none-eabi -march=armv8.7-a
-
AArch32状態では
--target=arm-arm-none-eabi -march=armv8.7-a
Arm Compiler 6.16 での機能改善
ライブラリとシステムヘッダ
-
[SDCOMP-57309] 以前は、
std::deque< T >
および
std:queue
のArm C++ ライブラリ実装では、
T
型の16 要素分または4096 バイトのいずれかのうち最大となるサイズを最小サイズのブロック単位としてメモリが割り当てられていました。
この動作は変更され、メモリは、
T
型の8 要素分または64 バイトのいずれかのうち最大となるサイズを最小サイズのブロック単位として割り当てられるようになりました。
これにより、割り当てられるメモリの量を減らすことができます。
-
[SDCOMP-51880] C++ ライブラリおよびlibc++で使用される
Application Binary Interface (ABI)
のバージョン() は、version 2 になりました。
Arm Compiler 6.15 以前を使用してビルドされたC++ オブジェクトまたはライブラリは、6.16 を使用してビルドされたC++ オブジェクトまたはライブラリとの互換性が保証されません。C++ オブジェクトおよびライブラリがArm Compiler 6.16 と互換性があることを保証するには、6.16 を使用してすべてのC++ コードをリビルドする必要があります。
詳細については、
Migration and Compatibility Guide
の
C++ library changes
のセクションを参照してください。
Arm Compiler 6.16 で修正された不具合
コンパイラと統合されたアセンブラ(armclang)
-
[SDCOMP-57379]
volatile
ビットフィールドへのアクセスに誤ったコードを生成する可能性がありました。
-
[SDCOMP-57168] 次の致命的なエラーを誤ってレポートすることがありました:
-
error in backend: Error while trying to spill LR from class GPR: Cannot scavenge register without an emergency spill slot.
-
[SDCOMP-57011] T32 状態用にコンパイルする場合、関数にテイルコール最適化を適用する際に誤ったコードを生成する可能性がありました。
-
[SDCOMP-56288]
__attribute__((section("name")))
を使用して同じセクションに関数と変数を配置した場合、エラーのレポートに失敗をしたり、以下の致命的なエラーのいずれかを誤ってレポートする可能性がありました:
-
error in backend: '< label >
' label emitted multiple times to assembly file
-
error in backend: invalid symbol redefinition.
この問題は修正され、コンパイラは以下のうちいずれかのエラーを返すようになりました。
-
'< function >
' causes a section type conflict with '< variable >
'.
-
'< variable >
' causes a section type conflict with '< function >
'.
-
[SDCOMP-56235] 定数プールが後に続く関数のデバッグ情報に対して、誤った
DW_AT_high_pc
エントリを含むオブジェクトファイルを生成する可能性がありました。
-
[SDCOMP-56105] コンパイラは誤って以下のエラーをレポートする可能性がありました。
-
out of range pc-relative fixup value.
-
[SDCOMP-55371] stdio.h システムヘッダで定義されている関数の呼び出しに対して誤ったコードを生成する可能性がありました。
-
[SDCOMP-54072] Procedure Call Standard for the Arm Architecture ABI では、書き込み前に
volatile
ビットフィールドコンテナがロードされている必要があります。コンパイラがこの要件を正しく満たしていませんでした。プログラムが古いコンパイラの動作に依存している場合は、[COMMUNITY] オプションである-fno-aapcs-bitfield-load を指定してコンパイルしてください。
以前のリリースのProcedure Call Standard for the Arm Architecture ABI では、ビットフィールドコンテナのタイプに適したアクセス幅を使用して
volatile
ビットフィールドにアクセスする必要がありました。
たとえば、ABI では、
int
コンテナを持つ
volatile
ビットフィールドに32 ビットアクセス幅を使用する必要がありました。
しかしABI は変更されました。
ビットフィールドコンテナが非ビットフィールドメンバとオーバーラップするか、または他の2 つのビットフィールドの間に配置されたゼロ長ビットフィールドの場合
volatile
ビットフィールドには、ビットフィールドコンテナのタイプに適したアクセス幅を使用してアクセスする必要がなくなりました。コンパイラは、この変更された要件に準拠するようになりました。
プログラムが古いコンパイラの動作に依存している場合は、[COMMUNITY] オプション-fno-aapcs-bitfield-width を指定してコンパイルします。
-
[SDCOMP-53818] Armv6-M またはMain ExtensionなしのArmv8-M をターゲットにして
-O0
でコンパイルすると、
h
制約コードを持つ入力オペランドを含むインラインアセンブリ式に対して誤ったコードを生成する可能性がありました。
-
[SDCOMP-51315] -O0 以外の最適化レベルでAArch64 状態用にコンパイルすると、誤ったコードを生成する可能性がありました。
-
[SDCOMP-50955] ビットフィールドに値を代入すると、ビットフィールドで表現できない値の変換に失敗する可能性がありました。この問題は修正され、影響を受ける可能性のあるコードの場合、コンパイラは以下の警告を正しくレポートします:
-
implicit truncation from '
' to bit-field changes value from
to
[-Wbitfield-constant-conversion].
-
[SDCOMP-50060]範囲宣言で
thread_local
ストレージクラス指定子が使用されているときに、範囲ベースのfor 文のエラーを誤ってレポートしませんでした。次のエラーを報告するようになりました:
-
loop variable '
' may not be declared 'thread_local'.
リンカ(armlink)
-
[SDCOMP-57231] 4 バイトの倍数の相対ベースアドレスを持つ実行リージョンのアライメントに失敗する可能性がありました。
-
[SDCOMP-57018] 4 バイトの倍数ではない絶対ベースアドレスを持つ実行リージョンのエラーを誤ってレポートしませんでした。次のエラーをレポートするようになりました:
-
L6244E: Exec region
address (
) not aligned on a
byte boundary.
-
[SDCOMP-56263]
S
が実行リージョン内の最初の出力セクションでない場合、誤って
RW
または
ZI
出力セクション
S
を4 バイトの境界にアラインできないことがありました。
-
[SDCOMP-49941] LTO を有効にしてリンクし、入力オブジェクトに
$Sub$
のプレフィックスシンボル名が含まれている場合、リンカが次のエラーを誤って報告する可能性があります:
-
L6137E: Symbol $Sub$$
was not preserved by the LTO codegen but is needed by the image.
-
[SDCOMP-46595] ダイナミックリンク中に、異なるシンボル可視性を持つ異なる入力ファイルに表示されるシンボルに対して、リンカが最も制約の強いシンボル可視性を誤って使用する可能性があります。
ライブラリとシステムヘッダ
-
[SDCOMP-57176] 文字列を
double
型または
long double
型の値に変換する特定の関数のArm C ライブラリ実装は、不正な結果を返す可能性がありました。
-
[SDCOMP-51923] Arm C++ ライブラリで、
std::pointer_safety
がスコープ付きの列挙型として正しく定義されていませんでした。
-
[SDCOMP-50015] C++ 標準ライブラリのArm 実装で、
std::regex_constants::ECMAScript
定数がゼロと誤って定義されていました。
Fromelf
-
[SDCOMP-56902]
-g
を使用してDWARF 4 デバッグ情報を含むELF 形式の入力ファイルを処理すると、
debug_line
セクションの出力に失敗することがありました。
-
[SDCOMP-50938]
--bincombined
オプションを使用したELF 形式の入力ファイルを処理する場合、無効なバイナリファイルを生成し、次のいずれかを誤ってレポートする可能性がありました:
-
Internal fault: [0x6abbc1:< ver >
].
-
Internal fault: [0x7a1b3a:< ver >
].
Arm Compiler 6.16 の既知の不具合
-
[SDCOMP-49441] Arm Compiler に付属のC++ ライブラリとリンクする場合、リンカオプションで
--cpu=name
の
name
にArmv8-R ターゲットを指定し、このとき入力オブジェクトがArmv8-R ターゲットのC++ ソース言語モードでコンパイルされていると、リンカは次のエラーを誤ってレポートすることがあります:
-
L6366E: < object >
attributes are not compatible with the provided attributes.
これを避けるには
--cpu
なしでリンクします。
-
[SDCOMP-54724] 特定の環境下で、
-ffixed-r6
オプションを使用したコンパイル時、コンパイラはスタックのアライメント要件を満たさないコードを生成する可能性があります。
-
[SDCOMP-50470] コンパイラは
_Float16
データ型の不正なデフォルト引数の拡張を含む関数呼び出しのエラーのレポートに失敗します。