Arm Compiler for Embedded 6.19 のリリースノート
目次
1. 紹介
Arm Compiler for Embedded 6.19 は、ベアメタルソフトウェア、ファームウェア、およびリアルタイムオペレーティングシステム(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.19 は2022年10月現在の最新リリースであり、それ以前のリリースの置き換えとなります。
Arm Compiler for Embedded 6.19 のキーとなる機能は以下のサポートを含みます:
- 最近リリースされたプロセッサ:
- Cortex-X3、Cortex-A715、Cortex-R82、Cortex-M85
- 以下のアーキテクチャ:
- Armv9.4-A のBETAサポート
- Armv8.9-A のBETAサポート
- Armv8-R AArch64 のフルサポート
- 追加のA-プロファイルアーキテクチャ機能
- 追加のセキュリティ機能:
- Undefined Behavior Sanitizer (UBSan)
- Control Flow Integrity (CFI)
- AArch64状態のShadow Call Stack
- C++17
- 旧アセンブラ armasm の非推奨化
1.1 Arm Compiler for Embedded 6.19 コンフィギュレーション
Arm Compiler for Embedded 6.19 は以下を含みます:
- ツールチェインコンポーネント:
- 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 ツールキットとともに使用
- スタンドアローンなインストレーションとして使用
これらの商品については、代理店にお問い合わせください。
ライセンス管理や、トラブルシューティングの為のリソースはhttps://developer.arm.com/support/licensingよりアクセスできます。
1.2 Arm Compiler for Embedded 6.19 でサポートされたこと
ライセンス条件に従い、Arm Compiler for Embedded 6.19 を使用して、以下のArm アーキテクチャおよびプロセッサ用のビルドが行えます:
Architecture | Cortex | Neoverse | Other | |
Standard | Automotive Enhanced | |||
Armv9.4-A[BETA} | - | - | - | - |
Armv9.3-AまでのArmv9-A | X3, X2 A715, A710, A510 |
- | - | - |
Armv8.9-A[BETA} | - | - | - | - |
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 のドキュメントを参照してください。
- Arm Development Studio : https://developer.arm.com/tools-and-software/embedded/arm-development-studio
- Keil MDK : https://developer.arm.com/tools-and-software/embedded/keil-mdk
ツールのコンフィギュレーションとビルド可能なアーキテクチャおよびプロセッサを確認するには、次のarmclang オプションを使用します:
- --vsn
- --target=aarch64-arm-none-eabi -march=list
- --target=aarch64-arm-none-eabi -mcpu=list
- --target=arm-arm-none-eabi -march=list
- --target=arm-arm-none-eabi -mcpu=list
[COMMUNITY], [ALPHA], および [BETA] 機能についての詳細はUser Guide内のSupport level definitionsの章を参照してください。
2. インストール方法とIDEへの統合
Arm Compiler for Embedded 6.19 は以下のホストアーキテクチャとホストオペレーティングシステムをサポートします:
Host architecture | Host operating system | Toolchain download package | サポートされる使用方法 |
x86_64 | Red Hat Enterprise Linux 7 Red Hat Enterprise Linux 8 Ubuntu Desktop Edition 18.04 LTS Ubuntu Desktop Edition 20.04 LTS |
x86_64 Linux | スタンドアロン製品として使用 Arm Development Studioに統合 |
Windows Server 2012* Windows Server 2016* Windows Server 2019 Windows 8.1* Windows 10 |
x86_64 Windows | スタンドアロン製品として使用 Arm Development Studioに統合 |
|
x86_64 Windows for Keil MDK | Keil MDKに統合 | ||
AArch64 | Ubuntu 20.04 LTS | AArch64 Linux | スタンドアロン製品として使用 |
* これらのホストオペレーティングシステムのサポートは次のリリースで削除予定
注意:
- Arm Compiler for Embedded 6.19 は、以下の環境での動作は期待できません
- 上記にリストされたものより古いホストオペレーティングシステムプラットフォーム
- 2.15よりも古いglibcのバージョンのLinuxホストオペレーティングシステム
- Keil MDKライセンスを使用する場合、Arm Compiler for Embedded 6.19 はWindowsプラットフォームのみサポートします。
- x86_32 ホストプラットフォームはサポートされません。
- FlexNet Publisher フローティングライセンスを使用する場合、Armは常にhttps://developer.arm.com/downloads/-/download-flexnet-publisher から入手できる、最新のバージョンのライセンスサーバソフトウェアをお使いいただくことを推奨します
ツールキット、例えばArm Development Studio の一部としてArm Compiler for Embedded 6.19 を受け取った場合、ツールキットのインストーラはインストールプロセスを実行します。
この場合、ツールキットのインストール手順に従ってください。
それ以外の場合、Arm Compiler for Embedded 6.19 の使用方法に応じて適切なインストール場所を選択する必要があります:
- 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ライセンスとツールキットのコンフィギュレーション:https://developer.arm.com/documentation/ka004977/latest
※本内容は弊社FAQページでも日本語での解説を行っております。内容の一部は保守契約ユーザ様にのみ公開をしておりますのであらかじめFAQページにログインの上ご参照ください:
Arm Compilerを呼びだす環境別のライセンスおよび設定について ( LIC-D-25 )
- User-based ライセンスに関するドキュメンテーション:https://lm.arm.com
- 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.19 です。
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アドレスを使用してお客様の製品の購入元にご連絡をいただくか、可能であればhttps://support.developer.arm.comでcaseをオープンしてください。
必要に応じて、以下の情報をお書き添えください:
- ツールからの--vsnの出力
- ツールが生成するエラーメッセージの完全な内容
- 問題を再現するのに必要なプリプロセス済みのソースコード、その他のファイル、コマンドラインオプション。プリプロセス済みのソースコードの生成方法はReference Guide 内の-E の章を参照してください。
当社へのお問い合わせは、こちら。
4. Arm Compiler for Embedded 6.19 での変更点
以下に、Arm Compiler for Embedded 6.19 シリーズのリリース日付を示します:
- 6.19 (2022年10月にリリースされました)
以下に、Arm Compiler for Embedded 6.19 での新しい機能と修正された不具合の概要を示します。
Arm Compiler for Embedded 6.19 はLong-Term Support (LTS) リリースではありません。Arm Compiler for Embedded maintenance ポリシーに従って、今後のリリースにおいてさらなる不具合修正と機能拡張が検討されます。
以下の情報には、技術的な不正確さや誤植が含まれる場合があります。
それぞれの変更点には、ユニークな識別子SDCOMP-が割り振られています。
もしArmへこのリリースノート内の特定の問題について連絡が必要な場合、適切な識別子を通知してください
Arm Compiler for Embedded 6.19 での変更点
以下に直前のリリースであるArm Compiler 6.18 からの変更点を示します。
Arm Compiler for Embedded 6.19 での一般的な変更
- [SDCOMP-61729] AArch32 状態のFEAT_CLRBHB A-プロファイルアーキテクチャ機能のサポートが追加されました:
機能の説明 アセンブリおよびインラインアセンブリへの影響 コンパイルへの影響 -march / -mcpu +<feature> オプション サポートレベル 分岐履歴バリア命令のクリア あり なし - Beta
より詳細については以下を参照してください:
-
- Reference Guide 内、-marchの章
- Reference Guide 内、-mcpuの章
- Arm Architecture Reference Manual およびReference Manual Supplement 内の各機能に関連する項目
-
- [SDCOMP-61727] AArch64 状態の以下のA-プロファイル機能のサポートが追加されました:
機能識別子 機能の説明 アセンブリおよびインラインアセンブリへの影響 コンパイルへの影響 -march / -mcpu +<feature> オプション サポートレベル FEAT_CLRBHB 分岐履歴バリア命令のクリア あり なし - Beta FEAT_CSSC Common short sequence 圧縮命令 あり あり cssc Beta FEAT_D128 128-bit ページテーブル記述子 あり なし d128 Beta FEAT_GCS Guarded Control Stack あり なし gcs Alpha FEAT_ITE Instrumentation extension あり なし ite Beta FEAT_LRCPC3 Release Consistency Model の追加サポート あり なし rcpc3 Beta FEAT_LSE128 128-bit atomic 命令 あり なし lse128 Beta FEAT_MEC Realm Management Extension (RME)
Memory Encryption Contextsあり なし - サポート済 FEAT_PFAR, FEAT_RASv2,
FEAT_RPZReliability, Availability およびServiceability v2 あり なし rasv2 Beta FEAT_PRFMSLC Prefetch memory system level cache 命令 あり なし - Beta FEAT_RPRFM Range prefetch ヒント命令 あり なし - Beta FEAT_SME2p1 Scalable Matrix Extension 2.1 あり なし sme2p1 Alpha FEAT_SPECRES2 強化投機管理 あり なし predres2 Beta FEAT_SVE2p1 Scalable Vector Extension 2.1 あり なし sve2p1 Beta FEAT_SYSINST128,
FEAT_SYSREG128128-bit システムレジスタおよび命令 あり なし sys128 Beta FEAT_THE Translation hardening extension あり なし the Beta
-march=<option>オプションを使用してコンパイルした場合、コンパイラはデフォルトでこれらの機能の以下のサブセットを有効にします:
-march=<option> 有効化される機能 armv9.4-a FEAT_CLRBHB, FEAT_CSSC, FEAT_PFAR, FEAT_PRFMSLC, FEAT_RASv2, FEAT_RPZ, FEAT_SME2p1, FEAT_SPECRES2, FEAT_SVE2p1 armv9-a およびそれ以降 FEAT_MEC, FEAT_RPRFM armv8.9-a FEAT_CLRBHB, FEAT_CSSC, FEAT_PFAR, FEAT_PRFMSLC, FEAT_RASv2, FEAT_RPZ, FEAT_SPECRES2 armv8-a およびそれ以降 FEAT_RPRFM
より詳細については以下を参照してください:
-
-
- Reference Guide 内、-marchの章
- Reference Guide 内、-mcpuの章
- Arm Architecture Reference Manual およびReference Manual Supplement 内の各機能に関連する項目
-
-
- [SDCOMP-61726] 以下のアーキテクチャのBeta サポートが行われました:
- Armv9.4-A
- Armv8.9-A
- これら
- のアーキテクチャをターゲットとするには、次のオプションから選択してください:
Architecture | 状態 | オプション |
Armv9.4-A | AArch64 | --target=aarch64-arm-none-eabi -march=armv9.4-a |
Armv9.4-A | AArch32 | --target=arm-arm-none-eabi -march=armv9.4-a |
Armv8.9-A | AArch64 | --target=aarch64-arm-none-eabi -march=armv8.9-a |
Armv8.9-A | AArch32 | --target=arm-arm-none-eabi -march=armv8.9-a |
- より詳細については、Reference Guide内の-march の章を参照してください。
- [SDCOMP-61627] Arm C++ ライブラリは、特定のライブラリ関数を自動的にインライン展開しなくなりました。これにより、最適化が以前のリリースとは異なって行われることがあります。特に-O0 または-fno-inline-functions でコンパイルする場合の関数インライン化で違いがあります。
- [SDCOMP-61578] 次回リリース時、以下のホストオペレーティングシステムのサポートがなくなります:
-
- Windows Server 2012
- Windows Server 2016
- Windows 8.1
-
- [SDCOMP-61576] 以前、C ソース言語モードでコンパイルした場合、コンパイラは暗黙的な関数ポインタ変換に関して次の警告を報告していました:
- incompatible function pointer types initializing <pointer> with an expression of type <type>
この動作は変更され、代わりにエラーをレポートするようになりました。
エラーをワーニングにダウングレードするには-Wno-error=incompatible-function-pointer-typesを使用してコンパイルしてください。
エラーおよびワーニングを無効にするには -Wno-incompatible-function-pointer-typesを使用してコンパイルしてください。
- [SDCOMP-61447] GDB などのサードパーティツールと互換性のあるELF イメージを生成するオプション--elf-output-format=gnu および--no-scatterload-enabled をサポートしました:
これらのオプションの詳細については以下を参照してください:-
-
- Reference Guide 内--elf-output-formatの章
- Reference Guide 内--scatterload-enabled, --no-scatterload-enabledの章
- User Guide 内Building images that are compatible with third-party toolsの章
-
-
- [SDCOMP-61019] --interleave=sourceオプションのサポートがなくなりました。逆アセンブルとソースコード間のマッピングを表示するには、-g オプションを使用してコンパイルし、Arm Development Studio などの外部デバッガツールを使用してください。
- [SDCOMP-60931] 以下のリンカのワーニングはリマークにダウングレードしました:
- L6775W: <object>(<section>) has FDEs which use CIEs which are not in this section
- [SDCOMP-60883] 以前、C ソース言語モードでコンパイルした場合、コンパイラは型指定のない変数宣言に対して以下のワーニングをレポートすることがありました:
- type specifier missing, defaults to 'int'
C90 ソース言語モードの場合、コンパイラはワーニングをレポートしなくなりました。以前の動作に戻したい場合は-Wimplicit-int オプションを使用してコンパイルしてください。
C99 以降のソース言語モードの場合、コンパイラは以下のエラーをレポートするようになりました:
- type specifier missing, defaults to 'int'; ISO C99 and later do not support implicit int
- [SDCOMP-60791] 以前、C ソース言語モードでコンパイルした場合、コンパイラは暗黙的な関数宣言に対して以下のワーニングをレポートすることがありました:
- implicit declaration of function '<function>' is invalid in C99
- call to undeclared function '<function>'; ISO C99 and later do not support implicit function declarations
- [SDCOMP-60722] Cortex-R82 プロセッサが完全にサポートされました。
Cortex-R82 をターゲットとするには、次のarmclangオプションを使用してください:
-
- --target=aarch64-arm-none-eabi -mcpu=cortex-r82
-
- [SDCOMP-60721] Armv8-R AAarch64 アーキテクチャが完全にサポートされました。
Armv8-R AAarch64 アーキテクチャをターゲットとするには、以下のarmclangオプションを使用してください:
-
- --target=aarch64-arm-none-eabi -march=armv8-r
-
- [SDCOMP-60716] Control Flow Integrity (CFI) サニタイザをサポートしました。
CFI の詳細についてはUser Guide 内Overview of Control Flow Integrityの章を参照してください。 - [SDCOMP-60141] コンパイラおよび統合アセンブラ、リンカでDWARF 5デバッグ情報の生成をサポートしました。
DWARF 5 デバッグ情報を生成するには、-gdwarf-5 を指定してコンパイルしてください。
fromelf ユーティリティは、-g または--text -g を使用したDWARF 5 デバッグ情報の処理をサポートしていません。
詳細については以下を参照してください:-
- Reference Guide 内-g、-gdwarf-nの章
- User Guide 内Standards compliance in Arm Compiler for Embedded 6の章
-
- [SDCOMP-59807] Cortex-A57 Erratum 1742098 およびCortex-A72 Erratum 1655431 を軽減するためのサポートがコンパイラに追加されました。この変更はコンパイルにのみ影響し、インラインアセンブラや統合アセンブラには影響しません。
AArch32 状態およびAdvanced SIMD AES 命令をサポートするターゲット用にコンパイルする場合、コンパイラのデフォルトの動作は以下のようになります:
ターゲット デフォルトの動作 Cortex-A57 軽減有効 Cortex-A72 軽減有効 その他すべてのターゲット 軽減無効
デフォルトで軽減が有効化されている場合に無効化するには-mno-fix-cortex-a57-aes-1742098または-mno-fix-cortex-a72-aes-1655431オプションを使用してコンパイルします。- 注意:-mfix-cortex-a57-aes-1742098は-mfix-cortex-a72-aes-1655431 -mno-fix-cortex-a57-aes-1742098 は -mno-fix-cortex-a72-aes-1655431 のエイリアスです。Cortex-A57 Erratum 1742098、Cortex-A72 Erratum 1655431、および軽減の詳細については以下のドキュメントを参照してください:
- [SDCOMP-59308] Cortex-X3 プロセッサをサポートしました。
Cortex-X3 をターゲットとするには、以下のarmclangオプションのいずれかを使用してください:
暗号化拡張 オプション あり --target=aarch64-arm-none-eabi -mcpu=cortex-x3+crypto なし --target=aarch64-arm-none-eabi -mcpu=cortex-x3
- [SDCOMP-59306] Cortex-A715 プロセッサをサポートしました。
Cortex-A715 をターゲットとするには、以下のarmclangオプションのいずれかを使用してください:
暗号化拡張 オプション あり --target=aarch64-arm-none-eabi -mcpu=cortex-a715+crypto なし --target=aarch64-arm-none-eabi -mcpu=cortex-a715
- [SDCOMP-57589] 旧アセンブラ(armasm) は非推奨となりました。armasm はArm Compiler 6.10 以降更新されず、以下をサポートしません:
- Armv8.4-A およびそれ以降のアーキテクチャ
- Armv8.2-AおよびArmv8.3-Aの一部のバックポート機能
- SVE 命令
- MVE を含むArmv8.1-M およびそれ以降のアーキテクチャ
- Armv8-R アーキテクチャ
- A1950W: The legacy armasm assembler is deprecated. Consider using the armclang integrated assembler instead
- armasm を直接起動する場合は--diag_suppress=A1950W
- armclang -masm=<assembler> を使用して間接的にarmasm を呼び出す場合は-Wa,armasm,--diag_suppress=A1950W
- [SDCOMP-56125] Cortex-M85 プロセッサをサポートしました。
Cortex-M85 の特定の機能セットの組み合わせをターゲットとする方法の詳細については、Reference Guide 内Supported architecture feature combinations for specific processors の章を参照してください。 - [SDCOMP-53254] Undefined Behavior Sanitizer (UBSan) をサポートしました。
UBSan の詳細については、User Guide 内Overview of Undefined Behavior Sanitizer の章を参照してください。
Arm Compiler for Embedded 6.19 での機能改善
armclang
- [SDCOMP-61975] -ffixed-x18 オプションのサポートが行われ、Arm ABI 準拠のために使う事を要求されない限りX18 汎用レジスタをコンパイラが使用しなくなりました。
より詳細については、Reference Guide 内-ffixed-x18 の章を参照してください。 - [SDCOMP-60940] グローバル変数のマージを有効または無効にする-mglobal-merge および -mno-global-merge オプションをサポートしました。
より詳細については、Reference Guide 内-mglobal-merge, -mno-global-merge の章を参照してください。 - [SDCOMP-60484] 以前、Cortex-X1C をターゲットとしてコンパイルする際、以下の拡張はデフォルトで無効化されていました:
拡張機能の名称 拡張の説明 FEAT_FlagM Flag manipulation instructions v2 FEAT_LRCPC2 Load-Acquire RCpc instructions v2 FEAT_LSE2 Large System Extensions v2
この動作は変更され、拡張はデフォルトで有効化されました。
加えて、コンパイラは、128-bit アトミック変数にアクセスするためのLDP 命令とSTP 命令を生成できるようになりました。 - [SDCOMP-60266] C++17ソース言語モードを完全にサポートしました。
C++17 ソースコードのコンパイルを行うには、以下のオプションのいずれかを使用してください:
- -std=c++17
- -std=gnu++17
-
- Reference Guide 内-stdの章
- User Guide 内Selecting source language optionsの章
- C and C++ Libraries and Floating-Point Support User Guide 内Standard C++ library implementation definition の章
- [SDCOMP-59774] フレームチェーンが維持されているかどうか、およびフレームチェーンのフレームレコードの準拠レベルを制御する<-mframe-chain=<model>> オプションをサポートしました。
より詳細についてはReference Guide内の以下の章を参照してください:
- -fomit-frame-pointer, -fno-omit-frame-pointer
- -mframe-chain
- [SDCOMP-59300] AArch64 状態のShadow Call Stack 機能をサポートしました。
より詳細についてはReference Guide内の以下の章を参照してください:
- -ffixed-x18
- -fsanitize, -fno-sanitize
- __attribute__((no_sanitize("<option>"))) function attribute
armlink
- [SDCOMP-57151] --check_pac_mismatch および--info=pac のオプションをサポートしました。
--check_pac_mismatch オプションを使用してリンクする際、Pointer Authentication Code (PAC) 分岐保護機能を有効にする-mbranch-protection=protection オプションを使用してビルドされたオブジェクトが部分的に含まれる場合、リンカは次のワーニングをレポートします:
- L6142W: Composition of PAC and non-PAC objects detected. Use --info=pac to print out the list of objects with their corresponding PAC mark
-
- --check_pac_mismatch
- -mbranch-protection=protection
- --info=topic[,topic,...] (armlink)
ライブラリとシステムヘッダ
- [SDCOMP-60785] 以前、Arm C++ ライブラリ実装では以下のようになっていました:
- operator[](size_t pos) const はconst std::bitset<N> に対する実装依存のread-only bit 参照オブジェクトを返す
- std::vector<bool>::const_reference は実装依存のread-only bit 参照クラスとして定義
- operator[](size_t pos) const はconst std::bitset<N> に対しbool を返す
- std::vector<bool>::const_reference はbool として定義
C++ オブジェクトおよびライブラリがArm Compiler for Embedded 6.19 と互換性を持つことを保証するには、影響を受けるすべてのC++ コードを6.19 で再ビルドする必要があります。 - [SDCOMP-60487] 以前、tmpfile() およびtmpnam() 関数のArm C ライブラリの実装は、リターゲット関数_sys_tmpnam() を使用しないとリターゲットできませんでした。
重要なポイントは、返される値がtmpfile() およびtmpnam() によって無視されるため、_sys_tmpnam() の実装は失敗してはならないことでした。
この動作は以下のように変更されました:
- _sys_tmpnam() は非推奨になりました
- _sys_tmpnam() void をリターンします
- _sys_tmpnam() に代わり、新しいりターゲット関数_sys_tmpnam2() が追加されました
- _sys_tmpnam2() の実装は、失敗を示す負の値が返される場合があります
- _sys_tmpnam() と_sys_tmpnam2() の両方が実装されている場合、_sys_tmpnam() は無視され、_sys_tmpnam2() が使用されます
より詳細についてはC and C++ Libraries and Floating-Point Support User Guide 内の_sys_tmpnam() および_sys_tmpnam2()の章を参照してください。
Arm Compiler for Embedded 6.19 で修正された不具合
armclang
- [SDCOMP-61297] Scalable Vector Extension (SVE) を持つターゲット用にコンパイルする際、SVE レジスタに渡す必要のある引数を持たない関数がプログラムに含まれている場合、コンパイラが誤って関数はレジスタP4-P15 およびZ8-Z23 を保存しなければならないと想定し、それによって関数に対して不正なコードを生成する可能性がありました。
- [SDCOMP-61268] -ffp-mode=full を指定してコンパイルすると、コンパイラはグローバルなstruct またはunion を初期化するために複合リテラルを使用するコードについて、誤って次のエラーをレポートすることがありました:
-
- clang frontend command failed with exit code
-
- [SDCOMP-61245] 統合アセンブラは、次のいずれかの形式を持つディレクティブに対して不正なコードを生成する可能性がありました:
-
- .eabi_attribute Tag_also_compatible_with,<value>
- .eabi_attribute 65, <value>
-
- [SDCOMP-61080] コンパイラは、>> 演算子と<< 演算子の両方を含む式に対して不正なコードを生成する可能性がありました。
- [SDCOMP-60897] -mcmse を指定してツールチェインをUser Based License で使用すると、コンパイラが特定の定義済みマクロの定義に失敗することがありました。
- [SDCOMP-60841] -Ofast、-Omax または-ffp-mode=fast を指定してM-profile Vector Extension (MVE) を持つArmv8.1-M をターゲットとしてコンパイルした場合、float 型の変数から半精度浮動小数点型への変換を含むループについて間違ったコードを生成する可能性がありました。
- [SDCOMP-60743] C++14 およびそれ以降のソース言語モードでコンパイルし、コードにラムダ式が含まれている場合、コンパイラは次のいずれかのエラーを誤ってレポートすることがありました:
-
- clang frontend command failed due to signal
- clang frontend command failed with exit code
-
- [SDCOMP-60632] Arch64 状態のbig-endian ターゲットのアセンブル時に、インラインアセンブラと統合アセンブラは.align、.balign、または.p2align アセンブリディレクティブに対してNOP 命令ではなく、誤ってFNMADD 命令を生成する可能性がありました。
- [SDCOMP-60589] C ソース言語モードでコンパイルする場合、コンパイラは長さゼロのビットフィールドを含むhomogenous floating-point aggregate (HFA) structure があるプロトタイプを持つ関数に対して、Procedure Call Standard for the Arm Architecture に準拠しないコードを誤って生成する可能性がありました。
- [SDCOMP-60443] -g または-gdwarf-version とともに-frwpi を使用すると、コンパイラはconst のグローバル変数に対して間違ったデバッグ情報を生成する可能性がありました。
- [SDCOMP-60342] フォーマット文字列がグローバル変数である場合に、<stdio.h> ヘッダに定義されている書式指定入出力関数文字列の呼び出しまたは<wchar.h> ヘッダに定義されている書式指定ワイドキャラクタ入出力関数の呼び出しに対して、コンパイラが誤ったコードを生成する可能性がありました。
- [SDCOMP-59521] -O0 以外の全ての最適化レベルでコンパイルする際、operator delete の空のユーザ定義の実装に対する呼び出しについて不正なコードを生成する可能性がありました。
- [SDCOMP-58153] 空でないパラメータリストを含む宣言と、空のパラメータリストを持つ宣言を含むC 関数についてコンパイラがエラーのレポートに失敗することがありました。
この問題は修正され、以下のエラーを返すようになりました:
- conflicting types for '<function>'
- [SDCOMP-57674] -O0 以外の全ての最適化レベルでコンパイルする際、非正規浮動小数点数を0 にフラッシュできない可能性がありました。
- [SDCOMP-56391] armclang.exe へのパスに制御文字¥""を含んだ形でコンパイラバイナリをWindows プラットフォーム上で使用すると、コンパイラは誤って以下のエラーをレポートする可能性がありました。
-
- Stack dump: 0
-
- [SDCOMP-55267] AArch64 状態用にアセンブルする際、インラインアセンブラおよび統合アセンブラはアクセスするシステムレジスタとしてPMMIR_EL1 を用いるMSR 命令のエラーのレポートに失敗する可能性がありました。
この問題は修正され、インラインアセンブラおよび統合アセンブラは以下のエラーを返すようになりました:-
- expected writable system register or pstate
-
armlink
- [SDCOMP-61150] --datacompressor=off を指定せずにリンクする際、リンカはRW データを含む実行リージョンを解凍するイメージを誤って生成する可能性がありました。
- [SDCOMP-60659] リンカが動的シンボルテーブルの同一オフセットにすべてのthread-local 変数を配置する可能性がありました。
- [SDCOMP-60432] Armv8-M をターゲットとしてリンクする場合、リンカのビルド属性の互換性チェック機能でBTI ビルド属性についてライブラリファイルからロードされたオブジェクトの互換性のチェックに誤りがありました。
この問題は修正され、リンカは以下のように動作するようになりました:
-
--require-bti を使用する場合、ライブラリファイルからロードされたオブジェクトにおける互換性のないBTI ビルド属性に対して、
L6111E: Composition of BTI and non-BTI objects detected. Use --info=bti to print out the list of objects with their corresponding BTI mark
のエラーをレポートします -
--require-bti を使用しない場合、ライブラリファイルからロードされたオブジェクトにおける互換性のないBTI ビルド属性に対して、
L6110W: Composition of BTI and non-BTI objects detected. The PACBTI-M library variant has been selected. Use --info=bti to print out the list of objects with their corresponding BTI mark
のワーニングをレポートします - --info=bti から出力されるデータに、ライブラリファイルからロードされたオブジェクトのBTI ビルド属性に関する情報が含まれます
-
--require-bti を使用する場合、ライブラリファイルからロードされたオブジェクトにおける互換性のないBTI ビルド属性に対して、
- [SDCOMP-50464] Link-Time Optimisation (LTO) を有効にしてリンクする際、リンカが以下のエラーを間違ってレポートする可能性がありました:
- L6218E: Undefined symbol <symbol> (referred from <lto_intermediate_object>)
ここでの<symbol> はrun-time ABI 関数です
- L6218E: Undefined symbol <symbol> (referred from <lto_intermediate_object>)
fromelf
- [SDCOMP-60725] fromelfユーティリティは--cpu=8.1-M.Main を使用するとCLRM 命令の逆アセンブルを誤っていました。
- [SDCOMP-60326] -g を使用しデバッグ情報を含むELF 形式の入力ファイルを処理する際、スタックフレームのアンワインディングのデバッグ情報に関するDW_CFA_def_cfa およびDW_CFA_def_cfa_offset エントリが正しくレポートしていませんでした。
- [SDCOMP-59321] fromelf ユーティリティはSME F64F64 とSME I16I64 命令を誤ってDCI 命令として誤って逆アセンブルしていました。
- [SDCOMP-57456] fromelf ユーティリティはMOVI とMVNI 命令を誤って逆アセンブルしていました。
- [SDCOMP-57449] fromelf ユーティリティはSVE AND、BIC、EONおよびEOR 命令のイミディエイトバリアントを誤って逆アセンブルしていました。
ライブラリとシステムヘッダ
- [SDCOMP-60938] Arm C ライブラリ実装のlround()、lroundf()、llroundf() およびllroundf() 関数で、errno をEDOM に設定できない可能性がありました。
- [SDCOMP-60738] AArch32 状態且つハードウェア浮動小数点リンケージ用にビルドされたC++ のstd::to_chars() 関数のArm C++ ライブラリ実装のバリアントで、浮動小数点型の値について不正な結果を返していました。
- [SDCOMP-60700] Arm C ライブラリ実装のfwrite() 関数で、エラー発生時に正常に書き込まれたオブジェクトの数を返すのではなく、常にゼロがを返していました。
- [SDCOMP-60430] Arm C++ ライブラリは、8 バイト境界で整列されていないフォールバックアドレスにメモリを割り当てる可能性がありました。
- [SDCOMP-60260] Arm C ライブラリ実装のAArch64 状態用のfma() およびfmaf() 関数で、結果が正確にゼロに等しい場合にerrno をERANGE に誤って設定する可能性がありました。
- [SDCOMP-59437] Microlib で誤って以下の__fp16 変換関数が含まれていませんでした:
- __aeabi_d2h()
- __aeabi_f2h()
- __aeabi_h2f()
- L6218E: Undefined symbol <symbol> (referred from <object>)()
- [SDCOMP-53184] Arm C ライブラリ実装のfclose() 関数は、_sys_close() 関数がゼロ以外の値を返すと、クローズするストリームの関連付けの解除に失敗する可能性がありました。
- [SDCOMP-49748] Arm C++ ライブラリ実装のconst バージョンのstd::bitset<N> クラステンプレートoperator[]で、bool 型ではなくstd::bitset<N>::const_reference 型の値を誤って返していました。
Arm Compiler for Embedded 6.19 の既知の不具合
- [SDCOMP-61413] Link Time Optimization (LTO) 機能を有効にし-mbranch-protection=<protection> を使用してコンパイルする際、コンパイラは分岐保護を有効にしないコードを誤って生成します。
この問題の回避策は以下の通りです:
-
- -flto を使用したコンパイルと--lto を使用したリンクを行わない
- -Omax または-Omin を使用してコンパイルする場合、-fno-lto をコンパイル時に指定し、--no_lto を指定してリンクする
-