Arm Compiler 6.13のリリースノート
目次
-
紹介
-
Arm Compiler 6 の構成
-
Arm Compiler 6.13 でサポートされたこと
-
インストール方法
-
Arm Development Studio 2018.0 以降への統合
-
Keil MDK 5.22 以降への統合
-
スタンドアロン製品として使用
-
Linuxへのインストール
-
Windowsへのインストール
-
アンインストール
-
ドキュメンテーション
-
フィードバックとサポート
-
リリース履歴と変更
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オプションを< ext >
の個所を2以上にして選択してください:
-
AArch64状態で8-bit整数型のmatrix multiplication命令を有効にするには、
--target=aarch64-arm-none-eabi -march=armv8.< ext >
-a+i8mm
を選択
-
AArch64状態で32-bit単精度浮動小数点型のmatrix multiplication命令を有効にするには、
--target=aarch64-arm-none-eabi -march=armv8.< ext >
-a+f32mm
を選択
-
AArch64状態で64-bit倍精度浮動小数点型のmatrix multiplication命令を有効にするには、
--target=aarch64-arm-none-eabi -march=armv8.< ext >
-a+f64mm
を選択
-
AArch32状態で8-bit整数型のmatrix multiplication命令を有効にするには、
--target=arm-arm-none-eabi -march=armv8.< ext >
-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オプションを< ext >
の個所を2以上にして選択してください:
-
AArch64状態:
--target=aarch64-arm-none-eabi -march=armv8.< ext >
-a+bf16
-
AArch32状態:
--target=arm-arm-none-eabi -march=armv8.< ext >
-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実行可能ファイルを生成
これらのオプションの詳細については、Reference Guide内-fsysv、-fno-sysvおよび--sysvの章を参照してください。
-
[SDCOMP-53102] Armv8.5-Aでのオプション機能、メモリタギング拡張向けArm C Language Extensions (ACLE)組み込み関数のサポートを行いました。
-
[SDCOMP-52927] Armv8.5-Aでのオプション機能、メモリタギング拡張に含まれるメモリタギングスタック保護機能のサポートを行いました。以下のオプションを指定することでメモリタギングスタック保護機能が使用できます:
-
armclang:
-fsanitize=memtag
オプションがスタック上のメモリ配置を保護するためのメモリタギングコードを生成
-
armlink:
--library_security=protection
オプションが分岐保護およびメモリタギングスタック保護のための保護ライブラリの自動選択をオーバーライド
これらのオプションの詳細については、Reference Guide内-fsanitizeおよび--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
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)
その後例外がthrowされると関数の変数が破損してしまう可能性がありました。
-
[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< T >
::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
データ型について不正なデフォルト引数生成に関連する関数呼び出しのエラーの報告に失敗することがあります。