Arm Compiler 6.15のリリースノート
目次
1. 紹介
これは、リリース時に提供されたリリースノートの最初のセットです。 リリースノートの 最新版 については、 https://developer.arm.com をご参照ください。Arm Compiler 6.15では次の機能が追加されました:
- 最近リリースされたプロセッサ:
- Cortex-A78、Cortex-A78AE、Cortex-X1、Neoverse N2およびNeoverse V1のサポート
- Cortex-R82のβサポート
- Armv8.7-A:
- アセンブリに対するαサポート
- アトミック64-byteデータのロードおよびストア組み込み関数のαサポート
- Armv8-R:
- AArch64状態のβサポート
- Armv8-M:
- カスタムデータパス拡張(CDE)のアセンブリに対するサポート
- カスタムデータパス拡張(CDE)のACLE組み込み関数に対するβサポート
- 仮想関数の削除と、LTO機能のフォーカスを絞ったサブセットの有効化により、コードサイズの最小化を特にターゲットとする最適化レベル。
Arm Compiler 6.15は以下のように使用されることを意図しています:
- 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.15は以下を含みます。
- armclang:LLVMとClangテクノロジをベースとしたコンパイラおよび統合アセンブラ
- armasm:armasm-syntaxアセンブリコード用のアセンブラ。新しいアセンブリファイルではarmclang統合アセンブラの使用を推奨
- armar:ELFオブジェクトファイル群をまとめるアーカイバ
- armlink:オブジェクトやライブラリをまとめ、実行可能形式を生成するリンカ
- fromlef:イメージ変換ユーティリティ兼逆アセンブラ
- Arm C++ libraries:LLVM libc++プロジェクトベースのライブラリ
- Arm C libraries:組込みシステム向けのランタイムサポートライブラリ
1.2 Arm Compiler 6.15 でサポートされたこと
Arm Compiler は、Arm Development Studio(Arm DS)やKeil Microcontroller Development Kit(MDK)などのArm開発スイートの一部として提供されています。お手持ちのツールのライセンスに従い、Armコンパイラ6.15は次のArmアーキテクチャとプロセッサのサポートを提供します:
アーキテクチャ | プロセッサ* |
将来のアーキテクチャ | - |
8.7-AまでのArmv8-A | Neoverse V1/N2/N1/E1 |
Cortex-X1/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 |
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 DS : https://developer.arm.com/tools-and-software/embedded/arm-development-studio
- Keil MDK : https://developer.arm.com/tools-and-software/embedded/keil-mdk
Arm Compiler 6.15のダウンロードおよび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.15が、ツールキット(例:Arm Development Studio)の一部として含まれている場合、ツールキットのインストーラがインストレーションプロセスを処理します。ツールキットのインストレーション方法を参照してください。その他のケースの場合、Arm Compiler 6.15をどのように使用するかに依存して適切なインストレーションの場所を選択する必要があります:
- Arm Development Studio 2018.0 以降へ統合
- Keil MDK 5.22 以降へ統合
- スタンドアロン製品として使用
コンフィギュレーションの手順については以下の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.15はKeil MDKインストレーションのARMサブディレクトリ以下にインストールする必要があります。たとえば、Keil MDKインストレーションがC:\Keil_v5の場合、C:\Keil_v5\ARM\ARMCompiler6.15へインストールすることをおすすめします。インストール後、
http://www.keil.com/support/man/docs/uv4/uv4_armcompilers.htm
のチュートリアルで示す方法に従って、MDKのプロジェクトへツールチェーンの統合が可能です。
Arm Compiler 6.15 32-bit Windowsバージョンのみが、Keil シングルユーザライセンスまたはKeil フローティングユーザライセンスと一緒に使用できます。
MDK-Armのライセンスを使用する場合、Arm Compiler 6.15は Windows環境のみサポートします。
2.3. スタンドアロン製品として使用
環境変数ARMLMD_LICENSE_FILEがライセンスファイルまたはライセンスサーバーを指していることを確認してください。2.4. Linuxへのインストール
Arm Compiler 6.15は、以下のサポート済み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
Arm Compiler 6.15 をインストールするには、install_x86_64.sh を実行( sourceではありません) し、画面の指示に従ってください。インストーラは、Arm Compiler 6.15 をお客様が指定したディレクトリに解凍します。
armclang バイナリは、お客様の指定したディレクトリ内にArm Compiler 6.15 の一部としてインストールされたlibstdc++のコピーへ動的にリンクされています。
2.5. Windowsへのインストール
Arm Compiler 6.15 は、以下のサポート済み64-bitプラットフォームでテストされています:- Windows Server 2012
- Windows Server 2016
- Windows 8.1
- Windows 10
Arm Compiler 6.15 は、2020年09月現在のWindows 10の最新の機能アップデートでテストされています。以降のアップデートでも問題なく動作することが期待されます。
Windows 64-bitホストプラットフォーム上でArm Compiler 6.15 をインストールするために、win-x86_64setup.exeを実行し、画面の指示に従ってください。
Windows 32-bitホストプラットフォーム上でArm Compiler 6.15 をインストールするために、 win-x86_32setup.exeを実行し、画面の指示に従ってください。
以前のバージョンのArm Compiler 6 がすでにインストールされており、アップグレードしたい場合は、以前のバージョンを一旦アンインストールしてから新しいバージョンのArm Compiler 6 をインストールいただくことを推奨します。
Arm Compiler 6.15 は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.15 インストールディレクトリを削除してください。Windowsでは、コントロールパネルのプログラムの追加と削除からArm Compiler 6.15 を選択し、アンインストールボタンを押下してください。
4. ドキュメンテーション
Arm Compiler 6.15 のドキュメントは以下が利用可能です。- 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.15 シリーズのリリース日付を示します:- 6.15 (2020年10月にリリースされました)
以下に、新しい機能と修正された不具合を含むそれぞれのリリースで変更された概要を示します。
特に指定がない限り、一つ前のリリースからの変更点を示します。
それぞれの項目別に分類され、ユニークな識別子SDCOMP-
もしArmへこのリリースノート内の特定の問題について連絡が必要な場合、適切な識別子を通知してください
Arm Compiler 6.15 での変更点
以下に直前のリリースであるArm Compiler 6.15からの変更点を示します。Arm Compiler 6.15 での一般的な変更
- [SDCOMP-56469] 新しい最適化レベル-Ominのサポートが追加されました。この最適化レベルは、以下とともにレベル-Ozからのすべての最適化を可能にすることで、コードサイズを最小化することを主なターゲットとしています:
- グローバルメモリアクセスの最適化を試みながら、未使用のコードとデータの削除を目的とするLink-Time Optimization (LTO)
- C++ ユーザにとって特に利点がある仮想関数の削除
- [SDCOMP-56351] Armv8-R AArch64 アーキテクチャのβサポートが行われました。Armv8-R AArch64 アーキテクチャをターゲットとするには以下のarmclangオプションを使用してください:
- --target=aarch64-arm-none-eabi -march=armv8-r
- [SDCOMP-56349] 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
- [SDCOMP-56242] Cortex-A78AE プロセッサのサポートが行われました。Cortex-A78AEをターゲットとするには以下のarmclangオプションから選択してください:
- AArch64状態では--target=aarch64-arm-none-eabi -mcpu=cortex-a78ae
- AArch32状態では--target=arm-arm-none-eabi -mcpu=cortex-a78ae
- [SDCOMP-56239] Neoverse-N2 プロセッサのサポートが行われました。Neoverse-N2をターゲットとするには以下のarmclangオプションから選択してください:
- AArch64状態では--target=aarch64-arm-none-eabi -mcpu=neoverse-n2
- AArch32状態では--target=arm-arm-none-eabi -mcpu=neoverse-n2
- [SDCOMP-56225] Cortex-R82 プロセッサのβサポートが行われました。Cortex-R82をターゲットとするには以下のarmclangオプションを使用してください:
- --target=aarch64-arm-none-eabi -mcpu=cortex-r82
- [SDCOMP-55973] 旧mathlib エラー処理モードはサポートされなくなりました。旧mathlib エラー処理モードを有効化する__use_rvct_matherrシンボルの参照を含むプログラムに対し、リンカは以下のエラーをレポートするようになりました。:
- Undefined symbol __use_rvct_matherr.
- [SDCOMP-55616] Cortex-X1 プロセッサのサポートが行われました。Cortex-X1 をターゲットとするには以下のarmclangオプションから選択してください:
- AArch64状態では--target=aarch64-arm-none-eabi -mcpu=cortex-x1
- AArch32状態では--target=arm-arm-none-eabi -mcpu=cortex-x1
- [SDCOMP-55615] Cortex-A78 プロセッサのサポートが行われました。Cortex-A78 をターゲットとするには以下のarmclangオプションから選択してください:
- AArch64状態では--target=aarch64-arm-none-eabi -mcpu=cortex-a78
- AArch32状態では--target=arm-arm-none-eabi -mcpu=cortex-a78
- [SDCOMP-55611] Armv8-M以降のMain拡張に対するオプションのカスタムデータパス拡張(CDE)のArm C Language Extensions (ACLE)組み込み関数についてβサポートが行われました。CDE組み込み関数を使用するには、arm_cde.hシステムヘッダをインクルードしてください。
- [SDCOMP-55610] Armv8-M以降のMain拡張に対するオプションのカスタムデータパス拡張(CDE)のアセンブリについて完全なサポートが行われました。CDEをターゲットとするには以下のオプションを選択してください:
armclang:- --target=arm-arm-none-eabi -march=armv8-m.main+cdecpN:Armv8-MターゲットのMain拡張に対するNは0-7の範囲
- --target=arm-arm-none-eabi -march=armv8.1-m.main+cdecpN:Armv8.1-MターゲットのMain拡張に対するNは0-7の範囲
fromelf:- --cpu=8-M.main --coprocN=value:Armv8-MターゲットのMain拡張に対するNは0-7の範囲、valueはcdeまたはCDEの値
- --cpu=8.1-M.main --coprocN=value:Armv8.1-MターゲットのMain拡張に対するNは0-7の範囲で、valueはcdeまたはCDEの値
- [SDCOMP-55601] Armv8.7-Aに対するオプションのアクセラレータサポート拡張に対するArm C Language Extensions (ACLE)組み込み関数のαサポートが行われました。アクセラレータサポート拡張を含むArmv8.7-Aをターゲットとするには以下のオプションを使用してください:
- --target=aarch64-arm-none-eabi -march=armv8.7-a+ls64
- [SDCOMP-55593] Neoverse-V1 プロセッサのサポートが行われました。Neoverse-V1 をターゲットとするには以下のarmclangオプションから選択してください:
- AArch64状態では--target=aarch64-arm-none-eabi -mcpu=neoverse-v1
- AArch32状態では--target=arm-arm-none-eabi -mcpu=neoverse-v1
Arm Compiler 6.15 での機能改善
コンパイラと統合されたアセンブラ(armclang)
- [SDCOMP-50949] 以前、main() 関数に引数がない場合、-O0 を指定してコンパイルすると、コンパイラはシンボル__ARM_use_no_argv を定義しませんでした。これによって、リンク時にプログラムにユーザ定義のシンボル__ARM_use_no_argvが含まれていなかった場合、リンカは次のエラーを報告することがありました:
- L6915E: Library reports error: __use_no_semihosting was requested, but _sys_command_string was referenced.
Linker (armlink)
- [SDCOMP-56434] --dangling-debug-address=address オプションをサポートしました。このオプションを使用するとアドレス0x0 に有効なコードがあるターゲットのデバッグ操作を向上させることができます。
より詳細についてはReference Guideの--dangling-debug-address=address の章を参照してください。
Arm Compiler 6.15 で修正された不具合
コンパイラと統合されたアセンブラ(armclang)
- [SDCOMP-56337] C++ ソース言語モードでコンパイルする場合、コンパイラがC リンケージを使用した明示的な特殊化のエラーを誤ってレポートしないことがありました。コンパイラは以下のエラーをレポートするようになりました:
- templates must have C++ linkage.
- [SDCOMP-56252] コンパイラは初期化されていない、またはゼロで初期化されたstruct 型のconst volatile 変数にアクセスするのに誤ったコードを生成する可能性がありました。
- [SDCOMP-56233] Windows プラットフォームで32 ビットコンパイラバイナリで-Omax を指定してコンパイルすると、コンパイラが応答しなくなる可能性がありました。
- [SDCOMP-56168] C++ ソース言語モードでコンパイルし、コードにnew の式が含まれている場合、コンパイラが次のエラーを誤ってレポートすることがありました:
- clang frontend command failed due to signal.
- [SDCOMP-56157] インラインアセンブラと統合アセンブラで、Armv8.3-A以降のLoad-acquire RCpc (Release Consistent processor consistent) 命令のサポートを有効にする、extension_name としてrcpcを指定するディレクティブ.arch_extension に対して誤って次のエラーがレポートされていました。
- unknown architectural extension: rcpc.
- [SDCOMP-55969] Branch Target Identificationを使用した分岐保護を有効にする-mbranch-protection オプションを指定してコンパイルすると、誤ってBTI 命令を含まないコードを生成する可能性がありました。
- [SDCOMP-55912] コンパイラは、Arm C 言語拡張(ACLE) qadd() コンパイラ組み込み関数に対して誤ったコードを生成する可能性がありました。
- [SDCOMP-55798] T32 状態用にコンパイルした場合、コンパイラはスタックに配置されている64 ビットのvolatile 変数へのアクセスについて誤ったコードを生成する可能性がありました。
- [SDCOMP-55728] -moutline または-mno-outline なしの-Oz を指定し、C++ 例外を有効にしてAArch64 状態用にコンパイルすると、不正な例外アンワインディング情報が生成されることがありました。
- [SDCOMP-55679] -Omax を指定してコンパイルした場合、コードにループが含まれていると、次のエラーが誤って報告されることがありました:
- clang frontend command failed due to signal.
- [SDCOMP-55467] C++ ソース言語モードでコンパイルする場合、constexpr 関数内のassert マクロに対して次のエラーを誤って報告することがありました:
- constexpr function never produces a constant expression.
- [SDCOMP-55277] -mno-unaligned-access を指定してAArch64 状態用にコンパイルすると、アンアラインなデータアクセスを許可するビルド属性を誤って出力オブジェクトに生成する可能性がありました。
続いて、--no_unaligned_access の指定無しでリンクするとアンアラインなデータアクセスを行うライブラリ関数の実装をリンカが誤って選択する可能性がありました。 - [SDCOMP-55261] -O3 -Ofast、または-Omax を指定してコンパイルすると、2 つの同一の呼び出しに対して、内容は異なるが有効な命令シーケンスを誤って生成する可能性がありました。
- [SDCOMP-55241] -O0 以外の任意の最適化レベルでM-profile Vector Extension (MVE) を使用してArmv8.1-M ターゲット用にコンパイルした場合、vctp*() 組み込み関数の呼び出しを含むループに対して不正なコードを生成する可能性がありました。
- [SDCOMP-55214] AArch64 状態用にコンパイルした場合、ローカル配列要素へのアクセスを含む関数F に対して誤ったコードを生成する可能性がありました。 このような誤ったコードでは、Fの実行を通して予約されなければならないスタックメモリMを早期に解放してしまっていました。
- [SDCOMP-55172] コンパイラは、複数のセクションタイプに同じセクション名が指定されている場合に、特定のセクションタイプの競合に関するエラーを誤ってレポートしていませんでした。コンパイラは以下のうちいずれかのエラーをレポートするようになりました。
- this causes a section type conflict with a prior #pragma section.
- this causes a section type conflict with '< function_or_variable >'.
- '< function_or_variable >' causes a section type conflict with a prior #pragma section.
- [SDCOMP-55120] Security Extension を使用してArmv8-M ターゲット用にコンパイルする場合に、-mcmse を使用すると、関数ポインタの配列を使用して行われる非セキュア関数呼び出しに対して不正なコードを生成する可能性がありました。
- [SDCOMP-55110] __attribute__((cmse_nonsecure_call)) でアノテーションが付けられた無効な関数宣言の有効なエラーを誤ってレポートしないことがありました。
代わりに、次の無効なエラーまたは警告のいずれかを誤ってレポートしていました:- clang frontend command failed due to signal.
- 'cmse_nonsecure_call' attribute only applies to ExpectedFunctionType.
- functions may not be declared with 'cmse_nonsecure_call' attribute.
- [SDCOMP-55092] __attribute__((cmse_nonsecure_call)) でアノテーションが付けられた関数ポインタ宣言を含むコードをコンパイルすると、以下の警告を誤ってレポートすることがありました:
- 'cmse_nonsecure_call' attribute only applies to ExpectedFunctionType.
- [SDCOMP-55032] AArch64 状態に対し-mno-unaligned-access でコンパイルすると、Neon 命令を使用してアンアラインドアクセスを誤って実行するコードを生成する可能性がありました。
- [SDCOMP-54981] アセンブラディレクティブ、命令、再配置指定子、またはシンボル修飾子の不正な組合せをアセンブルすると、インラインアセンブラと統合アセンブラは誤ってエラーをレポートしなかったり、次のエラーを報告したりすることがありました:
- clang frontend command failed due to signal.
- invalid fixup for < state > < instruction > instruction.
- invalid fixup for < relocation >.
- [SDCOMP-54980] AArch32 状態用にコンパイルする場合、RdHi オペランドとRdLo オペランドの両方に同じレジスタを指定するUNPREDICTABLE なlong 乗算、long 乗算-加算、またはlong 乗算-減算命令を誤って生成する可能性がありました。
- [SDCOMP-54850] Windows上でコンパイルすると、次のエラーを誤って報告することがありました:
- error in backend: Could not acquire a cryptographic context.
- [SDCOMP-54763] -O0 以外の最適化レベルでT32 状態用にコンパイルする場合、ベースレジスタにUNKNOWN な値を格納するSTM 命令を誤って生成する可能性がありました。
- [SDCOMP-54742] インラインアセンブラおよび統合アセンブラで、UNPREDICTABLE LDRAA またはLDRAB 命令のエラーを誤ってレポートしていませんでした。この問題は修正されインラインアセンブラおよび統合アセンブラは以下のエラーをレポートするようになりました:
- unpredictable LDRA instruction, writeback base is also a destination.
- [SDCOMP-54602] AArch64 状態用にコンパイルする場合、別の型にキャストする必要がある変数を含む整数除算演算に対して不正なコードを生成する可能性がありました。
- [SDCOMP-54579] -mcmse を指定してコンパイルした場合、属性__attribute__((cmse_nonsecure_entry)) と__attribute__((value_in_regs)) の両方でアノテーションが付けられた関数から返されるstruct 型の変数の未使用引数レジスタをクリアできない場合がありました。
- [SDCOMP-54513] M-profile Vector Extension コンパイラ組み込み関数の多重呼び出しは、コンパイル時間が遅くなったり、メモリ使用率が高くなる可能性がありました。
- [SDCOMP-54482] -mexecute-only を指定した場合に、-fnoexceptions を指定せずにArmv6-M ターゲットまたはArmv8-M ターゲットをメイン拡張なしでコンパイルすると、関数の不正なC++ 例外アンワインディング情報を生成する可能性がありました。
- [SDCOMP-54471] ハードウェア浮動小数点ユニットを使用するbig-endianターゲットに対して-mexecute-only を指定してコンパイルする場合、倍精度浮動小数点リテラルに対して誤ったコードを生成する可能性がありました。
- [SDCOMP-54391] -O0 の最適化レベルで、-fstack-protector-strong を指定してコンパイルすると、誤って配列型ではないローカル変数のアドレスを取る関数のスタック保護を有効にできなくなる可能性がありました。
- [SDCOMP-54249] コンパイラは*_lane_*() または*_laneq_*() Neon 組み込み関数 I について、レーン選択引数として I の範囲外のコンパイル時定数を伴って呼び出されるエラーのレポートに失敗することがありました。この問題は修正され、コンパイラは以下のうちいずれかのエラーをレポートするようになりました:
- argument should be a value from < minimum > to < maximum >.
- argument value < value > is outside the valid range [< minimum >, < maximum >].
- [SDCOMP-54207] AArch64 状態用にアセンブルするときに、インラインアセンブラおよび統合アセンブラは、アクセスするシステムレジスタとしてICC_SEIEN_EL1 またはICH_VSEIR_EL2 を指定するMRS 命令またはMSR 命令に関するエラーを誤ってレポートしていませんでした。この問題は修正され、インラインアセンブラおよび統合アセンブラで以下のうちいずれかのエラーをレポートするようになりました:
- expected readable system register.
- expected writable system register or pstate.
- [SDCOMP-54053] コンパイラは、__attribute__((naked)) でアノテーションが付けられ、64 バイトを超えるパラメータを持つ関数のプロローグシーケンスを誤って生成する可能性がありました。
- [SDCOMP-54033] C++ ソース言語モードで-Oz オプションを使用してコンパイルすると、delete 演算子のユーザー定義の実装を使用して破棄された変数に対するNULL ポインタチェックを誤って無視するコードが生成される可能性がありました。
- [SDCOMP-54011] インラインアセンブラは、予約済みレジスタを使用するローカルの名前付きレジスタ変数のエラーを誤ってレポートしない可能性がありました。この問題は修正され、インラインアセンブラは次のエラーを報告するようになりました:
- write to reserved register '< register >'.
- AArch64状態用にコンパイルする場合、FP, SP, W19, W29, WSP, X19, または X29
- AArch32状態用にコンパイルする場合、R6, R13, SP, R15, または PC
- T32状態用にコンパイルする場合、R7
- AArch32状態用且つ-frwpi または-frwpi-lowering オプションを使用してコンパイルする場合、R9
- A32状態用にコンパイルする場合、R11
- [SDCOMP-53866] AArch32 状態用にアセンブルする場合、インラインアセンブラおよび統合アセンブラは誤って、RdHi オペランドとRdLo オペランドの両方に同じレジスタを指定するUNPREDICTABLE なlong 乗算、long 乗算-加算、またはlong 乗算-減算命令を誤って生成する可能性がありました。この問題は修正され、インラインアセンブラと統合アセンブラが次のエラーを報告するようになりました:
- unpredictable instruction, RdHi and RdLo must be different.
- [SDCOMP-53837] T32 状態用にコンパイルする場合、16-bitリテラル値に対して誤ったコードを生成する可能性がありました。
- [SDCOMP-53426] -O0 以外の最適化レベルでコンパイルすると、setjmp() の呼び出しを含むプログラムに対して、誤ったコードを生成する可能性がありました。
- [SDCOMP-52390] big-endian ターゲット且つAArch32 状態用にコンパイルする場合、レジスタの最上位16 ビットを使用して半精度浮動小数点型の関数パラメータまたは戻り値を誤って渡すコードを生成する可能性がありました。このようなコードは、Procedure Call Standard for the Arm ArchitectureのParameter Passing のセクションに準拠していません。
- [SDCOMP-50559] AArch32 状態でAdvanced SIMD Extension を含むbig-endian ターゲットにおいて-O0 を除く任意の最適化レベルでコンパイルすると、不正なVMOV 命令が生成される可能性がありました。
- [SDCOMP-50490] big-endian をターゲット用のC++ ソース言語モードでコンパイルする場合、ビットフィールドへのアクセス用に誤ったコードを生成する可能性がありました。この場合、ビットフィールドのサイズはそのタイプのサイズよりも大きくなります。
- [SDCOMP-49687] C++ ソース言語モードでコンパイルする場合、コンパイラがC リンケージを使用したクラステンプレートの部分的な特殊化のエラーを誤ってレポートしないことがありました。この問題は修正され、コンパイラは次のエラーを報告するようになりました:
- templates must have C++ linkage.
- [SDCOMP-49653] コンパイラは、名前のないクラス、構造体、または共用体におけるstaticなデータメンバのエラーを誤ってレポートしないことがありました。この問題は修正され、コンパイラは、次のいずれかのエラーを報告するようになりました:
- static data member '< member >' not allowed in anonymous class.
- static data member '< member >' not allowed in anonymous struct.
- static data member '< member >' not allowed in anonymous union.
- [SDCOMP-48341] Main Extensionを伴わないArmv6-M ターゲットまたはArmv8-M ターゲット用にコンパイルする場合、-fno-ldm-stm を使用すると、LDM またはSTM 命令が誤って生成される可能性がありました。
リンカ(armlink)
- [SDCOMP-55718] --lto オプションを使用してリンクする場合、プログラムに同じ名前でバインドが異なるシンボルが含まれている場合、誤って次のエラーがレポートされることがありました:
- L6137E: Symbol < symbol > was not preserved by the LTO codegen but is needed by the image.
- [SDCOMP-55581] プリプロセスが必要なスキャッタファイルを使用してリンクする場合、ホストプラットフォームのテンポラリディレクトリの環境変数が空白文字を含むパスに設定されていると、誤って次のエラーがレポートされることがありました:
- L6636E: Pre-processor step failed for '< filename >'.
- [SDCOMP-55377] --no_unaligned_access オプションなしでリンクした場合に、-mno-unaligned-access オプションを使用しLTOを有効にしてコンパイルされた入力オブジェクトが含まれると、誤ってアンアラインドデータアクセスを許可するイメージを生成していました。
- [SDCOMP-54894] --no_merge_litpools オプションなしでリンクした場合に、PROTECTED が指定されたロード領域A と別のロード領域B が含まれるスキャッタファイルを使用すると、A のリテラルプールとB のリテラルプールを誤ってマージする可能性がありました。
ライブラリとシステムヘッダ
- [SDCOMP-55996] Arm C ライブラリヘッダファイルは__attribute__((name)) においてname が以下のものを誤って使用していました:
- always_inline
- const
- noreturn
- nothrow
- value_in_regs
- __always_inline__
- __const__
- __noreturn__
- __nothrow__
- __value_in_regs__
- [SDCOMP-55470] heapvalid() 関数のArm C ライブラリ実装で、無効なヒープの検出に失敗する可能性がありました。また、無効なヒープの場合はゼロを返すことができませんでした。
- [SDCOMP-55343] Arm C ライブラリで、誤ってpowf() 関数の特定のバリアントの実装を含んでいませんでした。これによって以下のエラーが返されることがありました:
- L6218E: Undefined symbol < symbol >.
- [SDCOMP-55051] posix_memalign() 関数のArm C ライブラリ実装で要求されたアロケーションサイズがAArch32 状態の場合は0xfffffff4 、AArch64 状態の場合は0xffffffffffffffe8 よりそれぞれ大きな場合、ENOMEM の代わりに誤ってゼロが返されていました。
- [SDCOMP-50063] C++ 正規表現ライブラリのArm 実装で、match_prev_avail フラグも指定されている場合にmatch_not_bol またはmatch_not_bow フラグを無視できていませんでした。
Fromelf
- [SDCOMP-55515] --cpu=name と--disassemble オプションを使用してELF ファイルを逆アセンブルする場合、name にArmv8.1-M ターゲットが指定されていると、Armv8.1-M 命令を誤った逆アセンブルにすることがありました。
Arm Compiler 6.15 の既知の不具合
- [SDCOMP-49441] Arm Compiler に付属のC++ ライブラリとリンクする場合、リンカオプションで--cpu=name のname にArmv8-R ターゲットを指定し、このとき入力オブジェクトがArmv8-R ターゲットのC++ ソース言語モードでコンパイルされていると、リンカは次のエラーを誤ってレポートすることがあります:
- L6366E: < object > attributes are not compatible with the provided attributes.
- [SDCOMP-54724] 特定の環境下で、-ffixed-r6 オプションを使用したコンパイル時、コンパイラはスタックのアライメント要件を満たさないコードを生成する可能性があります。
- [SDCOMP-50470] コンパイラは_Float16 データ型の不正なデフォルト引数の拡張を含む関数呼び出しのエラーのレポートに失敗します。