Arm Compiler for Embedded 6.19 のリリースノート
目次
-
紹介
-
Arm Compiler for Embedded 6.19 コンフィギュレーション
-
Arm Compiler for Embedded 6.19 でサポートされたこと
-
インストール方法とIDEへの統合
-
フィードバックとサポート
-
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 のドキュメントを参照してください。
ツールのコンフィギュレーションとビルド可能なアーキテクチャおよびプロセッサを確認するには、次の
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 以降に統合
-
スタンドアロン製品として使用
関連する手順については以下を参照してください:
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 |
-march=armv9.4-a
または
-march=armv8.9-a
オプションを使用してコンパイルすると、この機能はコンパイラによってデフォルトで有効化されます。
より詳細については以下を参照してください:
-
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_RPZ |
Reliability, 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_SYSREG128 |
128-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 サポートが行われました:
これらのアーキテクチャをターゲットとするには、次のオプションから選択してください:
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
エラーをワーニングにダウングレードするには
-Wno-error=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
エラーをワーニングにダウングレードするには
-Wno-error=implicit-function-declaration
オプションを使用してコンパイルしてください。
-
[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 |
軽減有効 |
その他すべてのターゲット |
軽減無効 |
デフォルトで軽減が無効化されている場合に有効化するには
-mfix-cortex-a57-aes-1742098
または
-mfix-cortex-a72-aes-1655431
オプションを使用してコンパイルします。
デフォルトで軽減が有効化されている場合に無効化するには
-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 アーキテクチャ
armasm
は以下のワーニングをレポートするようになりました:
-
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
armclang
統合アセンブラへの移行の詳細については、Migration and Compatibility Guide 内
Migrating from armasm to the armclang Integrated Assembler
の章を参照してください。
-
[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 ソースコードのコンパイルを行うには、以下のオプションのいずれかを使用してください:
これらのオプションの詳細については以下を参照してください:
-
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
これらのオプションの詳細についてはReference Guide 内の以下の章を参照してください:
-
--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
として定義
影響を受ける型また演算子を使用するArm Compiler for Embedded 6.18 以前でビルドされたC++ オブジェクトまたはライブラリは、影響を受ける型または演算子を使用する6.19 を使用してビルドされたC++ オブジェクトまたはライブラリに対する互換性は保証されません。
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() が使用されます
アプリケーションがtmpfile() やtmpnam() の失敗を示す機能を必要とする場合は、_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 プラットフォーム上で使用すると、コンパイラは誤って以下のエラーをレポートする可能性がありました。
-
[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 ビルド属性に関する情報が含まれます
[SDCOMP-50464] Link-Time Optimisation (LTO) を有効にしてリンクする際、リンカが以下のエラーを間違ってレポートする可能性がありました:
-
L6218E: Undefined symbol <symbol> (referred from <lto_intermediate_object>)
ここでの<symbol> はrun-time ABI 関数です
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
を指定してリンクする