Arm Compiler 6.11のリリースノート

目次

  1. 紹介
    1. Arm Compiler 6 の構成
    2. Arm Compiler 6.11 でサポートされたこと
  2. インストール方法
    1. DS-5 5.20 以降への統合
    2. Keil MDK 5.22 への統合
    3. スタンドアロン製品として使用
    4. Linuxへのインストール
    5. Windowsへのインストール
  3. アンインストール
  4. ドキュメンテーション
  5. フィードバックとサポート
  6. リリース履歴と変更

1. 紹介

これは、リリース時に提供されたリリースノートの最初のセットです。
リリースノートの 最新版 については、 https://developer.arm.com をご参照ください。

Arm Compiler 6.11は、以下のように使用されることを意図しています:

これら製品から少なくとも1つの適切なライセンスが利用可能である必要があります。
ライセンスの購入については info-arm@dts-insight.co.jp へご連絡ください。

フローティングライセンスをご使用の場合は、 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は、Arm Compiler 5の後継であり、以下にリストされたコンポーネントを含みます。以前のプロジェクトからプロジェクトを移行するための情報は、製品ドキュメンテーション内の Migration and Compatibility Guide をご覧ください。

アセンブラに関する注意事項:


1.2 Arm Compiler 6.11 でサポートされたこと

次の表は、最も一般的なツールキットのサポートレベルを示しています:
アーキテクチャおよびプロセッサ サポートレベル ライセンス / 構成
MDK-Lite MDK-Essential MDK-Plus MDK-Professional DS-5 Professional DS-5 Ultimate
Armv8-A Cortex-A76AE/A76/75/73/72/57/55/53/35/32 サポート済み - - - - - Yes
Armv7-A Cortex-A17/15/12/9/8/7/5 サポート済み - - - Yes Yes Yes
Armv8-R Cortex-R52 サポート済み - - - - - Yes
Armv7-R Cortex-R8/7/5 サポート済み - - - - Yes Yes
Cortex-R4F/4 サポート済み - - Yes Yes Yes Yes
Armv8-M Cortex-M35P/33/23 サポート済み - 非セキュアのみ Yes Yes Yes Yes
Armv7-M SC300 サポート済み - - Yes Yes Yes Yes
Cortex-M7/4/3 サポート済み 32 Kbyte コード制限 Yes Yes Yes Yes Yes
Armv6-M SC000 サポート済み - - Yes Yes Yes Yes
Cortex-M0/M0+ サポート済み 32 Kbyte コード制限 Yes Yes Yes Yes Yes
Armv6-M 以前のアーキテクチャ 未サポート - - - - - -
Arm以外のアーキテクチャ 未サポート - - - - - -

サポートレベル 説明
サポート済み 製品品質を保ち、一番高位のサポート優先度
ベータ 実装は完了済みだが、テストは部分的。お客様の試用とフィードバックを歓迎
アルファ 実装は未完了でテストは部分的。お客様の試用とフィードバックを歓迎
コミュニティ オープンソーステクノロジで利用可能な追加機能がARM Compiler 6に組込み済み。Arm社はこれら機能の品質レベルや機能レベルへの言及はしない。お客様の試用とフィードバックを歓迎
未サポート 機能がツールチェインに含まれていないか非推奨になっており、テストは未実施 当該機能を使用する場合は完全な自己責任。

他のツールキットでサポートされているアーキテクチャとプロセッサについては、販売元にお問い合わせください。

サポートされている機能および機能のサポートレベルの詳細については、製品のマニュアルを参照してください。

2. インストール方法

Arm Compiler 6.11が、ツールキット(例:DS-5)の一部として含まれている場合、ツールキットのインストーラがインストレーションプロセスを処理します。ツールキットのインストレーション方法を参照してください。
その他のケースの場合、Arm Compiler 6.11 をどのように使用するかに依存して適切なインストレーションの場所を選択する必要があります:

2.1. DS-5 5.20 以降への統合

Arm Compiler 6.11 は、DS-5製品のインストレーションの外であるなら、デフォルトの場所を含み、任意の場所にインストールすることができます。
インストール後、
https://developer.arm.com/products/software-development-tools/ds-5-development-studio/resources/tutorials/adding-new-compiler-toolchains-to-ds-5
のチュートリアルで示す方法に従って、DS-5 5.20以降のツールチェーンに統合することができます。

