Arm Compiler for Embedded 6.20 のリリースノート
目次
1. 紹介
Arm Compiler for Embedded 6.20 は、ベアメタルソフトウェア、ファームウェア、およびリアルタイムオペレーティングシステム(RTOS) アプリケーションを開発するための、Arm の最新の組み込みC/C++コンパイルツールチェインです。Arm Compiler for Embedded は、Arm アーキテクチャの最新のアーキテクチャ機能と拡張のために、最も早く、最も完全で、正確なサポートを提供します。開発中のものも含め、すべての最新のArm プロセッサをサポートします。 強力な最適化手法と最適化されたライブラリを通して、Arm Compiler for Embedded は組み込みシステム開発者が挑戦的なパフォーマンス目標とメモリ制約を満たすことを可能にします。
Arm Compiler for Embedded は、自動車、家電、産業、医療、ネットワーク、鉄道、ストレージ、通信など、さまざまな業界のリーディングカンパニーで使用されています。 プロジェクトに長期保守要件または機能安全要件(EN 50128、IEC 61508、IEC 62304、およびISO 26262など)がある場合、Armは、本リリースの代わりに、LTSおよび機能安全認証版のArm Compiler for Embedded FuSa を検討することを強く推奨します。
Arm Compiler for Embedded 6.20 は2023年3月現在の最新リリースであり、それ以前のリリースの置き換えとなります。
Arm Compiler for Embedded 6.20 のキーとなる機能は以下のサポートを含みます:
- 以下のアーキテクチャ:
- Armv9.4-A のサポート
- Armv8.9-A のサポート
- Neoverse V2 プロセッサのサポート
- 追加のホスト オペレーションシステムのサポート:
- Red Hat Enterprise Linux 9
- Ubuntu 22.04 LTS
- Windows Server 2022
- Windows11
1.1 Arm Compiler for Embedded 6.20 コンフィギュレーション
Arm Compiler for Embedded 6.20 は以下を含みます:
- ツールチェインコンポーネント:
- armclang:LLVMとClangテクノロジをベースとしたコンパイラおよび統合アセンブラ
- armar:ELFオブジェクトファイル群をまとめるアーカイバ
- armlink:オブジェクトやライブラリをまとめ、実行可能形式を生成するリンカ
- fromlef:イメージ変換ユーティリティ兼逆アセンブラ
- armasm:非推奨となった古いArm アーキテクチャ専用のarmasm-syntaxアセンブリコード用の旧アセンブラ。新しいアセンブリファイルではarmclang統合アセンブラを使用
- Arm C libraries:組込みシステム向けのランタイムサポートライブラリ
- Arm C++ libraries:LLVM libc++プロジェクトベースのライブラリ
- User documentation:
- User Guide:ツールチェインの使用を助けるサンプルとガイドを提供します
- Reference Guide:ツールチェインの設定に役立つ情報を提供します
- Arm C and C++ Libraries and Floating-Point Support User Guide:Arm libraryと浮動小数点サポートに関する情報を提供します
- Errors and Warnings Reference Guide:Arm Compiler for Embedded に含まれるツールがレポートするエラーやワーニングのリストを提供します
- Migration and Compatibility Guide:Arm Compiler 5 からArm Compiler for Embedded への移行を支援する情報を提供します
- Release notes: 最新のリリースノートはArm Compiler 6 ダウンロードページで確認できます。
ツールチェインは以下で使用できます:
- Arm Development Studio ツールキットとともに使用
- Keil MDK ツールキットとともに使用
- スタンドアローンなインストレーションとして使用
これらの商品については、代理店にお問い合わせください。
FlexNet Publisher (FNP)ライセンス管理や、トラブルシューティングの為のリソースはhttps://developer.arm.com/support/licensingよりアクセスできます。
1.2 Arm Compiler for Embedded 6.20 でサポートされたこと
ライセンス条件に従い、Arm Compiler for Embedded 6.20 を使用して、以下のArm アーキテクチャおよびプロセッサ用のビルドが行えます:Architecture | Cortex(Standard) | Cortex(Automotive Enhanced) | Neoverse | Other |
---|---|---|---|---|
Armv9.4-A | ||||
Armv9.3-AまでのArmv9-A | X3, X2 A715, A710, A510 |
V2 | ||
Armv8.9-A | ||||
Armv8.8-AまでのArmv8-A | X1 A78C, A78, A77, A76, A75, A73, A72 A65 A57, A55, A53 A35, A34, A32 |
A78AE, A76AE A65AE |
V1 N2, N1 E1 |
|
Armv7-A | A17, A15, A12 A9, A8, A7, A5 |
|||
Armv8-R AArch64 (ハードウェア浮動小数点のみの実装) |
R82 | |||
Armv8-R | R52+, R52 | |||
Armv7-R | R8, R7, R5, R4F, R4 | |||
Armv8.1-MまでのArmv8-M | M85, M55 M35P, M33 M23 |
STAR-MC1 | ||
Armv7-M | M7, M4, M3 | SecurCore SC300 | ||
Armv6-M | M1, M0, M0+ | SecurCore SC000 |
アーキテクチャとプロセッサのサポートレベルの詳細については、関連するIDE のドキュメントを参照してください。
[COMMUNITY], [ALPHA], および [BETA] 機能についての詳細はUser Guide内のSupport level definitionsの章を参照してください。
2. インストール方法とIDEへの統合
Arm Compiler for Embedded 6.20 は以下のホストアーキテクチャとホストオペレーティングシステムをサポートします:Host architecture | Host operating system | Toolchain download package | サポートされる使用方法 |
---|---|---|---|
x86_64 | Red Hat Enterprise Linux 7 Red Hat Enterprise Linux 8 Red Hat Enterprise Linux 9 Ubuntu Desktop Edition 18.04 LTS* Ubuntu Desktop Edition 20.04 LTS |
Ubuntu Desktop Edition 22.04 LTS
x86_64 Linux | スタンドアロン製品として使用 Arm Development Studioに統合 |
Windows Server 2012* Windows Server 2019 Windows Server 2022 Windows 10 Windows 11 |
x86_64 Windows | スタンドアロン製品として使用 Arm Development Studioに統合 |
|
x86_64 Windows for Keil MDK | Keil MDKに統合 | ||
AArch64 | Ubuntu 20.04 LTS | AArch64 Linux | スタンドアロン製品として使用 |
* Ubuntu 18.04 LTSのホストオペレーティングシステムのサポートは次のリリースで削除予定
注意:
- Arm Compiler for Embedded 6.20 は、以下の環境での動作は期待できません
- 上記にリストされたものより古いホストオペレーティングシステムプラットフォーム
- 2.15よりも古いglibcのバージョンのLinuxホストオペレーティングシステム
- Keil MDKライセンスを使用する場合、Arm Compiler for Embedded 6.20 はWindowsプラットフォームのみサポートします。
- x86_32 ホストプラットフォームはサポートされません。
- FlexNet Publisher フローティングライセンスを使用する場合、Armは常に最新のバージョンのライセンスサーバソフトウェアをお使いいただくことを推奨します
ツールキット、例えばArm Development Studio の一部としてArm Compiler for Embedded 6.20 を受け取った場合、ツールキットのインストーラはインストールプロセスを実行します。
この場合、ツールキットのインストール手順に従ってください。
それ以外の場合、Arm Compiler for Embedded 6.20 の使用方法に応じて適切なインストール場所を選択する必要があります:
- Arm Development Studio Bronze/Silver/Gold Edition 2021.2 以降に統合
- Arm Development Studio Platinum Edition 2021.c 以降に統合
- Keil MDK-Professional 5.36 以降に統合
- スタンドアロン製品として使用
関連する手順については以下を参照してください:
- インストール手順: User Guide 内 Installing Arm Compiler の章
- FlexNet Publisherライセンスとツールキットのコンフィギュレーション
※本内容は弊社FAQページでも日本語での解説を行っております。内容の一部は保守契約ユーザ様にのみ公開をしておりますのであらかじめFAQページにログインの上ご参照ください:
Arm Compilerを呼びだす環境別のライセンスおよび設定について ( LIC-D-25 )
- User-based ライセンスに関するドキュメンテーション:
- Arm Development Studio への統合手順:
1.ツールチェインをArm Development Studio をインストールしたディレクトリ以外の任意のディレクトリにインストールします
2.Arm Developer Studio Getting Started Guide のRegister a compiler toolchain の章にある手順に従ってツールチェインを使用するようにプロジェクトをコンフィギュレーションします
- Keil MDK への統合手順:
1.ツールチェインをKeil MDK インストールディレクトリのARM サブディレクトリにインストールします
例えば、Keil MDK インストールディレクトリがC:\Keil_v5 にある場合、推奨されるインストールパスはC:\Keil_v5\ARM\ARMCompiler6.20 です。
2.http://www.keil.com/support/man/docs/uv4/uv4_armcompilers.htmにある手順に従ってツールチェインを使用するようにプロジェクトをコンフィギュレーションします
3. フィードバックとサポート
お客様からのフィードバックは我々にとって重要です。製品のいかなる側面についても、障害報告と改善に関する提案を歓迎します。
不具合修正と機能拡張は、Arm Compiler for Embedded maintenance ポリシーに従って将来のリリースに対して検討されます。
プロジェクトに長期保守要件または機能安全要件がある場合、LTSおよび機能安全認証版のArm Compiler for Embedded FuSa の使用を検討してください。
フィードバックあるいはサポートが必要な問題について、お仕事あるいはアカデミックなE-mailアドレスを使用してお客様の製品の購入元にご連絡をいただくか、可能であればcaseをオープンしてください。
必要に応じて、以下の情報をお書き添えください:
- ツールからの--vsnの出力
- ツールが生成するエラーメッセージの完全な内容
- 問題を再現するのに必要なプリプロセス済みのソースコード、その他のファイル、コマンドラインオプション。プリプロセス済みのソースコードの生成方法はReference Guide 内の-E の章を参照してください。
当社へのお問い合わせは、こちら。
4. Arm Compiler for Embedded 6.20 での変更点
以下に、Arm Compiler for Embedded 6.20 シリーズのリリース日付を示します:- 6.20 (2023年3月にリリースされました)
以下に、Arm Compiler for Embedded 6.20 での新しい機能と修正された不具合の概要を示します。
Arm Compiler for Embedded 6.20 はLong-Term Support (LTS) リリースではありません。Arm Compiler for Embedded maintenance ポリシーに従って、今後のリリースにおいてさらなる不具合修正と機能拡張が検討されます。
以下の情報には、技術的な不正確さや誤植が含まれる場合があります。
それぞれの変更点には、ユニークな識別子SDCOMP-
もしArmへこのリリースノート内の特定の問題について連絡が必要な場合、適切な識別子を通知してください
Arm Compiler for Embedded 6.20 での変更点
以下に直前のリリースであるArm Compiler 6.19 からの変更点を示します。Arm Compiler for Embedded 6.20 での一般的な変更
- [SDCOMP-62625] AArch32 状態のA-プロファイルアーキテクチャ機能のサポートが追加されました:
機能識別子 機能の説明 -march / -mcpu +<feature> オプション 以前のサポートレベル 新しいサポートレベル FEAT_CLRBHB 分岐履歴バリア命令のクリア - Beta サポート
より詳細については以下を参照してください:
- Reference Guide 内、-marchの章
- Reference Guide 内、-mcpuの章
- Arm Architecture Reference Manual およびReference Manual Supplement 内の各機能に関連する項目
- [SDCOMP-62624] AArch64 状態の以下のA-プロファイル機能のサポートが追加されました:
機能識別子 機能の説明 -march / -mcpu +<feature> オプション 以前のサポートレベル 新しいサポートレベル FEAT_CHK 機能ステータスの説明確認 - 未サポート Alpha FEAT_CLRBHB 分岐履歴バリア命令のクリア - Beta サポート FEAT_CSSC Common short sequence 圧縮命令 cssc Beta サポート FEAT_D128,FEAT_SYSREG128,
FEAT_SYSINSTR128128-bit ページテーブル記述子 d128 Beta サポート FEAT_ITE Instrumentation extension ite Beta サポート FEAT_LRCPC3 Release Consistency Model の追加サポート rcpc3 Beta サポート FEAT_LSE128 128-bit atomic 命令 lse128 Beta サポート FEAT_PFAR, FEAT_RASv2 Reliability, Availability およびServiceability v2 rasv2 Beta サポート FEAT_PRFMSLC Prefetch memory system level cache 命令 - Beta サポート FEAT_RPRFM Range prefetch ヒント命令 - Beta サポート FEAT_SPECRES2 強化投機管理 predres2 Beta サポート FEAT_THE Translation hardening extension the Beta サポート
-march=<name>オプションを使用してコンパイルした場合、コンパイラはデフォルトでこれらの機能の以下のサブセットを有効にします:
-march=<name>option 有効化される機能 armv9.4-a FEAT_CHK, FEAT_CLRBHB, FEAT_CSSC, FEAT_PFAR, FEAT_PRFMSLC, FEAT_RASv2, FEAT_SPECRES2 armv9-a およびそれ以降 FEAT_RPRFM armv8.9-a FEAT_CHK, FEAT_CLRBHB, FEAT_CSSC, FEAT_PFAR, FEAT_PRFMSLC, FEAT_RASv2, FEAT_SPECRES2 armv8-a およびそれ以降 FEAT_RPRFM
より詳細については以下を参照してください:
- Reference Guide 内、-marchの章
- Reference Guide 内、-mcpuの章
- Arm Architecture Reference Manual およびReference Manual Supplement 内の各機能に関連する項目
- [SDCOMP-62623] 浮動小数点式の縮小を制御する -ffp-contract=<value>オプションのサポートが追加されました。
詳細については、リファレンス ガイドの-ffp-contractセクションを参照してください。 - [SDCOMP-61726] 以下のA-プロファイルアーキテクチャのサポートが行われました:
Architecture -march= オプション 以前のサポートレベル 新しいサポートレベル Armv9.4-A armv9.4-a Beta サポート Armv8.9-A armv8.9-a Beta サポート - [SDCOMP-62438] 以下のサポートされている x86_64 ホストオペレーティングシステムに対しての変更:
- 追加されたホストオペレーショングシステム
- Red Hat Enterprise Linux 9
- Ubuntu 22.04 LTS
- Windows Server 2022
- Windows 11
- 削除されたホストオペレーショングシステム
- Windows Server 2012
- Windows Server 2016
- Windows 8.1
- [SDCOMP-62413] 以前、コンパイルオプション-fsanitize=memtagを使用して、
メモリのタグ付けサニタイザーを有効にできました。これを変更しました。
メモリのタグ付けサニタイザーを有効にするには、次のオプションでコンパイルします。
- -fsanitize=memtag-heap,memtag-stack
さらに、-fsanitize=memtagを使用してコンパイルすると、コンパイラは次のエラーを報告できるようになりました。
- Tagged symbols (-fsanitize=memtag-globals) are only supported on aarch64 + Android
詳細については以下を参照してください:- Reference Guide 内-fsanitize, -fno-sanitizeの章
- User Guide 内Overview of memory taggingの章
- [SDCOMP-62131] --sysvでリンクする場合、以下のリンカのワーニングがリマークにダウングレードされました:
- L6314W: No section matches pattern <pattern>
または--diag_warning=L6314Wとリンクすることで警告にアップグレードできます。 - [SDCOMP-62037] 以前、C++ソース言語モードでコンパイルした場合、コンパイラは以下のワーニングをレポートすることがありました:
- missing 'typename' prior to dependent type name '<name>'
コンパイラは、typenameキーワードを指定するための要件を緩和する C++20 拡張機能を実装するようになりました。
拡張機能は、すべての C++ソース言語モードで有効です。その後、コンパイラは以下のワーニングをレポートするようになりました:
- missing 'typename' prior to dependent type name <name>; implicit 'typename' is a C++20 extension
詳細についてはC++ Standards Committee PapersのP0634R3を参照してください。
- [SDCOMP-61795]Windowsホストプラットフォームのインストールパッケージ構造が変更されました。setup.exeファイルは削除されました。
ツールチェーンをインストールするには、代わりに.msiファイルを使用してください。
詳細についてはUser Guide 内のSystem requirements and installationの章を参照してください。
- [SDCOMP-61757]デフォルトの C++ソース言語モードが gnu++14 から gnu++17 に変更されました。
詳細についてはReference Guide 内の-stdの章を参照してください。
- [SDCOMP-61739] 以前、fromelfユーティリティが AArch64 PRFM(リテラル)命令のラベルオペランドをラベルまたは PC 相対オフセットとして逆アセンブルしていました。
この動作は変更されました。fromelfユーティリティは、オペランドを即時オフセットとして逆アセンブルするようになりました。
ELF形式のオブジェクトファイルを逆アセンブルする場合は、 --text -rを使用して出力された再配置情報を手動で検査し、
AArch64 PRFM(リテラル)命令のラベルオペランドを特定します。
- [SDCOMP-60879] C++17標準ライブラリヘッダー<memory_resource>のサポートが追加されました。
- [SDCOMP-58910] Neoverse V2 プロセッサをサポートしました。
Neoverse V2 をターゲットとするには、以下のarmclangオプションのいずれかを使用してください:
暗号化拡張 オプション あり --target=aarch64-arm-none-eabi -mcpu=neoverse-v2+crypto なし --target=aarch64-arm-none-eabi -mcpu=neoverse-v2 - [SDCOMP-55137] -ffp-mode=fullでコンパイルするときの AArch64状態の浮動小数点例外のサポートが追加されました。
詳細については、Referenc Guide 内-ffp-mode の章を参照してください。
Arm Compiler for Embedded 6.20 での不具合修正
armclang
- [SDCOMP-62725] 整数 MVE のみをサポートするターゲットに対して-mfloat-abi=hardを使用してコンパイルすると、
コンパイラはArm アーキテクチャのプロシージャ コール標準に誤って準拠しないコードを生成していました。 - [SDCOMP-62575] M-profile Vector Extension (MVE) を使用して Armv8.1-M ターゲット用にコンパイルすると、
コンパイラはループに対して誤ったコードを生成する可能性がありました。 - [SDCOMP-62463] -ffp-mode=stdまたは-ffp-mode=<mode>オプションなしでコンパイルすると、コンパイラは浮動小数点式の縮小を常に無効にしていました。
浮動小数点式の縮小を制御するには、-ffp-contract=<value>オプションまたは#pragma STDC FP_CONTRACT <value>を使用します。
詳細については、Referenc Guide 内の下記の章を参照してください。- -ffp-contract
- #pragma STDC FP_CONTRACT
- [SDCOMP-62352] コンパイラと統合アセンブラは、Armv8-MアーキテクチャのリビジョンB.qに従って、VMLA.U32またはVMLAS.U32命令を誤って生成する可能性がありました。
コンパイラと統合アセンブラは、Armv8-MアーキテクチャのリビジョンB.rVMLA.I32またはVMLAS.I32命令を生成するようになりました。
- [SDCOMP-62330] -gまたは-gdwarf-4を指定してコンパイルすると、コンパイラはビットフィールドに対して誤ったデバッグ情報を生成する可能性がありました。
- [SDCOMP-62123] コンパイラは、*vdup*_*f16() Neon intrinsicに対して誤ったコードを生成する可能性がありました。
- [SDCOMP-61413] -mbranch-protection=<protection>でリンク時最適化(LTO)機能を有効にしてコンパイルすると、コンパイラは分岐保護を有効にせずにコードを誤って生成していました。
- [SDCOMP-61298] ハードウェア浮動小数点サポートのないターゲット用にコンパイルする場合、コンパイラは __SOFTPP__定義済みマクロの定義に誤って失敗する可能性がありました。
- [SDCOMP-59547] AArch64状態のアセンブル時に、インラインアセンブラおよび統合アセンブラは、アクセスする特殊レジスタとして AMCG1IDR_EL0を指定するMRS命令について、以下のエラーを誤ってレポートしていました。
- expected readable system register
armlink
- [SDCOMP-62415] C++例外とメモリタグサニタイザーの両方を有効にしてコンパイルされた入力オブジェクトをリンクすると、リンカが以下のワーニングを間違ってレポートする可能性がありました:
- L6860W: Unable to optimize .eh_frame sections: <object>(.eh_frame)(CIE at offset <offset>) augmentation string contains unrecognized character: G
- [SDCOMP-62251] リンカは、ロード領域を記述する ELFプログラムヘッダーのp_memszフィールドの小さすぎる値を誤って計算する可能性がありました。
- [SDCOMP-62032] C++例外とキーBが有効なポインター認証の両方でコンパイルされた入力オブジェクトをリンクすると、リンカーは以下のワーニングを誤ってレポートする可能性がありました:
- L6860W: Unable to optimize .eh_frame sections: <object>(.eh_frame)(CIE at offset <offset>) augmentation string contains unrecognized character: B
- [SDCOMP-60491] R_AARCH64_CONDBR19再配置によって変更された AArch64 FEAT_HBC BC.<cond>命令を含む入力オブジェクトをリンクすると、リンカは命令を誤ってUDF命令に置き換える可能性がありました。
- [SDCOMP-57199] リンカは、4 バイト境界にアラインされていない A32命令に分岐するT32 BL命令を含むプログラムのワーニングを誤ってレポートしない可能性がありました。
リンカーは、下記のワーニングをレポートするようになりました:
- L6307W: Relocation #REL:0 in <object>(<section>) with respect to <function>. Branch to unaligned destination
fromelf
- [SDCOMP-62644] --emit=addressesまたは--text -aを使用して名前のないデータアドレスを含む ELF形式の入力ファイルを処理すると、fromelfユーティリティが誤ってレポートしていました:
- ARM FromELF: Execution interrupted due to an illegal storage access
- [SDCOMP-62217] fromelf ユーティリティがLE またはLETP 命令のラベルオペランドを、PC相対オフセットではなく即時オフセットとして誤って逆アセンブルしていました。
- [SDCOMP-62000] -gを使用してデバッグ情報を含む ELF形式の入力ファイルを処理すると、fromelfユーティリティが.debug_locセクションに対して誤った出力を生成する可能性がありました。
ライブラリとシステムヘッダ
- [SDCOMP-57673] AArch64状態の Arm Cライブラリのバリアントは、以下のように浮動小数点ユニットの構成に誤って失敗していました:
- デフォルトの NaN プロパゲーションを有効化。
- 非正規化数のゼロへのフラッシュを有効化。