Arm Compiler for Embedded 6.17 のリリースノート
目次
1. 紹介
Arm Compiler for Embedded 6.17 は、ベアメタルソフトウェア、ファームウェア、およびリアルタイムオペレーティングシステム(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.17 は2021年10月現在の最新リリースであり、それ以前のリリースの置き換えとなります。
Arm Compiler for Embedded 6.17 のキーとなる機能は以下の通りです:
- 最近リリースされたプロセッサ:
- Cortex-X2, Cortex-A710 およびCortex-A510 のサポート
- Armv9-A:
- Armv9.3-A のアセンブリに対するアルファサポート
- Armv9.2-A のサポート
- Armv9.1-A のサポート
- Armv9-A のサポート
- Armv8-A:
- Armv8.8-A のアセンブリに対するアルファサポート
- Armv8-M:
- VLLDM instruction Security Vulnerability (CVE-2021-35465) に対する緩和のためのサポート
- Armv8.1-M PACBTI-M 拡張のベータサポート
- A-profile およびR-profile ターゲットのダイナミックリンクのサポート
- Thread-Local Storage (TLS) のサポート
1.1 Arm Compiler for Embedded 6.17 コンフィギュレーション
Arm Compiler for Embedded 6.17 は以下を含みます:
- ツールチェインコンポーネント:
- armclang:LLVMとClangテクノロジをベースとしたコンパイラおよび統合アセンブラ
- armar:ELFオブジェクトファイル群をまとめるアーカイバ
- armlink:オブジェクトやライブラリをまとめ、実行可能形式を生成するリンカ
- fromlef:イメージ変換ユーティリティ兼逆アセンブラ
- armasm: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 ツールキットとともに使用(Windows 64-bit host platform上でWindows 32-bit ツールチェインを使用する必要があります)
- スタンドアローンなインストレーションとして使用
これらの商品については、代理店にお問い合わせください。
ライセンス管理や、トラブルシューティングの為のリソースはhttps://developer.arm.com/support/licensingよりアクセスできます。
1.2 Arm Compiler for Embedded 6.17 でサポートされたこと
ライセンス条件に従い、Arm Compiler for Embedded 6.17 を使用して、以下のArm アーキテクチャおよびプロセッサ用のビルドが行えます:
Architecture | Cortex | Neoverse | Other | |
Standard | Automotive Enhanced | |||
Armv9.3-A [ALPHA] | - | - | - | - |
Armv9.2-AまでのArmv9-A [ALPHA] | X2 A710, A510 |
- | - | - |
Armv8.8-A [ALPHA] | - | - | - | - |
Armv8.7-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 [BETA] | R82 [BETA] | - | - | - |
Armv8-R | R52+, R52 | - | - | - |
Armv7-R | R8, R7, R5, R4F, R4 | - | - | - |
Armv8.1-MまでのArmv8-M | M55 M35P, M33 M23 |
- | - | Star |
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
将来のアーキテクチャテクノロジおよび特定のプロセッサのサポートは、Arm DS Platinum Editionの一部としてのみ利用できます。Arm DS Platinum Editionは、最新のIPを開発するArmパートナー向けにデバイスがリリースされる前の開発用にのみ提供されています。Arm DS Gold Editionのすべての機能が含まれ、さらにArmから発表された最新のIPをサポートしています。詳細については、弊社ご購入前の製品・サービスに関するお問い合わせ(Arm純正開発ツール) までお問い合わせください。
2. インストール方法とIDEへの統合
Arm Compiler for Embedded 6.17 は以下の64-bit x86プラットフォームをサポートします:
ホストOS | ダウンロードするツールチェインパッケージ | サポートされる使用方法 |
Red Hat Enterprise Linux 7 Red Hat Enterprise Linux 8 Ubuntu Desktop Edition 18.04 LTS Ubuntu Desktop Edition 20.04 LTS |
Linux 64-bit | スタンドアロン製品として使用 Arm Development Studio へ統合 |
Windows Server 2012 Windows Server 2016 Windows Server 2019 Windows 8.1 Windows 10 |
Windows 64-bit | スタンドアロン製品として使用 Arm Development Studio へ統合 |
Windows 32-bit | Keil MDKへ統合 |
注意:
- Arm Compiler for Embedded 6.17 は、上記より古いホストOS上での動作は期待できません
- Keil MDKライセンスを使用する場合、Arm Compiler for Embedded 6.17 はWindowsプラットフォームのみのサポートです
- Windows 32-bit x86 ホストプラットフォームはサポートされません
- フローティングライセンスを使用する場合、ライセンスサーバでarmlmd とlmgrd の両方においてversion 11.14.1.0 以上を実行している必要があります。Armは常にhttps://developer.arm.com/products/software-development-tools/license-management/downloads から入手できる、最新のバージョンのライセンスサーバソフトウェアをお使いいただくことを推奨します
ツールキット、例えばArm Development Studio の一部としてArm Compiler for Embedded 6.17 を受け取った場合、ツールキットのインストーラはインストールプロセスを実行します。
この場合、ツールキットのインストール手順に従ってください。
それ以外の場合、Arm Compiler for Embedded 6.17 の使用方法に応じて適切なインストール場所を選択する必要があります:
- Arm Development Studio Bronze/Silver/Gold Edition 2021.2 以降またはPlatinum Edition 2021.c 以降に統合
- Keil MDK-Professional 5.36 以降に統合
- スタンドアロン製品として使用
関連する手順については以下を参照してください:
- インストール手順: User Guide 内 Installing Arm Compiler の章
- ライセンスとツールキットのコンフィギュレーション手順:https://developer.arm.com/tools-and-software/software-development-tools/license-management/resources/product-and-toolkit-configuration
※本内容は弊社FAQページでも日本語での解説を行っております。内容の一部は保守契約ユーザ様にのみ公開をしておりますのであらかじめFAQページにログインの上ご参照ください:
Arm Compilerを呼びだす環境別のライセンスおよび設定について
- Arm Development Studio への統合手順:
1.ツールチェインをArm Development Studio をインストールしたディレクトリ以外の任意のディレクトリにインストールします
2.Arm Developer Studio User Guide のRegister a compiler toolchain の章にある手順に従ってツールチェインを使用するようにプロジェクトをコンフィギュレーションします - Keil MDK への統合手順:
1.ツールチェインをKeil MDK インストールディレクトリのARM サブディレクトリにインストールします
例えば、Keil MDK インストールディレクトリがC:\Keil_v5 にある場合、推奨されるインストールパスはC:\Keil_v5\ARM\ARMCompiler6.17 です。
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の出力、ツールが生成するエラーメッセージの完全な内容および問題を再現するのに必要なソースコードやその他のファイルとコマンドラインを提供してください。
当社へのお問い合わせは、こちら。
4. リリース履歴と変更
以下に、Arm Compiler for Embedded 6.17 シリーズのリリース日付を示します:
- 6.17 (2021年10月にリリースされました)
以下に、Arm Compiler for Embedded 6.17 での新しい機能と修正された不具合の概要を示します。
Arm Compiler for Embedded 6.17 は長期メンテナンスリリースではありません。Arm Compiler for Embedded maintenance ポリシーに従って、今後のリリースにおいてさらなる不具合修正と機能拡張が検討されます。
以下の情報には、技術的な不正確さや誤植が含まれる場合があります。
それぞれの変更点には、ユニークな識別子SDCOMP-が割り振られています。
もしArmへこのリリースノート内の特定の問題について連絡が必要な場合、適切な識別子を通知してください
Arm Compiler for Embedded 6.17 での変更点
以下に直前のリリースであるArm Compiler 6.16 からの変更点を示します。
Arm Compiler for Embedded 6.17 での一般的な変更
- [SDCOMP-59356] Armv9.3-A アーキテクチャに対するアセンブリのアルファサポートが追加されました。Armv9.3-A をターゲットとするには以下のarmclangオプションを使用してください:
状態 オプション AArch64 --target=aarch64-arm-none-eabi -march=armv9.3-a AArch32 --target=arm-arm-none-eabi -march=armv9.3-a - [SDCOMP-59355] Armv9.2-A アーキテクチャのサポートが追加されました。Armv9.2-A をターゲットとするには以下のarmclangオプションを使用してください:
状態 オプション AArch64 --target=aarch64-arm-none-eabi -march=armv9.2-a AArch32 --target=arm-arm-none-eabi -march=armv9.2-a - [SDCOMP-59354] Armv9.1-A アーキテクチャのサポートが追加されました。Armv9.1-A をターゲットとするには以下のarmclangオプションを使用してください:
状態 オプション AArch64 --target=aarch64-arm-none-eabi -march=armv9.1-a AArch32 --target=arm-arm-none-eabi -march=armv9.1-a - [SDCOMP-59266] Armv8.8-A アーキテクチャに対するアセンブリのアルファサポートが追加されました。Armv8.8-A をターゲットとするには以下のarmclangオプションを使用してください:
状態 オプション AArch64 --target=aarch64-arm-none-eabi -march=armv8.8-a AArch32 --target=arm-arm-none-eabi -march=armv8.8-a - [SDCOMP-59211] Armv9-A アーキテクチャのサポートが追加されました。Armv9-A をターゲットとするには以下のarmclangオプションを使用してください:
状態 オプション AArch64 --target=aarch64-arm-none-eabi -march=armv9-a AArch32 --target=arm-arm-none-eabi -march=armv9-a - [SDCOMP-58753] Armv8-M VLLDM instruction Security Vulnerability (CVE-2021-35465) の緩和サポートが追加されました。コンパイラのデフォルトの動作は以下のようになりました:
ターゲット デフォルト Armv8-M with the Main Extension 緩和無効 Armv8.1-M with the Main Extension 緩和無効 Cortex-M33 緩和有効 Cortex-M35P 緩和有効 Cortex-M55 緩和有効 Star 緩和有効
デフォルトで有効化されている緩和を無効にするには-mno-fix-cmse-cve-2021-35465オプションを使用してコンパイルしてください。
より詳細については、 https://developer.arm.com/support/arm-security-updates/vlldm-instruction-security-vulnerabilityを参照してください。 - [SDCOMP-58674] Armv9-A に対するオプションのScalable Matrix Extension (SME) のアルファサポートが追加されました。SME をターゲットとするには以下の-march または-mcpu オプションから選択してください:
SME SME with the 16-bit integer variant (I16I64) SME with the double-precision variant (F64F64) -march または-mcpu オプションの選択 含まれる 含まれる 含まれる +sme-i64+sme-f64 含まれる 含まれる 含まれない +sme-i64 含まれる 含まれない 含まれる +sme-f64 含まれる 含まれない 含まれない +sme - [SDCOMP-58672] Armv9-A に対するオプションのRealm Management Extension (RME) のアルファサポートが追加されました。armclang ではRME はすべてのArmv9-A ターゲットでデフォルトで有効です。
- [SDCOMP-58333] Cortex-X2 プロセッサのサポートが追加されました。Cortex-X2 をターゲットとするには以下のarmclangオプションを使用してください:
暗号化拡張 オプション 含まれる --target=aarch64-arm-none-eabi -mcpu=cortex-x2+crypto 含まれない --target=aarch64-arm-none-eabi -mcpu=cortex-x - [SDCOMP-58331] Cortex-710 プロセッサのサポートが追加されました。Cortex-710 をターゲットとするには以下のarmclangオプションを使用してください:
状態 暗号化拡張 オプション AArch64 含まれる --target=aarch64-arm-none-eabi -mcpu=cortex-a710+crypto AArch64 含まれない --target=aarch64-arm-none-eabi -mcpu=cortex-a710 AArch32 含まれる --target=arm-arm-none-eabi -mcpu=cortex-a710 -mfpu=crypto-neon-fp-armv8 AArch32 含まれない --target=arm-arm-none-eabi -mcpu=cortex-a710 - [SDCOMP-58333] Cortex-A510 プロセッサのサポートが追加されました。Cortex-A510 をターゲットとするには以下のarmclangオプションを使用してください:
暗号化拡張 オプション 含まれる --target=aarch64-arm-none-eabi -mcpu=cortex-a510+crypto 含まれない --target=aarch64-arm-none-eabi -mcpu=cortex-a510 - [SDCOMP-58132] AArch64 状態でリンクをする際、Thread Local Storage (TLS) のサポートが追加されました。より詳細についてはReference Guide内の以下の章を参照してください:
-
- Thread local storage in the bare metal and DLL-like linking models
- Thread local storage in the SysV linking model
- __attribute__((tls-model("model"))) variable attribute
- -ftls-model
- -mtls-size
- -mtp
-
- [SDCOMP-57125] --sysv オプションを使用してリンクする際、スキャッタファイルの使用をサポートしました。より詳細については、Reference Guide内Requirements and restrictions for using scatter files with SysV linking model および--bare_metal_sysv の章を参照してください。
- [SDCOMP-55918] AArch64 状態とAArch32 状態の両方で、Bare-metal Position Independent Executable (PIE) イメージをサポートしました。より詳細についてはReference Guide内の-fbare-metal-pie および--bare_metal_pie の章を参照してください。
- [SDCOMP-55122] PACBTI-M 拡張を含むArmv8.1-M ターゲットに対する分岐保護機能のベータサポートが追加されました。分岐保護機能は、以下のオプションを使用して有効化できます:
armclang:
- 分岐保護のレベルまたは種類を指定するには-mbranch-protection=protection を指定
- 分岐保護用ライブラリの選択を制御するには--library_security=protection を指定
本オプションの詳細については、User Guide内の-march、-mbranch-protection、 -mcpu および--library_security=protectionの章と、User Guide内のPACBTI-M extension mitigations against ROP and JOP style attacks section の章を参照してください。 - [SDCOMP-54450] Star プロセッサのサポートがarmasm、armlink およびfromelf に追加されました。Star をターゲットとするには以下のオプションを使用してください:
DSP 浮動小数点 armclang armasm、armlink およびfromelf 含まれる 含まれる --target=arm-arm-none-eabi -mcpu=star --cpu=Star 含まれる 含まれない --target=arm-arm-none-eabi -mcpu=star -mfloat-abi=soft --cpu=Star.no_fp 含まれない 含まれる --target=arm-arm-none-eabi -mcpu=star+nodsp --cpu=Star.no_dsp 含まれない 含まれない --target=arm-arm-none-eabi -mcpu=star+nodsp -mfloat-abi=soft --cpu=Star.no_dsp.no_fp - [SDCOMP-28503] Link-Time Optimization (LTO) を有効にしてコンパイルされたオブジェクトを含むスタティックライブラリの生成およびリンクをサポートしました。
Arm Compiler for Embedded 6.17 での機能改善
armclang
- [SDCOMP-59383] コンパイラが特定の最適化を選択するために使用するヒューリスティクスが改善されました。これにより、以前のリリースとは異なる最適化が実行される可能性があります。特に-O1 オプションを使用してコンパイルする場合の関数のインライン化において影響があります。
プロジェクトで関数のインライン展開を無効にする必要がある場合は、関数属性とコマンドラインオプションを使用して無効にできます。関数のインライン展開を無効にする方法の詳細は、Reference Guideの__attribute__((noinline)) function attribute および-fno-inline-functions の章を参照してください。 - [SDCOMP-59132] 以前はwide-character 定数に複数のマルチバイト文字が含まれていた場合、コンパイラは最後のマルチバイト文字を除くすべてのマルチバイト文字を無視していました。この動作は変更され、コンパイラは次のエラーを報告するようになりました:
-
- wide character literals may not contain multiple characters
-
- [SDCOMP-55605] Armv8-A およびArmv8-R Cryptographic Extension 命令に対し、次のArm C Language Extensions (ACLE) 機能のテストマクロのサポートが追加されました:
-
- __ARM_FEATURE_AES
- __ARM_FEATURE_SHA2
- __ARM_FEATURE_SHA3
- __ARM_FEATURE_SHA512
- __ARM_FEATURE_SM3
- __ARM_FEATURE_SM4
-
- [SDCOMP-51769] Run-Time Type Information (RTTI) 機能の使用時に要求されるコードの生成を無効化する-fno-rtti オプションのサポートが追加されました。詳細については、Reference Guide内、-frtti、-fno-rtti の章を参照してください。
armlink
- [SDCOMP-57906] リンカとはバージョンが異なるコンパイラから生成されたLTO bitcode を含む入力オブジェクトを検出するためのサポートが追加されました。
入力オブジェクトが異なるバージョンのコンパイラを使用してLTO を有効にして生成されている場合、リンカは次のいずれかのエラーをレポートするようになりました:
-
- L6123E: linking module flags 'armcompiler-version': IDs have conflicting values in '<object1>' and '<object2>'
- L6123E: LTO bitcode in '<object>' was generated by an incompatible version of armclang
-
- [SDCOMP-54447] --info=summarysizes の出力を標準エラーストリームstderr にリダイレクトするかどうかを制御できるよう、--summary_stderr および--no_summary_stderr オプションのサポートが追加されました。
詳細についてはReference Guide の--summary_stderr、--no_summary_stderr の章を参照してください。
ライブラリとシステムヘッダ
- [SDCOMP-58167] 以前、Arm C++ library header <complex> をプログラムに含めると、C++ library I/O stream の初期化コードが常に最終イメージに含まれていました。初期化コードは必要な場合にのみ含まれるようになり、これにより特定のC++ プログラムのコードサイズが大幅に改善されます。
Arm Compiler for Embedded 6.17 で修正された不具合
armclang
- [SDCOMP-59074] AArch64 状態に対し-O0 を使用した場合、 常にtrue と評価される比較演算に対して誤ったコードを生成する可能性がありました。
- [SDCOMP-59055] Armv8-M をターゲットとして-mcmse と-mfloat-abi=soft を使用した場合、__attribute__((cmse_nonsecure_call)) でアノテーションが付けられた関数の呼び出しにおいてSecure Floating-point レジスタをクリアしないコードを誤って生成する可能性がありました。
- [SDCOMP-58773] Accelerator Support Extension があるターゲットに対して-O0 以外の任意の最適化レベルを指定した場合、コンパイラは、single-copy atomic 64-byte load 命令またはstore 命令を含むインラインアセンブリ式を含む関数に対して不正なコードを生成することがありました。
- [SDCOMP-58738] -O3、-Ofast、-Omaxの例外レベル、または-fvectorize を指定して、SIMD 命令をサポートするターゲット用にコンパイルすると、相互に重複するポインタを介して配列へのアクセスが含まれるループに対して誤ったコードを生成する可能性がありました。
- [SDCOMP-58325] M-profile Vector Extension (MVE) を含むArmv8.1-M ターゲット用にコンパイルするとき、次のいずれかのエラーを誤ってレポートすることがありました:
-
- clang frontend command failed due to signal
- clang frontend command failed with exit code 139
-
- [SDCOMP-58048] AArch32 状態に対し-Oz および-mno-outline なしでコンパイルする場合、無効なオフセットを持つLDRD またはSTRD 命令を誤って生成する可能性がありました。
- [SDCOMP-58031] -O0 以外の任意の最適化レベルを指定して、C++ ソース言語モードでコンパイルすると、コンパイラは関数を使用して初期化され、__attribute__((section("name")) でアノテーションが付けられたconst 変数に対して不正なコードを生成する可能性がありました。
- [SDCOMP-58021] インラインアセンブラおよび統合アセンブラは、シンボル定義の後に指定された.type ディレクティブを持つT32 関数シンボルの最下位ビットとして0 を持つアドレスを誤って生成する可能性がありました。
- [SDCOMP-58015] AArch64 状態に対し-fpic を使用してコンパイルする場合、コンパイラはFPIC ビルド属性の生成に失敗することがありました。この後、リンカはArm Compiler ライブラリのFPIC バリアントを選択しません。この問題は修正され、FPIC ビルド属性を正しく生成するようになりました。
- [SDCOMP-57963] コンパイラは、__attribute__((used)) でアノテーションが付けられている関数や変数を非グローバルからグローバルに誤って変更する可能性がありました。
- [SDCOMP-57935] AArch32 状態に対し-mfloat-abi=hard オプションを指定してコンパイルした場合、オーバーアラインなメンバを含むHomogeneous Floating-point Aggregate (HFA)のパラメータを持つ関数に対して、誤ったコードを生成する可能性がありました。
- [SDCOMP-57845] オプションの半精度融合乗算長命令をサポートするArmv8.2-A 以降をターゲットとしてコンパイルした場合、コンパイラは機能マクロ__ARM_FEATURE_FP16_FML ではなく__ARM_FEATURE_FP16FML を誤って定義していました。加えて、arm_neon.h システムヘッダは__ARM_FEATURE_FP16_FML ではなく__ARM_FEATURE_FP16FML を誤って使用していました。
- [SDCOMP-57658] C++ 例外を有効化してC++ ソース言語モードでコンパイルする場合、コンパイラは、負の配列長を指定するnew の式に対するstd::bad_array_new_length 例外の発生に失敗したり、配列長よりも多いイニシャライザを指定したコードを生成することがありました。
- [SDCOMP-57526] -Os オプション指定時、-g または-gdwarf-version を使用してMain Extension のArmv8.1-M をターゲットとしてコンパイルすると、次のいずれかのエラーを誤って報告することがありました:
-
- clang frontend command failed due to signal
- clang frontend command failed with exit code 139
-
- [SDCOMP-57463] AArch32 状態のArmv8-R をターゲットとして、以下のいずれかのオプションを使用してコンパイルする場合:
- +crypto 機能を含む-march=name
- +crypto 機能を含む-mcpu=name
- -mfpu=crypto-neon-fp-armv8
-
- ignoring extension 'crypto' because the 'armv8-r' architecture does not support it
- [SDCOMP-57276] M-profile Vector Extension (MVE) を持つビッグエンディアンArmv8.1-M ターゲット用にコンパイルする場合、コンパイラはvcreateq_*() コンパイラ組み込み関数の呼び出しに誤ったコードを生成する可能性がありました。
- [SDCOMP-57242] T32 状態に対し-fno-ldm-stm オプションを使用してコンパイルすると、誤ってLDM またはSTM 命令を生成する可能性がありました。
- [SDCOMP-57207] インラインアセンブラと統合アセンブラは、正しい定数オペランドを持つCPY、DUP、またはMOV のSVE 命令に対し次のエラーを誤ってレポートすることがありました:
-
- immediate must be an integer in range [-128, 127] or a multiple of 256 in range [-32768, 32512]
-
- [SDCOMP-57204] コンパイラは、セクションと同じ名前を持つ関数または変数に対して、次のエラーのいずれかを誤ってレポートする可能性がありました:
- fatal error: error in backend: '' label emitted multiple times to assembly file
- <unknown>:0: error: changed binding to STB_GLOBAL
- <unknown>:0: error: invalid symbol redefinition
この問題は修正され、以下のエラーをレポートするようになりました:
-
- error: <symbol> changed binding to STB_GLOBAL
- error: symbol '<symbol>' is already defined
- [SDCOMP-56906] AArch32 状態のCryptographic Extension がないターゲット用にコンパイルすると、インラインアセンブラと統合アセンブラがCryptographic Extension 命令のエラーレポートに失敗することがありました。この問題は修正され、インラインアセンブラと統合アセンブラは次のいずれかのエラーをレポートするようになりました:
-
- instruction requires: aes
- instruction requires: sha2
-
- [SDCOMP-56828] -O0 オプション指定時、<stdatomic.h> Arm C ライブラリヘッダファイルまたは<atomic> Arm C++ ライブラリヘッダファイルで定義されている関数の呼び出しに対して誤ったコードを生成することがありました。
- [SDCOMP-54724] -ffixed-r6 オプション指定時、コンパイラはスタックアライメント要件を満たさないコードを生成する可能性がありました。
- [SDCOMP-53699] AArch64 状態に対し、コンパイラはオーバーアラインなメンバを含むHomogeneous Floating-point Aggregate (HFA)のパラメータを持つ関数に対して、誤ったコードを生成する可能性がありました。
- [SDCOMP-50029] AArch32 状態でAdvanced SIMD Extension を含むターゲット用にコンパイルする場合、__attribute__((aligned(N)) でアノテートされた変数V においてN がV の自然境界よりも低い値の場合、コンパイラが警告のレポートに失敗する可能性がありました。この問題は修正され、コンパイラは次の警告を報告するようになりました:
-
- passing <N>-byte aligned argument to <M>-byte aligned parameter '<parameter>' of '<function>' may result in an unaligned pointer access
-
- [SDCOMP-49035] -march=name オプションと-mcpu=name オプションの両方を使用してビルドすると、コンパイラと統合アセンブラは警告のレポートに失敗することがありました。この問題は修正され、コンパイラと統合アセンブラは次の警告をレポートするようになりました:
-
- Avoid specifying both the architecture (-march) and the processor (-mcpu) because specifying both has the potential to cause a conflict. The compiler infers the correct architecture from the processor.
-
armlink
- [SDCOMP-57983] 使用するとマークされているELFセクションを含む入力オブジェクトをリンクする際、長い時間がかかる場合がありました。
- [SDCOMP-57947] --legacyalign オプションなしでリンクした場合、入力オブジェクトにアラインメントが4 バイト未満のセクションが含まれているとリンカは、対応する出力セクションのアドレスが正しくないリンカ定義シンボルを生成する可能性がありました。
- [SDCOMP-57871] Load Region を記述するELF プログラムヘッダのp_memsz フィールドの値を誤って小さすぎる値に計算する可能性がありました。
- [SDCOMP-57336] LTO を有効にしてコンパイルされたオブジェクトをリンクする場合、異なるタイプのデータセクションを1 つのELF セクションに誤ってマージする可能性がありした。
fromelf
- [SDCOMP-57372] DWARF 4 デバッグ情報を含むELF 形式の入力ファイルを--interleave=source オプションを使用して処理する場合、不正なインターリーブコメントが生成されることがありました。
- [SDCOMP-57351] --interleave=source または--interleave=source_only オプションを使用してELF 形式の入力ファイルを処理する場合、fromelf ユーティリティが次のいずれかのエラーを誤ってレポートすることがありました:
-
- Internal fault: [0x389329:<ver>]
- Internal fault: [0x910ecd:<ver>]
- Internal fault: [0xa052e4:<ver>]
-
- [SDCOMP-57158] fromelfユーティリティは特定のA64 HINT 命令をBTI 命令またはMSR 命令として誤ってディスアセンブルする可能性がありました。
ライブラリとシステムヘッダ
- [SDCOMP-58588] mbsrtowcs() およびwcsrtombs() 関数のArm C ライブラリ実装で、デスティネーションポインタがNULL ポインタの場合、ソースポインタが指すポインタオブジェクトが誤って更新されることがありました。
- [SDCOMP-58561]、snprintf()、swprintf()、vsnprintf()、およびvswprintf() 関数のArm C ライブラリ実装で、バッファに空の文字列が誤って書き込まれる可能性がありましたが、負ではない結果が返されていました。
- [SDCOMP-58560] AArch64 状態のscalblnf() 関数のArm C ライブラリ実装で、不正な結果を返す可能性がありました。
- [SDCOMP-58559] fdim()、fdimf()、およびfdiml() 関数のArm C ライブラリ実装で、NaN であるパラメータを指定して呼び出されたときに、誤ってNaN を返すことができないことがありました。
- [SDCOMP-58304] fgets() およびfgetws() 関数のArm C ライブラリ実装で、誤ってNULL ポインタが返され、また、読み取りバッファの終端にNULL 文字'\0' を設定できないことがありました。
- [SDCOMP-58240] AArch64 状態のArm C ライブラリのFPIC バリアントにおいて、リンカがライブラリの初期化コード内にUDF 命令を間違って含む可能性がありました。
- [SDCOMP-58044] stdio.h で定義されている関数のArm C ライブラリ実装システムヘッダが、マルチスレッド環境でスレッド間のデッドロックを誤って発生させる可能性がありました。
- [SDCOMP-57789] Arm C++ ライブラリのシングルスレッドバリアントが不適切に:
-
- std::chrono::steady_clock を定義し、
- std::chrono::high_resolution_clock をstd::chrono::system_cloc ではなく std::chrono::steady_clock として定義していました。
-
- [SDCOMP-57369] AArch64 状態のscalbln() ファミリ関数のArm C ライブラリ実装が誤った結果を返す可能性がありました。
- [SDCOMP-57368] AArch64 状態のfma() およびfmaf() 関数のArm C ライブラリ実装が不正な結果を返す可能性がありました。
- [SDCOMP-56623] std::is_unsigned<T>::value のArm C++ ライブラリ実装において、T がenum 型の場合、常にfalse を返すことに失敗していました。
- [SDCOMP-49898] C++98 またはC++03 ソース言語モードでコンパイルすると、コンパイラが次のエラーを誤ってレポートすることがありました:
-
- no viable conversion from returned value of type 'const std::basic_ios<type>' to function return type 'void *'
-
- [SDCOMP-49869] 以下の文字列から浮動小数点への変換関数のARM C++ ライブラリ実装は、誤った結果を返す可能性がありました:
-
- std::basic_istream<T> 型の引数を伴うstd::operator() またはstd::basic_istream<T> からの継承
- std::num_get<T>::do_get()
- std::num_get<T>::get()
-
- [SDCOMP-49441] AArch32 状態のArmv8-R をターゲットとするArm C++ ライブラリに不正なビルド属性が含まれていました。続いて、name がArmv8-R を定義している--cpu=name が指定され、且つ入力オブジェクトがArmv8-R ターゲットのC++ ソース言語モードでコンパイルされている場合、リンカは誤って以下のエラーをレポートする可能性がありました:
-
- L6366E: attributes are not compatible with the provided attributes
-