DS-5 Eclipse IDE あるいは DS-5 Command PromptからArm Compiler 6.11 を使用することをおすすめします。これら環境の外でツールチェーンを使用するとき、以下の環境変数の構成が必要となります:
詳細な情報は、 https://developer.arm.com/products/software-development-tools/license-management/resources/product-and-toolkit-configuration をご確認ください。

2.2. Keil MDK 5.22 以降への統合

Arm Compiler 6.11はKeil MDKインストレーションの ARM サブディレクトリ以下にインストールする必要があります。たとえば、Keil MDKインストレーションがC:\Keil_v5\の場合、C:\Keil_v5\ARM\ARMCompiler6.11へインストールすることをおすすめします。

Arm Compiler 6.11 32-bit Windows バージョンのみが、KeilシングルユーザライセンスまたはKeil Floating-Userライセンスと一緒に使用できます。

インストール後、
http://www.keil.com/support/man/docs/uv4/uv4_armcompilers.htm
のチュートリアルで示す方法に従って、MDKのプロジェクトへツールチェーンの統合が可能です。

2.3. スタンドアロン製品として使用

Arm Compiler 6.11をDS-5のパッケージ外からインストールする場合、デフォルトの場所を含み、任意の場所にインストールすることができます。

環境変数 ARMLMD_LICENSE_FILE がライセンスファイルまたはライセンスサーバーを指していることを確認します。
DS-5 Professional Editionライセンスを使用していない場合、 ARM_TOOL_VARIANT を適切に設定してください。
詳細な情報は、
https://developer.arm.com/products/software-development-tools/license-management/resources/product-and-toolkit-configuration
をご確認ください。

2.4. Linuxへのインストール

Arm Compiler 6.11は、以下のサポートされるプラットフォームでテストされています:
Arm Compiler 6.11 は、古いプラットフォームでは動作しません。

Arm Compiler 6.11 をインストールするには、 install_x86_64.sh を実行( source ではありません) し、画面の指示に従ってください。インストーラは、Arm Compiler 6.11 をお客様が指定したディレクトリに解凍します。
armclang バイナリは、お客様の指定したディレクトリ内にArm Compiler 6.11 の一部としてインストールされたlibstdc++のコピーへ動的にリンクされています。


2.5. Windowsへのインストール

Arm Compiler 6.11 は、以下のサポートされるプラットフォームでテストされています:
Arm Compiler 6.11 古いプラットフォームでは動作しません。

Arm Compiler 6.11は、2018年10月現在、Windows 10の最新の機能アップデートでテストされています。以降のアップデートでも問題なく動作することが期待されます。
Windows 64-bitホストプラットフォーム上でArm Compiler 6.11をインストールするために、win-x86_64\setup.exeを実行し、画面の指示に従ってください。
Windows 32-bitホストプラットフォーム上でArm Compiler 6.11をインストールするために、 win-x86_32\setup.exeを実行し、画面の指示に従ってください。
以前のバージョンのArm Compiler 6 がすでにインストールされており、アップグレードしたい場合は、以前のバージョンを一旦アンインストールしてから新しいバージョンのArm Compiler 6 をインストールいただくことを推奨します。
Arm Compiler 6はMicrosoft Visual Studio 2015で構築されており、WindowsのUniversal C Runtimeをインストールする必要があります。詳細な情報は、
https://support.microsoft.com/en-gb/help/2999226/update-for-universal-c-runtime-in-windows
をご確認ください。

3. アンインストール

Linuxでは、Arm Compiler 6.11インストールディレクトリを削除してください。

Windowsでは、コントロールパネルのプログラムの追加と削除からArm Compiler 6.11を選択し、アンインストールボタンを押下してください。

4. ドキュメンテーション

Arm Compiler 6.11 の以下ドキュメントが利用可能です。
  • User Guide
  • armar User Guide
  • armasm User Guide
  • armclang Reference Guide
  • armlink User Guide
  • fromelf User Guide
  • Arm C and C++ Libraries and Floating-Point Support User Guide
  • Migration and Compatibility Guide
  • Software Development Guide
  • Errors and Warnings Reference Guide
  • Scalable Vector Extension User Guide
より詳細な情報は、
developer.arm.com 内の
Arm Compiler 6 documentation
をご確認ください。

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://developer.arm.com/support
へご連絡ください。
必要に応じて、ツールからの --vsn の出力、問題を再現するのに必要なソースコードおよびその他のファイルとコマンドラインを提供してください。

当社へのお問い合わせは、 こちら

6. リリース履歴と変更

以下に、Arm Compiler 6.11 シリーズのリリース日付を示します:
  • 6.11 (2018年10月にリリースされました)

以下に、新しい機能と修正された不具合を含むそれぞれのリリースで変更された概要を示します。
特に指定がない限り、一つ前のリリースからの変更点を示します。
それぞれの項目別に分類され、ユニークな識別子SDCOMP-<NNNNN>を伴います。
もしARMへこのリリースノート内の特定の問題について連絡が必要な場合、適切な識別子を通知してください

Arm Compiler 6.11での変更点

以下に直前のリリースであるArm Compiler 6.10からの変更点を示します。

Arm Compiler 6.11での一般的な変更

  • [SDCOMP-51284] Armv8.3-A およびそれ以降をターゲットとした分岐保護機能のサポートが追加されました。分岐保護機能を使用するには、以下のオプションを選択してください:
    armclang:
    • -mbranch-protection=protection を使用して分岐保護のレベルまたはタイプを選択します。
    armlink:
    • --library_security=protection を使用して分岐保護用の保護ライブラリの選択を制御します。
    これらオプションのより詳細な情報については armclang Reference Guide 内の -mbranch-protection セクションおよび armlink User Guide 内の --library_security=protection のセクションを参照ください。

  • [SDCOMP-49171] __declspec は非推奨になりました。
    __declspecの__attribute__による置き換えについては、 Migration and Compatibility Guide を参照してください。

  • [SDCOMP-51014] Cortex-A76プロセッサのサポートが追加されました。Cortex-A76をターゲットにするには、以下のオプションから選択してください:
    armclang:
    • --target=aarch64-arm-none-eabi -mcpu=cortex-a76 :AArch64 ステート用
    • --target=arm-arm-none-eabi -mcpu=cortex-a76 :AArch32 ステート用
  • armasm armlink および fromelf:
    • --cpu=8.2-A.64 :AArch64 ステート用
    • --cpu=8.2-A.32 :AArch32 ステート用

  • [SDCOMP-51015] Cortex-M35Pプロセッサのサポートが追加されました。Cortex-M35Pをターゲットにするには、以下のオプションから選択してください:
    armclang:
    • --target=arm-arm-none-eabi -mcpu=cortex-m35p :DSPとFPを持つバリアント用
    • --target=arm-arm-none-eabi -mcpu=cortex-m35p+nodsp :DSPなしでFPを使用するバリアント用
    • --target=arm-arm-none-eabi -mcpu=cortex-m35p -mfloat-abi=soft :FPなしでDSPを使用するバリアント用
    • --target=arm-arm-none-eabi -mcpu=cortex-m35p+nodsp -mfloat-abi=soft :DSPとFPのないバリアント用
  • armasm armlink および fromelf:
    • --cpu=Cortex-M35P :DSPとFPを持つバリアント用
    • --cpu=Cortex-M35P.no_dsp :DSPなしでFPを使用するバリアント用
    • --cpu=Cortex-M35P --fpu=SoftVFP :FPなしでDSPを使用するバリアント用
    • --cpu=Cortex-M35P.no_dsp --fpu=SoftVFP :DSPとFPのないバリアント用

  • [SDCOMP-50232] 古い SHF_COMDEF  ELFセクションフラグを含むELFセクションのサポートは非推奨となりました。
    以下の項目が対象です:
    • armasm の書式 AREA ディレクティブによる COMDEF セクション属性
    • SHF_COMDEF ELFセクションフラグを含むELFセクションが存在するレガシーオブジェクトとのリンク
    COMDEF ELFセクションフラグの代わりに GRP_COMDAT ELFセクションフラグを以下の方法を利用して使用するようにしてください:
    • armasm の書式 AREA ディレクティブによる COMDEF セクション属性を COMPGROUP =symbol nameセクション属性で置き換える
    • 互換性のないArm Compiler 5あるいはそれ以前のバージョンで生成された古いオブジェクトを以下のいずれかの方法で再ビルドする
      • 以前とおなじバージョンのコンパイラで--dwarf3オプションを利用する
      • Arm Compiler 6

    armasm の書式 AREA ディレクティブによる COMGOURP = symbol_name セクション属性の詳細については、 armasm User Guide を参照してください。

    GRP_COMDAT ELFセクションフラグと COMDAT グループの詳細については、 Itanium C++ ABI を参照してください。

  • [SDCOMP-50292] 32-bit Application Binary Interface for the Arm Architectureに準拠していない旧R-typeダイナミックリンクモデルは非推奨となりました。
    以下の項目が対象です:
    • --reloc オプション付きリンク
    • RELOC ロードリージョン属性を含むスキャッタファイルを使用した --base_platform オプション無しのリンク
    旧R-typeダイナミックリンクモデルを使用する代わりに Base Platform and Base Platform Application Binary Interface (BPABI) リンクモデルを使用してリロケータブルな実行可能ファイルを生成するようにしてください。

    Base PlatformとBPABIリンクモデルの詳細については、 armlink User Guide を参照してください。

  • [SDCOMP-51090] C++14ソース言語モードが完全サポートされました。C++14ソースコードのコンパイルを行うには以下のオプションのいずれかを使用してください:
    • --std=c++14
    • --std=gnu++14
    デフォルトは-std=gnu++14です。こららのオプションの詳細については armclang Reference Guide および Software Development Guide LLVM component versions and language Compatibility セクションを参照してください。

  • [SDCOMP-49953] Armv8.2-Aおよびそれ以降をターゲットとする半精度浮動小数点飽和ロング乗算命令をサポートしました。Armv8.2-Aおよびそれ以降をターゲットとしてこれら命令を使用するには以下のオプションから選択してください:
    armclang:
    • --target=aarch64-arm-none-eabi -march=armv8.< ext > -a+fp16fml :Armv8.< ext > -AターゲットでのAArch64ステート用(< ext > は2以上)
    • --target=arm-arm-none-eabi -march=armv8.< ext > -a+fp16fml :Armv8.< ext > -AターゲットでのAArch32ステート用(< ext > は2以上)
  • armlink および fromelf:
    • --cpu=8.< ext > -A.64 :Armv8.< ext > -AターゲットでのAArch64 ステート用(< ext > は2または3)
    • --cpu=8.< ext > -A.32 :Armv8.< ext > -AターゲットでのAArch32 ステート用(< ext > は2または3)
    • Armv8.4-Aおよびそれ以降をターゲットとする場合 --cpu=name オプションは使用しないでください。

    旧アセンブラ( armasm )はこれらの命令をサポートしません。これらの命令はArmv8.2-AおよびArmv8.3Aにおけるオプション実装となります。
    これらのオプションの詳細については、 armclang Reference Guide -march および -mcpu の項目を参照してください。

  • [SDCOMP-52123] Cortex-A76AEプロセッサのサポートが追加されました。Cortex-A76AEをターゲットにするには、以下のオプションから選択してください:
    armclang:
    • --target=aarch64-arm-none-eabi -mcpu=cortex-a76ae :AArch64 ステート用
    • --target=arm-arm-none-eabi -mcpu=cortex-a76ae :AArch32 ステート用
    armasm armlink および fromelf:
    • --cpu=8.2-A.64 :AArch64 ステート用
    • --cpu=8.2-A.32 :AArch32 ステート用

  • [SDCOMP-52124] Armv8.5-A アーキテクチャのサポートが追加されました。Armv8.5-Aをターゲットにするには、以下のオプションから選択してください:
    armclang:
    • --target=aarch64-arm-none-eabi -march=armv8.5-a :AArch64 ステート用
    • --target=arm-arm-none-eabi -march=armv8.5-a :AArch32 ステート用
    armlink および fromelf:
    • --cpu=name オプションは使用しないでください。

    Armv8.5-Aに対する armclang のインラインアセンブラ、統合アセンブラおよび分岐保護機能のサポートは限定的です。将来のArm Complier armclang ではArmv8.5-Aに対する完全なサポートが行われる予定です。

    旧アセンブラ armasm はArmv8.5-Aをサポートしません。

  • [SDCOMP-52126] Armv8.5-A のメモリタグ拡張オプションのサポートが追加されました。Armv8.5-Aをターゲットとしてメモリタグ拡張を使用するには、以下のオプションから選択してください:
    armclang:
    • --target=aarch64-arm-none-eabi -march=armv8.5-a+memtag :AArch64 ステート用
    armlink および fromelf:
    • --cpu=name オプションは使用しないでください。

    旧アセンブラ armasm はArmv8.5-Aをサポートしません。メモリタグ拡張はAArch32ステートではサポートされません。

    より詳細については armclang Reference Guide を参照してください。

  • [SDCOMP-52130] Armv8.5-A の乱数命令オプションのサポートが追加されました。Armv8.5-Aをターゲットとして乱数命令を使用するには、以下のオプションから選択してください:
    armclang:
    • --target=aarch64-arm-none-eabi -march=armv8.5-a+rng :AArch64 ステート用
    armlink および fromelf:
    • --cpu=name オプションは使用しないでください。

    旧アセンブラ armasm はArmv8.5-Aをサポートしません。乱数命令はAArch32ステートではサポートされません。

    より詳細については armclang Reference Guide を参照してください。

