Arm Compiler for Embedded FuSa 6.16LTS のリリースノート
目次
1. 紹介
Arm Compiler for Embedded FuSa 6.16LTS は、機能安全またはlong-termサポートの要求を伴うベアメタルソフトウェア、ファームウェア、およびリアルタイムオペレーティングシステム(RTOS) アプリケーションを開発するための、Arm の最新の組み込みC/C++コンパイルツールチェインです。強力な最適化手法と最適化されたライブラリを通して、Arm Compiler for Embedded FuSa 6.16LTS は、組込みシステム開発者が、挑戦的なパフォーマンス目標とメモリ制約を満たすことを可能にします。
Arm Compiler for Embedded FuSa 6.16LTS は、自動車(ISO 26262)、家電、産業(IEC 61508)、医療(IEC 62304)、ネットワーク、鉄道(EN 50128)、ストレージ、通信など、さまざまな業界のリーディングカンパニーで使用されています。
また、以下のArm機能安全製品の開発にも使用されています:
- Qualified Libraries:https://developer.arm.com/tools-and-software/embedded/arm-compiler/safety
- Arm FuSa RTS:https://developer.arm.com/tools-and-software/embedded/fusa-run-time-system
- Software Test Libraries: https://www.arm.com/products/development-tools/embedded-and-software/software-test-libraries
通常の非機能安全版 Arm Compiler for Embeddedとは異なり、6.16LTSは初期リリースから最初の5年間はアクティブメンテナンス期間となっており、その後拡張メンテナンスに入ります:
- アクティブメンテナンス期間中、6.16LTS は、主に機能安全関連の障害修正にフォーカスしたインクリメンタルメンテナンスアップデートを受けます
- 拡張メンテナンスアップデートへのアクセスはlicense agreementに準拠します。詳細については、担当営業または代理店にお問い合わせください。
- bespokeサポート(オーダーメイドのサポート)とメンテナンスを含むプレミアムサービスもご利用いただけます。詳細については、Armにお問い合わせください。
Arm Compiler for Embedded FuSa 6.16LTS のキーとなる機能は以下の通りです:
- Cortex および Neoverse プロセッサのサポート(Section 1.2を参照)
- A プロファイルおよびR プロファイルをターゲットとした動的リンクのサポート
- Thread-Local Storage(TLS) のサポート
- C++14 ソース言語モードのサポート
- Arm FuSa C Library version 6.6.Aとの互換性
Arm Compiler for Functional Safety 6.6 とArm Compiler for Embedded FuSa 6.16LTS の変更点の概要については、Migration and Compatibility Guide のSummary of changes between Arm Compiler 6.6 LTM and Arm Compiler for Embedded FuSa 6.16LTS の項目を参照してください。
1.1 Arm Compiler for Embedded FuSa 6.16LTS
Arm Compiler for Embedded FuSa 6.16LTS は以下を含みます:
- 認証済みツールチェインコンポーネント:
- armclang:LLVMとClangテクノロジをベースとしたコンパイラおよび統合アセンブラ
- armar:ELFオブジェクトファイル群をまとめるアーカイバ
- armlink:オブジェクトやライブラリをまとめ、実行可能形式を生成するリンカ
- fromlef:イメージ変換ユーティリティ兼逆アセンブラ
- 非認証ツールチェインコンポーネント:
- Arm C libraries:組込みシステム向けのランタイムサポートライブラリ
- Arm C++ libraries:LLVM libc++プロジェクトベースのライブラリ
- armasm:armasm-syntaxアセンブリコード用のアセンブラ。新しいアセンブリファイルではarmclang統合アセンブラの使用を推奨
- Qualification Kit:
- Safety Manual:認定の範囲、機能安全関連開発ツールチェインの使用方法について説明があります
- Defect Report:既知の機能安全関連の障害に関する情報を提供します
- Test Report:言語適合性テストの結果を含みます
- Development Process:ツールチェインの開発に使用されたプロセスの概要を含みます
- Release History:Arm Compiler for Embedded FuSa 6.16LTS シリーズの現在までのすべてのリリースに関する識別情報を含みます
- 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 FuSa 6.16LTS に含まれるツールがレポートするエラーやワーニングのリストを提供します
- Migration and Compatibility Guide:Arm Compiler 5 からArm Compiler for Embedded FuSa 6.16LTS への移行を支援する情報を提供します
- Release notes: 最新のリリースノートはArm Compiler for Embedded FuSa ダウンロードページで確認できます。
ツールチェインは以下で使用できます:
- Arm Development Studio Gold Edition またはPlatinum Edition ツールキットとともに使用
- Keil MDK-Professional ツールキットとともに使用(Windows 64-bit host platform上でWindows 32-bit ツールチェインを使用する必要があります)
- スタンドアローンなインストレーションとして使用
これらの商品については、代理店にお問い合わせください。
ライセンス管理や、トラブルシューティングの為のリソースはhttps://developer.arm.com/support/licensingよりアクセスできます。
1.2 Arm Compiler for Embedded FuSa 6.16LTS でサポートされたこと
ライセンス条件に従い、Arm Compiler for Embedded FuSa 6.16LTS を使用して、以下のArm アーキテクチャおよびプロセッサ用のビルドが行えます:Architecture | Cortex | Neoverse | Other | |
---|---|---|---|---|
Standard | Automotive Enhanced | |||
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-MC1 | ||
Armv7-M | M7, M4, M3 | SecurCore SC300 | ||
Armv6-M | M1, M0, M0+ | SecurCore SC000 |
アーキテクチャとプロセッサのサポートレベルの詳細については、開発スイートのドキュメントを参照してください。
- 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
2. インストール方法とIDEへの統合
Arm Compiler for Embedded FuSa 6.16LTS は以下の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 8.1 Windows 10 |
Windows 64-bit | スタンドアロン製品として使用 Arm Development Studio へ統合 |
Windows 32-bit | Keil MDKへ統合 |
注意:
- Arm Compiler for Embedded FuSa 6.16LTS は、上記より古いホストOS上での動作は期待できません
- Keil MDKライセンスを使用する場合、Arm Compiler for Embedded FuSa 6.16LTS は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 Compiler for Embedded FuSa 6.16.1はuser-based license をサポートしません。
以下に挙げる使用方法に応じてArm Compiler for Embedded FuSa 6.16LTS の適切なインストール場所を選択する必要があります:
- Arm Development Studio Gold Edition 2021.2 以降に統合
- Arm Development Studio Platinum Edition 2021.c 以降に統合
- Keil MDK-Professional 5.36 以降に統合
- スタンドアロン製品として使用
関連する手順については以下を参照してください:
- インストール手順: User Guide 内 Installing Arm Compiler の章
- FlexNet Publisher ライセンスとツールキットのコンフィギュレーション手順:https://developer.arm.com/tools-and-software/software-development-tools/license-management/resources/product-and-toolkit-configuration
※本内容は弊社FAQページでも日本語での解説を行っております。内容の一部は保守契約ユーザ様にのみ公開をしておりますのであらかじめFAQページにログインの上ご参照ください:
Arm Compilerを呼びだす環境別のライセンスおよび設定について ( LIC-D-25 )
- User-based licensing ドキュメンテーション
- 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.16.<update_number> です。
2.http://www.keil.com/support/man/docs/uv4/uv4_armcompilers.htmにある手順に従ってツールチェインを使用するようにプロジェクトをコンフィギュレーションします
3. フィードバックとサポート
お客様からのフィードバックは我々にとって重要です。製品のいかなる側面についても、障害報告と改善に関する提案を歓迎します。
機能安全関連の障害修正は、Arm Compiler for Embedded FuSa maintenance policy に従って将来のメンテナンスアップデートに対して検討されます。
フィードバックあるいはサポートが必要な問題について、お仕事あるいはアカデミックなE-mailアドレスを使用してお客様の製品の購入元にご連絡をいただくか、可能であればhttps://support.developer.arm.com
でcaseをオープンしてください。
必要に応じて、ツールからの--vsnの出力、ツールが生成するエラーメッセージの完全な内容および問題を再現するのに必要なソースコードやその他のファイルとコマンドラインを提供してください。
当社へのお問い合わせは、こちら。
4. リリース履歴と変更
以下に、Arm Compiler for Embedded FuSa 6.16LTS シリーズのリリース日付を示します:- 6.16.2 (2022年04月にリリースされました)
- 6.16.1 (2021年09月にリリースされました)
前回のリリースと比較した場合の新しい機能と修正された不具合の概要を以下に示します。これには、機能安全関連ではない不具合の修正も含まれます。
Arm Compiler for Embedded FuSa 6.16LTS の各リリースに影響する機能安全関連の障害に関する情報については、最新のArm Compiler for Embedded FuSa 6.16LTS Qualification Kit Defect Report を参照してください。 この情報には、技術的な不正確さや誤記が含まれている可能性があり、リリースノートの将来の版で変更される可能性があります。
それぞれの変更点には、ユニークな識別子SDCOMP-
もしArmへこのリリースノート内の特定の問題について連絡が必要な場合、適切な識別子を通知してください
4.1 Arm Compiler for Embedded FuSa 6.16.2 での変更点
Arm Compiler for Embedded FuSa 6.16.2 での一般的な変更
- [SDCOMP-60297] これまでarmclang はSTAR-MC1 プロセッサに対してStarの名称を使用していました。これは変更され、さらにarmasm, armlink およびfromelf はSTAR-MC1プロセッサをサポートするようになりました。STAR-MC1をターゲットとするには以下のオプションから選択してください:
DSP 浮動小数点 armclang armasm, armlink およびfromelf あり あり --target=arm-arm-none-eabi -mcpu=star-mc1 --cpu=Star-MC1 あり なし --target=arm-arm-none-eabi -mcpu=star-mc1 -mfloat-abi=soft --cpu=Star-MC1.no_fp なし あり --target=arm-arm-none-eabi -mcpu=star-mc1+nodsp --cpu=Star-MC1.no_dsp なし なし --target=arm-arm-none-eabi -mcpu=star-mc1+nodsp -mfloat-abi=soft --cpu=Star-MC1.no_dsp.no_fp - [SDCOMP-59207] 以下のリンカのワーニングは注釈にダウングレードされました:
- L6413W: Disabling merging for <object>(<section>), Section contains misaligned string(s)
- [SDCOMP-58875] 以下のリンカのワーニングは注釈にダウングレードされました:
- L6440W: Disabling merging for <object>(<string_section>), unsupported relocation R_ARM_REL32 from <object>(<other_section>) to STT_SECTION type symbol
- [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-MC1 緩和有効
デフォルトで緩和が有効化されており、無効化したい場合は -mno-fix-cmse-cve-2021-35465 コンパイルオプションを使用してください。
より詳細についてはhttps://developer.arm.com/support/arm-security-updates/vlldm-instruction-security-vulnerabilityを参照してください。
Arm Compiler for Embedded FuSa 6.16.2 での機能改善
armclang
- [SDCOMP-59314] トリビアルな自動変数の初期化を制御する-ftrivial-auto-var-initオプションをサポートしました。
より詳細についてはReference Guide内-ftrivial-auto-var-init の章を参照してください。 - [SDCOMP-59314] Aggresive Jump Threading(AJT) 最適化を有効または無効化する -faggressive-jump-threading および -fnoaggressive-jump-threading オプションがサポートされました。
より詳細については、Reference Guide内の-faggressive-jump-threading, -fnoaggressive-jump-threading の章を参照してください。
armlink
- [SDCOMP-58400] Arm Compiler 6.16 またはそれ以前のLTO bitcode を含む入力オブジェクトの検知についてサポートしました。
Arm Compiler 6.16 またはそれ以前のバージョンでLTO を有効にしてコンパイルされた入力オブジェクトが見つかった場合リンカは以下のエラーを返すようになりました:
- L6123E: LTO bitcode in '<object>' was generated by an incompatible version of armclang
ライブラリとシステムヘッダ
- [SDCOMP-58721] [ALPHA] Arm C++ library Thread-Porting Layer(TPL) に対し、 __ARM_TPL_condvar_monotonic_timedwait() 関数が追加されました。
より詳細についてはArm C and C++ Libraries and Floating-Point Support User Guide 内Condition variables [ALPHA] の章を参照してください。
Arm Compiler for Embedded FuSa 6.16.2 で修正された不具合
armclang
- [SDCOMP-60177] AArch64 状態に対し -march=armv8-r を使用した場合、 コンパイラと統合アセンブラは誤って以下の機能を有効化していました:
- AArch64 Performance Monitors Extension に対するArmv8.4-A additions
- 半精度浮動小数点拡張
- Speculation Barrier 命令
- Speculation 制限命令
- Speculative Store Bypass Safe
- [SDCOMP-59974] AArch64状態に対し最適化レベル -O0、-O1 以外で-fwrapv オプションとともにコンパイルする場合、ネストしたループに対して誤ったコードを生成する可能性がありました。
- [SDCOMP-59879] __VERSION__ 事前定義マクロに基となるClangバージョンの後に余分な文字が誤って追加されていました。
- [SDCOMP-59809] コンパイラは、PATH 環境変数で指定されたディレクトリ内の特定の不要なファイルを誤って検索していました。 これによってコンパイルが遅くなる可能性がありました
- [SDCOMP-59656] AArch64状態に対し最適化レベル -O0 でコンパイルする場合、64ビット未満で表すことができ、ポインタ型にキャストされる整数リテラルに対して誤ったコードを生成する可能性がありました。
- [SDCOMP-59605] -mno-unaligned-access オプションを指定した場合、 __attribute__((packed)) または#pragma pack によって注釈されたC++ クラスまたはクラスデータメンバに対してワーニングのレポートに失敗することがありました。この問題は修正され、以下のワーニングをレポートするようになりました:
- field <member> within '<class A>' is less aligned than '<class B>' and is usually due to '<class A>' being packed, which can lead to unaligned accesses
- [SDCOMP-59074] AArch64状態に対し最適化レベル -O0 でコンパイルする場合、 常に true と評価される比較演算に対して誤ったコードを生成する可能性がありました。
- [SDCOMP-59059] -frwpi と、 -g または -gdwarf-version を指定した場合、const ではないグローバル変数について不正なデバッグ情報を生成する可能性がありました。
- [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-58523] コンパイラ、インラインアセンブラおよび統合アセンブラは誤ってArmv8-R AArch64 ターゲットに対してデフォルトで暗号化命令を有効にしていました。
- [SDCOMP-57884] C++ 例外を有効にしてC++ ソース言語モードでコンパイルした場合、負の配列長または配列長よりも長い初期化子を指定するnew nothrough 例外に対して、誤って std::bad_array_new_length 例外を引き起こすコードを生成することがありました。
- [SDCOMP-52680] Armv8-R AArch64 ターゲットに対するアセンブル時、インラインアセンブラおよび統合アセンブラはアクセスするシステムレジスタとして VSTTBR_EL2 または VTTBR_EL2 を定義した MRS または MSR 命令に対して誤ってエラーのレポートに失敗することがありました。この問題は修正され、インラインアセンブラおよび統合アセンブラは以下のいずれかのエラーを返すようになりました:
- expected readable system register
- expected writable system register or pstate
armlink
- [SDCOMP-59391] AArch64状態に対するリンクで、入力オブジェクト内にセクションシンボルへの分岐が含まれている場合、リンカは次のエラーを誤ってレポートすることがありました:
- L6286E: Relocation #RELA:<relocation_number> in <object>(<section>) with respect to [Anonymous Symbol]. Value(<value>) out of range(<range>) for (R_AARCH64_CALL26)
- [SDCOMP-57994] リンカは、2つの同じリンカ呼び出しに対して cbrtf() または strcmp() Arm C ライブラリ関数について異なる実装を誤って選択することがありました。
fromelf
- [SDCOMP-59890] DWARF 4デバッグ情報とバージョン4未満のDWARFラインテーブルストラクチャを含むELF形式の入力ファイルを処理する場合、デバッグ行情報の生成を失敗することがありました。
ライブラリとシステムヘッダ
- [SDCOMP-60157] POSIX mbsnrtowcs() 関数のArm Cライブラリ実装は、ディスティネーションポインタがnullポインタの場合、ソースポインタを誤って更新する可能性がありました。
- [SDCOMP-59569] std::mutex::try_lock() および std::recursive_mutex::try_lock() 関数のArm C++ ライブラリThread-Porting Layer (TPL) 実装が誤った戻り値を返す可能性がありました。
- [SDCOMP-59054] std::allocator<T>::allocate() 関数のArm C++ライブラリ実装は std::bad_alloc または std::bad_array_new_length の代わりに誤って std::length_erro 例外を引き起こすことがありました。
- [SDCOMP-58588] mbsrtowcs() および wcsrtombs() 関数のArm C ライブラリ実装で、デスティネーションポインタがnull ポインタの場合、ソースポインタが指すポインタオブジェクトが誤って更新されることがありました。
- [SDCOMP-58561] snprintf() 、 swprintf() 、 vsnprintf() 、および vswprintf() 関数のArm C ライブラリ実装で、バッファに空の文字列が誤って書き込まれる可能性がありましたが、負ではない結果が返されていました。
- [SDCOMP-58560] AArch64 状態の scalblnf() 関数のArm C ライブラリ実装で、不正な結果を返す可能性がありました。
- [SDCOMP-58304] fgets() および fgetws() 関数のArm C ライブラリ実装で、誤ってnull ポインタが返され、また、読み取りバッファの終端にnull 文字'\0' を設定できないことがありました。
- [SDCOMP-58044] stdio.h で定義されている関数のArm C ライブラリ実装システムヘッダが、マルチスレッド環境でスレッド間のデッドロックを誤って発生させる可能性がありました。
4.2 Arm Compiler for Embedded FuSa 6.16.1 での変更点
以下に直前のリリースである非認証版Arm Compiler 6.16からの変更点を示します。Arm Compiler for Embedded FuSa 6.16.1 での一般的な変更
- [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 の章を参照してください。
Arm Compiler for Embedded FuSa 6.16.1 での機能改善
armclang
- [SDCOMP-58508] C++14 サイズ付きデアロケーションを有効にする-fsized-deallocation オプションをサポートしました。詳細については、Reference Guide 内の、
-fsized-deallocation および-fno-sized-deallocation の章を参照してください。 - [SDCOMP-51769] C++ Run-Time Type Information (RTTI) 機能の使用時に要求されるコードの生成を無効にする-fno-rtti オプションをサポートしました。詳細については、Reference Guide 内の、
-frtti および-fno-rtti の章を参照してください。
armlink
- [SDCOMP-58030] リンカとは異なるバージョンのコンパイラから生成されたLTO bitcode を含む入力オブジェクトの検出をサポートしました。
リンカは、入力オブジェクトが異なるバージョンのコンパイラによってLTO を有効にしてコンパイルされた場合に、以下のエラーをレポートするようになりました:
- L6123E: linking module flags 'armcompiler-version': IDs have conflicting values in '
' and ' '
- L6123E: linking module flags 'armcompiler-version': IDs have conflicting values in '
ライブラリとシステムヘッダ
- [SDCOMP-58167] 以前は、Arm C++ ライブラリヘッダ<complex> をプログラムに含めると、C++ ライブラリI/O stream の初期化コードが常に最終イメージに含まれていました。本バージョンより初期化コードは必要な場合にのみ含まれます。これにより、特定のC++ プログラムのコードサイズが大幅に改善されます。
Arm Compiler for Embedded FuSa 6.16.1 で修正された不具合
armclang
- [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-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-57947] --legacyalign オプションなしでリンクした場合、入力オブジェクトにアラインメントが4 バイト未満のセクションが含まれているとリンカは、対応する出力セクションのアドレスが正しくないリンカ定義シンボルを生成する可能性がありました。
- [SDCOMP-57871] Load Region を記述するELF プログラムヘッダのp_memsz フィールドの値を誤って小さすぎる値に計算する可能性がありました。
- [SDCOMP-57336] LTO を有効にしてコンパイルされたオブジェクトをリンクする場合、異なるタイプのデータセクションを1 つのELF セクションに誤ってマージする可能性がありした。
fromelf
- [SDCOMP-57158] fromelfユーティリティは特定のA64 HINT 命令をBTI 命令またはMSR 命令として誤ってディスアセンブルする可能性がありました。
ライブラリとシステムヘッダ
- [SDCOMP-58240] AArch64 状態のArm C ライブラリのFPIC バリアントにおいて、リンカがライブラリの初期化コード内にUDF 命令を間違って含む可能性がありました。
- [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-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: