目次
1.イントロダクション
1.1. ARM Compiler 6の構成
1.2. ARM Compiler 6.4でのサポート
2. インストール方法
2.1. DS-5 5.20以降への統合
2.2. スタンドアロン製品としての使用
2.3. Linux環境へのインストレーション
2.4. Windows環境へのインストレーション
3.アンインストール方法
4.簡単なプログラムのビルド
5.ドキュメンテーション
6.フィードバックとサポートについて
7.リリース履歴と変更点について
1.イントロダクション
このリリースノートは、リリース時点で最初に提供されたものです。リリースノートの最新版は、
ARM Infocenter
内の
ARM Compiler 6 documentation section
をご覧ください。
ARM Compiler 6.4は、以下を追加しました:
-
ARMv8-RおよびARMv7-Rアーキテクチャプロファイルのフルサポート
-
Cortex-A32とCortex-R8をサポート
-
v7-M および v8-Mのexecute-onlyメモリをサポート
このコンパイラは、以前のリリースの生成コードを超えて良い性能をもたらす、多くの最適化も含んでいます。
ARM Compiler 6.4は、以下のように使用されることを意図しています。
-
DS-5 Professional Edition あるいは DS-5 Ultimate Editionと共に、サポートされたアーキテクチャ用にビルドし、実行可能コードをデバッグする
これら製品から少なくとも1つの適切なライセンスが利用可能である必要があります。ライセンスについてのご質問は購入元あるいは
license.support@arm.com
へのメールで行ってください。
フローティングライセンスをご使用の場合は、armlmdおよびlmgrdをversion 11.12.1.0以降にアップデートする必要があります。2015年11月に、Flexera社は FlexNet Publisherのベンダデーモンコンポーネントとlmgrdで発見されたセキュリティの脆弱性を発表しました。Flexera社は脆弱性が利用されたと信じるに足る根拠はないものの、FlexNet Publisher version 11.13.1.2でセキュリティアップデートを提供しました。このため、ライセンスサーバを少なくともこのバージョンへアップグレードすることをお勧めします。FlexNet Publisher 11.13.1.2(以降) のライセンスサーバソフトウェアは、https://silver.arm.com/browse/BX002 からダウンロード可能です。(登録およびログインが必要です)
1.1. ARM Compiler 6の構成
ARM Compiler 6は、ARM Compiler 5の後継であり、以下にリストされたコンポーネントを含みます。以前のプロジェクトからプロジェクトを移行するための情報は、製品ドキュメンテーション内の
Migration and Compatibility Guide
をご覧ください。
-
armclang
-
armclangはarmccの後継で、LLVMテクノロジをベースとしている
-
armlink、armasm、fromelf、armasm
-
armlink、armasm、fromelfおよびamarはARMv8をサポートするために拡張され、ARM Compiler5と同様に振る舞います
-
組込みシステム向けのARM C/C++ライブラリ
-
標準のARMコンパイラ組込みライブラリはARMv8をサポートするために拡張され、機能的には完全に一致していない可能性がありますが、ARM Compiler 5で見出されるものと同様に振る舞います
-
ARM Compiler 6は、C++標準テンプレートライブラリとして、libc++を含みます
アセンブラに関する注意事項
-
GNUとARM Compilerツールチェン間の移植性を向上させるために、ARM Compiler 6はデフォルトで、GNUアセンブラシンタックスにより近いとされるLLVMに統合されたアセンブラを採用しています。LLVMに統合されたアセンブラはデフォルトでarmclangによって呼び出されます。副作用として、ARM Compiler 6はレガシーなarmccのインラインおよび組込みアセンブラを含むC/C++ソースファイルをコンパイルできません
-
armasmはデフォルトでは呼び出されませんが、レガシーなarmasmシンタクスで書かれたアセンブラファイルをアセンブルするために、armasmがARM Compiler 6内に含まれます
1.2. ARM Compiler 6.4でのサポート
アーキテクチャとプロセッサ
|
サポートレベル
|
ARMv8.2-Aと準拠するプロセッサ |
アルファサポート−将来のリリースでサポート |
ARMv8.1-A、ARMV8-AおよびARMv7-A と準拠するプロセッサ |
サポート済み |
ARMv8-RおよびARMv7-R と準拠するプロセッサ |
サポート済み |
ARMv8-M、ARMv7-M、ARMv6-M
および準拠するプロセッサ |
サポート済み |
ARMv6-M 以前のアーキテクチャ |
未サポート
ARM Compiler 5 をご使用ください |
ARM 以外のアーキテクチャ |
未サポート |
サポートレベル
|
詳細
|
サポート済み |
製品品質を保ち、一番高位のサポート優先度 |
ベータ |
実装は完了済みだが、テストは部分的。お客様の試用とフィードバックを歓迎 |
アルファ |
実装は未完了でテストは部分的
お客様の試用とフィードバックを歓迎 |
コミュニティ |
オープンソーステクノロジで利用可能な追加の機能がARM Compiler 6に構築
お客様の試用とフィードバックを歓迎 |
未サポート |
機能がツールチェインに含まれていないか非推奨になっており、テストは未実施
使用する場合は完全な自己責任 |
2.インストール方法
ARM Compiler 6.4 が、ツールキット(例:DS-5)の一部として含まれている場合、ツールキットのインストーラがインストレーションプロセスを処理します。ツールキットのインストレーション指示を参照してください。
その他のケースの場合、ARM Compiler 6.4 をどのように使用するかに依存して適切なインストレーションの場所を選択する必要があります。
2.1. DS-5 5.20 以降への統合
ARM Compiler 6.4 は、DS-5製品のインストレーションの外であるなら、デフォルトの場所を含み、任意の場所にインストールすることができます。
インストール後、
http://ds.arm.com/developer-resources/tutorials/adding-new-compiler-toolchains-to-ds-5/
のチュートリアルで示す方法に従って、DS-5 5.20以降のツールチェーンに統合することができます。
DS-5 Eclipse IDE あるいは DS-5 Command PromptからARM Compiler 6.4 を使用することをおすすめします。これら環境の外でツールチェーンを使用するとき、以下の環境変数の構成が必要となります。
-
DS-5インストレーション内の sw/mappings ディレクトリへのパスをARM_PRODUCT_PATHにセットします
-
DS-5 Ultimate Editionを使用する場合、ARM_TOOL_VARIANT=ultをセットします
2.2. スタンドアロン製品としての使用
ARM Compiler 6.4 は、DS-5製品のそれぞれのインストレーションの外であるなら、デフォルトの場所を含み、任意の場所にインストールすることができます。
ライセンスファイルあるいはライセンスサーバの場所を指定するARMLMD_LICENSE_FILE環境変数をセットしてください。Windows上ではダブルクォーテーションをこのパス内に含めないでください。パス内の空白はクォーツなしで、動作します。
2.3. Linux環境へのインストレーション
ARM Compiler 6.4 は、以下のサポートされるプラットフォームでテストされています。
-
RedHat Enterprise Linux 6 Workstation, 64-bit only
-
RedHat Enterprise Linux 7 Workstation, 64-bit only
-
Ubuntu Desktop Edition 14.04 LTS ,64-bit only
ARM Compiler 6.4をインストールするには、 install_x86_64.shを実行(soourceではありません)し、画面の指示に従ってください。インストーラは、ARM Compiler 6.4 をお客様が指定したディレクトリに解凍します。
armclangバイナリは、お客様の指定したディレクトリ内にARM Compiler 6.4 の一部としてインストールされたlibstdc++のコピーへ動的にリンクされています。
インストールされたいくつかのツールが32bitシステムライブラリに依存します。
ARM Compiler 5.06 update 2 を64-bit Linuxホストプラットフォームで使用するとき、32-bit互換のライブラリがインストールされていることを確認してください。 32-bit互換ライブラリがインストールされていない場合、ARM Compiler 5.06 update 2 ツールは、ライブラリが見つからず実行が失敗するあるいはエラーをレポートします。インストールに必要なライブラリは、ご使用のプラットフォームで管理者権限で適切なコマンドを実行して確認してください。
Red Hat
yum install glibc.i686
Ubuntu
apt-get install lib32stdc++6
2.4. Windows環境へのインストレーション
ARM Compiler 6.4 は、以下のサポートされるプラットフォームでテストされています。
-
Windows Server 2012,64-bit only
-
Windows 7 Professional SP1
Windows 64-bitホストプラットフォーム上でARM Compiler 6.4 をインストールするために、win-x86_64setup.exeを実行し、画面の指示に従ってください。Windows 32-bitホストプラットフォーム上でARM Compiler 6.4をインストールするために、win-x86_32setup.exeを実行し、画面の指示に従ってください。以前のバージョンのARM Compiler 6 がすでにインストールされており、アップグレードしたい場合は、以前のバージョンを一旦アンインストールしてから新しいバージョンのARM Compiler 6 をインストールいただくことを推奨します。
ARM Compiler 6は、Microsoft Visual Studio 2013のランタイムライブラリがインストールされることを必要とします。プロダクトインストーラを使用するか、あるいはこのツールチェンがDS-5の一部としてインストールされるなら、ランタイムライブラリは製品と共にインストールされます。後からコピーあるいは別のPCへインストレーションを移動される場合、ランタイムライブラリがホスト上で利用可能であることを保証する必要があります。
3. アンインストール方法
Linuxの場合、ARM Compiler 6.4 をインストールディレクトリから削除してください
Windowsの場合、コントロールパネルのプログラムの追加と削除からARM Compiler 6.4 を選択し、アンインストールボタンを押下してください
4. 簡単なプログラムのビルド
ベアメタルAArch64 システム用の非常に単純なプログラムをコンパイルするには:
(Linux) echo "int main() {}" >
simple.c
(Windows) echo int main() {} >
simple.c
(両システム) armclang --target=aarch64-arm-none-eabi simple.c -o simple
armclang --helpで、基本的なコマンドライオプションのヘルプを確認することができます。より詳細については
armclang Reference Guide
をご参照ください。旧バージョンのARM Compiler からの移行に関する情報は、製品ドキュメントに含まれる
Migration and Compatibility Guide
をご参照ください。
5. ドキュメンテーション
ARM Compiler 6.4 の以下ドキュメントが利用可能です。
-
armclang Reference Guide.
-
ARM C and C++ Libraries and Floating-Point Support User Guide.
-
Errors and Warnings Reference Guide.
-
Migration and Compatibility Guide.
-
Software Development Guide.
これ以上の情報は、
ARM Infocenter
の
ARM Compiler 5 documentation
をご参照ください。
6. フィードバックとサポートについて
お客様からのフィードバックは我々にとって重要です。製品のあらゆる局面において、欠陥報告と改善に関する提案を歓迎します。フィードバックあるいはサポートについて、お客様の製品の購入元あるいは、support-sw@arm.comへメールでご連絡ください。必要に応じて、ツールからの--vsnの出力、問題を再現するのに必要なソースコードおよびその他のファイルとコマンドラインを提供してください。ARM Compiler 5.06 update 2の総合的なビルド番号は、このドキュメントの最初に見出すことができます。当社へのお問い合わせは、
こちら
。
7. リリース履歴と変更点について
以下に、ARM Compiler 6.4 シリーズのリリース日付を示します。
以下に、新しい機能と修正された不具合を含むそれぞれのリリースで変更された概要を示します。特に指定がない限り、一つ前のリリースからの変更点を示します。それぞれの項目別に分類され、ユニークな識別子SDCOMP-<NNNNN>を伴います。もしARMへこのリリースノート内の特定の問題について連絡が必要な場合、適切な識別子を通知してください。
ARM Compiler 6.4 での変更点について
以下に以前のリリースであるARM Compiler 6.3 からの変更点を示します。
ARM Compiler 6.4 での一般的な変更点
-
[SDCOMP-32922] Cortex-A32プロセッサに対するサポートが追加されました。Cortex-A32をターゲットとする場合、以下のオプションから選択してください。
armclang:
-
--target=arm-arm-none-eabi -mcpu=cortex-a32
armasm、armlinkおよびfromelf:
-
[SDCOMP-29819] ARMv8-Rアーキテクチャに対するサポートが追加されました。ARMv8-Rアーキテクチャプロファイルをターゲットとする場合、以下のオプションから選択してください。
armclang:
-
--target=arm-arm-none-eabi -march=armv8-r
armasm、armlinkおよびfromelf:
-
[SDCOMP-26229] ARMv7-Rアーキテクチャに対するサポートが追加されました。ARMv7-Rアーキテクチャプロファイルをターゲットとする場合、以下のオプションから選択してください。
armclang:
-
--target=arm-arm-none-eabi -march=armv7-r
(ARMv7-Rアーキテクチャプロファイル)
-
--target=arm-arm-none-eabi -mcpu=cortex-r4
(Cortex-R4プロセッサ)
-
--target=arm-arm-none-eabi -mcpu=cortex-r5
(Cortex-R5プロセッサ)
-
--target=arm-arm-none-eabi -mcpu=cortex-r7
(Cortex-R7プロセッサ)
-
--target=arm-arm-none-eabi -mcpu=cortex-r8
(Cortex-R8プロセッサ)
armasm、armlinkおよびfromelf:
-
--cpu=7-R
(ARMv7-Rアーキテクチャプロファイル)
-
--cpu=Cortex-R4
(Cortex-R4プロセッサ)
-
--cpu=Cortex-R5
(Cortex-R5プロセッサ)
-
--cpu=Cortex-R7
(Cortex-R7プロセッサ)
-
--cpu=Cortex-R8
(Cortex-R8プロセッサ)
-
[SDCOMP-32923] Cortex-R8プロセッサに対するサポートが追加されました。Cortex-R8をターゲットとする場合、以下のオプションから選択してください。
armclang:
-
--target=arm-arm-none-eabi -mcpu=cortex-r8
armasm、armlinkおよびfromelf:
-
[SDCOMP-32879] ARMv8-Mのセキュリティ拡張を使用したセキュアアプリケーションのビルドをサポートしました。ARMv8-Mのセキュアアプリケーションは、以下のオプションと共にビルドできます。
armclang:
-
ARMv8-Mセキュリティ拡張のセキュアステート用のコード生成を有効にする
-mcmse
armlink:
-
既存のインポートライブラリを読み込み、インポートライブラリ内に与えられるのと同じアドレスでを持つゲートウェイべニアを生成する
--import_cmse_lib_in=filename
-
指定された位置へセキュアコードインポートライブラリを出力する
--import_cmse_lib_out=filename
-
[SDCOMP-30462] ARMv8-Mセキュリティ拡張を伴うセキュア関数内で浮動小数点コードを使用するためのサポートが追加されました。以下のコンパイラオプションから選択してください。
-
-mfloat-abi=soft
-
-mfloat-abi=softfp
これは以前は、SDCOMP-30562 で既存の不具合として記載されていました。
-mfloat-abi=hard
を使用してコンパイルする場合、セキュア関数内での浮動小数点コードの仕様はサポートされません。
-
[SDCOMP-28606] ARMv7-MあるいはARMv8-Mターゲットのためのイメージを生成で、execute-onlyメモリ(XOM)領域のサポートしました。以下のオプションを選択してください。
armclang:
-
execute-onlyコードを生成するための
-mexecute-only
armlink:
-
スキャッタファイルを使用してexecute-onlyコードを配置するための
--scatter
と
+X0
セレクタ
-
execute-onlyの実行領域のベースアドレスを指定するための
--xo_base
より詳細な情報は、 armclang Reference Guide, armlink User Guide, およびSoftware Development Guideをご参照ください。
-
[SDCOMP-30310] ARM Compiler 6.3のSDCOMP-29034によって示されたように、Rogue Wave C++ライブラリは削除され、libc++によって置き換えられました。以下のオプションのサポートを終了しました。
armclang:
armlink:
libc++を使用してコンパイルされたオブジェクトは、 Rogue Waveを使用してコンパイルされたオブジェクトと互換性を持ちません。
-
[SDCOMP-30642] 以下のarmasm,armlinkおよびfromelfのオプションのサポートを終了しました。
-
--cpu=8.2-A.32.v8_vfpneon
-
--cpu=8.2-A.32.crypto.v8_vfpneon
-
--cpu=8.2-A.64.v8_vfpneon
-
--cpu=8.2-A.64.crypto.v8_vfpneon
FP16拡張なしのARMv8.2-Aをターゲットとする場合、影響を受ける
--cpu=
name
オプションは以下のもので置き換えてください:
-
--cpu=8.2-A.32.v8_vfpneon
の代わりに
--cpu=8.2-A.32 --fpu=FP-ARMv8
を使用してください。
-
--cpu=8.2-A.32.crypto.v8_vfpneon
の代わりに
--cpu=8.2-A.32.crypto --fpu=FP-ARMv8
を使用してください。
-
--cpu=8.2-A.64.v8_vfpneon
の代わりに
--cpu=8.2-A.64 --fpu=FP-ARMv8
を使用してください。
-
--cpu=8.2-A.64.crypto.v8_vfpneon
の代わりに
--cpu=8.2-A.64.crypto --fpu=FP-ARMv8
を使用してください。
-
[SDCOMP-44509] 以下のリンカオプションは非推奨となりました。将来のリリースで削除されます。
代わりに、C++例外テーブルの生成をコントロールするために以下のコンパイラオプションから選択してください:
-
C++例外テーブルの生成を有効とするための
-fexceptions
-
C++例外テーブルの生成を無効とするための
-fno-exceptions
コンパイラのデフォルトの振る舞いは以下の通りです:
-
C++の場合は
-fexceptions
-
Cの場合は
-fno-exceptions
-
[SDCOMP-44348] 以下のリンカオプションは非推奨となりました。将来のリリースで削除されます。
--no_thumb2_library
オプションはlibc++ライブラリと互換性を持ちません。
-
[SDCOMP-30815] ベアメタルの位置独立実行可能イメージ(Position Independent Executable (PIE))のサポートは非推奨となりました。以下のオプションは非推奨です。
armclang:
armlink:
代わりに、 Read-Only Position-Independent (ROPI)とRead/Write Position-Independent (RWPI)コード機能の使用を検討してください。
armclang:
-
ROPIコードの生成を有効にする
-fropi
-
RWPIコードの生成を有効にする
-frwpi
armlink:
-
位置独立なRO出力セクションを含むロードおよび実行領域を作るための
--ropi
-
位置独立なRWおよびZI出力セクションを含むロードおよび実行領域を作るための
--rwpi
これらオプションについてのより詳細な情報は、
armclang Reference Guide
と
armlink User Guide
をご参照ください。
-
[SDCOMP-44363] サポートされるプラットフォームが以下のように変更されました。
追加されたプラットフォーム:
削除されたプラットフォーム(ARM Compiler 6.02の SDCOMP-29551で非推奨として示されていたもの):
-
Red Hat Enterprise Linux 5
-
Ubuntu Desktop Edition 12.04 LTS
ARM Compiler 6.4 での拡張
コンパイラと統合されたアセンブラ (armclang)
-
[SDCOMP-30941]
#pragma clang diagnostic
をサポートしました。より詳細な情報は、
armclang Reference Guide
をご参照ください。
-
[SDCOMP-30148]
-munaligned-access
と
-mno-unaligned-access
のサポートを追加しました。これらはデータへ非アラインアクセスの制限を制御するオプションです。デフォルトは:
-
選択されたターゲットでデータへの非アラインなアクセスをサポートする
-munaligned-access
-
選択されたターゲットでデータへの非アラインなアクセスをサポートしない
-mno-unaligned-access
これらオプションについてのより詳細な情報は、
armclang Reference Guide
をご参照ください。
リンカ (armlink)
-
[SDCOMP-30794]
--no_unaligned_access
のサポートを追加しました。このオプションはリンカが非アラインなアクセスを許可するARM Cライブラリからオブジェクトの選択することを止めます。入力オブジェクトが非アラインアクセスを許す場合、リンカは一つ以上の以下のダウングレード可能なエラーを報告します。:
-
Error: L6366E: <object> attributes<att> are not compatible with the provided cpu and fpu attributes.
-
Error: L6367E: <object>(<section>) attributes<attr> are not compatible with the provided cpu and fpu attributes.
-
Error: L6368E: <symbol> defined in <object>(<section>) attributes<attr> are not compatible with the provided cpu and fpu attributes.
ARM Compiler 6.4 で修正された不具合
コンパイラと統合されたアセンブラ (armclang)
-
[SDCOMP-44605] .archアセンブラディレクティブを含むソースをアセンブルするとき、統合されたアセンブラは、特定の条件で、
error: target does not support Thumb mode.
を誤って報告することがありました。この不具合は修正されました。
-
[SDCOMP-30723] MAINおよびセキュリティ拡張なARMv8-Mターゲットで、しかし、浮動小数点拡張がない場合、VLLDMおよびVLSTM命令をアセンブルするとき、統合されたアセンブラは誤って
error: instruction requires: FPARMv8.
を出力することがありました。この不具合は修正されました。
-
[SDCOMP-30611]シフトが省略されたとき、統合されたアセンブラは誤ってPKHTB命令をアセンブルします。。この不具合は修正されました。
-
[SDCOMP-30194]AArch64ステートで
-mbig-endian
でコンパイルされたとき、コンパイラは誤ってリトルエンディアンフォーマットでエンコードされたデバッグ情報を生成することがありました。この不具合は修正されました。
-
[SDCOMP-30073]ARMv6-Mターゲットでコンパイルするとき、コンパイラは、連続したvolatile位置からのloadあるいはそれへのstoreを、LMDあるいはSTM命令へ結合することがありました。この不具合は修正されました。
-
[SDCOMP-29784]展開することができないプリプロセッサトークンを含むコードをアセンブルするとき、統合されたアセンブラは、ファイルあるいは行情報を含まない
clang -cc1as: fatal error: error in backend: expected relocatable expression
を報告することがありました。この問題は修正されました。統合化されたアセンブラは、
<file>:<line>:<column>: error: expected relocatable expression.
を報告します。
-
[SDCOMP-28848]
__rev16l
および
__rev16ll
組込み関数向けにコンパイラは誤ったコードを生成することがありました。この不具合は修正されました。
__rev16l
および
__rev16ll
組込み関数は、ARM C Language Extensions (ACLE)で定義されました。
-
[SDCOMP-25743]
-g
あるいは
-gdwarf-4
と共にコードをアセンブルするとき、統合化されたアセンブラは、ソースレベルデバッグを阻止する誤ったデバッグ情報を生成することがありました。この不具合は修正されました。
古いアセンブラ (armasm)
-
[SDCOMP-44526] MAINおよびセキュリティ拡張なARMv8-Mターゲットで、しかし、浮動小数点拡張がない場合、VLLDMおよびVLSTM命令をアセンブルするとき、アセンブラは誤って
Error: A1854E: Unknown opcode 'vlldm', maybe wrong target CPU?
あるいは
Error: A1854E: Unknown opcode 'vlstm', maybe wrong target CPU?
を出力することがありました。この不具合は修正されました。
-
[SDCOMP-29630]AArch64ステート向けにALIGNディレクティブを含むコードセクションをアセンブルする特定の環境で、一つ以上のNOP命令の代わりに値0を含むバイトシーケンスを誤って生成することがありました。これは実行時に同期命令アボートを引き起こします。この不具合は修正されました。
リンカ (armlink)
-
[SDCOMP-29584]AArch64オブジェクトを
--callgraph
オプションと共にリンクする特定の条件で、リンカは誤ったスタック情報あるいは
Internal fault: [0x8fd35d:<ver>]
を報告することがありました。この不具合は、以前は識別子SDCOMP-30415で既知の不具合として示されていました。
-
[SDCOMP-28734]AArch64オブジェクトを
--info=stack
オプションあるいは
--info=summarystack
オプションと共にリンクする特定の条件で、リンカは誤ったスタック情報あるいは
Internal fault: [0x8fd35d:<ver>]
を報告することがありました。この不具合は、以前は識別子SDCOMP-30415で既知の不具合として示されていました。
-
[SDCOMP-24039]特定の条件で、リンカはメッセージフォーム
Error: L6788E: Scatter-loading of execution region <er1name> to [<base1>,<limit1>) will cause the contents of execution region <er2name> at [<base2>,<limit2>) to be corrupted at run-time.
内に誤ったロードアドレスを報告することがありました。 この不具合は修正されました。
ライブラリおよびシステムヘッダ
-
[SDCOMP-44512]標準ヘッダ
stdint.h
はCマクロ
UINTPTR_MAX
について、AArch32の場合は
(2^32)-1
の代わりに
(2^31)-1
を、 AArch64の場合は
(2^64)-1
の代わりに
(2^63)-1
を誤って定義していました。この不具合は修正されました。
-
[SDCOMP-30831]
printf()
ファミリ関数のARM Cライブラリ実装において、
%a
あるいは
%A
を使用した16進形式で浮動小数点数をフォーマットする際に、#フラグは指定されますが16進小数点の後の値が0のとき、フォーマット出力から誤って16進小数点文字を省略することがありました。 この不具合は修正されました。
-
[SDCOMP-29760]
strtod()
と
scanf()
ファミリ関数のARM Cライブラリ実装が、C99の16進浮動小数点シンタクスの文字列を構文処理するとき、16進小数点の前のすべての桁と16進小数点の後に続く少なくとも1つの桁が0、例えば"0x0.00E"であるとき、誤った結果を返すことがありました。この不具合は修正されました。
Fromelf
-
[SDCOMP-25804]armclangコンパイラを使用して生成されたオブジェクトに、
--fieldoffsets --expandarrays
オプションを使用すると、fromelfは誤って、それぞれの配列の全要素の代わりに配列の最初の要素のみ情報を提供していました。この不具合は修正されました。この不具合は、以前は識別子SDCOMP-25966で既知の不具合として示されていました。
ARM Compiler 6.4 の既知の不具合
-
[SDCOMP-30540]AArch64ターゲット用にコンパイルされたC++オブジェクトをリンクする特定の条件で、リンカは誤って
Warning: L6806W: Relocation #RELA:<index> in <object1>(<section1>) with respect to [Anonymous Symbol]. Branch to untyped symbol in <object1>(<section2>), ABI requires external code symbols to be of type STT_FUNC.
を報告することがあります。<section2>が <section1>からBL命令の範囲内なら、この警告を無視することができます。
-
[SDCOMP-28016]AArch64では、long doubleはサポートされていません。
-
[SDCOMP-27650] ARM Compier 6は、以下のARM Compier 5の組込み関数をサポートしません。
-
__disable_irq
-
__enable_irq
-
__schedule_barrier
__disable_irq
および
__enable_irq
の代わりに、インラインアセンブラを使用することができます。たとえば:<>
br>
-
asm("CPSID i");
/* Disable IRQs for ARMv7-A/R and ARMv8-A AArch32 */
-
asm("msr DAIFClr, #2");
/* Enable IRQs for ARMv8-A AArch64 */
ARMv6-M、ARMv7-MおよびARMv8-Mをターゲットとする場合、CMSIS-COREレジスタアクセス関数の使用を推奨します。
__schedule_barrier
の代わりに、ARM C Language Extensions (ACLE)で定義されている
__dsb
、
__dmb
あるいは
__isb
組込み関数を使用することができます。
-
[SDCOMP-26080]複素数はサポートされません。
-
[SDCOMP-25308]
--cpu=cortex-a32
、
--cpu=cortex-a35
、
--cpu=cortex-a53
、
--cpu=cortex-a57
、
--cpu=cortex-a72
のいずれかを使用してリンクすると、リンカは誤って
Fatal error: L3903U: Argument '<feature_name>' not permitted for option 'cpu'.
を報告することがあります。この問題の回避方法は、
--cpu
オプションなしでリンクすることです。
-
[SDCOMP-25307] リンク時に
--cpu=cortex-a5
オプションが使用されるとき、リンカは
Error: L6366E: <object> attributes are not compatible with the provided cpu and fpu attributes
を報告することがあります。コンパイル時に
--target=armv7-arm-none-eabi -mcpu=cortex-a5
オプションを指定されて生成されたオブジェクトは、VFPv4とNEONが有効なことを前提としていますが、 リンカオプション
--cpu=cortex-a5
は、VFPとNEONが無効なことを意図しています。この問題を回避するには、リンク時に
--cpu=cortex-a5.neon
オプションを使用してください。