Arm Compiler 6.11での拡張

コンパイラと統合されたアセンブラ(armclang)
  • [SDCOMP-44910] コンパイラ名とバージョン情報を出力ファイルに含めるかどうかを制御する -fident および -fno-ident オプションをサポートしました。
    これらのオプションのより詳細については armclang Reference Guide を参照してください。

Linker(armlink)
  • [SDCOMP-44481] 以下のリンカオプションは削除されました:
    • --compress_debug および --no_compress_debug
    • --match=crossmangled
    • --strict_enum_size および --no_strict_enum_size
    • --strict_wchar_size および --no_strict_wchar_size

一般的な改善
  • [SDCOMP-50658] Armv7-MをターゲットとするPosition Independent eXecute Only (PIXO)ライブラリ機能がサポートされました。PIXOライブラリは以下のオプションで使用可能となります:
    armclang:
    • -mpixolib オプションでPIXOライブラリを生成可能
    armlink:
    • --pixolib オプションでPIXOライブラリを生成可能

    これらのオプションの詳細については armclang Reference Guide -mpixolib および、 armlink User Guide -pixolib の項目をご参照ください。

Arm Compiler 6.11で修正された不具合

コンパイラと統合されたアセンブラ(armclang)
  • [SDCOMP-51736] Cortex-M23 をターゲットとして-mexecute-onlyを使用したコンパイル時、コンパイラは誤ってリテラルプールの生成の無効化に失敗することがありました。その後、リンク時にリンカは Error: L6837E: Illegal data mapping symbol found in execute-only section < object > (< section > ) をレポートしていました。

  • [SDCOMP-51633] Armv8-M をターゲットとしてDSP拡張を有効化したコンパイル時、コンパイラは誤って Arm C Language Extensions (ACLE) 32-bit SIMD 組み込み関数の定義に失敗することがありました。

  • [SDCOMP-51568] 特定の環境下でハードウェア浮動小数点をサポートするターゲット、且つAArch32状態をターゲットとしたコンパイル時、予測不能な結果を起こしうる、 VLDM または VSTM 命令を誤って生成することがありました。

  • [SDCOMP-51399] 特定の環境下で、-O0以外のあらゆる最適化レベルにおいて、-gまたは-gdwarf-versionオプション使用時、コンパイラは誤って Segmentation fault (core dumped) をレポートすることがありました。

  • [SDCOMP-51241] 特定の環境下で、大量のネストしたプリプロセッサマクロ拡張を含むコードをWindows環境でビルドする際、コンパイラは誤って error: clang frontend command failed due to signal をレポートすることがありました。

  • [SDCOMP-51054] 特定の環境下で、定数グローバル変数 V のためのデータマッピングシンボルの生成を、コンパイラは誤って失敗することがありました。その後、リンク時にリンカは V Data タイプではなく Code タイプとして扱い、予期しないランタイムの振る舞いを引き起こすことがありました。

  • [SDCOMP-50997] A B がセクション名である、先行する #pragma clang text="A" 式の影響を受ける __attribute__((section("B"))) のアノテーションが付与された関数をコンパイラは誤って空の名前のセクションに配置することがありました。

  • [SDCOMP-50915] 特定の環境下で、Main Extension、Security Extensionおよびハードウェアフローティングポイントが有効なArm v8-Mでbig-endianをターゲットとしたコンパイル時、コンパイラは倍精度浮動小数点パラメータを持つセキュア関数からノンセキュア関数の呼び出しを行うコードを誤った生成を行うことがありました。

  • [SDCOMP-50794] 特定の環境下で、-O0以外のあらゆる最適化レベルにおいて、Main Extensionを含まないArm v8-MおよびArm v6-Mをターゲットとするコンパイル時、コンパイラは誤って fatal error: error in backend: Cannot select: < value > をレポートすることがありました。

  • [SDCOMP-50662] register キーワードを使用して、レジスタ R に割り当てられる変数 V を含むコードのコンパイル時、 V を入力または出力変数として使用し、 R を破壊 (clobber)リストに含めるインラインアセンブラの式を使用した場合、コンパイラは誤ったエラーをレポートすることがありました。この問題は修正され、現在は error: asm-specifier for input or output variable conflicts with asm clobber list をレポートするようになりました。

  • [SDCOMP-50628] まれな環境下で、AArch64状態に対する-O0以外のあらゆる最適化レベルにおいて、コンパイラは誤って16バイトよりも大きなアライメントを持つローカル変数を定義する関数のコードを生成することがありました。

  • [SDCOMP-50565] 特定の環境下で、AArch32状態に対して -mfloat-abi=hard オプションを使用して、ホモジーニアスなアグリゲート引数 P を伴う関数 F を含むようなコードのコンパイル時に、スタックからのセーブおよびリストアを行う際に P についてアラインをオーバーするような要素を誤って生成することがありました。このようなコードは Procedure Call Standard for the Arm® Architecture ABI release 2.09 Parameter Passing セクションの内容に準拠していません。

  • [SDCOMP-50563] 特定の環境下で、インラインアセンブル時、破壊 (clobber)リストに予約レジスタを含むようなインラインアセンブリ式に対するワーニングの生成に失敗することがありました。この問題は修正されインラインアセンブラは warning: inline asm clobber list contains reserved registers: をレポートするようになりました。

    以下のレジスタはコンパイラによって予約されることがあります:
    • AArch64状態でコンパイル時のSP, WZR, W19 および W29
    • AArch32状態でコンパイル時のR6, R13, SP, R15 および PC
    • T32状態でコンパイル時のR7
    • AArch32状態で -mpixolib を使用したコンパイル時のR8
    • AArch32状態で -frwpi, -frwpi-lowering あるいは -mpixolib を使用したコンパイル時のR9
    • A32状態でコンパイル時のR11

  • [SDCOMP-50528] 特定の環境下で、 class, struct または union 型に対するオーバーアラインのパラメータ P を伴う関数呼び出しを含むプログラムのコンパイル時、ミスアラインのAArch64状態に対する-O0以外のあらゆる最適化レベルにおいて、コンパイラは誤って P を生成することがありました。このようなコードは Procedure Call Standard for the Arm® Architecture ABI release 2.09 Parameter Passing セクションの内容に準拠していません。

  • [SDCOMP-50520] 特定の環境下で、Security Extensionおよびハードウェアフローティングポイントが有効なArm v8-Mをターゲットとしたコンパイル時、コンパイラは __attribute__((cmse_nonsecure_entry)) でアノテートされたノンセキュアな関数に対して誤ったコードを生成することがありました。

  • [SDCOMP-50433] インラインアセンブラと統合アセンブラは浮動小数点レジスタのオペランドとしてノンシーケンシャルな単精度浮動小数点レジスタのセットを定義した VMOV 命令について誤ってエラーを出力しないことがありました。その代わりに正しい単精度浮動小数点レジスタオペランドを指定したものとは違うレジスタを使用した命令を間違って生成していました。この問題は修正され、インラインアセンブラおよび統合アセンブラでは error: destination operands must be sequential あるいは error: source operands must be sequential をレポートするようになりました。

  • [SDCOMP-50416] 特定の環境下で、C++例外のcatchおよびthrowを含む関数を -Oz レベルでコンパイル時、C++例外を使用して浮動小数点レジスタを保存する関数に対して不正に ARM_EIDX テーブルエントリを生成することがありました。これによって、C++例外がthrowされると例外をキャッシュする関数の変数が壊されることがありました。

  • [SDCOMP-50228] 特定の環境下で、-O0以外のあらゆる最適化レベルにおいて、可変長配列を含むプログラムのコンパイル時、コンパイラは誤って関数の戻り命令の直前のスタックポインタに誤った値を書き込むようなコードを生成することがありました。

  • [SDCOMP-50190] AArch64状態のアセンブル時、インラインアセンブラと統合アセンブラはアクセスすべきスペシャルレジスタとしてICH_ELRSR_EL2を定義した MRS 命令について不正に error: expected readable system register をレポートすることがありました。

  • [SDCOMP-50186] C++ソース言語モードでのコンパイル時、 M がクラスまたは構造体 S のスタティックメンバである場合、 S.M あるいは S-> M の形式において括弧で囲まれていない式に適用される decltype 指定子について結果の型を誤って判断することがありました。結果の型は M でなければなりませんが、不正に M への参照となっていました。

  • [SDCOMP-50128] AArch32状態のbig-endianターゲットのコンパイル時、 Q あるいは R テンプレート修飾子を伴うオペランドを持つインラインアセンブラ式を含むようなコードがあると、インラインアセンブラはオペランドに対して不正なレジスタを選択することがありました。

  • [SDCOMP-50102] C++11およびそれ以降のソース言語モードでのコンパイル時、リスト初期化内での enum 型から浮動小数点型への値の変換に対するエラーのレポートに失敗することがありました。この問題は修正され、 error: non-constant-expression cannot be narrowed from type '< enum_type > ' to '< floating-point_type > ' in initializer list のエラーを返すようになりました。

  • [SDCOMP-50062] 特定の環境下で、T32状態のコンパイル時、関数のアドレス A の最下位ビットが常に0であると誤って想定し、結果として A に関連する計算において誤ったコードを生成することがありました。

  • [SDCOMP-49962] 特定の環境下で、AArch32状態のコンパイル時、 float16x4_t あるいは float16x8_t 型の引数を持つ関数の呼び出しに不正なコードを生成することがありました。

  • [SDCOMP-49942] C++ソース言語モードでのコンパイル時、 $Sub$$ あるいは $Super$$ の接頭語を含むシンボル名を誤ってマングル化することがありました。これによってリンカは既存のシンボルに対してこれらの接頭語付きシンボルによるパッチが行えなくなり、ランタイムに予期しない動作を招くことがありました。

  • [SDCOMP-49695] AArch32状態のアセンブル時、インラインアセンブラと統合アセンブラは定数オペランドとして不正な値を定義する VMOV.I32 あるいは VMVN.I32 命令に対するエラーのレポートに失敗することがありました。その代わりにインラインアセンブラと統合アセンブラは定数オペランドとして正しい値を使用して、指定したものとは違う値を用いた命令を生成することがりました。この問題は修正され、インラインアセンブラおよび統合アセンブラでは error: invalid operand for instruction あるいは error: invalid instruction をレポートするようになりました。

  • [SDCOMP-49694] 16バイトのアライメント要求を持たない場合に、16バイトよりも大きいサイズのグローバルデータを含むコードのコンパイル時、コンパイラは誤ってグローバルデータを16バイト境界でオーバーアラインさせることがありました。


