パッチプログラムをダウンロードするには、事前にARM社のコネクトサービスのアカウントを取得し、ログインしておく必要があります。アカウントの取得は以下のURLから無償で行う事ができます:
https://login.arm.com/register.php
ARM Compiler toolchain v4.1(Build 791から894) †
このARM Compiler Toolchain v4.1 #6 Web Patch Build894はARM RVDS v4.1の製品とともに使用されることを意図しています。これはオリジナルのインストレーションまたは過去のパッチの適用の如何によらず、あらゆるRVDS v4.1 Standard、ProfessionalまたはEvaluationのインストレーションのアップデートを行う事ができます。その他のRVCT/RVDSのリリースとは互換性がありません。
このパッチはコンパイラ、リンカ、アセンブラ、fromelfおよびarmarの実行形式とインクルードファイルおよびC/C++ライブラリから構成されています。
RVDSv4.1のパッチは、ARM社のWebサイトよりダウンロード可能です。
Standard: https://silver.arm.com/browse/RVS41
Professional: https://silver.arm.com/browse/RVP41
サポートされるOSプラットフォーム
Windows 7 Professional Edition, 32-bit & 64-bit Windows 7 Enterprise Edition, 32-bit & 64-bit Windows XP SP2, 32-bit & 64-bit Windows XP SP3, 32-bit Windows Vista Business Edition SP1, 32-bit & 64-bit Windows Vista Enterprise Edition SP1, 32-bit & 64-bit Windows Server 2003 32-bit & 64-bit Red Hat Linux Enterprise 4 for x86, 32-bit & 64-bit Red Hat Linux Enterprise 5 for x86, 32-bit & 64-bit
また、このパッチは以下のノンサポートなプラットフォーム上でテストされています。
Windows 2000 SP4 SUSE Linux 9.2 Ubuntu Linux 8.10
パッチをインストールするには以下の手順で行います
1.以下をタイプしてARM Compiler toolchain v4.1のBuild462以降が使用されていることを確認してください。
armcc --vsn
また、Linux環境の場合以下のコマンドを実行してarmccの場所を確認してください。
which armcc
2.ZIPファイルをテンポラリディレクトリに解凍してください。
3.includeディレクトリをテンポラリディレクトリから既存のARM Compiler toolchain includeディレクトリにコピーしてください。既存のディレクトリはARMCC41INC環境変数で確認できます。
<Windowsの例>
C:set ARMCC41INC ARMCC41INC=C:\Program Files\ARM\RVCT\Data\4.1\894\include
<Linuxの例>
echo $ARMCC41INC /ARM/RVCT/Data/4.1/462/include/
4.libディレクトリをテンポラリディレクトリから既存のARM Compiler toolchain libraryディレクトリにコピーしてください。既存のディレクトリはARMCC41LIB環境変数で確認できます。
<Windowsの例>
C: set ARMCC41LIB ARMCC41LIB=C:\Program Files\ARM\RVCT\Data\4.1\791\lib
<Linuxの例>
echo $ARMCC41LIB /ARM/RVCT/Data/4.1/462/lib/
5.win_32-pentiumディレクトリ(Linux用の場合、linux-pentiumディレクトリ)を、テンポラリディレクトリから既存のARM Compiler toolchainのインストールディレクトリにコピーしてください。既存のディレクトリはARMCC41BIN環境変数で確認できます。
<Windowsの例>
C: set ARMCC41BIN ARMCC41BIN=C:\Program Files\ARM\RVCT\Programs\4.1\813\win_32-pentium
<Linuxの例>
echo $ARMCC41BIN /ARM/RVCT/Programs/4.1/462/linux-pentium/
もし必要なら、解凍するディレクトリをツールのインストールしている場所にあうように変更してください。
6.これでアップデートツールがインストールされます。
コマンドラインから、以下の様に入力し、お客様の意図されるバージョンが返されるかを確認してください。
armcc --vsn armlink --vsn armasm --vsn fromelf --vsn armar --vsn
バージョンは4.1 build 894が返されるべきです。
7.Linux版の場合、実行形式の解凍後にUNIXのパーミッションがリセットされる為実行ができなくなる場合があります。 その場合、次のようにユーザパーミッションをセットして、解決してください。
chmod u+x armcc
64ビットリンカ
RVDSv4.1 Service Pack1およびこのパッチは64ビットバージョンのarmlinkを含んでいます。すでにRVDSv4.1 Service Pack1以降をインストールしていれば、64ビット用実行可能形式のディレクトリが以下のように生成されています。 <Windowsの場合> C:Program FilesARMRVCTPrograms.12win-x86_64
<Linuxの場合> /ARM/RVCT/Programs/4.1/462/linux-x86_64/
これらはwin-x86_64(Linux用の場合、linux-x86_64)ディレクトリの中身をテンポラリディレクトリから上記ディレクトリにコピーすることで更新されます。もしRVDSv4.1 Service Pack1以降がインストールされておらず、64ビットバージョンのリンカを使いたい場合にはディレクトリの生成を行ってください。
win-x86_64(Linux用の場合、linux-x86_64)ディレクトリは、armcc.exe, armasm.exe, fromelf.exe and armar.exeのツールも含んでいますが、これらは32ビット用の実行可能形式であり、同一のディレクトリにこれら全ての実行形式がおかれていることを必要とする一部の機能のために存在しています。
"注意)"デフォルトではシステムにおいて32ビットのリンカが使用されるよう設定されています。64ビットバージョンを必要とする場合、ARMCC41BIN環境変数がwin-x86_64(Linux用の場合、linux-x86_64)ディレクトリを示すように、また、PATHが以前のwin_32-pentium(Linux用の場合、linux-pentium)ではなく、これら64ビット用のディレクトリを示すようにそれぞれ変更が必要です。
コンパイラ
- Marvell PJ4コアのサポートが追加されました。これは、--cpu PJ4及び--cpu PJ4.no_vfpで有効になります。[SDCOMP-15525]
- 空のセクションを--exceptionsオプションでアセンブルした場合、アセンブラは次のセクションに不正な例外情報を生成する事がありました。この不具合は修正されました。 [SDCOMP-15596]
- アセンブラは、ITブロック中でPCへの書き込みが発生するThumb ADD命令がそのITブロックの最後の命令でない場合に誤りとなりませんでした。このUNPREDICTABLE命令は、エラー A1603E として正しく診断されるようになりました。 [SDCOMP-15593]
コンパイラ
- ソースバッファから最初の要素を長さとしてリードするメモリコピー等のループが-O2 -Otime でコンパイルされた場合、誤った変換によりバッファの最初の要素は、転送先に繰り返されます。この不具合は修正されました。 [SDCOMP-16337]
- RRX シフトを生成するコード(例:1の64ビット左シフト)は、ALU操作へのオペランドが使用され、他のオペランドは PSRを破壊しコンパイラが不正な結果を生成する事がありました。この不具合は修正されました。 [SDCOMP-16071]
- ごくまれにコンパイラは、構造体全体のコピーの後にその構造体の要素を読み込んだ場合に、構造体での誤ったオフセットを使用する不正なコードを生成していました。この不具合は修正されました。 [SDCOMP-15976]
- これまでのコンパイラは--no_conditionalizeが使用された場合に、関数から共有のリターンシーケンスを常に使用していました。これは修正され、複数のリターンシーケンスが使用されるようになり、ランタイムで実行される分岐命令の数が削減されます。 [SDCOMP-15942]
- Thumbでコンパイルした場合、ロード及びストアは不正にNOPスケジューリングバリアの後にスケジューリングされていました。この不具合は修正されました。 [SDCOMP-15928]
- コンパイラは不正に__packed属性付きの静的構造体のメンバ配置を削除し、フィールドをアラインしない事がありました。この不具合は修正されました。 [SDCOMP-15797]
- ポストインクリメント演算子がループ中でゼロと比較される場合に、コンパイラは全ての繰り返しでtrueを返す不正な最適化を行うことがありました。この不具合は修正されました。 [SDCOMP-15697]
- --use_frame_pointerと最適化レベル "-O3 -Otime"でコンパイルされた場合、フレームポインタでビルドされた終端無しの関数にコードが含まれていませんでした。この不具合は修正されました。 [SDCOMP-15639]
- memcpyが使用され、ターゲットがアンアラインメモリアクセスをサポートしない場合、コンパイラはスタック上の32バイト以上の構造体のメンバに対するアンアラインの書き込みを不正に削除する場合がありました。この不具合は修正されました。 [SDCOMP-15618]
- コンパイラは、動的コンストラクションを含むメンバと無名ビットフィールドメンバが含まれているクラス型の変数宣言をコンパイルした場合に、クラッシュすることがありました。この不具合は修正されました。 [SDCOMP-14356]
- コンパイラは、インラインアセンブラでLSR #0のシフトを使用した場合に誤ったエラー #2897: Cannot encode instruction を生成していました。この不具合は修正されました。 [SDCOMP-14349]
- コンパイラはある特定の状況でクラッシュすることがありました。典型的にはWindows環境で、--no_vfpオプションを使用しないC++のコンパイルを行った場合です。この不具合は修正されました。 [SDCOMP-14220]
- 組み込み関数やインラインアセンブラが使用された場合に、コンパイラはQやGEフラグの取り扱いに於いて不正なコードを生成するか、誤った警告メッセージC3007E: Uninitialised or corrupted use of PSRを表示することがありました。この不具合は修正されました。 [SDCOMP-11798]
ライブラリ
- ごくまれに armlink は、以下の組み合わせで誤った分岐命令を生成する危険性がありました。
- 1. RW 圧縮
- 2. --callgraph または --feedback オプション
- 3. リンカが生成した(圧縮の影響に依存する)実行領域のロードアドレスシンボルへの参照。例:Load$$ER_RW$$Base 及び Load$$ER_RW$$Limit
- 4. リンカが生成したシンボルへの参照を行うセクションは、非分岐リロケーションの前にその分岐の全てのリロケーションを持っていない この不具合は修正されました。 [SDCOMP-15822]
- コンパイラはストリングマージセクションにリードオンリー文字列を配置する場合があります。これらのセクションは、SHF_MERGE及びSHF_STRINGSを含んだフラグを持ちます。文字列がマージされる時、リンカは命令と元の文字列から参照されるデータの変化を考慮する必要があります。リンカは以下の場合このマージプロセスを不正に考慮する場合がありました:
- 1. 共有文字列にアクセするMOVT及びMOVW命令
- 2. MOVT及びMOVW命令のリロケーションが、SHT_REL 型のリロケーションセクションに存在する。ARMツールはこのリロケーションを生成しませんが、GNUツールなどのサードパーティツールはこれらのリロケーションを生成します。
- 3. セクションS1の文字列と、セクションS2の文字列がマージされ、S2の文字列がベースから0以外のオフセットを持っている場合
- 4. S2の最終ベースアドレスとオフセットの特定の組み合わせで、MOVT及びMOVW命令の組み合わせの結果は、本来の位置よりも0x10000より下になります。
- この不具合は修正されました。リンカはリロケーションセクションがSHT_REL型を持っている場合、SHF_MERGE及びSHF_STRINGSのフラグを含んだセクションへのMOVT及びMOVWのリロケーションを正しく取り扱います。 [SDCOMP-15700]
- リンカは、実行領域で予想されるベニアの数が大きい場合に、"Execution interrupted due to an illegal storage access."のエラーを生成する危険性がありました。この不具合は修正されました。 [SDCOMP-15583]
ARM Compiler toolchain v4.1(Build 713から791) †
このARM Compiler Toolchain v4.1 #5 Web Patch Build791はARM RVDS v4.1の製品とともに使用されることを意図しています。これはオリジナルのインストレーションまたは過去のパッチの適用の如何によらず、あらゆるRVDS v4.1 Standard、ProfessionalまたはEvaluationのインストレーションのアップデートを行う事ができます。その他のRVCT/RVDSのリリースとは互換性がありません。
このパッチはコンパイラ、リンカ、アセンブラ、fromelfおよびarmarの実行形式とインクルードファイルおよびC/C++ライブラリから構成されています。
RVDSv4.1のパッチは、ARM社のWebサイトよりダウンロード可能です。
Standard:
https://silver.arm.com/browse/RVS41
Professional:
https://silver.arm.com/browse/RVP41
サポートされるOSプラットフォーム
Windows 7 Professional Edition, 32-bit & 64-bit Windows 7 Enterprise Edition, 32-bit & 64-bit Windows XP SP2, 32-bit & 64-bit Windows XP SP3, 32-bit Windows Vista Business Edition SP1, 32-bit & 64-bit Windows Vista Enterprise Edition SP1, 32-bit & 64-bit Windows Server 2003 32-bit & 64-bit Red Hat Linux Enterprise 4 for x86, 32-bit & 64-bit Red Hat Linux Enterprise 5 for x86, 32-bit & 64-bit
また、このパッチは以下のノンサポートなプラットフォーム上でテストされています。
Windows 2000 SP4 SUSE Linux 9.2 Ubuntu Linux 8.10
パッチをインストールするには以下の手順で行います
1.以下をタイプしてARM Compiler toolchain v4.1のBuild462以降が使用されていることを確認してください。
armcc --vsn
また、Linux環境の場合以下のコマンドを実行してarmccの場所を確認してください。
which armcc
2.ZIPファイルをテンポラリディレクトリに解凍してください。
3.includeディレクトリをテンポラリディレクトリから既存のARM Compiler toolchain includeディレクトリにコピーしてください。既存のディレクトリはARMCC41INC環境変数で確認できます。
<Windowsの例>
C:set ARMCC41INC ARMCC41INC=C:\Program Files\ARM\RVCT\Data\4.1\\813\include
<Linuxの例>
echo $ARMCC41INC ~/ARM/RVCT/Data/4.1/462/include/
4.libディレクトリをテンポラリディレクトリから既存のARM Compiler toolchain libraryディレクトリにコピーしてください。既存のディレクトリはARMCC41LIB環境変数で確認できます。
<Windowsの例>
C: set ARMCC41LIB ARMCC41LIB=C:Program FilesARMRVCTData.12lib
<Linuxの例>
echo $ARMCC41LIB ~/ARM/RVCT/Data/4.1/462/lib/
5.win_32-pentiumディレクトリ(Linux用の場合、linux-pentiumディレクトリ)を、 テンポラリディレクトリから既存のARM Compiler toolchainのインストールディレクトリにコピーしてください。既存のディレクトリはARMCC41BIN環境変数で確認できます。
<Windowsの例>
C: set ARMCC41BIN ARMCC41BIN=C:\Program Files\ARM\RVCT\Programs\4.1\813\win_32-pentium
<Linuxの例>
echo $ARMCC41BIN ~/ARM/RVCT/Programs/4.1/462/linux-pentium/
もし必要なら、解凍するディレクトリをツールのインストールしている場所にあうように変更してください。
6.これでアップデートツールがインストールされます。
コマンドラインから、以下の様に入力し、お客様の意図されるバージョンが返されるかを確認してください。
armcc --vsn armlink --vsn armasm --vsn fromelf --vsn armar --vsn
バージョンは4.1 build 791が返されるべきです。
7.Linux版の場合、実行形式の解凍後にUNIXのパーミッションがリセットされる為実行ができなくなる場合があります。 その場合、次のようにユーザパーミッションをセットして、解決してください。
chmod u+x armcc
64ビットリンカ
RVDSv4.1 Service Pack1およびこのパッチは64ビットバージョンのarmlinkを含んでいます。すでにRVDSv4.1 Service Pack1以降をインストールしていれば、64ビット用実行可能形式のディレクトリが以下のように生成されています。
<Windowsの場合> C:\Program Files\ARM\RVCT\Programs\4.1\\win-x86_64
<Linuxの場合>
/ARM/RVCT/Programs/4.1/462/linux-x86_64/
これらはwin-x86_64(Linux用の場合、linux-x86_64)ディレクトリの中身をテンポラリディレクトリから上記ディレクトリにコピーすることで更新されます。もしRVDSv4.1 Service Pack1以降がインストールされておらず、64ビットバージョンのリンカを使いたい場合にはディレクトリの生成を行ってください。
win-x86_64(Linux用の場合、linux-x86_64)ディレクトリは、armcc.exe, armasm.exe, fromelf.exe and armar.exeのツールも含んでいますが、これらは32ビット用の実行可能形式であり、同一のディレクトリにこれら全ての実行形式がおかれていることを必要とする一部の機能のために存在しています。
"注意)"デフォルトではシステムにおいて32ビットのリンカが使用されるよう設定されています。64ビットバージョンを必要とする場合、ARMCC41BIN環境変数がwin-x86_64(Linux用の場合、linux-x86_64)ディレクトリを示すように、また、PATHが以前のwin_32-pentium(Linux用の場合、linux-pentium)ではなく、これら64ビット用のディレクトリを示すようにそれぞれ変更が必要です。
コンパイラ
- 新しい条件付き命令の生成を制御するためのオプションが追加されました。
--no_conditionalizeは、条件付き命令の生成を無効にします。
--conditionalize は、条件付き命令の生成を許可します。
デフォルトの動作は--cpuオプションに応じた条件付き命令を生成します。[SDCOMP-15107]
- ARM Secure Core SC000 のサポートが追加されました。これは、--cpu sc000で有効になります。[SDCOMP-15550]
フォーマットコンバータ
- fromelf に新しいオプションが追加されました。--force-importはシンボルのリストを受け取り、個々のローカル参照シンボルからグローバルの未参照シンボルへの変換が可能になります。入力リスト内の個々のシンボルは、--force-importにより:
スタティックシンボルテーブルからシンボルを削除します
動的なシンボルのエントリは、 0 で未定義になり、デフォルトの可視性を持つように変更します
[SDCOMP-15339]
リンカ
- 2つのコマンドラインオプションが追加され、BLX命令の生成に関して更に制御が可能になります。--no_blx_arm_thumbは、ARMからThumbの呼び出しへのBLXを生成できるかどうかを制御します。--no_blx_thumb_armは、ThumbからARMの呼び出しへのBLXを生成できるかどうかを制御します。これらのオプションの規定値は、BLX命令の生成を許可します。[SDCOMP-14942]
コンパイラ
- 'Q'フラグの取り扱いが向上しました。[SDCOMP-11291]
- コンパイラはビットバンドされた構造体に対して正しいコードを生成するようにアップデートされました。この不具合は、特定のテストケースをO0の最適化レベルでコンパイルした場合のみ発生していました。[SDCOMP-11749]
- internal fault[0x6f65fa:410640]が発生する問題を修正しました。[SDCOMP-13943]
- internal fault[0x3a34f4:410644]が発生する問題を修正しました。[SDCOMP-14265]
- 三項条件は、安全でないメモリアクセスなどの発生が想定される、その条件の前に式のいずれかを評価してしまう場合がありました。例えば、式がメモリアクセスで、条件が境界チェックを実行する場合です。この不具合は修正されました。[SDCOMP-14329]
- ARM v7M 及び v7EM のコアに於いて、LDRD/STRD 命令はシングルコピーの最小単位(atomic)ではありません。したがってコンパイラは、ARM v7M及びv7EMのコア用にLDRD/STRD命令を生成する代わりに、64ビットのvolatileデータにアクセスする為に2つのLDR/STR命令を生成します。[SDCOMP-14812]
- ベクタライゼーションを使用し、条件付き実行と組み合わされた場合、コンパイラは不正なシフト命令を生成する事がありました。この不具合は修正されました。[SDCOMP-14855]
- ごくまれな状況でコンパイラは、ライトバック付きのLDMまたはSTM命令が生成された場合に、後続のロード・ストア命令が同じベースアドレスを使用し不正なオフセットになる場合がありました。この不具合は修正されました。[SDCOMP-14866]
- 64ビット定数がINT32_MAX X <= uint32_maxとなる符号付き64ビットの定数乗算を実行すると、コンパイラ不正なコードを生成し、誤った結果となる場合がありました。この不具合は修正されました。[sdcomp-14914]="UINT32_MAXとなる符号付き64ビットの定数乗算を実行すると、コンパイラ不正なコードを生成し、誤った結果となる場合がありました。この不具合は修正されました。[SDCOMP-14914]"></=>
- コンパイラは、特定のリテラル値のビット単位のAND演算に続く64ビットの値の右シフトを実行するコードを不正に変換する場合がありました。この不具合は修正されました。[SDCOMP-15020]
- コンパイラは、特定のケースで誤った警告メッセージ"#68-D: integer conversion resulted in a change of sign"を表示することがありました。この不具合は修正されました。[SDCOMP-15096]
- 呼び出し側が非ワードアラインされたポインタを引数として渡し、呼び出される側でそのポインタが修飾参照される関数がインライン展開された場合、コンパイラは不正なオフセットでポインタをアクセスするコードを生成する事がありました。この不具合は修正されました。[SDCOMP-15239]
- 高い最適化レベルで--no_allow_fpreg_for_nonfpdataオプションが指定された場合、コンパイラは小さいなサイズの非アラインmemcpyのNEONコードを生成する事がありました。この不具合は修正されました。[SDCOMP-15289]
- BKPT命令が生成されない原因となった、インラインアセンブラの不具合が修正されました。[SDCOMP-15303]
- --vectorize の指定により、コンパイラは不正にベクタライズループを展開し、配列のオフセットが何回もインクリメントされる場合がありました。この不具合は修正されました。[SDCOMP-15320]
- ごくまれな状況でコンパイラは、レジスタを使用する関数が生成され、それが設定されていなかったためスタックにプッシュされなかった場合(例えば、未定義値の使用)、後の LDM/STM 命令の生成でこのレジスタの内容が破壊されていました。この不具合は修正されました。[SDCOMP-15344]
- ごくまれな状況でコンパイラは、2つの連続した符号付き short または char 型の配列をアクセスし OR 演算において、不正に1つの int または short 型の配列アクセスとして最適化を行い符号拡張をしない場合がありました。この不具合は修正されました。[SDCOMP-15358]
- コンパイラは、特定のケースで誤った警告メッセージ "#68-D: integer conversion resulted in a change of sign" を表示することがありました。この不具合は修正されました。[SDCOMP-15365]
- コンパイラは、Cortex-M プロセッサ用のコンパイルにおいてプロファイルに基づく最適化 (--profile) を使用する場合に、internal fault 0x8d2481を生成することがありました。この不具合は修正されました。[SDCOMP-15407]
ライブラリ
- ライブラリのシンボル__fpl_infinity は、デフォルトの可視性を持っていました。これは可視であるべきではなかった為、不可視となりました。[SDCOMP-15318]
ARM Compiler toolchain v4.1(Build 631から713) †
このARM Compiler Toolchain v4.1 #4 Web Patch Build713はARM RVDS v4.1の製品とともに使用されることを意図しています。これはオリジナルのインストレーションまたは過去のパッチの適用の如何によらず、あらゆるRVDS v4.1 Standard、ProfessionalまたはEvaluationのインストレーションのアップデートを行う事ができます。その他のRVCT/RVDSのリリースとは互換性がありません。
このパッチはコンパイラ、リンカ、アセンブラ、fromelfおよびarmarの実行形式とインクルードファイルおよびC/C++ライブラリから構成されています。
RVDSv4.1のパッチは、ARM社のWebサイトよりダウンロード可能です。
Standard:
https://silver.arm.com/browse/RVS41
Professional:
https://silver.arm.com/browse/RVP41
サポートされるOSプラットフォーム
Windows 7 Professional Edition, 32-bit & 64-bit Windows 7 Enterprise Edition, 32-bit & 64-bit Windows XP SP2, 32-bit & 64-bit Windows XP SP3, 32-bit Windows Vista Business Edition SP1, 32-bit & 64-bit Windows Vista Enterprise Edition SP1, 32-bit & 64-bit Windows Server 2003 32-bit & 64-bit Red Hat Linux Enterprise 4 for x86, 32-bit & 64-bit Red Hat Linux Enterprise 5 for x86, 32-bit & 64-bit
また、このパッチは以下のノンサポートなプラットフォーム上でテストされています。
Windows 2000 SP4 SUSE Linux 9.2 Ubuntu Linux 8.10
パッチをインストールするには以下の手順で行います
1.以下をタイプしてARM Compiler toolchain v4.1のBuild462以降が使用されていることを確認してください。
armcc --vsn
また、Linux環境の場合以下のコマンドを実行してarmccの場所を確認してください。
which armcc
2.ZIPファイルをテンポラリディレクトリに解凍してください。
3.includeディレクトリをテンポラリディレクトリから既存のARM Compiler toolchain includeディレクトリにコピーしてください。既存のディレクトリはARMCC41INC環境変数で確認できます。
<Windowsの例>
C:set ARMCC41INC ARMCC41INC=C:\Program Files\ARM\RVCT\Data\4.1\719\include
<Linuxの例>
echo $ARMCC41INC ~/ARM/RVCT/Data/4.1/462/include/
4.libディレクトリをテンポラリディレクトリから既存のARM Compiler toolchain libraryディレクトリにコピーしてください。既存のディレクトリはARMCC41LIB環境変数で確認できます。
<Windowsの例>
C: set ARMCC41LIB ARMCC41LIB=C:\Program Files\AR\MRVCT\Data\4.1\719\lib
<Linuxの例>
echo $ARMCC41LIB ~/ARM/RVCT/Data/4.1/462/lib/
5.win_32-pentiumディレクトリ(Linux用の場合、linux-pentiumディレクトリ)を、 テンポラリディレクトリから既存のARM Compiler toolchainのインストールディレクトリにコピーしてください。既存のディレクトリはARMCC41BIN環境変数で確認できます。
<Windowsの例>
C: set ARMCC41BIN ARMCC41BIN=C:\Program Files\ARM\RVCT\Programs\4.1\719\\win_32-pentium
<Linuxの例>
echo $ARMCC41BIN ~/ARM/RVCT/Programs/4.1/462/linux-pentium/
もし必要なら、解凍するディレクトリをツールのインストールしている場所にあうように変更してください。
6.これでアップデートツールがインストールされます。
コマンドラインから、以下の様に入力し、お客様の意図されるバージョンが返されるかを確認してください。
armcc --vsn armlink --vsn armasm --vsn fromelf --vsn armar --vsn
バージョンは4.1 build 713が返されるべきです。
7.Linux版の場合、実行形式の解凍後にUNIXのパーミッションがリセットされる為実行ができなくなる場合があります。 その場合、次のようにユーザパーミッションをセットして、解決してください。
chmod u+x armcc
64ビットリンカ
RVDSv4.1 Service Pack1およびこのパッチは64ビットバージョンのarmlinkを含んでいます。すでにRVDSv4.1 Service Pack1以降をインストールしていれば、64ビット用実行可能形式のディレクトリが以下のように生成されています。
<Windowsの場合> C:Program FilesARMRVCTPrograms.12win-x86_64
<Linuxの場合>
/ARM/RVCT/Programs/4.1/462/linux-x86_64/
これらはwin-x86_64(Linux用の場合、linux-x86_64)ディレクトリの中身をテンポラリディレクトリから上記ディレクトリにコピーすることで更新されます。もしRVDSv4.1 Service Pack1以降がインストールされておらず、64ビットバージョンのリンカを使いたい場合にはディレクトリの生成を行ってください。
win-x86_64(Linux用の場合、linux-x86_64)ディレクトリは、armcc.exe, armasm.exe, fromelf.exe and armar.exeのツールも含んでいますが、これらは32ビット用の実行可能形式であり、同一のディレクトリにこれら全ての実行形式がおかれていることを必要とする一部の機能のために存在しています。
"注意)"デフォルトではシステムにおいて32ビットのリンカが使用されるよう設定されています。64ビットバージョンを必要とする場合、ARMCC41BIN環境変数がwin-x86_64(Linux用の場合、linux-x86_64)ディレクトリを示すように、また、PATHが以前のwin_32-pentium(Linux用の場合、linux-pentium)ではなく、これら64ビット用のディレクトリを示すようにそれぞれ変更が必要です。
- Cortex-R5及びCortex-R5Fのプロセッササポートが追加されました。[SDCOMP-12771]
- ARMコンパイラversion 4.1以降ではレジスタアロケータが拡張され、浮動小数点レジスタが整数データ型の値の格納に使われるようになりました。コンパイラが整数データ用に浮動小数点レジスタを使用しないようにするためのオプション--no_allow_fpreg_for_nonfpdataが提供されました。 [SDCOMP-13648]
アセンブラ
- 不正なデータサイズ指定子付きのVLDRとVSTR命令は、エラーとしてレポートされないというアセンブラの不具合は修正されました。この場合、error A1836Eとしてレポートされるようになり、以前の振る舞いを想定していた場合は抑止されます。[SDCOMP-12949]
- 不正なデータサイズ指定子付きのVLDMとVSTM命令は、エラー無く受け入れられたり、命令に対して有効な指定子がエラーになったりする場合がありました。不正なデータサイズ指定子付きのVLDMとVSTM命令は、error A1837Eとしてレポートされるようになりました。このエラーは、以前の振る舞いを想定していた場合にはダウングレード可能です。[SDCOMP-12982]
コンパイラ
- ポインタのキャストを使用して符号無しの型として符号付きshortまたはchar型へ再解釈されるss = (signed short)&us;の様な表記は、次のint型に拡大されたときに正しい答えの符号拡張に失敗する場合がありました。この不具合は修正されました。[SDCOMP-13350]
- 最適化レベル-O3 -Otimeでコンパイラは、特定の状況下でInternal fault : [0x07e885]を発生することがありました。この不具合は修正されました。[SDCOMP-13368]
- 最適化レベル-O3 -Otimeで、ループ最適化において配列のポインタを進めるループで不正な変換を行う場合がありました。ポインタがゼロではない配列要素のアドレスで初期化された場合、ループ最適化は誤って配列の最初の要素へのポインタを初期化する可能性がありました。この不具合は修正されました。[SDCOMP-13370]
- 最適化レベル-O3 -Otimeで、--remove_unneeded_entitiesオプションはデバッグ情報に加えて、生成される実際のコードを変更することがありました。この不具合は修正され、実行出力には影響しないようになりました。[SDCOMP-13519]
- volatile装飾子は、インラインアセンブラのロードとストア命令で考慮されていませんでした。この不具合は修正されました。[SDCOMP-13572]
- ごくまれな状況でコンパイラは、後続に条件実行を含むNULLチェックで不正なコードを生成していました。この不具合は修正されました。[SDCOMP-13703]
- 前回のパッチ以降、シフト付き(またはゼロシフト)のPKHTB命令を含んだインラインアセンブラは誤ってerror #2897となっていました。この不具合は修正されました。[SDCOMP-13245]
- 構造体を返し、実際にはポインタを渡す関数を呼び出す場合、コンパイラは関数呼び出し内で有効なテンポラリ変数の使用で必須なエイリアス問題を無視する場合がありました。この不具合は修正されました。[SDCOMP-13372]
- コンパイラは常にdllexportを介してエクスポートされたコンパイラで生成されたnon-trivialなデストラクタのアウトオブライン定義を生成しませんでした。この不具合は修正されました。[SDCOMP-13403]
- アンアラインドアクセスをサポートしているプロセッサコアを使用し、アンアラインドアクセスを無効にしてコンパイルした場合、以前の4.1パッチでは整数をバイトシフトして4バイトのサイズの char 型の配列に入れた時にInternal fault 0xabc3e8が発生していました。この不具合は修正されました。[SDCOMP-13183]
- 最適化レベル-O3 -Otimeでループ中で配列を処理した場合、コンパイラは不正に__aeabi_memmoveへの参照を生成し、誤った結果を出力することがありました。この不具合は修正されました。[SDCOMP-13921]
ARM Compiler toolchain v4.1(Build 561から631) †
このARM Compiler Toolchain v4.1 #3 Web Patch Build631はARM RVDS v4.1の製品とともに使用されることを意図しています。これはオリジナルのインストレーションまたは過去のパッチの適用の如何によらず、あらゆるRVDS v4.1 Standard、ProfessionalまたはEvaluationのインストレーションのアップデートを行う事ができます。その他のRVCT/RVDSのリリースとは互換性がありません。
このパッチはコンパイラ、リンカ、アセンブラ、fromelfおよびarmarの実行形式とインクルードファイルおよびC/C++ライブラリから構成されています。
RVDSv4.1のパッチは、ARM社のWebサイトよりダウンロード可能です。
Standard:
https://silver.arm.com/browse/RVS41
Professional:
https://silver.arm.com/browse/RVP41
サポートされるOSプラットフォーム
Windows 7 Professional Edition, 32-bit & 64-bit Windows 7 Enterprise Edition, 32-bit & 64-bit Windows XP SP2, 32-bit & 64-bit Windows XP SP3, 32-bit Windows Vista Business Edition SP1, 32-bit & 64-bit Windows Vista Enterprise Edition SP1, 32-bit & 64-bit Windows Server 2003 32-bit & 64-bit Red Hat Linux Enterprise 4 for x86, 32-bit & 64-bit Red Hat Linux Enterprise 5 for x86, 32-bit & 64-bit
また、このパッチは以下のノンサポートなプラットフォーム上でテストされています。
Windows 2000 SP4 SUSE Linux 9.2 Ubuntu Linux 8.10
パッチをインストールするには以下の手順で行います
1.以下をタイプしてARM Compiler toolchain v4.1のBuild462以降が使用されていることを確認してください。
armcc --vsn
また、Linux環境の場合以下のコマンドを実行してarmccの場所を確認してください。
which armcc
2.ZIPファイルをテンポラリディレクトリに解凍してください。
3.includeディレクトリをテンポラリディレクトリから既存のARM Compiler toolchain includeディレクトリにコピーしてください。既存のディレクトリはARMCC41INC環境変数で確認できます。
<Windowsの例>
C:set ARMCC41INC ARMCC41INC=C:\Program Files\ARM\RVCT\Data4.1\631\include
<Linuxの例>
echo $ARMCC41INC ~/ARM/RVCT/Data/4.1/462/include/
4.libディレクトリをテンポラリディレクトリから既存のARM Compiler toolchain libraryディレクトリにコピーしてください。既存のディレクトリはARMCC41LIB環境変数で確認できます。
<Windowsの例>
C: set ARMCC41LIB ARMCC41LIB=C:\Program Files\ARM\RVCT\Data\4.1\631\lib
<Linuxの例>
echo $ARMCC41LIB ~/ARM/RVCT/Data/4.1/462/lib/
5.win_32-pentiumディレクトリ(Linux用の場合、linux-pentiumディレクトリ)を、 テンポラリディレクトリから既存のARM Compiler toolchainのインストールディレクトリにコピーしてください。既存のディレクトリはARMCC41BIN環境変数で確認できます。
<Windowsの例>
C: set ARMCC41BIN ARMCC41BIN=C:\Program Files\ARM\RVCT\Programs\4.1\631\win_32-pentium
<Linuxの例>
echo $ARMCC41BIN ~/ARM/RVCT/Programs/4.1/462/linux-pentium/
もし必要なら、解凍するディレクトリをツールのインストールしている場所にあうように変更してください。
6.これでアップデートツールがインストールされます。
コマンドラインから、以下の様に入力し、お客様の意図されるバージョンが返されるかを確認してください。
armcc --vsn armlink --vsn armasm --vsn fromelf --vsn armar --vsn
バージョンは4.1 build 631が返されるべきです。
7.Linux版の場合、実行形式の解凍後にUNIXのパーミッションがリセットされる為実行ができなくなる場合があります。 その場合、次のようにユーザパーミッションをセットして、解決してください。
chmod u+x armcc
64ビットリンカ
RVDSv4.1 Service Pack1およびこのパッチは64ビットバージョンのarmlinkを含んでいます。すでにRVDSv4.1 Service Pack1以降をインストールしていれば、64ビット用実行可能形式のディレクトリが以下のように生成されています。
<Windowsの場合> C:\Program Files\ARM\RVCT\Programs\4.1\713\win-x86_64
<Linuxの場合>
/ARM/RVCT/Programs/4.1/462/linux-x86_64/
これらはwin-x86_64(Linux用の場合、linux-x86_64)ディレクトリの中身をテンポラリディレクトリから上記ディレクトリにコピーすることで更新されます。もしRVDSv4.1 Service Pack1以降がインストールされておらず、64ビットバージョンのリンカを使いたい場合にはディレクトリの生成を行ってください。
win-x86_64(Linux用の場合、linux-x86_64)ディレクトリは、armcc.exe, armasm.exe, fromelf.exe and armar.exeのツールも含んでいますが、これらは32ビット用の実行可能形式であり、同一のディレクトリにこれら全ての実行形式がおかれていることを必要とする一部の機能のために存在しています。
"注意)"デフォルトではシステムにおいて32ビットのリンカが使用されるよう設定されています。64ビットバージョンを必要とする場合、ARMCC41BIN環境変数がwin-x86_64(Linux用の場合、linux-x86_64)ディレクトリを示すように、また、PATHが以前のwin_32-pentium(Linux用の場合、linux-pentium)ではなく、これら64ビット用のディレクトリを示すようにそれぞれ変更が必要です。
コンパイラ
- コンパイラは、アトミックなメモリアクセスを実現する--gnu モードでのGNU gccアトミックビルトイン関数をサポートしました。コンパイラは、1, 2 及び4バイトのワードサイズ用に以下の関数をサポートします: __sync_fetch_and_add, __sync_fetch_and_sub, __sync_fetch_and_or, __sync_fetch_and_and, __sync_fetch_and_xor, __sync_fetch_and_nand, __sync_add_and_fetch, __sync_sub_and_fetch, __sync_or_and_fetch, __sync_and_and_fetch, __sync_xor_and_fetch, __sync_nand_and_fetch, __sync_bool_compare_and_swap, __sync_val_compare_and_swap, __sync_lock_test_and_set, __sync_lock_release, __sync_synchronize[SDCOMP-11584]
リンカ
- 新しい--tiebreaker=リンカオプションを追加しました。には、creationかcmdlineを指定可能です。tiebreakerは、ソーティングアルゴリズムがセクション順の合計を必要とする時に使用されます。デフォルトでは、tiebreakerはcreation で、これは単にリンカの中のセクションデータ構造の作成の順番になります。もう一方の--tiebreaker=cmdlineは、セクションがコマンドラインで出現した順番になります。コマンドラインの順番は、File.Object.Sectionと定義され、Sectionはオブジェクト内のセクションのsh_idxです。Objectは、ファイル内で出現した順のオブジェクトです。File は、コマンドラインで出現した順のファイルです。ファイル内で出現したオブジェクトの順番は、ファイルがarアーカイブである場合でのみ意味があります。--map file による表示にコマンドライン順を示す為に、--section_index_display=cmdlineスイッチを使用して下さい。[SDCOMP-10525]
- リンカは、新たに.ANYセクションの配置を制御する2つのコマンドラインオプションをサポートしました:
- --any_sort_order=がサポートされました。は、以下のいずれか一つを指定します。
descending_size(サイズで降順にソートします) cmdline(コマンドラインインデックスでソートします)
デフォルトは、descending_sizeです。
- --any_sort_order=がサポートされました。は、以下のいずれか一つを指定します。
- --any_placement=がサポートされました。は、以下のいずれか一つを指定します。
first_fit(セクションをスペース付きで(スキャッタファイル順)最初のERに配置します) best_fit(セクションを最小のフリースペース付きで(スキャッタファイル順)ERに配置します) worst_fit(セクションを最大のフリースペース付きで(スキャッタファイル順)ERに配置します) next_fit(不十分なスペースがあれば空きスペースが次に動いていて、現在のERにセクションを配置します。前のERには後戻りしません)
デフォルトは、worst_fitです。
また、--info anyという新しいinfoオプションが追加され、ソート順、配置アルゴリズム、およびこの配置アルゴリズムによってどのセクションがどの実行リージョンに配置されたかという情報が出力されます。[SDCOMP-10526]
リンク時のコード生成(LTCG)機能は、手続き間の分析の有効性を向上させるために再設計をおこなう事を検討しています。多くのユーザが--ltcgの使用による利点を得ている間、私たちはこの機能アーキテクチャが潜在的により広範囲なユースケースで利益になると感じています。ユーザが利益を得ている場合には--ltcgを使用し続ける事を奨励しますが、我々の内部検討と潜在的再設計を終了するまでLTCGに関連した不具合修正や機能拡張は延期することをご了承下さい。--ltcg に替わる機能としては、--multifileオプションを検討することをユーザに推奨致します。--multifile も手続き間の分析を実行しますが、入力ファイル数は制限されます(10個以下を推奨しています)。
コンパイラ
- -O3 -Otimeで取り得る最小の値の符号付き定数が加算に伝播された時に、余分な否定演算が発生する場合がありました。この不具合は修正されました。[SDCOMP-10825]
- -O3 -Otimeでdeclaration-initializerは、副作用を持つ可能性のある関数呼び出しをリオーダしてしまう場合がありました。この不具合は、修正されました。[SDCOMP-10826]
- 特定の状況下において、再帰的データ構造内のアドレスの格納(または同様の終わりを達成するポインタ演算の使用)でUNPREDICTABLEなストア命令が生成されることがありました。この不具合は修正されました。[SDCOMP-10901]
- まれにコンパイラは最適化レベルの-O2 -Otimeと-O3 -Otimeで、関数を通過するいくつかの経路でスタックエントリー上にレジスタを保存していないのに、リターン時にスタックからリストアを行うコードを生成していました。これはスタックポインタの不正な使用となっていました。この不具合は修正されました。[SDCOMP-10926]
- 特定の条件でコンパイラは、--thumbで64bit減算を行った場合にInternal errorを発生することがありました。この不具合は修正されました。[SDCOMP-10931]
- 最適化レベル-O3 -Otimeでコンパイラは宣言ブロック内で初期化として関数参照が発生し、同じ宣言ブロック内で初期化としてポインタ参照が発生し、関数でそのポインタによりポインタ値が変更された場合に不正なコードを生成することがありました。この不具合は修正されました。[SDCOMP-10948]
- 最適化レベル-O3 -Otimeでコンパイラはwhileループが固定の繰り返しカウントを持ち、ループ条件がゼロ以外の定数とunsigned intergerとの比較を行い、ループの繰り返し回数が少ない場合に不正なコードを生成することがありました。この不具合は修正されました。[SDCOMP-11083]
- 最適化レベル-O2が指定された特定の状況下でコンパイラは、別の関数におけるlongjmp()呼び出し後のsetjmp()呼び出し側のローカル変数の値が不正になるコードを生成する場合がありました。この不具合は修正されました。[SDCOMP-11289]
- Internal fault 0x79ad6d及び0x751671を発生する要因は修正されました。[SDCOMP-12118]
- 最適化レベル-O3 -Otimeでコンパイラは、二つの符号なし変数の差の絶対値の計算条件式を不正に取り扱う場合がありました(例:"(a = b) ? a-b : b-a")。この不具合は修正されました。[SDCOMP-12144]
- 最適化レベル-O3 -Otimeでコンパイラは、符号無し整数をインデックスとするループでラップアラウンドの振る舞いを不適切に想定し、不正なコードを生成する事がありました。この不具合は修正されました。[SDCOMP-12265]
- NEON組み込み関数を使用し、最初の引数がスタティック定数だった場合にコンパイラは不正にVBICとVORNを交換可能な処理として扱うことがありました。この不具合は修正されました。[SDCOMP-7319]
- コンパイラは、shortまたはchar型のローカルスタティック変数を持つ関数に対して-O1以上が指定された場合に、不正なコードを生成する事がありました。この不具合は修正されました。[SDCOMP-7335]
- コンパイラは、-O3 -Otimeが指定された場合に不正なコードを生成することがありました。アンロールされた場合にポインタへのポインタにアクセスする特定のループは、古い値を参照することがありました。この不具合は修正されました。[SDCOMP-7343]
- 最適化レベル-O3 -Otimeでコンパイラは、whileループが最終で変数のデクリメントがアンロールされた場合、最初の繰り返しがスキップされる不正なコードを生成する事がありました。この不具合は修正されました。[SDCOMP-7344]
- -O3 -Otimeでインライン関数が暗黙のキャストでリターンする場合、コンパイラは不正に必要なキャストを削除する場合がありました。この不具合は修正されました。[SDCOMP-7347]
- -O3 -Otimeで複数のtypedefを通じて宣言されたポインタ変数は、間接指定の不正な数値で扱われる場合がありました。この不具合は修正されました。[SDCOMP-7350]
- -O3 -Otime指定時にコンパイラは、次の繰り返しの為にデータをプリフェッチする目的でループローテーション変形を適用します。この結果、配列の最後の部分を通過して不正なリードが発生する場合がありました。この現象が起こらないように、メインループの本体から必要に応じて最初と最後の繰り返し部分を分離して扱うように修正されました。[SDCOMP-7497]
- 新しいオプション--[no_]intermediate_object_filesが追加されました。-cが指定されずにコンパイルとリンクのステップが組み合わされ、--no_intermediate_object_files が指定された場合、コンパイラはコンパイルされたオブジェクトファイル用にテンポラリファイルを使用しリンク後にそれを削除します。オブジェクトファイルは通常のようにカレントディレクトリには生成されません。 通常のarmcc起動でのデフォルトは(以前の振る舞いを維持し)--intermediate_object_files、GCCコマンドライン変換でのデフォルトは--no_intermediate_object_filesになります。[SDCOMP-10712]
- --remove_unneeded_entitiesを使用した場合に発生するInternal fault 0x413ad2の要因は修正されました。[SDCOMP-10800]
- コンパイラは、構造体内でポインタを介して bitbanded アクセスを実行するコードを生成していました(例: s1.bitbanded_object_ptr-bitfield )が、ドキュメントによると許可されていません。この不具合は修正されました。[SDCOMP-11315]
アセンブラ
- 4.1のリリースの改良により、アセンブラがソースのパスの段階でディレクティブとインストラクションに関して、より厳密に扱われるようになっていました。 これにより、ELSE, ELIFおよびENDIFディレクティブのいくつかはA1903Eと診断される事がありました。ELSE, ELIF およびENDIFは現在、この診断から除外されるようになりました。[SDCOMP-10947]
- アセンブラは不正に命令エンコード化で届かないPC相対ラベルを、エラーを表示せずに許容していました。 この不具合は修正され、エラーメッセージが表示されるようになりました。[SDCOMP-8949]
- エラーメッセージA1670E, A1671E およびA1698Eは、オペランドがエラーとなる位置ではなく、行の最終位置カラムを示すことがありました。この不具合は修正されました。[SDCOMP-9071]
- アセンブラは、負の整数として記述された即値オフセット付きのロードまたはストアインストラクションに対して、不正にA1616Eエラーを生成するか、エラー無しに不正なコードを生成する場合がありました。この不具合は修正されました。[SDCOMP-9078]
リンカ
- リンカは、バージョン定義セクションのエントリサイズ属性を不正にセットしていました。この不具合は修正され、正しくゼロに設定されます。[SDCOMP-10617]
- ベニア生成モデル--veneer_inject_type=poolは、ベニアが取ることが出来る最も高いアドレスのプール制限に届く範囲内へのベニアへの分岐が要求されていました。到達することが出来ない分岐が後で見つけられた場合、リンカはL6828エラーメッセージを出していました。プール内の全てのベニアが下限のプール制限に適合する場合、リンカは分岐が対応するようにプールの制限を縮小するようになりました。エラーメッセージE6828は、リンカがこの限界値を下げることが出来ない場合にだけ表示されます。[SDCOMP-10797]
- リンカは、ダイナミックライブラリが部分リンクに含まれた場合に--ltcgが使われていてもワーニングL6460Wを発生していました。このワーニングはこの場合には発生しなくなりました。[SDCOMP-10872]
- リンカのsymdefsファイルは、あるリンクステップの出力から使われるグローバルシンボルが別のリンクステップの入力として使用される事を可能にします。symdefsファイルがcomdatグループのメンバーであるセクションによって定義されたグローバルシンボルを含み、symdefsファイルのユーザが同じcomdatグループを生成する場合に、シンボル多重定義エラーL6200Eが発生します。そのようなシンボルの例は、symdefsファイルとアプリケーションの両方によって定義されるコンパイラヘルパ関数です。このエラーは発生しなくなりました。[SDCOMP-11080]
ライブラリ
- microlibでのscanfまたはfscanfの使用では、リンクエラーを発生しないようになりました。[SDCOMP-7946]
ARM Compiler toolchain v4.1(Build 514から561) †
このARM Compiler Toolchain v4.1 #2 Web Patch Build561はARM RVDS v4.1の製品とともに使用されることを意図しています。これはオリジナルのインストレーションまたは過去のパッチの適用の如何によらず、あらゆるRVDS v4.1 Standard、ProfessionalまたはEvaluationのインストレーションのアップデートを行う事ができます。その他のRVCT/RVDSのリリースとは互換性がありません。
このパッチはコンパイラ、リンカ、アセンブラ、fromelfおよびarmarの実行形式とインクルードファイルおよびC/C++ライブラリから構成されています。
RVDSv4.1のパッチは、ARM社のWebサイトよりダウンロード可能です。
Standard:
https://silver.arm.com/browse/RVS41
Professional:
https://silver.arm.com/browse/RVP41
- armlinkはGNU ldと同じ方法で、シンボルバージョンスクリプト内での非マングル化C++シンボルのマッチングをサポートしました。
例:
VERS_2.0 { global: extern "C++" { ns::*; "foo::f(int, double)"; }; local: *; }
[448263]
- アセンブラでの--pdオプションを使った事前定義におけるエラーメッセージは処理されている事前定義文字列を表示するように改善されました。[731112]
- armlinkはリンクにおいてまだインクルードされていなければ、リンカスクリプト内の入力セクションセレクタにおいて、明示的に記述されたファイル名を開くようになりました。
例:
.text : { object.o(.text) }
[737554]
- リンカは--veneer_inject_type=オプションをサポートしました。typeはindividualまたはpoolを指定することができます。デフォルトはindividualです。このオプションは--largeregionsモードが使用されているときに、ベニアのレイアウトを制御します。
リンカがベニアを使用する最大の数のセクションからたどりつけるように--veneer_inject_type=individualはベニアを配置します。実行リージョン間でのベニアの再使用は許可されます。このタイプはベニアの数を最小にしますが、最もイメージの構造を複雑にしてしまいます。
リンカが実行リージョンの連続する範囲からベニアを収集し、その範囲内で生成された全てのベニアをエリアの最後に配置されるpoolに--veneer_inject_type=poolは集めます。1つの大きな実行リージョンは1つ以上のレンジを持つことがあるので、1つ以上のpoolが存在し得ます。このタイプはイメージの構造に影響を与えにくいですが、コードの範囲内で他のpool内のベニアの再使用ができないので、再使用の機会が少なくなってしまいます。
リンカはベニアが必要となることが予測される分岐命令の所在をベースとして範囲を計算します。状態の変更が必要とされるとき、または偶発的な部分も含めてソースからターゲットへの距離が分岐範囲よりも大きい場合にベニアが必要な分岐と予測されます。偶発的な部分のサイズについては--veneer_pool_size=によって設定できます。デフォルトでは、102400バイトがセットされます。--info veneerpoolsオプションはベニアプールがリンカによってどのように配置されたかの情報を表示させます。[740845]
- armlinkのScatterAssertスキャッタファイル機能は計算した数を含むエラーメッセージを表示するようになりました。例:
Error: L6388E: ScatterAssert expression (ImageLength(er1) <imagelength(er2)) 27="27" failed="failed" on="on" line="line" :=":" (0x608="(0x608"><0x400)>
[742874]</0x400)></imagelength(er2))>
- armlinkの--any_contingencyオプションは存在しうるベニアに対し偶発的な領域の指定ができるように改善されました。このオプションの使用方法は以前と同じです-しかしながら、以前のイメージは.ANYを伴うリージョンを時折オーバーフローさせるような多くのベニアを必要とすることがありました。[743029]
- 特定のスキャッタローディングエラーが発生したとしても(--mapが有効になっていれば)メモリマップ情報が生成されるようになりました。[743870]
- 分岐命令に対する失われた、または不正なラベルが診断メッセージA1114Eを発生させていました。これはA1112Eに変更されました。[744433]
- 64ビットバージョンのリンカが提供されます。64ビットホストOSのシステム上でリンカによって必要とされるアドレス可能なメモリが32ビットシステムの有効範囲を超える場合にも使用可能となります。
[h3]サポートされるOSプラットフォーム[/h]
Windows 7 Professional Edition, 32-bit & 64-bit Windows 7 Enterprise Edition, 32-bit & 64-bit Windows XP SP2, 32-bit & 64-bit Windows XP SP3, 32-bit Windows Vista Business Edition SP1, 32-bit & 64-bit Windows Vista Enterprise Edition SP1, 32-bit & 64-bit Windows Server 2003 32-bit & 64-bit Red Hat Linux Enterprise 4 for x86, 32-bit & 64-bit Red Hat Linux Enterprise 5 for x86, 32-bit & 64-bit
また、このパッチは以下のノンサポートなプラットフォーム上でテストされています。
Windows 2000 SP4 SUSE Linux 9.2 Ubuntu Linux 8.10
[h3]パッチをインストールするには以下の手順で行います[/h]
1.以下をタイプしてARM Compiler toolchain v4.1のBuild462以降が使用されていることを確認してください。
armcc --vsn
また、Linux環境の場合以下のコマンドを実行してarmccの場所を確認してください。
which armcc
2.ZIPファイルをテンポラリディレクトリに解凍してください。
3.includeディレクトリをテンポラリディレクトリから既存のARM Compiler toolchain includeディレクトリにコピーしてください。既存のディレクトリはARMCC41INC環境変数で確認できます。
<Windowsの例>
C:set ARMCC41INC ARMCC41INC=C:\Program Files\ARM\RVCT\Data\4.1561\include
<Linuxの例>
echo $ARMCC41INC ~/ARM/RVCT/Data/4.1/462/include/
4.libディレクトリをテンポラリディレクトリから既存のARM Compiler toolchain libraryディレクトリにコピーしてください。既存のディレクトリはARMCC41LIB環境変数で確認できます。
<Windowsの例>
C: set ARMCC41LIB ARMCC41LIB=C:\Program Files\ARM\RVCT\Data\4.1\561\lib
<Linuxの例>
echo $ARMCC41LIB ~/ARM/RVCT/Data/4.1/462/lib/
5.win_32-pentiumディレクトリ(Linux用の場合、linux-pentiumディレクトリ)を、 テンポラリディレクトリから既存のARM Compiler toolchainのインストールディレクトリにコピーしてください。既存のディレクトリはARMCC41BIN環境変数で確認できます。
<Windowsの例>
C: set ARMCC41BIN ARMCC41BIN=C\:Program Files\ARMRVCT\Programs\4.1\561\win_32-pentium
<Linuxの例>
echo $ARMCC41BIN ~/ARM/RVCT/Programs/4.1/462/linux-pentium/
もし必要なら、解凍するディレクトリをツールのインストールしている場所にあうように変更してください。
6.これでアップデートツールがインストールされます。
コマンドラインから、以下の様に入力し、お客様の意図されるバージョンが返されるかを確認してください。
armcc --vsn armlink --vsn armasm --vsn fromelf --vsn armar --vsn
バージョンは4.1 build 561が返されるべきです。
7.Linux版の場合、実行形式の解凍後にUNIXのパーミッションがリセットされる為実行ができなくなる場合があります。 その場合、次のようにユーザパーミッションをセットして、解決してください。
chmod u+x armcc
[h3]64ビットリンカ[/h]
RVDSv4.1 Service Pack1およびこのパッチは64ビットバージョンのarmlinkを含んでいます。すでにRVDSv4.1 Service Pack1以降をインストールしていれば、64ビット用実行可能形式のディレクトリが以下のように生成されています。
<Windowsの場合> C:Program FilesARMRVCTPrograms.12win-x86_64
<Linuxの場合>
/ARM/RVCT/Programs/4.1/462/linux-x86_64/
これらはwin-x86_64(Linux用の場合、linux-x86_64)ディレクトリの中身をテンポラリディレクトリから上記ディレクトリにコピーすることで更新されます。もしRVDSv4.1 Service Pack1以降がインストールされておらず、64ビットバージョンのリンカを使いたい場合にはディレクトリの生成を行ってください。
win-x86_64(Linux用の場合、linux-x86_64)ディレクトリは、armcc.exe, armasm.exe, fromelf.exe and armar.exeのツールも含んでいますが、これらは32ビット用の実行可能形式であり、同一のディレクトリにこれら全ての実行形式がおかれていることを必要とする一部の機能のために存在しています。
"注意)"デフォルトではシステムにおいて32ビットのリンカが使用されるよう設定されています。64ビットバージョンを必要とする場合、ARMCC41BIN環境変数がwin-x86_64(Linux用の場合、linux-x86_64)ディレクトリを示すように、また、PATHが以前のwin_32-pentium(Linux用の場合、linux-pentium)ではなく、これら64ビット用のディレクトリを示すようにそれぞれ変更が必要です。
ARM Compiler toolchain Build 514からBuild 561での変更点は下記の通りとなります。
コンパイラ
- internal fault 0x45464の原因を修正しました。[718921]
- Windows環境において-O3と-Otimeを使用してコンパイルした場合にクラッシュする可能性について修正しました。[742234]
- 特定の状況下でarmccがmemmoveの結果が無効になる不正なコード生成を行う可能性がありました。この問題は修正されました。[742926]
- コンパイラがアーキテクチャv5TEターゲット用にコンパイルを行う際、LDRDにおいて非ダブルワードアラインではなくワードアラインのLDRDを生成する可能性がありました。この問題は修正されました。[743327]
- __inlineキーワード使用時、armccはみせかけだけのリマーク#679-Dを表示することがありました。このリマークは生成されなくなりました。[743470]
- if/else構造と-O3を使用時に不正なコードを生成することがありました。この問題は修正されました。[743585]
- #pragma pack(n)が構造体フィールドにおいて誤って無効にされ、不正なアンアラインドアクセスを発生させていました。この問題は修正されました。[743749]
- FFmpeg JPEGデコーダを-O3を用いてコンパイルしたときに、不正なコードを生成する関数のインライニングの問題を修正しました。[744020]
- unsigned intダウンカウントインデックスのための繰り返しカウントが時折不正に計算され、1以外のインクリメントによってダウンカウントされるunsignedなループインデックスを使用したときに、-O3 -Otimeオプションが用いられると不正なコードを生成することがありました。[744070]
- armccは-O3 -Otime使用時に不正なコードを生成することがありました。特定のケースにおいて配列定数がループで使用され(全てのループの繰り返しにおいて定数値を持つ配列要素)、もしそのような配列定数のように様々なストアと使用における関連性がクリアでない場合、不正な方法でスカラ実行のためのループ最適化が行われていました。[744475]
- armccはそれ自身が実際の引数として使用されるようなダミー引数に対する修正の効果を無効にしてしまうことによって引き起こされる不正なコードを-O3 -Otime使用時に生成することがありました。従って、この問題は潜在的に上位レベルで定数を渡される(必ずしも再帰的でない)ネストした呼び出しがあるときに発生することがあり、値を渡すチェインにおける1つ以上のダミー引数に対して修正が行われました。[744478]
- 非常にまれなケースで、armccは-O3 -Otime使用時に大量のメモリを消費し、ハングすることがありました。この問題は修正されました。[744632]
- 巨大なスイッチ式をThumbモードにおいてコンパイルするとき、internal fault 0x2cc72cでクラッシュすることがありました。この問題は修正されました。[744872]
Cライブラリ
- stdioの実装においてヒープがメモリを使い尽くしたときにクラッシュする可能性がありました。この問題は修正されました。[741270]
- マルチスレッドプログラムにおいてfgets(), gets(), fputs()およびputs()関数が、エラーまたはEOFによってリターンするとき、ストリームのmutexのアンロックに失敗することがありました。これらは正しくmutexをアンロックするようになりました。[743172]
- microlib内のscanfまたはfscanf関数を使用しようとしたときにリンクエラーが発生しなくなりました。[743330]
- microlibの最小のstdio実装において、_sys_seek()が正の値を返した場合不正な動作をしていました。内部ステートがfseekによって更新されず、fseekとfsetposの戻り値が不正となっていました。この問題は修正されました。[743384]
- Cortex-M3 Cライブラリはアンアラインドアクセスに依存する1つのstrcmpバリアントのみしかありませんでした。現在は依存しないバリアントも含まれるようになりました。[744183]
アセンブラ
- ビルトイン変数(例:{TRU})が認識されない、またはミスタイプされたときに表示されるメッセージA1198Eが改善されました。[681868]
- "VCMP Vd,#0.0"命令におけるイミディエイトなオペランドが無視されていました。あらゆるイミディエイトまたはシンタックスがエラーなく受け付けられていました。この問題は修正されました。[734850]
- LDRT, LDRBT, LDRSBT, LDRHT, LDRSHT, STRT, STRBT, STRHT命令における範囲外のイミディエイトオフセットはエラーA1879Eを発生させていました。これはA1174Eを返すように修正されました。[735111]
- ThumbにおけるITブロック内のゼロイミディエイトを伴うLSLは予測不能でしたが、アセンブラはそれをフォルトしていませんでした。この問題は修正されました。[738167]
- アセンブラは不正にシンタックス"VADDW.Qd,Qn"をエラーなくアセンブルしていました。この問題は修正されました。[739503]
- アセンブラにおいてDCIとともにラベルが使用されたとき、間違った値がオブジェクトコードに生成されていました。これによってコードが再配置されるた場合、リンク時に間違った値が使用されてしまいます。この問題は修正され、DCIはリロケーションを伴うときに使用されるように意図されていない旨のワーニングA1915Wが返されます。[739757]
- アセンブラはThumb IT命令を持っていないCPUのARMの擬似命令のようにIT命令を許していませんでした。この問題は修正されました。[740258]
- アセンブラは間違ったシンタックスが使用されたときに、本来のエラーメッセージではなくinternal fault 0x277bbeを発生させていました。この問題は修正されました。[741834]
- アセンブラはIT命令を持つCPUにおいて、Thumbのアセンブルを行うときに不正にNV条件コードを許していました。この問題は修正されました。[742879]
- internal fault0x06d3d3, 0x277bbeおよび0x3923a1を引き起こすいくつかの原因を修正しました。[742919]
- 2つのエラーメッセージが不正にレポートされていました。Thumb命令"SUBS pc,lr,#0x100"はA1492Eを返すべきところ、A1912Eのメッセージでフォルトしていました。また、"SUBS pc,lr,..."命令を伴わないターゲットにおいてA1356Eを返すべきところ、A1912Eがレポートされていました。この問題は修正されました。[742936]
- 4.1の以前のバージョンのアセンブラはエラーメッセージA1482E(out-of-range shift immediate)において、正しいシフトイミディエイト値に対し間違った範囲を表示していました。この問題は修正されました。[742937]
- アセンブラは0f_nおよび0d_nnシンタックスを使って書かれた浮動小数点リテラルを伴うVMOV.F32およびVMOV.F64を許していませんでした。この問題は修正されました。[742941]
- 不正なADC, SBC, RSBおよびRSC命令がアセンブルされたときのエラーメッセージが改善されました。[742974]
- 以前アセンブラはLDR/STR pc,[pc,#n]においてnが4の倍数でない場合に、エラーA1322Eを表示していました。このメッセージは結果が予測不能であるときのLDRに対してのみ表示されるべきです。この問題は修正されました。[743578]
- アセンブラは不正にPLD, PLDWおよびPLI命令のアドレッシングモードにおいてレジスタによるシフトを許していました。この問題は修正されました。[743598]
- さらに明確化させるために、アンアラインドなディスティネーションに対する分岐が行われたときのエラーメッセージがA1243EからA1341Eに変更されました。[743750]
- armasmはThumbEEアセンブリでORN命令を許可するようになりました。以前は不正に拒否されていました。[744185]
- armasmはMプロファイル以外の全てのアーキテクチャおよびコアにおいてCPSR_sのためのシノニムとしてAPSR_gを許すようになりました。これは以前GE[3:0] PSRビットを持たないターゲットにおいて拒否されていました。[744187]
リンカ
- comdatグループをマージするとき、リンカは拒否されたグループでのweak定義への参照を不正にweak参照に変更していました。これは未使用セクションの削除において、保持するべきセクションを削除する可能性があります。この問題は修正されました。[743824]
- シンボルバージョンスクリプト内のarmlinkワイルドカードパターンはcase-sensitivityにマッチするようになりました。これはGNU ldの振る舞いにマッチします。[744933]
- リンカは不正にバージョン定義セクションのエントリサイズ属性をセットしていました。これは0にセットされるように修正されました。[746425]
ライブラリアン
- Windows環境下においてarmarは明示的なパス名を伴うオブジェクトファイル名を誤って扱うことがありました。例:"directoryfilename.o"を誤って最後のを省略します。この問題は修正されました。[742645]
フォーマットコンバータ
- fromelfは以前、アーカイブでないか、存在していないファイル上で使用されているアーカイブ内のメンバ('archive.a(*.o)'のような)を選択するようなシンタックスの場合、エラーメッセージのレポートに失敗していました。現在はできるようになりました。[743830]
ツール全般
- Cライブラリ内のC99複素数関数(で定義されている)は、これまでハードウェアFP環境で間違ったprocedure call standardを使用していました。
それらの標準名(csin, ccos, cexpなど)において定義されているライブラリ関数は引数にVFPレジスタを期待しており、コンパイラは同様の方法で呼び出しを生成していました。結果的に複素数ライブラリ関数を呼び出すhardfpとsoftfpによってコンパイルされたコードはリンクすることが出来ませんでした(1つまたはその他が不正にライブラリ関数を呼び出そうとするので)。これはcsin, ccos等はそれらの引数を整数レジスタ内に渡すようになり、ライブラリは同じく__hardfp_csin, __hardfp_ccosなどと呼ばれるVFPレジスタを使用する他のエントリポイントを提供するようになりました。残念ながら、この効果により固定ライブラリに対してリンクされるとき、複素数ライブラリ関数を呼び出す既存のhard-FPオブジェクトコードが正常に左様しない可能性があります。.commentセクションがarmccの影響を受けたビルドの識別ストリングを含み、AAPCSのVFPバリアントを使用する(Tag_ABI_VFP_args = 1)ことを示す.ARM.attributesセクションのオブジェクトからのあらゆる関数への参照を解決するときにリンカはワーニングを発生させます。[743430]
ARM Compiler toolchain v4.1(Build 462から514) †
このARM Compiler Toolchain(ARM Compiler toolchain)v4.1 Q2 Web Patch Build514はARM RVDS v4.1の製品とともに使用されることを意図しています。これはオリジナルのインストレーションまたは過去のパッチの適用の如何によらず、あらゆるRVDS v4.1 Standard、ProfessionalまたはEvaluationのインストレーションのアップデートを行う事ができます。その他のRVCT/RVDSのリリースとは互換性がありません。
このパッチはコンパイラ、リンカ、アセンブラ、fromelfおよびarmarの実行形式とインクルードファイルおよびC/C++ライブラリから構成されています。
RVDSv4.1のパッチは、ARM社のWebサイトよりダウンロード可能です。
Standard:
https://silver.arm.com/browse/RVS41
Professional:
https://silver.arm.com/browse/RVP41
- :DEF:によるシンボルの存在のテストを行う事により、それぞれのパスに対し異なったパスをとるようアセンブラコードが記述できるようになりました。 以前はこの操作でinternal faultを起こしたり、不正な出力や振る舞いを引き起こす可能性がありました。
パス固有の振る舞いが正しい動作を導くときだけ許されるようにするために、診断A1908EおよびA1909Eが追加されました。--diag_warning=1907指定時のみ有効になる診断A1907Wは問題の原因を見つけるために追加されました。[730558]
- armlinkは新しいソーティングタイプ--sort=LexicalStateをサポートしました。このソートでは、ARMコードの前に全てのThumbコードを置き、さらに辞書順にソートします。[738147]
- 診断メッセージA1492Eはイミディエイト値の唯一正しい値が0であるとき使用されなくなりました。そのかわりに、アセンブラは
A1910E: "Immediate 0x00000001 out of range for this operation. Immediate value must be 0."
を使用するようになりました。[737062]
- armlinkは新しいソーティングタイプ--sort=LexicalStateをサポートしました。このソートでは、ARMコードの前に全てのThumbコードを置き、さらに辞書順にソートします。[738147]
- GNU ldスクリプトキーワードのABSOLUTEをサポートしました。[738696]
- GNU ldスクリプトキーワードのNEXT、ADDR、LOADADDR、SIZEOF、ALIGNOF、DEFINEDおよびEXTERNをサポートしました。[738698]
- armlinkコールグラフは関数ポインタ情報と、同一セクションから同一の関数ポインタへの複数の呼び出しについて改善されました。[739763]
- -Warmccを使用することで、--show_cmdlineオプションはARM Linuxトランスレーションオプションとともに使用することができるようになりました。例: armcc -Warmcc,show_cmdline --translate_gcc ...[740261]
- A1106EおよびA1169Eを含む一部のシンタックスエラーに対し、問題の文字に対するカラム番号とキャレットを表示するよう改善されました。
例えば、以前のシンタックスが不正となっている命令"ADD r0 #1"では次のように表示されていました:
"add1.s", line 2: Error: A1106E: Missing comma 2 00000000 ADD r0 #1 1 Error, 0 Warnings
これらは今後次のように表示されます:
"add1.s", line 2 (column 11): Error: A1106E: Missing comma 2 00000000 ADD r0 #1 ^ 1 Error, 0 Warnings [742030]
- アセンブラが期待する式が書かれていなかった場合、以前は"Error A1152E: Unexpected operator"としてレポートされ、カラム番号は行の位置がレポートされていませんでした。例:
"unexp.s", line 10: Error: A1152E: Unexpected operator 10 00000000 add r0,#,#1
今後、アセンブラは行の下のキャレット付きでカラムがレポートされ、多くの場合において何が書かれていることを期待されていたかレポートします:
"unexp.s", line 10 (column 13): Error: A1110E: Expected constant expression 10 00000000 add r0,#,#1 ^
[742074]
- コンパイラはv4.1以降、-Otime指定時にデフォルトで64-byteアラインされたBSSセクションを生成する可能性がありました。これはBSSセクションのアラインを越さないように元に戻されました。[742389]
[h3]サポートされるOSプラットフォーム[/h]
Windows 7 Windows XP SP2, 32-bit & 64-bit Windows XP SP3, 32-bit Windows Vista Business Edition SP1, 32-bit & 64-bit Windows Vista Enterprise Edition SP1, 32-bit & 64-bit Windows Server 2003 32-bit & 64-bit Red Hat Linux Enterprise 4 for x86, 32-bit & 64-bit Red Hat Linux Enterprise 5 for x86, 32-bit & 64-bit これらに加えて、以下のノンサポートなプラットフォームにおいてもパッチをテストしました: Windows 2000 SP4 SUSE Linux 9.2 Ubuntu Linux 8.10
[h3]パッチをインストールするには以下の手順で行います[/h]
1.以下をタイプしてARM Compiler toolchain v4.1のBuild462以降が使用されていることを確認してください。
armcc --vsn
また、Linux環境の場合以下のコマンドを実行してarmccの場所を確認してください。
which armcc
2.ZIPファイルをテンポラリディレクトリに解凍してください。
3.includeディレクトリをテンポラリディレクトリから既存のARM Compiler toolchain includeディレクトリにコピーしてください。既存のディレクトリはARMCC41INC環境変数で確認できます。
<Windowsの例>
C:set ARMCC41INC ARMCC41INC=C:\Program Files\ARM\RVCT\Data\4.1\713\include
<Linuxの例>
echo $ARMCC41INC ~/ARM/RVCT/Data/4.1/462/include/
4.libディレクトリをテンポラリディレクトリから既存のARM Compiler toolchain libraryディレクトリにコピーしてください。既存のディレクトリはARMCC41LIB環境変数で確認できます。
<Windowsの例>
C: set ARMCC41LIB ARMCC41LIB=C:\Program Files\ARM\RVCT\Data\4.1\514\lib
<Linuxの例>
echo $ARMCC41LIB ~/ARM/RVCT/Data/4.1/462/lib/
5.win_32-pentiumディレクトリ(Linux用の場合、linux-pentiumディレクトリ)を、 テンポラリディレクトリから既存のARM Compiler toolchainのインストールディレクトリにコピーしてください。既存のディレクトリはARMCC41BIN環境変数で確認できます。
<Windowsの例>
C: set ARMCC41BIN ARMCC41BIN=C:\Program Files\ARM\RVCT\Programs\4.1\514\win_32-pentium
<Linuxの例>
echo $ARMCC41BIN ~/ARM/RVCT/Programs/4.1/462/linux-pentium/
もし必要なら、解凍するディレクトリをツールのインストールしている場所にあうように変更してください。
6.これでアップデートツールがインストールされます。
コマンドラインから、以下の様に入力し、お客様の意図されるバージョンが返されるかを確認してください。
armcc --vsn armlink --vsn armasm --vsn fromelf --vsn armar --vsn
バージョンは4.1 build 514が返されるべきです。
7.Linux版の場合、実行形式の解凍後にUNIXのパーミッションがリセットされる為実行ができなくなる場合があります。 その場合、次のようにユーザパーミッションをセットして、解決してください。
chmod u+x armcc
ARM Compiler toolchain Build 462からBuild 514での変更点は下記の通りとなります。
アセンブラ
- もし1つのITブロックが入力ファイルの最後までに未完のままだった場合armasmはwarning A1906Wを表示するようになりました。診断A1471WはITブロックのENDFUNCとENDPにおいてレポートされます。[732112]
- VLDMとVSTM命令上でのデータ型はNEONがないプロセッサのアセンブル時にチェックされます。[734858]
- 予測不可であるLDCとSTC命令はアセンブルおよびディスアセンブル時において正しく診断されていませんでした。この問題は修正されました。[735716]
- 4バイトアラインでないFRAME SAVEディレクティブにおけるオフセット定義をarmasmが許可することがありました。これらはDWARF情報の出力で表現することができないので、フォルトするようになりました。[736357]
- "SUB Rd,PC,#0"の命令に対するアセンブリ、ディスアセンブリが正しくありませんでした。この問題は修正されました。[738109]
- アドレスへの距離がbit12がセットされている場合にADRL擬似命令が不正にアセンブルされる問題がv4.1で再発していました。この問題は修正されました。[740166]
- IT.Wのアセンブル時のInternal faultが修正され、A1617Eのエラーを返すようになりました。[740497]
Cライブラリ
- posix_memalign関数がマルチスレッド環境において正常に扱われていませんでした:状況によって、全くmutexをロックしないか、実在しないものをロックする可能性がありました。[741384]
コンパイラ
- ハードウェア浮動小数点リンケージ使用時に伴う--library_interface=aeabi_clib使用時のInternal fault 0x04de77は修正されました。[737655]
- -g --remove_unneded_entities使用時にInternal fault 0xe70a0cを起こす原因を修正しました。[738304]
- __svc_indirectを使用した引数を1つもつ関数使用時のInternal fault 0x2732f5を修正しました。[739247]
- ビットバンディングの振舞いが少し変わりました:
もしビットバンドオブジェクトがビットバンドリージョンの外に配置された場合(あるいは、at属性をもつか、整数リテラルポインタを持つ場合)、コンパイラは以下の動作を行います:
- もしオブジェクトの型がビットバンド属性を持っており、コマンドラインで--bitbandが指定されていなければ、コンパイラはエラーにします。
- もしオブジェクトの型がビットバンド属性を持っており、コマンドラインで--bitbandが指定されていれば、コンパイラはワーニングを発生させ、ビットバンドの要求は無視されます。
- もしオブジェクトの型がビットバンド属性を持っておらず、コマンドラインで--bitbandが指定されていれば、コンパイラはワーニングを発生させ、ビットバンドの要求は無視されます。
これに加えて、at属性は不完全型を伴う定義に対して許されなくなりました。[740151]
- -O3 -Otime使用時のInternal fault 0x44784cの原因を修正しました。[741319]
- コンパイラが-O3 -Otime --vectorize使用時に、同一の配列に関して繰り返される式があり、異なった代入式の左側におけるキャストを伴うようなソースコードにおいて、不正なコードを出力する可能性がありました。この問題は修正されました。[742023]
- グローバル、またはstatic char変数(signedまたはunsigned)へのアクセスを行う、関数呼び出しを伴わないループがある場合の-O3におけるコード生成の問題は修正されました。[742021]
FPライブラリ
- --fpmode=ieee_fullオプションを用いてlittle-endian用にコンパイルされたプログラムにおいて、通常のdoubleからintへのCの変換(明示的または暗黙のキャストによって)が、32bit符号付整数で表すことができるにもかかわらず、-2^31の値を返還するときに、不正にIEEE Inexact Result exceptionをセットしていました。[738509]
ツール全般
- DWARFデバッグ情報生成時、アセンブラおよびコンパイラはサードパーティのデバッグツールで問題を引き起こす可能性のある、4の倍数ではない長さを持つCIEおよびFDEレコードを出力する可能性がありました。この問題は適切な場所にパディングが挿入されるように修正されました。[739145]
リンカ
- リンカは--sysvイメージにおいてデストラクタ関数が正しい順序で実行されることを保証するために.fini_arrayセクションを正しく順序付けるようになりました。[737348]
- armlinkは新しいコマンドラインオプション--any_contingencyをサポートします。これは.ANYセクションの割り当ての動作を変更します:armlinkは正しいセクションアライメントを保証するために、実行リージョンに潜在的に割り当てられる可能性のあるパディングのバイト数をカウントします。リンカはワーストケースを見積もるために、実際のパディング量はセクションが割り当てられるまでわかりません:
それぞれのセクションごとに(必要とされるアライメント(セクション) - 1)バイトのパディング
リージョンが潜在的なパディングのためにオーバーフローしようとすると、armlinkは.ANYセクションの優先度を下げます。このオプションはパディングによるオーバーフローにおけるL6220Eエラーの解決策となりえます。このオプションはデフォルトではoffです。(armlinkはパディングを計算しようとせず、.ANY優先度に厳密に従うでしょう)[737995]
- armlinkはAbsolute Execution Region内をターゲットとするPI Execution Region内の位置独立なコードからの分岐に対する長分岐ベニアを生成します。デフォルトではarmlinkはこれらのベニアの再利用をしておらず大きなコードサイズの増加を引き起こしていました。この問題は修正され、armlinkは安全に行える場合にこれらのベニアの再利用を行います。[738918]
- リンカは--ltcgを使用してリンクを行うときに2つのライセンスをチェックアウトしなくなりました。[739250]
- armlinkは.ANYセレクタの残りスペースを計算するときに、未使用セクションのサイズを含めなくなりました。[739755]
- 一部の環境下において--autoat使用時にarmlinkは不正に.ANYセクションが一杯であるとレポートすることがありました。この問題は修正されました。[740655]
- armlinkは不正に全ての入力オブジェクトのデバッグサイズを0としてレポートしていました。
例:
Code(inc. data) RO Data RW Data ZI Data Debug Object Name 28 8 0 1 100 0 test.o
この問題は修正され、Debugカラムは正しく表示されるようになりました。[742373]