Arm Compiler 6.13のリリースノート
目次
1. 紹介
Arm Compiler 6.13では次の機能が追加されました:
- Cortex-A65、Cortex-A77、Star processorsのサポート
- Aアーキテクチャプロファイルに対するFuture Archtecture Techonologiesのアーリーサポート:
- Embedded Trace拡張(ETE)向けアセンブリ
- Scalable Vector拡張 2(SVE2)向けアセンブリ
- Trace Buffer拡張(TRBE)向けアセンブリ
- Transactional Memory拡張(TME)向けアセンブリと組み込み関数
- Armv8.6-A:
- アセンブリのアルファサポート
- BFloat16拡張向け組み込み関数のアルファサポート
- Matrix Multiply拡張向け組み込み関数のアルファサポート
- Armv8.5-A:
- メモリタギング拡張向け組み込み関数のサポート
- Armv8.1-M:
- アセンブリと組み込み関数のサポート
- オプションのM-profile Vector拡張(MVE)向け自動ベクタライズ機能のベータサポート
Arm Compiler 6.13は、以下のように使用されることを意図しています:
- 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.13は以下を含みます。
- armclang:LLVMとClangテクノロジをベースとしたコンパイラおよび統合アセンブラ
- armasm:armasm-syntaxアセンブリコード用のアセンブラ。新しいアセンブリファイルではarmclang統合アセンブラの使用を推奨
- armar:ELFオブジェクトファイル群をまとめるアーカイバ
- armlink:オブジェクトやライブラリをまとめ、実行可能形式を生成するリンカ
- fromlef:イメージ変換ユーティリティ兼逆アセンブラ
- Arm C++ libraries:LLVM libc++プロジェクトベースのライブラリ
- Arm C libraries:組込みシステム向けのランタイムサポートライブラリ
1.2 Arm Compiler 6.13 でサポートされたこと
次の表は、Arm Compiler 6.13のサポートするArm アーキテクチャとプロセッサのターゲットリストです。正確な対応状況はお使いのツールキットとライセンスに依存します。表はArm Compiler 6.13の時点のものであり、将来的に変更となる可能性があります。より詳細についてはツールの購入元にご確認ください。
アーキテクチャおよびプロセッサ | サポートレベル | ライセンス | ||||||||
Keil MDK | Arm Development Studio | |||||||||
Lite | Essential | Plus | Professional | Bronze | Silver | Gold | Platinum | |||
将来のアーキテクチャ | - | サポート予定 | - | - | - | - | - | - | - | Yes |
Armv8.6-A | - | サポート予定 | - | - | - | - | - | - | - | Yes |
8.5-AまでのArmv8-A | Neoverse N1/E1 | サポート済 | - | - | - | - | - | - | - | Yes |
Cortex-A77/76AE/76/65AE/65 | サポート済 | - | - | - | - | - | - | - | Yes | |
Cortex-A75/73/72/57/55/53/35/32 | サポート済 | - | - | - | - | - | - | Yes | Yes | |
Armv7-A | Cortex-A17/15/12/9/8/7/5 | サポート済 | - | - | - | Yes | - | Yes | Yes | Yes |
Armv8-R | Cortex-R52 | サポート済 | - | - | - | - | - | - | Yes | Yes |
Armv7-R | Cortex-R8/7/5 | サポート済 | - | - | - | - | - | Yes | Yes | Yes |
Cortex-R4F/4 | サポート済 | - | - | Yes | Yes | - | Yes | Yes | Yes | |
Armv8.1-M | - | サポート済 | - | - | - | - | - | - | - | Yes |
Armv8-M | Star | サポート済 | - | - | - | - | - | - | - | Yes |
Cortex-M35P/33/23 | サポート済 | - | 非セキュアのみ | Yes | Yes | Yes | Yes | Yes | Yes | |
Armv7-M | SC300 | サポート済 | - | - | Yes | Yes | Yes | Yes | Yes | Yes |
Cortex-M7/4/3 | サポート済 | 32 Kbyte コード制限 | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |
Armv6-M | SC000 | サポート済 | - | - | Yes | Yes | Yes | Yes | Yes | Yes |
Cortex-M1/0/0+ | サポート済 | 32 Kbyte コード制限 | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |
Armv6-M 以前のアーキテクチャ | 非サポート | - | - | - | - | - | - | - | - | |
Arm以外のアーキテクチャ | 非サポート | - | - | - | - | - | - | - | - |
2. インストール方法
Arm Compiler 6.13が、ツールキット(例:Arm Development Studio)の一部として含まれている場合、ツールキットのインストーラがインストレーションプロセスを処理します。ツールキットのインストレーション方法を参照してください。
その他のケースの場合、Arm Compiler 6.13をどのように使用するかに依存して適切なインストレーションの場所を選択する必要があります:
- Arm Development Studio 2018.0 以降へ統合
- Keil MDK 5.22 以降へ統合
- スタンドアロン製品として使用
Keil MDKを使用していない場合は、Arm Compiler 6.13はデフォルトのインストレーションディレクトリを含む、その他任意の場所にインストールすることができます。ただし、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.13 は、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.13はKeil MDKインストレーションのARMサブディレクトリ以下にインストールする必要があります。たとえば、Keil MDKインストレーションがC:\Keil_v5\の場合、C:\Keil_v5\ARM\ARMCompiler6.13へインストールすることをおすすめします。
インストール後、
http://www.keil.com/support/man/docs/uv4/uv4_armcompilers.htm
のチュートリアルで示す方法に従って、MDKのプロジェクトへツールチェーンの統合が可能です。
Arm Compiler 6.13 32-bit Windowsバージョンのみが、Keil シングルユーザライセンスまたはKeil フローティングユーザライセンスと一緒に使用できます。
2.3. スタンドアロン製品として使用
環境変数ARMLMD_LICENSE_FILEがライセンスファイルまたはライセンスサーバーを指していることを確認してください。
2.4. Linuxへのインストール
Arm Compiler 6.13は、以下のサポート済みプラットフォームでテストされています:
- Red Hat Enterprise Linux 6 Workstation, 64-bit only.
- Red Hat Enterprise Linux 7 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.13 は、古いプラットフォームでは動作しません。
Arm Compiler 6.13 をインストールするには、install_x86_64.sh を実行( sourceではありません) し、画面の指示に従ってください。インストーラは、Arm Compiler 6.13 をお客様が指定したディレクトリに解凍します。
armclang バイナリは、お客様の指定したディレクトリ内にArm Compiler 6.13 の一部としてインストールされたlibstdc++のコピーへ動的にリンクされています。
2.5. Windowsへのインストール
Arm Compiler 6.13 は、以下のサポートされるプラットフォームでテストされています:
- Windows Server 2012, 64-bit only.
- Windows 7 Enterprise SP1.
- Windows 7 Professional SP1.
- Windows 8.1 Enterprise, 64-bit only.
- Windows 8.1 Professional, 64-bit only.
- Windows 10 Enterprise, 64-bit only.
- Windows 10 Professional, 64-bit only.
Arm Compiler 6.13 は、古いプラットフォームでは動作しません。
Arm Compiler 6.13は、2019年10月現在のWindows 10の最新の機能アップデートでテストされています。以降のアップデートでも問題なく動作することが期待されます。
Windows 64-bitホストプラットフォーム上でArm Compiler 6.13をインストールするために、win-x86_64\setup.exeを実行し、画面の指示に従ってください。
Windows 32-bitホストプラットフォーム上でArm Compiler 6.13をインストールするために、 win-x86_32\setup.exeを実行し、画面の指示に従ってください。
以前のバージョンのArm Compiler 6 がすでにインストールされており、アップグレードしたい場合は、以前のバージョンを一旦アンインストールしてから新しいバージョンのArm Compiler 6 をインストールいただくことを推奨します。
Arm Compiler 6.13は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.13インストールディレクトリを削除してください。
Windowsでは、コントロールパネルのプログラムの追加と削除からArm Compiler 6.13を選択し、アンインストールボタンを押下してください。
4. ドキュメンテーション
Arm Compiler 6.13 の以下ドキュメントが利用可能です。
- User Guide
- Reference Guide
- Arm C and C++ Libraries and Floating-Point Support User Guide
- Migration and Compatibility Guide
- Errors and Warnings Reference Guide
本リリース以降、Reference Guideが拡張され、すべてのArm Compilerツールのリファレンス情報が組み込まれました。
これには以前のリリースでは個別に提供されていたUser Gudeのマニュアル内の情報も含みます。
2018年1月, Arm社は、脆弱性 Variant 1: bounds check bypass (CVE-2017-5753)に関する情報を公開しました。
https://developer.arm.com/support/security-update/compiler-support-for-mitigations
を参照し、 このArm CompilerリリースのMigration pathの推奨事項を使用して、この脆弱性を軽減してください。この軽減のAPIは変更される可能性があることに注意してください。
5. フィードバックとサポート
お客様からのフィードバックは我々にとって重要です。
製品のあらゆる局面において、欠陥報告と改善に関する提案を歓迎します。フィードバックあるいはサポートについて、お客様の製品の購入元あるいは、
https://support.developer.arm.com
へご連絡ください。
必要に応じて、ツールからの--vsnの出力、問題を再現するのに必要なソースコードおよびその他のファイルとコマンドラインを提供してください。
当社へのお問い合わせは、こちら。
6. リリース履歴と変更
以下に、Arm Compiler 6.13 シリーズのリリース日付を示します:
- 6.13 (2019年10月にリリースされました)
以下に、新しい機能と修正された不具合を含むそれぞれのリリースで変更された概要を示します。
特に指定がない限り、一つ前のリリースからの変更点を示します。
それぞれの項目別に分類され、ユニークな識別子SDCOMP-<NNNNN>を伴います。
もしARMへこのリリースノート内の特定の問題について連絡が必要な場合、適切な識別子を通知してください
Arm Compiler 6.13での変更点
以下に直前のリリースであるArm Compiler 6.12からの変更点を示します。
Arm Compiler 6.13での一般的な変更
- [SDCOMP-54460] Armv8.1-Mでのオプション機能、M-profile Vector拡張(MVE)向け自動ベクタライズ機能のベータサポートを行いました。
- [SDCOMP-54459] Armv8.6-Aの機能、Matrix Multiply拡張向け組み込み関数のアルファサポートを行いました。Matrix Multiply拡張をターゲットとするには以下のarmclangオプションをの個所を2以上にして選択してください:
-
- AArch64状態で8-bit整数型のmatrix multiplication命令を有効にするには、--target=aarch64-arm-none-eabi -march=armv8.-a+i8mm を選択
- AArch64状態で32-bit単精度浮動小数点型のmatrix multiplication命令を有効にするには、--target=aarch64-arm-none-eabi -march=armv8.-a+f32mmを選択
- AArch64状態で64-bit倍精度浮動小数点型のmatrix multiplication命令を有効にするには、--target=aarch64-arm-none-eabi -march=armv8.-a+f64mmを選択
- AArch32状態で8-bit整数型のmatrix multiplication命令を有効にするには、--target=arm-arm-none-eabi -march=armv8.-a+i8mmを選択
-
- [SDCOMP-54458] Aアーキテクチャプロファイルに対するFuture Archtecture Techonologiesの1つであるTrace Buffer拡張(TRBE)向けアセンブリのアーリーサポートを行いました。TRBE をターゲットとするには以下のarmclangオプションを選択してください:
-
- --target=aarch64-arm-none-eabi -march=armv8-a
-
- [SDCOMP-54457] Aアーキテクチャプロファイルに対するFuture Archtecture Techonologiesの1つであるEmbedded Trace拡張(ETE)向けアセンブリのアーリーサポートを行いました。TRBE をターゲットとするには以下のarmclangオプションを選択してください:
-
- --target=aarch64-arm-none-eabi -march=armv8-a
-
- [SDCOMP-54456] Aアーキテクチャプロファイルに対するFuture Archtecture Techonologiesの1つであるTransactional Memory拡張(EME)向けアセンブリのアーリーサポートを行いました。TME をターゲットとするには以下のarmclangオプションを選択してください:
-
- --target=aarch64-arm-none-eabi -march=armv8-a+tme
-
- [SDCOMP-54455] Armv8.6-Aアーキテクチャ向けアセンブリのアルファサポートを行いました。Arm v8.6-Aをターゲットとするには以下のarmclangオプションから選択してください:
-
- AArch64状態:--target=aarch64-arm-none-eabi -march=armv8.6-a
- AArch32状態:--target=arm-arm-none-eabi -march=armv8.6-a
-
- [SDCOMP-54454] Armv8.6-AアーキテクチャBFloat16拡張向け組み込み関数のアルファサポートを行いました。BFloat16拡張をターゲットとするには以下のarmclangオプションをの個所を2以上にして選択してください:
-
- AArch64状態:--target=aarch64-arm-none-eabi -march=armv8.-a+bf16
- AArch32状態:--target=arm-arm-none-eabi -march=armv8.-a+bf16
-
- [SDCOMP-53664] Star processorのサポートを行いました。Starをターゲットとするには以下のarmclangオプションから選択してください:
-
- DSPおよびSPあり:--target=arm-arm-none-eabi -mcpu=star
- DSPなしSPあり:--target=arm-arm-none-eabi -mcpu=star+nodsp
- DSPありSPなし:--target=arm-arm-none-eabi -mcpu=star -mfloat-abi=soft
- DSPおよびSPなし:--target=arm-arm-none-eabi -mcpu=star+nodsp -mfloat-abi=soft
-
- [SDCOMP-53663] Cortex-A65 processorのサポートを行いました。Cortex-A65をターゲットとするには以下のarmclangオプションを選択してください:
-
- --target=aarch64-arm-none-eabi -mcpu=cortex-a65
-
- [SDCOMP-53662] Cortex-A77 processorのサポートを行いました。Cortex-A77をターゲットとするには以下のarmclangオプションから選択してください:
-
- AArch64状態:--target=aarch64-arm-none-eabi -mcpu=cortex-a77
- AArch32状態:--target=arm-arm-none-eabi -mcpu=cortex-a77
-
- [SDCOMP-53600] Aアーキテクチャプロファイルに対するFuture Archtecture Techonologiesの1つであるScalar Vector拡張 2(SVE2)向けアセンブリのアーリーサポートを行いました。SVE2をターゲットとするには以下のarmclangオプションから選択してください:
-
- --target=aarch64-arm-none-eabi -march=armv8-a+sve2
- --target=aarch64-arm-none-eabi -march=armv8-a+sve2-aes
- --target=aarch64-arm-none-eabi -march=armv8-a+sve2-bitperm
- --target=aarch64-arm-none-eabi -march=armv8-a+sve2-sha3
- --target=aarch64-arm-none-eabi -march=armv8-a+sve2-sm4
-
- [SDCOMP-53277] SysVダイナミックリンクモデルのサポートを行いました。このモデルを有効にするには以下のオプションを選択してください:
-
- armclang:-fsysvオプションがSysVリンクモデルに適したコードを生成
- armlink:-fsysvオプションがSystem V (SysV)フォーマットのELF実行可能ファイルを生成
-
- [SDCOMP-53102] Armv8.5-Aでのオプション機能、メモリタギング拡張向けArm C Language Extensions (ACLE)組み込み関数のサポートを行いました。
- [SDCOMP-52927] Armv8.5-Aでのオプション機能、メモリタギング拡張に含まれるメモリタギングスタック保護機能のサポートを行いました。以下のオプションを指定することでメモリタギングスタック保護機能が使用できます:
- armclang:-fsanitize=memtagオプションがスタック上のメモリ配置を保護するためのメモリタギングコードを生成
- armlink:--library_security=protectionオプションが分岐保護およびメモリタギングスタック保護のための保護ライブラリの自動選択をオーバーライド
- [SDCOMP-51237] C++ Thread Porting API中のtimespec構造体はnamespace violationを避けるために__ARM_TPL_timespec_tに名前が変わりました。加えて、この構造体内のメンバtv_nsecの型がunsigned longからlongに変わりました。
C++ Thread Porting APIの詳細については、Arm C and C++ Libraries and Floating-Point Support User Guideのドキュメント内、Multithreaded support in Arm C++ librariesの[ALPHA]セクションを参照してください。 - [SDCOMP-49562] オプション機能M-profile Vector Extension (MVE)を含むArmv8.1-Mアーキテクチャ向けアセンブリおよび組み込み関数のサポートを行いました。Armv8.1-Mをターゲットとするには以下のarmclangオプションから選択してください:
- MVEなし:--target=arm-arm-none-eabi -march=armv8.1-m.main
- 整数型演算のMVEを有効化:--target=arm-arm-none-eabi -march=armv8.1-m.main+mve
- 整数型および単精度浮動小数点演算のMVEを有効化:--target=arm-arm-none-eabi -march=armv8.1-m.main+mve.fp
- 整数型および単精度、倍精度浮動小数点演算のMVEを有効化:--target=arm-arm-none-eabi -march=armv8.1-m.main+mve.fp+fp.dp
- これらのオプションの詳細については、Reference Guide内-fsysv、-fno-sysvおよび--sysvの章を参照してください。
Arm Compiler 6.13での拡張
コンパイラと統合アセンブラ(armclang)
- [SDCOMP-51844] AArch64状態用にコンパイルする際のsmallおよびtinyコードモデルタイプをサポートしました。これらのメモリモデル用にコンパイルするには以下のarmclangオプションから選択してください:
- -mcmodel=smallオプションでsmallコードモデルのコードを生成します。プログラムと静的に定義されたシンボルは相互に4GB以内に存在しなければなりません。これがデフォルトのコードモデルです。
- -mcmodel=tinyオプションでtinyコードモデルのコードを生成します。プログラムと静的に定義されたシンボルは相互に1MB以内に存在しなければなりません。
AArch64状態用にコンパイルする際のlargeコードモデルのアルファサポートが行われました。このメモリモデル用にコンパイルするには以下のarmclangオプションを選択してください:- -mcmodel=largeオプションでlargeコードモデルのコードを生成します。コンパイラはセクションのアドレスとサイズを考慮しません。
これらのオプションのより詳細についてはReference Guide内-mcmodel の章を参照してください。
Arm Compiler 6.13で修正された不具合
コンパイラと統合化アセンブラ(armclang)
- [SDCOMP-54132] 特定の環境下で、-fstack-protector、-fstack-protector-allあるいは-fstack-protector-strongを指定してのコンパイル時、バッファオーバーフローに対する保護を誤って失敗するコードを生成することがありました。
2019年7月に、cert.orgはこの脆弱性についてLLVMs Arm stack protection feature can be rendered ineffective (VU#129209)として情報を提供しました。Arm Compiler 6.12はこの脆弱性の影響を受けています。Arm Compiler 6.12以前のバージョンではスタック保護の機能がサポートされていない為、この影響を受けません。 - [SDCOMP-53862] 特定の環境下で、Armv6-MあるいはArmv8-MのMain Extensionを無効にしたターゲットを指定し、C++例外を有効にしたコンパイル時、clobber listに以下のいずれかのレジスタを1つ以上含むインラインアセンブリ式で誤った例外アンワインディング情報を生成することがありました。
- R8
- R9
- R10
- R11
- R12
- R13 (SP)
- R14 (LR)
- [SDCOMP-53783] 特定の環境下で、-O0 を除くあらゆる最適化レベルでAArch32状態を指定してのコンパイル時、double型のメンバを持ち、__attribute__((packed)) のアノテーションを付けられた構造体を含む可変引数関数リストに対して誤ったコードを生成する可能性がありました。
- [SDCOMP-53771] 特定の環境下で、AArch64状態を指定してのコンパイル時、第二引数が浮動小数点型の値を渡すvsqadd*() あるいはvuqadd*() Neon組み込み関数を呼びだすと誤ったコードを生成する可能性がありました。
- [SDCOMP-53728] 特定の環境下で、-MD または-MMD オプションを指定し、-MF を付けなかった場合、出力ファイル名にドットが含まれず、不正な名前を持つファイルに依存情報が書き込まれることがありました。
- [SDCOMP-53569] 特定の環境下で、-O0 を除くあらゆる最適化レベルでAArch32状態を指定してのコンパイル時、32bitよりも小さいサイズの整数型を浮動小数点型にキャストする式に対して誤ったコードを生成する可能性がありました。
- [SDCOMP-53506] 特定の環境下で、オーバーアラインあるいはアンアラインな引数P を含む可変引数関数リストを使用したプログラムのコンパイル時、不正にミスアラインなP を含むコードを生成する可能性がありました。このようなコードはAArch32状態ではProcedure Call for the Arm Architecture ABI release 2.09のParameter Passingのセクション、AArch64状態ではProcedure Call Standard for the Arm 64-bit Architecture ABI release 1.0 のParameter Passingのセクションで明記されていません。
- [SDCOMP-53434] 特定の環境下で、-O0 を除くあらゆる最適化レベルでAArch32状態を指定してのコンパイル時、スタックへの条件アクセスを含む関数F に対して誤ったコードを生成する可能性がありました。誤ったコードはF の実行中に予約されたままであるべきスタックメモリを途中で解放してしまいます。
- [SDCOMP-53407] 特定の環境下で、AArch64状態を指定してのアセンブル時、 CDP、CDP2、LDC、LDC2、MCR、MCR2、MCRR、MCRR2、MRC、MRC2、MRRC、MRRC2、STPおよびSTP2命令においてコプロセッサ名(P) あるいはコプロセッサレジスタ(C) を大文字を使って定義した場合に error: invalid instructionまたはerror: invalid operand for instruction を誤ってレポートすることがありました。
- [SDCOMP-53279] 稀な環境下で、-O0 を除くあらゆる最適化レベルでT32状態を指定してのコンパイル時、不正なITブロックを生成する可能性がありました。
- [SDCOMP-53271] インラインアセンブラおよび統合アセンブラは第二ソースレジスタオペランドがD0-D7あるいはS0-S15でない場合、VFMAL、VFMSL 命令でエラーレポートに失敗していました。インラインアセンブラおよび統合アセンブラはerror: invalid instructionに加えてnote: operand must be a register in range [d0, d7] あるいはnote: operand must be a register in range [s0, s15] を表示するようになりました。
- [SDCOMP-53213] 特定の環境下で、AArch64状態を指定してのアセンブル時、 インラインアセンブラおよび統合アセンブラは誤って以下をレポートすることがありました。
-
- アクセスするスペシャルレジスタとしてTTBR0_EL2を定義したMRS命令に対してerror: expected readable system register
- アクセスするスペシャルレジスタとしてTTBR0_EL2を定義したMSR命令に対してerror: expected writable system register or pstate
-
- [SDCOMP-53007] 特定の環境下で、-Os または-Oz オプションを指定して、AArch32状態でのコンパイル時、誤ってfatal error: error in backend: ran out of registers during register allocationをレポートすることがありました。
- [SDCOMP-52959] 特定の環境下で、-Oz と-mbranch-protection オプションを指定して、Branch Target Idenificationを使用した分岐保護を有効にした際、コンパイラは誤った場所にBTI 命令を配置したコードを生成することがありました。
- [SDCOMP-52933] 特定の環境下で、-O0 を除くあらゆる最適化レベルでAArch32状態を指定してのコンパイル時、コンパイラは16bit整数を8bit整数に切り捨てる必要がある場合、誤って切り捨てを行わないことがありました。
- [SDCOMP-52918] 特定の環境下で、ハードウェア浮動小数点ユニットをサポートするものの、半精度浮動小数点(FP16)拡張を持たないターゲットに対してAArcch32状態でコンパイルを行う際、半精度浮動小数点ベクタタイプのメンバを持つ構造体型の引数を持つ関数呼び出しで誤ったコードを生成することがありました。
- [SDCOMP-52910] 特定の環境下で、-O0 を除くあらゆる最適化レベルでAArch32状態且つ半精度浮動小数点(FP16)拡張を有効にしてのコンパイル時、コンパイラは誤ってfatal error: error in backend: Cannot select: をレポートすることがありました。
- [SDCOMP-52828] 特定の環境下で、T32状態且つハードウェア浮動小数点ユニットをサポートするArmv8-Aをターゲットとしてのコンパイル時、不正に浮動小数点命令を含むITブロックを生成することがありました。
- [SDCOMP-52632] 特定の環境下で、-mfloat-abi=value オプションを指定して、ホモジーニアスな集成体型パラメータを持つ関数F を含むコードにおいて、F が__attribute__((pcs("calling_convention"))) でアノテーションされている場合、コンパイラは誤ってProcedure Call Standard for the Arm Architecture ABI release 2.09 に準拠しないコードを生成することがありました。
- [SDCOMP-51612] 特定の環境下で、-O0 を除くあらゆる最適化レベルでAArch32状態でハードウェア浮動小数点ユニットをサポートするプロセッサをターゲットとしてコンパイル時、8byteのアライメントを要求するベクタ型の例外オブジェクトを定義するthrow式に対する不正なコードを誤って生成することがありました。
- [SDCOMP-51181] 特定の環境下で、E に続くコードが到達不能であると確認される場合にコンパイラはC++例外E をthrowする関数に対して誤ったコードを生成することがありました。
- [SDCOMP-51026] 特定の環境下で、-O0 を除くあらゆる最適化レベルでAArch32状態でのコンパイル時、80byte以上のサイズを持つ構造体型のパラメータを持ち、8byteサイズの変数に関連する乗算処理を実行する関数に対して誤ったコードを生成することがありました。
- [SDCOMP-50736] 特定の環境下で、-O0 の最適化レベルでAArch32状態で半精度浮動小数点(FP16)拡張を有効にしてのコンパイル時、半精度浮動小数点型のメンバを持つ構造体に対して誤ったコードを生成することがありました。
- [SDCOMP-50723] 特定の環境下で、AArch32状態で半精度浮動小数点(FP16)拡張をサポートするプロセッサをターゲットとしてコンパイル時、不正なイミディエイトオフセットを用いたVLDR{}{
}.16
またはVSTR{}{}.16
命令を生成することがありました。 - [SDCOMP-50722] 特定の環境下で、半精度浮動小数点(FP16)拡張をサポートするプロセッサをターゲットとし、-O0 の最適化レベルでAArch32状態且つbig-endianとしてのコンパイル時、コンパイラは誤ってerror: clang frontend command failed due to signal をレポートすることがありました。
- [SDCOMP-50507] 特定の環境下で、半精度浮動小数点(FP16)拡張をサポートするプロセッサをターゲットとし、浮動小数点絶対比組み込み関数あるいは浮動小数点と整数の変換組み込み関数の呼び出しを含むプログラムのコンパイル時、コンパイラは誤ってfatal error: error in backend あるいはerror: cannot compile this builtin function yetをレポートすることがありました。
加えて、vmulxh_lane_f16()とvmulxh_laneq_f16()の浮動小数点乗算拡張(要素ごとの)組み込み関数のサポートを追加しました。 - [SDCOMP-50396] 特定の環境下で、Armv6-MあるいはArmv8-MのMain Extensionを無効にしたターゲットを指定したコンパイル時、R12の値によって上書きされることによりレジスタの値を誤って壊してしまうコードを生成することがありました。
Linker (armlink)
- [SDCOMP-53507] 特定の環境下で、T32状態に対して--no_merge_litpoolsオプションなしでリンクした場合、リンカは同一の定数をマージした結果としてサイズが変化する関数の計算を間違ったシンボル情報を含む出力ファイルを生成することがありました。
- [SDCOMP-53500] 特定の環境下で、--pagedオプションを使用してリンクした場合、ロードセグメントの数の計算を誤り、その結果破損したイメージを生成することがありました。
- [SDCOMP-52081] 特定の環境下で、AArch32状態でRWデータ圧縮を有効にしたプログラムのリンク時に、プログラムが圧縮可能な実行リージョン内のシンボルを参照する圧縮可能な実行リージョンを含む場合、リンカは要求される関数を含まない不正なイメージを生成することがありました。
- [SDCOMP-51704] 特定の環境下で、.ANYセレクタを含むスキャッタファイルをリンクする場合、リンカは不正にInternal fault: [0xb3b91b:]をレポートするかWindowsのAPPCRASHエラーを起こすことがありました。
- [SDCOMP-51507] 入力オブジェクト内に競合するスタックおよびヒープのセットアップメソッドが存在す場合、エラーのレポートに失敗することがありました。この問題は修正され、リンカは Error: 6915E: Library reports error: Conflicting stack/heap set up methods in use. __user_setup_stackheap, __user_initial_stackheap cannot be used with __initial_sp, __heap_base and __heap_limitをレポートするようになりました。
- [SDCOMP-51114] 特定の環境下で、リンカは不正にWarning: L6412W: Disabling merging for (), unsupported relocation from ()エラーをレポートすることがありました。
- [SDCOMP-30573] 特定の環境下で、--partialオプションを使用し、C++ソース言語モードでコンパイルされた入力オブジェクト内にCOMDAT グループとデバッグ情報、または.eh_frame セクションのいずれかが含まれる場合、リンカは誤ってInternal fault: [0x13429b:]、Internal fault: [0x67fec6:]あるいはInternal fault: [0xe81a5a:]をレポートすることがありました。
ライブラリおよびシステムヘッダ
- [SDCOMP-54483] arm_neon.hシステムヘッダはAArch32状態でコンパイル時、poly64_t、poly64x1_tおよびpoly64x2_tの定義に失敗することがありました。
- [SDCOMP-53777] 特定の環境下で、ハードウェア浮動小数点ユニットをサポートするプロセッサをターゲットとしてビルドする場合、Arm C++ライブラリ実装のstd::binomial_distribution::operator()関数が誤った結果を返すことがありました。
- [SDCOMP-53677] 特定の環境下で、microlibを使用し、非定数フォーマットの文字列を伴うscanf() 関数の呼び出しを伴う場合、microlibの問題によってリンカが不正にError: L6218E: Undefined symbolをレポートすることがありました。
- [SDCOMP-52285] Arm Cライブラリ実装は特定の関数で__aeabi_idiv0()あるいは__aeabi_ldiv0()関数の呼び出しにおいて、不正にApplication Binary Interface (ABI) for the Arm Architectureに準拠しないパラメータを定義していました。
- [SDCOMP-52050] 特定の環境下で、atan2f() 関数のArm Cライブラリ実装は不正に負のゼロではなく正のゼロを返すことがありました。
- [SDCOMP-51695] freopen() 関数のArm Cライブラリ実装はファイル名のパラメータとしてnullポインタとともに呼び出された場合、nullポインタを返すことに失敗することがありました。
- [SDCOMP-50456] AArch32状態且つbig-endianとして、C++例外ハンドリングとともにビルドされたArm C++ライブラリバリアントは不正にC++例外のcatchに失敗することがありました。
- [SDCOMP-30358] 特定の環境下で、regex_traits::isctype() のArm C++ライブラリ実装はキャラクタクラスがwordキャラクタクラスの場合に不正な結果を返すことがありました。
- [SDCOMP-30357] std::regex_traits::lookup_classname() の引数がpunct と等しい場合、不正な結果を返すことがありました。
Arm Compiler 6.13の既知の不具合
- [SDCOMP-54453] BFCSEL 命令とR_ARM_THM_BF12 のリロケーションタイプを含むELFイメージを逆アセンブルする際、fromelf ユーティリティは不正にリロケーションタイプをR_ARM_THM_BF13 としてレポートすることがあります。
- [SDCOMP-54427] 稀な環境下で、-fsanitize=memtag オプションを使用してコンパイルする際、コンパイラは不正なメモリタギングコードを生成する可能性があります。これによってスタックエリア内のアドレスに対してみせかけのメモリタギング例外がおきることがあります。
- [SDCOMP-54391] -O0の最適化レベルにおいて-fstack-protector-strong オプションを使用してコンパイルする際、コンパイラは配列ではないローカル変数の特定の種類のアドレス取得を含む関数についてスタック保護を有効にすることができません。この問題を回避するには-fstack-protector-strong のかわりに-fstack-protector-allを使用してコンパイルしてください。
- [SDCOMP-50470] コンパイラは、_Float16 データ型について不正なデフォルト引数生成に関連する関数呼び出しのエラーの報告に失敗することがあります。