Linker (armlink)
  • [SDCOMP-45296] 特定の環境下で、 COMDAT ELFセクショングループからセクションを破棄した後、リンカは誤って Warning: L6776W: The debug frame in .debug_frame(< object > ) does not describe an executable section をレポートすることがありました。

  • [SDCOMP-30157] 特定の環境下で、 COMDAT ELFセクショングループからセクションを破棄した後、リンカは誤って Warning: L6439W: Multiply defined Global Symbol < symbol > defined in invalid_group(< object > ) rejected in favour of Symbol defined in < section > (< object > ) をレポートすることがありました。

  • [SDCOMP-29506] 特定の環境下で、ターミネートのためのNULLキャラクタで終了していないマージ可能なstringセクションを含むオブジェクトのリンク時、ワーニングのレポートに失敗することがありました。その代わりにリンカは ARM Linker: Execution interrupted due to an illegal storage access をレポートするか、任意のデータを含むイメージを生成していました。これによってリンクするたびにサイズや中身の違うイメージが生成されることがありました。この問題は修正され、 Warning: L6096W: String merge section strings.o(.conststring) is not null-terminated をレポートするようになりました。

ライブラリおよびシステムヘッダ
  • [SDCOMP-49935] 特定の環境下で、Arm C++ライブラリ実装の複素数関数である std::acos(), std::acosh(), std::asin() および std::asinh() は不正な値を返すことがありました。結果は正しい値とは異なり1つ以上のunit in the last place(ULP)に分離されてしまいます。

  • [SDCOMP-49750] 特定の環境下で、 std::valarray< T > クラステンプレートのArm C++ライブラリ実装のインスタンス化において、型 T のデストラクタあるいはデフォルトコンストラクタを使用して、間違った予期しない型 T のオブジェクトのコンストラクトあるいはデストラクトを引き起こすことがありました。

  • [SDCOMP-29067] 特定の環境下で、C++ソース言語モードで、ポインタあるいはポインタに対する多相型 A への参照から、 B A から派生するような異なった多相型 B への参照について dynamic_cast 変換を含むコードのコンパイル時、 B のパブリック基底クラスがあいまいな場合、コンパイラは誤ってNULLポインタ値を返さないことがありました。

