Arm Compiler 5.06 update 7 (build 960) のリリースノート
1. 紹介
Arm Compiler 5.06 update 7は、Arm Compiler 5.06の最終メンテナンスアップデートです。機能安全認証要件のあるプロジェクトの場合、Arm Compiler 5.06 update 7には、Qualification KitとTÜV Certification Packが付属する安全認証バリアントがあります。 詳細については、
https://developer.arm.com/tools-and-software/embedded/arm-compiler/safety
を参照してください。
Arm Compiler 5は、サポートするArmターゲット向けの実績のある成熟したツールチェインです。本リリースをもって、Arm Compiler 5は旧製品となり、Mainstream Supportは終わりとなりました。これによりプロジェクトに懸念が生じる場合は、サプライヤに連絡するか、https://developer.arm.com/supportにアクセスしてケースを開いてください。以下に対して本コンパイラはまだ使用することができます:
- 既存のプロジェクト
- 旧Armv4、Armv5およびArmv6をターゲットとする新規プロジェクト
その他の新規プロジェクトに対しては、Armは最新のArm Compiler 6(またはそれ以降)のリリースをご使用いただくことを強く推奨します。より詳細については以下をご覧ください:
https://developer.arm.com/tools-and-software/embedded/arm-compiler
Arm Compiler 5.06 update 7 (build 960)は、以下の使用を意図しています:
- Arm Development Studio ツールキットと共に使用
- Keil MDK ツールキットと共に使用(Windows only)
- 旧DS-5 ツールキットと共に使用
- 適切なツールキットのライセンスがある場合に、スタンドアロンでのツールチェインインストレーションとして使用
ライセンスの購入については、弊社またはArm社 までご相談ください。
ライセンス管理およびライセンスに関するトラブルシューティングはhttps://developer.arm.com/support/licensing にアクセスいただくか以下の弊社FAQサイトをご参考になさってください。
フローティングライセンスをご使用の場合は、armlmdおよびlmgrdをversion 11.14.1.0以降にアップデートする必要があります。 Armは、常に、お客様が、https://developer.arm.com/products/software-development-tools/license-management/downloadsから利用できる最新版のライセンスサーバソフトウェアを使用することをお勧めします。
2. インストール方法
Arm Compiler 5.06 update 7 が、例えばArm Development Studio等のツールキットの一部として含まれている場合、ツールキットのインストーラがインストレーションプロセスを処理します。その場合はツールキットのインストール方法を参照してください。
その他のケースの場合、Arm Compiler 5.06 update 7をどのように使用するかに依存して適切なインストレーションの場所を選択する必要があります:
- Arm Development Studio 2019.1 以降に統合する
- Keil MDK 5.12 以降に統合する
- 旧DS-5 5.20 以降に統合する
- スタンドアロン製品として使用
Keil MDKを使用していなければArm Compiler 5.06 update 7はデフォルトの場所を含めいかなる場所にでもインストールできます。ただし、これはArm Development StudioあるいはDS-5製品のインストールディレクトリの外である必要があります。
重要なコンフィギュレーション手順は以下およびそれ以降にある関連するセクションをご覧ください:
https://developer.arm.com/tools-and-software/software-development-tools/license-management/resources/product-and-toolkit-configuration
2.1. Arm Development Studio 2019.1 以降への統合
以下ページにある手順に従い、Arm Development Studioにツールチェインを統合できます:
https://developer.arm.com/documentation/101470/2000/Configure-Arm-Development-Studio/Register-a-compiler-toolchain
2.2. Keil MDK 5.12 以降への統合
Arm Compiler 5.06 update 7 は、Keil MDKインストレーションのARMサブディレクトリの下にインストールする必要があります。たとえば、Keil MDKインストレーションが C:¥Keil_v5ならば、C:¥Keil_v5¥ARM¥ARM_Compiler_5.06u7にインストールすることをおすすめします。
インストール後、
http://www.keil.com/support/man/docs/uv4/uv4_armcompilers.htm
で利用可能なアプリケーションノートの指示に従って、MDKプロジェクトへツールチェインを統合することができます。
MDKライセンスを使用する場合、Arm Compiler 5.06 update 7はWindows環境のみサポートします。
2.3. DS-5 5.20 以降への統合
以下ページにあるチュートリアル内の手順に従い、DS-5 v5.20 以降にツールチェインを統合できます:
https://developer.arm.com/tools-and-software/embedded/legacy-tools/ds-5-development-studio/resources/tutorials/adding-new-compiler-toolchains-to-ds-5
2.4. スタンドアロン製品としての使用
ライセンスファイルあるいはライセンスサーバの場所を指定するARMLMD_LICENSE_FILE環境変数をセットしてください。Windows上ではダブルクォーテーションをこのパス内に含めないでください。パス内の空白はクォートで囲まなくても動作します。
2.5. Linux環境へのインストール
Arm Compiler 5.06 update 7 は、以下のサポートされるプラットフォームでテストされています:
- Red Hat Enterprise Linux 6 Workstation.
- Red Hat Enterprise Linux 7 Workstation.
- Ubuntu Desktop Edition 14.04 LTS, 64-bit only.
- Ubuntu Desktop Edition 16.04 LTS, 64-bit only.
Installer/setup.shを実行し、画面の指示に従ってください。
32-bitインストーラのみ提供されます。ツールパッケージは、64-bitホストプラットフォーム向けに、個別に64-bit版のarmlinkを含むバイナリセットを含みます。詳細は、ドキュメンテーションをご参照ください。
インストールされたいくつかのツールが32-bitシステムライブラリに依存します。 Arm Compiler 5.06 update 7 を64-bit Linuxホストプラットフォームで使用するとき、32-bit互換のライブラリがインストールされていることを確認してください。 32-bit互換ライブラリがインストールされていない場合、 Arm Compiler 5.06 update 7 ツールは、ライブラリが見つからず実行が失敗するあるいはエラーをレポートします。インストールに必要なライブラリは、ご使用のプラットフォームで管理者権限で適切なコマンドを実行して確認してください:
- Red Hat
- yum install glibc.i686
- Ubuntu
- apt-get install lib32stdc++6 lib32z1
Ubuntu 16.04 LTSシステムでは、特定の32-bit glibcが使用されていない場合、32-bitツールのいくつかに致命的な障害が発生する可能性があります。必要なライブラリのインストールは、以下のコマンドを管理者権限で実行してください:
- apt-get install libc6:i386
Ubuntuのコマンドは、Ubuntu Desktop Edition 16.04 LTS、64ビットのみのデフォルトコンフィギュレーションに基づくクリーンインストールでのみテストされています。 Ubuntu 16.04 LTSのカスタムコンフィギュレーションがある場合は、追加のコマンドを実行する必要がある場合があります。
2.6. Windows環境へのインストール
Arm Compiler 5.06 update 7 は、以下のサポートされるプラットフォームでテストされています:
- Windows Server 2012, 64-bit only.
- Windows 7 Enterprise SP1.
- Windows 7 Professional SP1.
- Windows 8.1, 64-bit only.
- Windows 10, 64-bit only.
Cygwinとの統合のサポートとCygwinパスの変換は、各リリース時に利用可能なCygwinディストリビューションに対して検証されます。
Installersetup.exe を実行し、画面の指示に従ってください。
32-bitのインストーラのみ提供されます。ツールパッケージは、64-bitホストプラットフォーム向けに、個別に64-bit版のarmlinkを含むバイナリセットを含みます。詳細は、ドキュメンテーションをご参照ください。
3. アンインストール
Linuxでは、Arm Compiler 5.06 update 7のインストレーションディレクトリを削除してください。
Windowsの場合、コントロールパネルの プログラムの追加と削除からARM Compiler 5.06 update 7を選択し、アンインストールボタンを押下してください。
4. ドキュメンテーション
Arm Compiler 5.06 リリースシリーズの以下ドキュメントが利用可能です:
Arm Compiler 5.06 releaseシリーズのdocumentationはhttps://developer.arm.com/上にあり、以下によって構成されます:
- armar User Guide.
- armasm User Guide.
- armcc User Guide.
- armlink User Guide.
- fromelf User Guide.
- ARM C and C++ Libraries and Floating-Point Support User Guide.
- Errors and Warnings Reference Guide.
- Getting Stated Guide.
- Migration and Compatibility Guide.
- Software Development Guide.
5. フィードバックとサポート
お客様からのフィードバックは我々にとって重要です。製品のあらゆる局面において、欠陥報告と改善に関する提案を歓迎します。フィードバックあるいはサポートについて、お客様の製品の購入元あるいは、https://developer.arm.com/support へご連絡ください。
必要に応じて、ツールからの --vsn の出力、問題を再現するのに必要なソースコードおよびその他のファイルとコマンドラインを提供してください。
6. リリース履歴と変更点
以下に、Arm Compiler 5.06 シリーズのリリース日付を示します:
- 5.06 update 7 (2020年9月にリリースされました)
- 5.06 update 6 (2017年9月にリリースされました)
- 5.06 update 5 (2017年2月にリリースされました)
- 5.06 update 4 (2016年9月にリリースされました)
- 5.06 update 3 (2016年5月にリリースされました)
- 5.06 update 2 (2016年1月にリリースされました)
- 5.06 update 1 (2015年9月にリリースされました)
- 5.06 (2015年7月にリリースされました)
以下に、新しい機能と修正された不具合を含むそれぞれのリリースで変更された概要を示します。この情報には、技術的な誤りや誤植が含まれている可能性があり、リリースノートの将来の版で変更される可能性があります。それぞれの項目別に分類され、ユニークな識別子SDCOMP-
Arm Compiler 5.06 update 7 での変更点
Arm Compiler 5.06 update 7で修正された不具合
コンパイラ (armcc)
- [SDCOMP-54083] 特定の状況において、--protect_stackまたは--protect_stack_allを使用してコンパイルするとき、コンパイラは誤って特定のスタックアンダーフローを軽減できないコードを生成する可能性がありました。
- [SDCOMP-53915] 特定の状況において、-O1以上の最適化レベルでコンパイルするとき、コンパイラは誤ってdo-whileループの制御式で使用されるコンマ演算子の左側のオペランドを誤って無視する可能性がありました。
- [SDCOMP-53352] 特定の状況において、--vectorizeを使用してコンパイルするとき、abs()のArm C library implementationの呼び出しを含むループに対してコンパイラは誤ったコードを生成する可能性がありました。
- [SDCOMP-52907] 特定の状況において、-O1以上の最適化レベル、且つSMULWBおよびSMULWT命令をサポートするターゲットを対象にコンパイルするとき、コンパイラは右シフト演算の前にある乗算演算に対して誤ったコードを生成する可能性がありました。
- [SDCOMP-52619] 特定の状況において、リターンしない関数F、且つ__attribute__((weak))または__weakで注釈されているコードをコンパイルするとき、コンパイラは最終イメージにおいて非ウィークな定義が含まれていないと誤って想定したコードを生成する可能性がありました。
- [SDCOMP-52460] 特定の状況において、-O3 -Otimeと--vectorize((weak))を使用してコンパイルするとき、switchステートメント内のループ内のbreakステートメントに対して誤ったコードを生成する可能性がありました。
- [SDCOMP-52449] 特定の状況において、Thumb-2テクノロジーをサポートするターゲットに対しT32ステート且つ-O2以上の最適化レベルでコンパイルするとき、コンパイラはストアされるレジスタリスト内にSPを含むUNPREDICTABLE STM命令を誤って生成する可能性がありました。
- [SDCOMP-51646] 特定の状況において、R0 - R3の範囲のレジスタRを使用するグローバルな名前付きレジスタ変数が含まれる場合、コンパイラはRを変更する関数の呼び出しに対して誤ったコードを生成する可能性がありました。
- [SDCOMP-50871] 特定の状況において、-O2以上の最適化レベル、且つプログラムが、ロード、シフト、およびビット単位のOR演算の組み合わせを使用して、連続する3バイトのメモリから値を生成する場合、コンパイラは誤って範囲外のメモリアクセスを生成する可能性がありました。
- [SDCOMP-50692] まれな状況において、その値が使用される前に上書きをしてしまう不正なコードを生成する可能性がありました。
- [SDCOMP-50661] 特定の状況において、64-bit 整数型にキャストされたアドレスに64-bit整数の定数が加算または減算されるとき、コンパイラは誤って定数値の上位32-bitを誤って無視する可能性がありました。
- [SDCOMP-50641] 特定の状況において、--vectorizeオプションを使用し、且つプログラムに整数型の配列Aとchar型の配列Bが含まれる場合、コンパイラは誤って同じインデックスのAとBの要素に関与する比較に基づいて、Aの要素を条件付きで更新するループに対して誤ったコードを生成する可能性がありました。
- [SDCOMP-49474] 特定の状況において、--vectorizeオプションを使用し、且つプログラムにunsigned short型の配列Aとunsigned char型の配列Bが含まれる場合、コンパイラは誤って同じインデックスのAとBの要素に関与する比較に基づいて、Aの要素を条件付きで更新するループに対して誤ったコードを生成する可能性がありました。
- [SDCOMP-49286] 特定の状況において、Armv6T2、Armv7-A、Armv7-MまたはArmv7-Rのターゲットに対しコンパイルするとき、コンパイラはstructのsigned long longビットフィールドメンバーにアクセスするための符号拡張の実行に誤って失敗する可能性がありました。
- [SDCOMP-46997] T32状態向けに--use_frame_pointerオプションを使用してコンパイルするとき、コンパイラは誤ってスタックポインタレジスタに対しテンポラリの値を不正に代入する可能性がありました。
アセンブラ (armasm)
- [SDCOMP-49312] 命令Iに関連付けられているエクスポートシンボルSに続くデータブロックBを含むソースファイルをアセンブルし、Iが正しくアラインされることを保証するためにBの後にパディングを追加しなければならない場合、アセンブラはSを間違ったアドレスに関連付けることがありました。
リンカ (armlink)
- [SDCOMP-47265] 特定の状況において、--paged --no_legacyalignオプションを使用し、スキャッタファイルの同一実行リージョンでZIセクションがRWセクションよりもより高いアライメントの要求がある場合に、リンカは誤って重複した出力セクションを含むイメージを生成することがありました。
ライブラリ
- [SDCOMP-54710] snprintf()およびvsnprintf()関数のmicrolib実装はバッファサイズ0として呼び出された場合にバッファに書かれるキャラクタの数(終端のnullキャラクタを含まない)の代わりに誤って常に0を返していました。
- [SDCOMP-54131] プログラムに__attribute__((destructor[(priority)]))()の注釈付きの関数が含まれる場合、main()の完了後、あるいはexit()の呼び出し後に関数が誤って呼び出されないことがありました。
- [SDCOMP-52050] atan2f()関数のArm C library実装は負のゼロのかわりに誤って正のゼロを返すことがありました。
- [SDCOMP-49975] atan2()、atan2f()およびerfc()関数のArm C library実装は戻り値がゼロにアンダーフローした場合、誤ってerrno()をERANGEに設定しないことがありました。
- [SDCOMP-49764] strrchr()関数のmicrolib実装は文字列の終端のnullキャラクタ'0'を見つけるために使用された場合、誤ってヌルポインタを返していました。
- [SDCOMP-29999] 特定のArm C libraryヘッダにおいて、ポインタの後にコメントが続く文字シーケンス**が使用されていました。**はサードパーティの静的解析ツールで障害として報告される可能性がありました。
Fromelf
- [SDCOMP-48404] 加数のあるリロケーションによって変更されるPC相対のロード命令を含むELFファイルを逆アセンブルする際、fromelfユーティリティは命令に対する不正なロード値を含む逆アセンブルを生成することがありました。