その他の不具合
  • [SDCOMP-51100] Windows環境でArm Compilerを使用する場合、ダブルクォートを含む ARMLMD_LICENSE_FILE または ARM_PRODUCT_PATH 環境変数を使用しているとツールは誤って error: Unable to determine the current toolkit. Check that ARM_TOOL_VARIANT is set correctly をレポートすることがありました。

  • [SDCOMP-50941] MDK-ArmをインストールしてKeil Single-User License、あるいはKeil Floating-User LicenseとともにWindows 10 version 1803(April 2018 Update)でArm Compilerを使用した場合、ツールは誤って、 error: Failed to check out a license.Keil Licensing error: No TOOLS.ini file found をレポートすることがありました。

  • [SDCOMP-50663] 特定の環境下で、旧アセンブラ、ライブラリアン、リンカおよびfromelfユーティリティがコマンドライン引数に空の文字列 ("") の直後に正しいコマンドライン引数があっても誤ってエラーを返すことがありました。この問題は修正され、旧アセンブラ、ライブラリアン、リンカおよびfromelfユーティリティは空の文字列のコマンドライン引数を通常の引数として扱うようになりました。

Arm Compiler 6.11の既知の不具合

  • [SDCOMP-50507] AArch64 Armv8.2-A半精度浮動小数点コンパイラ組み込み関数のコンパイラサポートには、次の制限があります:
    • コンパイラは、浮動小数点絶対値比較用コンパイラ組み込み関数と浮動小数点整数変換用コンパイラ組み込み関数のサブセットについて、 fatal error: error in backend または error: cannot compile this builtin function yet を誤って報告します。
    • 浮動小数点乗算型拡張(要素別)の組み込み関数浮動小数点乗算型拡張(要素別)の組み込み関数 vmulxh_lane_f16() および vmulxh_laneq_f16() はサポートされていません。

  • [SDCOMP-50470] コンパイラは、 _Float16 データ型について不正なデフォルト引数生成に関連する関数呼び出しのエラーの報告に失敗することがあります。

アンケートにご協力お願いします

この解答はお客様のお役に立てましたでしょうか?

 

           

検索に戻る