- RVDS 3.1のパッチプログラムについて
パッチプログラムをダウンロードするには、事前にARM社のコネクトサービスのアカウントを取得し、ログインしておく必要があります。アカウントの取得は以下のURLから無償で行う事ができます:
https://login.arm.com/register.php
RVCTパッチ アップデート時の注意点
RVDSv3.1のパッチは、ARM社のWebサイトよりダウンロード可能です。
Professional:
https://silver.arm.com/browse/RVP31
Standard:
https://silver.arm.com/browse/RVS31
上記ページに公開されているパッチはRVDSv3.1 StandardおよびProfessionalのオリジナルまたは以前のパッチが適用されたものの両方に適用可能です。 RVDSv3.1評価版CD、過去(v3.0およびそれ以前)のRVCT/RVDSのリリースおよびKeil MDK製品には適用できません。
パッチをインストールするには以下の手順で行います
1.以下をタイプしてRVCTv3.1 build569以降が使用されていることを確認してください。
armcc --vsn
また、Linux環境の場合以下のコマンドを実行してarmccの場所を確認してください。
which armcc
2.ZIPファイルをテンポラリディレクトリに解凍してください。 3.includeディレクトリをテンポラリディレクトリから既存のRVCT includeディレクトリにコピーしてください。 デフォルトのincludeディレクトリの場所は次の場所になります。 <Windowsの場合>
- RVDSv3.1の場合
C:¥Program Files¥ARM¥RVCT¥Data¥3.1¥569¥include¥
- RVDSv3.1 Professionalの場合
C:¥Program Files¥ARM¥RVCT¥Data¥3.1¥640¥include¥
<Linuxの場合>
- RVDSv3.1の場合
~/ARM/RVCT/Data/3.1/569/include/
- RVDSv3.1 Professionalの場合
~/ARM/RVCT/Data/3.1/640/include/
4.libディレクトリをテンポラリディレクトリから既存のRVCT libraryディレクトリにコピーしてください。
デフォルトのlibディレクトリの場所は次の場所になります。 <Windowsの場合>
- RVDSv3.1の場合
C:¥Program Files¥ARM¥RVCT¥Data¥3.1¥569¥lib¥
- RVDSv3.1 Professionalの場合
C:¥Program Files¥ARM¥RVCT¥Data¥3.1¥640¥lib¥
<Linuxの場合>
- RVDSv3.1の場合
~/ARM/RVCT/Data/3.1/569/lib/
- RVDSv3.1 Professionalの場合
~/ARM/RVCT/Data/3.1/640/lib/
5.win_32-pentiumディレクトリ(Linux用の場合、linux-pentiumディレクトリ)を、
テンポラリディレクトリから既存のRVCTのインストールディレクトリにコピーしてください。
デフォルトのインストールディレクトリの場所は次の場所になります。 <Windowsの場合>
- RVDSv3.1の場合
C:¥Program Files¥ARM¥RVCT¥Programs¥3.1¥569¥win_32-pentium¥
- RVDSv3.1 Professionalの場合
C:¥Program Files¥ARM¥RVCT¥Programs¥3.1¥640¥win_32-pentium¥
<Linuxの場合>
- RVDSv3.1の場合
~/ARM/RVCT/Programs/3.1/569/linux-pentium/
- RVDSv3.1 Professionalの場合
~/ARM/RVCT/Programs/3.1/640/linux-pentium/
もし必要なら、解凍するディレクトリをツールのインストールしている場所にあうように変更してください。 6.*注意*
アーカイブのサイズを最小化するために、ひとつのコンパイラの実行形式(armcc)のみがパッチに含まれます。RVCTv3.0以降では、tcc、armcppおよびtcppの実行形式はこの armccとまったく同じものですので、同ディレクトリ内で、tcc、armcppおよびtcppの実行形式へ名前を変えてコピーしてください。 例(Windows環境)
copy armcc.exe tcc.exe copy armcc.exe tcpp.exe copy armcc.exe armcpp.exe
7.これでアップデートツールがインストールされます。
コマンドラインから、以下の様に入力し、お客様の意図されるバージョンが返されるかを確認してください。
armcc --vsn armcpp --vsn tcc --vsn tcpp --vsn armlink --vsn armasm --vsn fromelf --vsn armar --vsn
バージョンはRVCTv3.1アップデート後の build 番号が返されるべきです。 8.Linux版の場合、実行形式の解凍後にUNIXのパーミッションがリセットされる為実行ができなくなる場合があります。 その場合、次のようにユーザパーミッションをセットして、解決してください。
chmod u+x armcc
RVCT3.1(Build 1021から1055) †
このパッチは、RVCT/RVDSv3.1のコンパイラ、リンカ、アセンブラ、fromelf、armar、プログラム実行形式、インクルードファイルおよび、C/C++ライブラリのアップデートから構成されています。
サポートされるOSプラットフォーム
Windows 2000 SP4 Windows XP SP2, 32-bit & 64-bit Windows Server 2003 32-bit & 64-bit Red Hat Linux Enterprise 4 for x86, 32-bit & 64-bit
また、このパッチは以下のプラットフォーム上でもテストされています。
Windows XP SP3, 32-bit Windows Vista Business Edition SP1, 32-bit & 64-bit Red Hat Linux Enterprise 5 for x86, 32-bit & 64-bit
これらのプラットフォームはサポートプラットフォーム外ではありますが、上記の環境でも動作することが予想されます。
RVCTv3.1パッチBuild 1021から1055への変更点および改善点は下記の通りとなります。
コンパイラ
- 4byte以下のビットフィールドを伴う64-bit型で使用される64-bitオペレーションがスタック破壊する可能性がありました。この問題は修正されました。 [747374]
- 見せ掛けだけのワーニングC3487EおよびC3488Eは出力されなくなりました。 [747129]
- internal faults 0x2732f5および0x6bca8bを起こす可能性のある原因を吸収しました。 [747128, 618675]
- 4-byteの非アラインな変数アクセスが8-byteアクセスに変換され、オーバーフローを起こす可能性がありました。この問題は修正されました。 [747127]
- __packed構造体内のビットフィールドに不正アクセスを行う可能性がありました。この問題は修正されました。 [733097]
- Error: #254: type name is not allowed when compiling source lines with the typename keyword and templated function callsメッセージの不正な事例を修正しました。 [715265]
リンカ
- BLX命令の生成をより厳密に制御するため2つのコマンドラインオプションが追加されました。--[no_]blx_arm_thumbはARMからThumbの呼び出しでBLX命令をリンカが生成するかどうかを制御します。--[no_]blx_thumb_armはThumbからARMの呼び出しでBLX命令をリンカが生成するかどうかを制御します。これらのオプションのデフォルトはBLX命令の生成を許可します。 [SDCOMP-14942]
fromelf
- fromelfで--elfと--stripデバッグオプションを指定時、破損したSHT_GROUPセクションが生成される可能性がありました。この問題は修正されました。 [743441]
RVCT3.1(Build 892から1021) †
このパッチは、RVCT/RVDSv3.1のコンパイラ、リンカ、アセンブラ、fromelf、armar、プログラム実行形式、インクルードファイルおよび、C/C++ライブラリのアップデートから構成されています。
サポートされるOSプラットフォーム
Windows 2000 SP4 Windows XP SP2, 32-bit & 64-bit Windows Server 2003 32-bit & 64-bit Red Hat Linux Enterprise 4 for x86, 32-bit & 64-bit
また、このパッチは以下のプラットフォーム上でもテストされています。
Windows XP SP3, 32-bit Windows Vista Business Edition SP1, 32-bit & 64-bit Red Hat Linux Enterprise 5 for x86, 32-bit & 64-bit
これらのプラットフォームはサポートプラットフォーム外ではありますが、上記の環境でも動作することが予想されます。
RVCTv3.1パッチBuild 892から1021への変更点および改善点は下記の通りとなります。
RVCT実行形式
- queueモードでのライセンスのチェックアウトが速く行われてしまい、時折FLEXエラーを起こすことがありました: もし--licretryオプションが使用されていた場合でも、正しいメッセージの'Warning: C9933W: Waiting for license...'の代わりに、'Licensed number of users already reached. (-4,342)'が表示されます。この問題はライセンスのチェックアウトが高速かつ頻繁に行われたときに発生します:例)(make -j)を使用した並列make この問題はウェイト時間を増やすことによって解決されました。 [721402]
コンパイラ
- インラインアセンブラにおいて、シフトオペランドを含むMVNが不正にネゲートのない通常のシフトとして最適化されていました。この問題は修正されました。[733108]
- internal fault 0xb36758の原因について対応しました。[730515]
- internal fault 0xa05965および0xf7584eの一部の原因について対応しました。[730725]
- internal fault 0x577f90の原因について対応しました。[729046]
- non-volatileな構造体ビットフィールドの個々の書き込みを単一の書き込み(コードサイズの節約のため)にすることを妨げていた制限について対応しました。[729306]
- 出力ファイルのディレクトリを定義するコンパイラオプションが追加されました。--output_dirは.oファイルを含む通常の出力ディレクトリを定義します。アセンブラ出力は--asm_dir、依存関係出力は--depend_dir、--list出力は--list_dirによってディレクトリを定義することができます。これらのオプションが使用されない場合、関連する出力は--output_dirで指定されたディレクトリ、またはこの指定がない場合はデフォルトの場所(例:カレントディレクトリ)に出力されます。[724455]
アセンブラ
- ALIGNディレクティブが4の倍数でないオフセットと共に使用されたときにout of memoryが発生する問題を修正しました。[729852]
C/C++ライブラリ
- Cライブラリがrt_errno_addr.oの2つのコピーを間違って含んでいました。余計なコピーは削除されました。[731199]
- C++の例外使用時、コンストラクタ関数ポインタがNULLとして渡されているケースで__cxa_vec_cctorが正しく動作していませんでした。この問題は修正されました。[730011]
リンカ
- 多くのC++マングル化されたシンボルを含む巨大なプロジェクトにおいてarmlinkの--symbolsオプション使用時、リンカがアンマングルしたシンボル名を表示しようとして、'Fatal Error L6000U: Out of memory'を発生されることがありました。armlinkは--symbolsオプション使用時により少ないメモリを使用するようになり、この問題は修正されました。[730621]
- 式を使用したスキャッタファイルを読み込むとき、リンカは不正に>=オペレータを>に、<=オペレータを<としてパースしていました。この問題は修正されました。[729747]
- リンカは--noremoveオプションが使用されていても、ユーザライブラリからロードされたオブジェクトから未使用セクションを削除していました。--noremoveが指定されていた場合でも、リンカは依然未使用セクションをRVCTライブラリから削除しますが、ユーザライブラリからは削除しません。
RVCT3.1(Build 862から892) †
このパッチは、RVCT/RVDSv3.1のコンパイラ、リンカ、アセンブラ、fromelf、armar、プログラム実行形式、インクルードファイルおよび、C/C++ライブラリのアップデートから構成されています。
サポートされるOSプラットフォーム
Windows 2000 SP4 Windows XP SP2, 32-bit & 64-bit Windows Server 2003 32-bit & 64-bit Red Hat Linux Enterprise 4 for x86, 32-bit & 64-bit
また、このパッチは以下のプラットフォーム上でもテストされています。
Windows XP SP3, 32-bit Windows Vista Business Edition SP1, 32-bit & 64-bit Red Hat Linux Enterprise 5 for x86, 32-bit & 64-bit
これらのプラットフォームはサポートプラットフォーム外ではありますが、上記の環境でも動作することが予想されます。
RVCTv3.1パッチBuild 862から892への変更点および改善点は下記の通りとなります。
コンパイラ
- 関数内での多重の__disable_irq()および__disable_fiq()のシーケンスの不正な戻り値を招く誤った最適化を修正しました。[721129]
- コンパイラは全ての浮動小数点モデル(--fpmodeでセットされる)に対し逆比較において反転浮動小数点比較を最適化(例:!(a < b)が(a >= b)に変換される)を行っていました。これは浮動小数点モデルがNaNを意識しないことを示したとき(デフォルトでは--fpmode std, --fpmode fast)だけこの最適化が適用されるように変更されました。[725228]
- コンパイラオプション--locale使用時、ワーニングメッセージの生成が時折カレントロケールをリセットしまい、ソースコード内の不正なマルチバイトキャラクタシーケンスの解釈を引き起こしていました。この問題は修正されました。[726469]
- 特定の状況下でerrnoをセットする引数を持ったfmodの呼び出しが不正に削除されていました。この問題は修正されました。[726233]
- dllimport/dllexportの誤使用によって、internal fault 0xcc3958が発生する可能性がありました。これらはダウングレード可能な#1558-Dのエラーとして報告されます。[685023]
- 以下のinternal faultの一部の原因について対応しました: 0xafee20, 0x9be513 [725414,726702]
C/C++ライブラリ
- ゼロを示すC99 16進浮動小数リテラル(例:"0x0.0p0")の解析を行うときscanfファミリの関数が解析の失敗をレポートするために使用されていました。これらは正常に解析されるようになりました。[726413]
- C++プログラム内からインクルードされたCスタイルのヘッダファイルによる'std'namespaceから複数のライブラリ関数がインポートされていませんでした。例えば、C++で"#include <stdlib.h>"をコンパイルするとstrtof()が呼び出されようとしますが、コンパイラはエラーとし、std::strtof()のみが動作します。影響のある標準関数は、_Exit, strtof, strtold, wcstof, wcstoldおよびwcsftimeです。この問題は修正されました。[728229]
RVCT3.1(Build 836から862) †
このパッチは、RVCT/RVDSv3.1のコンパイラ、リンカ、アセンブラ、fromelf、armar、プログラム実行形式、更新されたインクルードファイルおよび、更新されたC/C++ライブラリのアップデートから構成されています。
サポートされるOSプラットフォーム
Windows 2000 SP4 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
RVCTv3.1パッチBuild 836から862への変更点および改善点は下記の通りとなります。
コンパイラ
- 一部のコード生成の問題を修正しました。
- 一定の条件下において、コンパイラが不正にロードのベースレジスタを再利用し、差分ロードのオフセットでオーバーフローを起こしていました。この問題は解決しました。
- SMMLAR命令の生成が改善されました。
- --wchar32オプション使用時、構造体のイニシャライザから参照するためのワイドキャラクタ文字列リテラルが常に正しく4バイトバウンダリに整列されていませんでした。この問題は解決しました。
- 以下のinternal faultの一部の原因を修正しました: 0x19c380, 0xca4d2f
- -O3 -Otimeオプション使用時の"Error #1620 internal fault"の原因に対応しました。
- ループアンローリングに関連するクラッシュの問題を修正しました。
- try-blockを含む派生クラスのデストラクションと基底クラスのデストラクタが空の関数として定義されていた場合のクラッシュの問題を修正しました。
- 空のデストラクタの実体を伴うクラスタイプローカル変数の生存範囲内でswitch式が発生したとき、クラッシュする問題を修正しました。
- --library_interfaceコマンドラインオプションに対する新しいオプションが追加されました: aeabi_glibc_hardfp, aeabi_clib_hardfp, aeabi_clib90_hardfp, aeabi_clib99_hardfp これらのオプションはHard FP呼び出し条件を使用するCライブラリ(数学ライブラリを含む)呼び出しを発生させます。
リンカ
- ステアリングファイルコマンド'RENAME *'はLib$$Requestシンボルをリネームしなくなりました。-ARM/Thumbシノニムが検知された場合、リンカは不特定(anonymous)なグローバルシンボルとしてシノニムを扱わなくなりました(さもなければ、間違った方向へのリロケーションとなりえます)。
- 一定の環境において、ステアリングファイルが'IMPORT *'と'EXPORT *'の両方のディレクティブを含むとき、同一シンボルにリンカがIMPORTとEXPORTを適用し、Error L6279Eを発生させていました。この問題は解決しました。
- 部分リンクオブジェクトファイルがセクション且つグループの一部であるSHF_STRINGSフラグを失う可能性がありました。部分オブジェクトが差分リンクで使用されセクションを含むグループが選択された場合、リンカはL6883Eのエラーを発生させました。この問題は解決しました。
- --no_veneershare使用時、スキャッタに対してL6236Eが間違って生成されることがなくなりました。
- --sort=AvgCallDepth, RunningDepthおよびCallTreeオプションがインラインベニア生成時に壊れたイメージを生成する可能性がありました。この問題は解決しました。
- リンカはSHF_COMDATグループが部分リンク時にマージされるかどうかを制御する--[no_]merge_partial_comdatオプションをサポートします。
- 間違った文字列マージセクションによって引き起こされる6682と6683のエラーメッセージをダウングレードできるようになりました。これらのダウングレードは文字列のマージを無効にします。
- ベースアドレス+サイズが0xFFFFFFFFより大きくなるような.ARM.__ATセクションの自動配置においてL6260Eが発生する可能性がありました。この問題は解決しました。
- 大きなELFセクションのために、呼び出しを行うのに充分に近くにベニアを置けない場合、リンカはセクションのためのベニア生成を無限に試行しようとすることがありました。この問題は解決しました。
- 他の共有ライブラリ内にあるSTV_PROTECTEDビジビリティをもつシンボルへのR_ARM_ABS32リロケーションがある--sysv --shared --fpicオプションを用いて共有ライブラリをビルドするときにsegfaultが発生する可能性がありました。この問題は解決しました。
- リンカは不正なインターワーキングエラーメッセージを出す可能性がありました。この問題は解決しました。
- データコンプレッサがonのときにクラッシュする事がある問題を解決しました。
アセンブラ
- '^'を伴うPUSHおよびPOPについて'^'の使用が再び可能となり、また関連付けられたSTMまたはLDM命令が有効でないときフォルトするようになりました。
- MOVおよびMVN命令が不正に解析されA1546Wのメッセージを発生させていた検知機能を改善しました。
C/C++ライブラリ
- NaN入力を与えられたとき、powf()が不正に大きな整数値を返していました。この問題は解決しました。
- fread()を使って、ファイルの終端にたどりついたときstdio EOFインジケータが確実にセットおよびクリーンがされていませんでした。この問題は解決しました。
fromelf
- "fromelf --elf"がリンカによって挿入されたどのようなファイルオフセットも不正に削除していました。これはp_align ELFフィールドによって指定されたファイルオフセットを維持します。
RVCT3.1(Build 794から836) †
このパッチは、RVCT/RVDSv3.1のコンパイラ、リンカ、アセンブラ、fromelf、armar、プログラム実行形式、更新されたインクルードファイル(arm_neon.h、ctype.h、dspfns.h、c55x.hのみがオリジナルのRVCTv3.1 build569リリースから変更されています)および、更新されたC/C++ライブラリのアップデートから構成されています。
このRVCT実行形式用クライアントライセンシングソフトウェアはFLEXnet 10.8.5.0からFLEXnet 10.8.7.0にアップデートされています。
サポートされるOSプラットフォーム
Windows 2000 SP4 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
RVCTv3.1パッチBuild 794から836への変更点および改善点は下記の通りとなります。
コンパイラ
- トランスレーションユニット内の可変引数関数呼び出しに対して、正しい8バイトスタックアライメントを保証するようになりました。
- プレインクルードとともにsys_includeが定義された場合に、システムインクルードパスが正しく検索されるようになりました。
- ユーザが期待する動作をするように、'volatile'へのキャストの扱いが改善されました。
- 平均的なパフォーマンスを改善するために、__builtin_popcount()の実装が変更されました。
- C++における多重namespaceの扱いが改善されました。
- printf()の呼び出しにおいて、signed/unsigned charのパラメータミスマッチに対する誤ったワーニングを削除しました。
- C++例外に関連したinternal fault 0x6bca8bの原因を解決しました。
- dllimport変数に対するイニシャライザの指定は正しくフォルトされます。
- 一部のARMv6 SIMD組み込み関数またはインラインアセンブラ命令において、APSR.GEビットの設定を正しく保持するようになりました。
- internal fault 0x1a8653の原因を解決しました。
- 関数呼び出しがループ内にある場合に、不正な並び替えが発生する現象を修正しました。
- ループアンローリング最適化に関するクラッシュを修正しました。
- tryブロックを含む継承クラス内のデストラクタおよび基底クラスデストラクタが空関数として定義されている場合のクラッシュを修正しました。
C/C++ライブラリ
更新はありません。
リンカ
- Cortex-A8のエラッタ657417を回避するため、パッチの自動的な適用を回避する--[no_]implicit_branchpatchオプションを追加しました。これはエラッタ657417の現象がおきないCortex-A8のレビジョン(r1p7, r2p5, r3p1およびそれ以降)を使用した既知のプラットフォームのCortex-A8をターゲットとしてコンパイルするときのみに使用してください。
- 複雑なデバッグデータを持つオブジェクトをリンクするときの'out of memory'の問題を避けるようにメモリの使用を改善しました。
- シンボルバージョニングが使用されている場合、ローカル関数に対するGOTエントリは生成されなくなりました。
- ARM/Thumbシノニムが検知された場合、リンカは不特定(anonymous)なグローバルシンボルとしてシノニムを扱わなくなりました(さもなければ、間違った方向へのリロケーションとなりえます)。
- --use_definition_visibilityオプションを追加しました。このオプションがセットされると、シンボルの結合時にリンカは参照の可視性より優先して定義の可視性を使用します。このオプションはELF標準と正反対であるので、デフォルトではoffとなっています。
- Cortex-M3オブジェクトにおける部分リンクを行ったときのBuildAttributesシンボル内のOS Extentionを正しく生成するようになりました。
- スキャッタローディングキーワードALIGNは実行リージョンのアライメントをMax(ALIGN, 入力セクションアライメント)にセットするようになりました。
- データ圧縮に関係するクラッシュを修正しました。
アセンブラ
- '^'付きのPUSHおよびPOP命令(例:POP{PC}^)は'^'を無視するのではなく、正しくフォルトするようになりました。
- --fpu=vfpv3オプション付でVLDMまたはVSTM命令においてレジスタD16からD31が使われるとき、フォルトされなくなりました。
- 空のAREAに定義されたラベルはAREAのタイプから継承されるタイプを常に持つようになりました。
- LDR=から生成される予期しないMOV命令は診断されるようになりました。
armar
- 同一名称の2つの入力ファイルが渡されるとき、armarは同一のコマンド実行においてすでに追加されているメンバを置き換えなくなりました。
RVCT3.1(Build 761から794) †
このパッチはターゲットアドレスが最初の4Kリージョンであり、2つの4K領域にかかる32ビットThumb-2分岐命令に影響のある、Cortex-A8エラッタ657417に対応しています。
このパッチは、RVCT/RVDSv3.1のコンパイラ、リンカ、アセンブラ、fromelf、armar、プログラム実行形式、更新されたインクルードファイル(arm_neon.h、ctype.h、dspfns.h、c55x.hのみがオリジナルのRVCTv3.1 build569リリースから変更されています)および、更新されたC/C++ライブラリのアップデートから構成されています。
このRVCT実行形式用クライアントライセンシングソフトウェアはFLEXnet 10.8.5.0からFLEXnet 10.8.7.0にアップデートされています。
サポートされるOSプラットフォーム
Windows 2000 SP4 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
RVCTv3.1パッチBuild 761から794への変更点および改善点は下記の通りとなります。
コンパイラ
- __declspec(dllimport)および__declspec(dllexport)はクラスメンバに影響するようになりました。 例:
class __declspec(dllimport) T {void f(); // is now effectively __declspec(dllimport)};
- シンボルテーブルエントリはエクスポートされたクラスとして生成されます。
- c55x.hヘッダにさらに組み込み関数が追加されました。 unsigned 16ビットオペランドの乗算およびnon-fractionalな乗算のサポートを含みます。
_a_lsadd, _a_sadd, _a_smac, _a_smacr, _a_smas, _a_smasr, _lmpy, _lmpysu,_lmpyu, _lsat, _lsmpyi, _lsmpyr, _lsmpysu, _lsmpysui, _lsmpyu, _lsmpyui, _smaci, _smacr, _smacsu, _smacsui, _smasi, _smasr, _smassu, _smassui
- RVCTライブラリインタフェースではない定義のmath関数が定義された時に、 '__hardfp_'プレフィックスが関数名に付加されなくなりました。
- NEON VSHLL組み込み関数は、データタイプサイズと等しいシフトを受け付けるようになりました。
- __FILE__マクロはコマンドラインで再定義できるようになりました。 特に、コンパイラコマンドラインにおいて、"-D__FILE__=__MODULE__"を使用することで__FILE__をパスを持たないファイル名として使用できるように、__MODULE__として定義できることができます。
- コンパイラは、--cpu ARM1156T2-Sオプション使用時、 __sev(), __wfe(), __wfi()および__yield()の組み込み関数をサポートします。 このプロセッサはこれらの組み込み関数をNOPとして実装することに注意してください。
- いくつかのコード生成の問題を解決しました。
- 以下のinternal faultの一部の原因が修正されました。
0x2ecad9, 0x666b41, 0x87ecef, 0xca4d2f
C/C++ライブラリ
- atan2f()は入力パラメータが+0/-0である場合にNaNを返すように修正されました。
- modf()は最初の入力パラメータがNaNである場合にNaNを返すように修正されました。
リンカ
- armlinkはターゲットアドレスが最初の4Kリージョンであり、2つの4K領域にかかる32ビットThumb-2分岐命令に影響のある、Cortex-A8エラッタ657417に対応しています。 以下の両方の条件が成り立つ場合にこの修正が有効となります。
-armlinkコマンドラインオプション--branchpatch=cortex-a8_q109が使用されている
-armlinkコマンドラインオプション--cpu=cortex-a8が使用され、フルリンクが行われる
これは、Cortex-A8 revision r3p0またはそれ以前のレビジョン上で実行されるThumb-2コードのためだけに必要となります。 このエラッタのより詳細についてはご使用になられているシリコンのベンダに連絡してください。
- この修正が有効になると、リンカはエラッタにある振る舞いを引き起こす可能性のある命令シーケンスをスキャンします。 オブジェクト、セクションおよびセクション内のオフセットを知るために、 "--info patches"オプションを使用してください。 リンカが検索するこの問題を引き起こす条件は以下の通りです。
- 領域の境界をまたがる4バイトのThumb-2直接分岐命令 例
(address & 0xffe) == 0xffe
- 4KB以内の幅で、後方への分岐命令
- 分岐の前にある命令が4バイトの非分岐命令 リンカパッチは後方分岐をセクションの最後のパッチに対する前方分岐に変換します。 このパッチはターゲットに対する無条件の後方分岐を含みます。 このパッチは後方分岐が領域の境界をまたがらないようにアラインされています。 以下の制限事項があります。
- 部分リンクの場合、そのアドレスが領域の境界に配置されないようなアドレスであることがわかるようなアドレス情報をリンカが常に持つことができません。 これは、パッチがフルリンクで使用される場合に比べ、より多くの命令に対してパッチを用いる可能性があることを意味します。
- パッチを必要とする分岐は、セクションの終わりにあるパッチに届かなければなりません。 リンカが分岐の範囲内にパッチを配置できない場合、ワーニングメッセージが表示されます。 無条件Thumb-2分岐の範囲は16MB、条件付Thumb-2分岐の範囲は512KBであり、その為、事実上これは発生しません。
- リンカはパッチを含むあらゆるプログラムセグメントのアライメントを4KBに増やします。
- マニュアルに記載されている通り、リンカは未割り当てセクションを、.ANY実行リージョンに割り当てます。 つまり、最大のセクションは最初に最も多くの利用可能なスペースなどを持つ実行リージョンに割り当てられます。
- リンカコールグラフはリンカによってNOPに変換されたテイルコールを正しく検出するようになりました。 以前は、これらの呼び出しはテイルコールされる関数を未使用として間違ってマークされることがありました。
- R_ARM_COPYリロケーションはfpicを使用したSysVアプリケーションビルドにおいて生成されなくなりました。
アセンブラ
- EXTERNディレクティブの使用箇所で破損したオブジェクトを生成する問題を修正しました。
RVCT3.1(Build 739から761) †
このパッチはRVCT/RVDSv3.1コンパイラ、リンカ、アセンブラ、fromelfおよび armarのアップデートバージョンである5つのファイルを含んでいます。 これら通常のRVCT実行ファイルに加えて、一部の追加ファイルも含まれます。 ctype.h, dspfns.h, c55x.h、C/C++ライブラリファイル
RVCTv3.1パッチBuild 739から761への変更点および改善点は下記の通りとなります。
コンパイラ
- ベースレジスタが最初にロードされるレジスタであったときのLDRDに関するCortex-M3エラッタ602117に対応しました。
- -O3 -Otime指定時のvolatile変数に関するコード生成の問題が修正されました。
- および内に含まれるETSI DSPシフト組み込み関数がシフト数[-255,255]の範囲外である場合に、不正な結果を返す可能性がありました。この問題は修正されました。シフト数がこの範囲内である場合、マクロ__ARM_DSP_SMALL_SHIFTSを1として指定することができ、以前の(高速な)実装が可能になります。
- 組み込みアセンブラ(__asm)関数は、__weakとしてマークされ、その定義が失われてしまわないよう、Cコードからのweakな参照がされなくなりました。weakシンボルはアセンブラ出力内に生成されます。
- コンパイラの--asm(および -S)出力は文字列の不要なエスケープ文字の使用を避けることによってより読みやすくなりました。
- 診断メッセージ"#1558: redeclaration cannot add dllexport/dllimport"がダウングレード可能になりました。
- PKHTB命令の生成について機能アップしました。
- 以下のinternal faultの一部の原因が修正されました。
0x827020、0x52889a、--vectorize使用時の0xafee20
C/C++ライブラリ
- スキャッタファイル内でARM_LIB_HEAPおよびARM_LIB_STACKが使用されると、自動的に2リージョンモデルが選択されるようになりました。 従って、__use_two_region_memoryのインポートが不要になります。
リンカ
- スキャッタファイル内での相対インクルードに関するbuild674での動作に戻すため、スキャッタファイルのプリプロセス時に、カレントディレクトリが自動的にインクルードパスに加えられるようになりました。
fromelf
- fromelfを"--text -a"または"--fieldoffsets"オプション使用時に、デバッグセクションまたはanonymousストラクチャ内で0バイトパディングがあったときに、クラッシュしなくなりました。
RVCT3.1(Build 700から739) †
このパッチは、RVCT/RVDSv3.1のコンパイラ、リンカ、アセンブラ、fromelfおよび、armarのアップデートから構成されています。 これら通常のRVCT実行ファイルに加えて、一部の追加ファイルも含まれます。 ctype.h, dspfns.h, c55x.h、C/C++ライブラリファイル
RVCTv3.1パッチBuild 700から739への変更点および改善点は下記の通りとなります。
コンパイラ
- 一部のコード生成/最適化に関する問題を修正しました。
- インラインアセンブラ内で繰り返されるCPSRのI、Fフラグを書きかえるMSR命令については最適化されなくなりました。
- C++において'catch'ボディ内で'try'ブロックがネストした際に正しくデストラクタが呼ばれるようになりました。
- v6またはそれ以降のアーキテクチャを指定してコンパイルした場合に、dspfns.hに定義された一部の組み込み関数において、v5TE short飽和演算命令QADD16および、QSUB16を使用する可能性があるようになりました。 これらのオペコードをadd()およびsub()組み込み関数で使用するには、これらの組み込み関数がETSIで要求されているように、Qビットをセットしない為に__ARM_DSP_IGNORE_OVERFLOWのマクロを1に設定する必要があります。
- C55x.hにTIサポート関数crshft_r()およびL_crshft_r()がDSP組み込み関数として追加されました。
- ARM1176JZ(F)-S用に__ldrexd()、__strexd()および__clrex()組み込み関数が使用できるようになりました。
- コンパイラは'int a[];'などのようなCソースコード内で限界を持たないファイルスコープ配列に関する#2810のチェックを行えるようになりました。 これらを表示させるには、--remarksまたは--diag_warning=2810を使用してください。
- C++の例外など、一部の機能においてコードサイズおよびパフォーマンスのわずかな改善が見込まれるようになりました。
- 以下のinternal faultが発生する一部の可能性のある問題を修正しました。 0x0a7b83、0x413ad2、0x4ccb3b、0x6b6fd3、0x87ecef、0xca4d2f、0xa0269c、0xaaa267、0xac2086、0xe35e83、#2409 (bad simd operation)
C/C++ライブラリ
- 要素数が0およびデータポインタがNULLの場合にqsort()は比較関数を呼び出さなくなりました。
- (RVCTの以前のバージョンのように)より小さいコードサイズに適している場合は、C++ライブラリをThumbとして構築されるようになりました。
- __default_signal_handler()の再実装は未定義シンボルエラーL6200Eを発生させないようになりました。
- dynamic_cast<>がtype_info::operator==の実装が想定される一部のケースにおいて、type_info::operator==の呼び出しによって置き換えられます。<></></>
- _sys_read()がエラー(-1)を返す場合に、fgetc()はEOFの前に余計な(ゼロ)バイトを返さなくなりました。
- MicrolibのスキャッタローディングコードはInRoot$$Sectionsを使用したスキャッタファイルの配置ができるようになりました。
アセンブラ
- armasmは'LDR/STR pc, [pc, Rx]'の形式の不正なThumb-2命令を使用した場合に正しくエラーを発生されるようになりました。
- armasmは長いパス名(256キャラクタ以上)の場合に"malloc(): memory corruption"のアボートを発生させなくなりました。
- Thumb-2データ処理命令(例:MOV.W)におけるアーキテクチャ制約チェックが改善されました。
リンカ
- リンカは再びRELOCリージョンからABSOLUTEリージョンに対してベニアを共有することができるようになりました。
- スキャッタファイル内のEMPTYリージョンにおけるALIGNの使用が正しく動作するようになりました-リンカはその前におかれるZIのパディングを削除しません。
- --no_veneershareはドキュメントに記載されている通りに動作します。
- リンカはライブラリ選択スクリプトにおいて生成されたシンボル参照のために共有ライブラリを検索しません。
- --no_comment_sectionはオブジェクト同様、イメージにおいても使えるようになりました。
- コールグラフ出力は一部の関数呼び出しを失わなくなりました。
- コールグラフ出力は"相互再帰"の場合に関数をリストしません。
- ゼロ以外の相対ベースオフセットなスキャッタファイル内のFIXEDリージョンのアドレスが正しく計算されるようになりました。
- 全ての共有.conststringセクションはシンボルテーブルに正しいサイズで書かれるようになりました。これは--symbolsで表示させることができます。
- 全てのリンカ生成ベニアはシンボルテーブルに(0ではなく)正しいサイズで書かれるようになりました。これは--symbolsで表示させることができます。
- $Sub/$Superメカニズムは静的(動的ではなく)なリンキングにのみ適用されます。$Superの参照は動的シンボルテーブルにインポート/エクスポートされたものには許されていません。 $Superの参照および定義はhidden(STV_HIDDEN)としてマークされます。
- ARM/Thumb synonymsが存在しているとき、リンカはリロケーションエラーを起こすような同一状態のグローバルシンボルとともにローカルシンボル定義をマスクしません。 ARM/Thumb synonymsはABI準拠ではないので、出来る限り避けるように注意してください。
- リンカは"__at"セクション使用時ターゲットからインラインベニアを分割しません。
- リンカはすでに定義を見つけられているシンボルについてはライブラリをサーチしません。
- リンカはコードサイズを小さくすることができるように、旧いSHF_COMDEF VFEセクションをイメージから削除できるようになりました。
その他
- RVCTv3.1Linux版はFLEXnet Licensing v10.8.5.0(Windows版と同じ)を使用するようになりました。
- RVCTv3.1Linux版はLinuxプラットフォームの"hugemem"カーネルにおける信頼性を改善しました。
RVCT3.1(Build 674から700) †
このパッチはRVCT/RVDSv3.1コンパイラ、リンカ、アセンブラ、fromelfおよびarmarのアップデートバージョンである5つのファイルを含んでいます。 これら通常のRVCT実行ファイルに加えて、一部の追加ファイルも含まれます: ctype.h, dspfns.h, c55x.h、6つのCortex-M1 Cライブラリファイル(h_p*.bおよびh_p*.l)、10のMicrolib Cライブラリファイル(mc_*)および30のStdlib Cライブラリファイル(c_*)
RVCTv3.1パッチBuild 674から700への変更点および改善点は下記の通りとなります。
コンパイラ
- Windowsの実行形式は、Windows Vista上でポップアップを表示させないように'署名済み'となりました。
- コンパイラはAddress Space Layout Randomization(ASLR)が有効なときにWindows Vista上でプレコンパイルヘッダ(PCH)の再利用をサポートするようになりました。
- プレコンパイルヘッダ(--pch)とともに#pragma O3が正常動作するようになりました。
- プリプロセッサは2つのスラッシュコメント//に続く、連続する2つのバックスラッシュ¥¥のダブルラインスプライスを間違って処理しなくなりました。
- "named register variable" APSRを変数に対して読み出しを行う際の問題を解決しました。
- Cortex-M3における-O3 -Otimeオプション使用時の、文字列に対するアドレス計算が正しく行われるようになりました。
- フラグ設定命令に続いて条件フラグ設定命令が含まれるインラインアセンブラは正しくコンパイルされるようになりました。
- __memory_changed()に関する問題が解決しました。
- 'weak'属性がメンバーテンプレート関数で失われなくなりました。
- "Error: #1620: Internal fault: translation failed.(becheck - block)"が発生する可能性のある原因を修正しました。
- _Pragma("arm section")は無視されなくなりました。
- printf引数リストスキャニングは"char型の配列[N]へのポインタ"を"charへのポインタ"と同様に扱うようになりました。
- テンプレートプロトタイプインスタント化内におけるC++クラスrvalue"?"オペレータの使用でスタックオーバーフローが起きなくなりました。
- dllimport_runtimeはallocaおよびscalbn関連のシンボルを正しくインポートします。
- 32-bit Thumb命令は正しくディスアセンブルされます。例:コンパイラの--interleave出力
- アセンブラおよびコンパイラはr1p0以降のVFPv2(VFP11)に存在する、mvfr0およびmvfr1システムレジスタの存在/非存在の判断を正しく行います。
- コンパイラは#includeのパターンマッチとして間違ったディレクトリ名を認識しなくなりました。
- 同名のセクション内の#pragma armおよび#pragma thumb(例:#pragma arm section使用時)のデバッグ情報の問題を修正しました。
- 名前を指定したセクション(例:#pragma arm section使用時)と同じ名前の関数がシンボルテーブル内で間違って無視されなくなりました。
- 一部のコード生成/最適化問題を修正しました。
- 以下のinternal faultの原因となり得る問題を修正しました。 0x2732f5, 0x2bb15d, 0x5db3ba, 0x92b6e9, 0x995e1d, 0x9be513, 0xaaa297, 0xb7310e, 0xca7b8d, 0xcc3958, 0xcc5a94, 0xfe1945
アセンブラ
- 一部の命令においてエンコードできなかったプログラム相対式を受け付けるようになりました。
- ARMアセンブラにおいてSUB Rd,PC,#immが間違って非推奨であると判断されていました。
- アセンブラおよびコンパイラはr1p0以降のVFPv2(VFP11)に存在する、mvfr0およびmvfr1システムレジスタの存在/非存在の判断を正しく行います。
リンカ
- (旧)ARM/Thumbシノニム機能がドキュメント通りに動作するようになりました。
- Load$$ER_RW$$Baseなどのリンカ生成シンボルとのRWPI/ROPIの使用はリンカクラッシュを起こさず、診断メッセージを表示するようになりました。
- リンカは入力セクション属性がスキャッタファイル内の入力セクション定義から削除される場合に、誤った診断を行わなくなりました。
- リンカはRWデータの展開時のテンポラリバッファとしてZEROPADリージョンを使わなくなりました。
- スキャッタローディングのFIXED属性はリンカにおけるセクションの--autoat配置を妨げなくなりました。
- リンカは同一のDSOでデフォルトのvisibility定義を呼び出すためのPLTエントリを正しく生成します。
- L6410Wのようなリンカの診断により通知される、シンボルエラーにおける失われた参照の解決を助けるために、新しいリンカオプション"--info visibility"が追加されました。"--info visibility"はより進んだ詳細な出力を得るために"--info inputs"および"--verbose"オプションと組み合わせて使うことができます。
- 新しいリンカオプション"--max_visibility="が追加されました。これは、に対して"protected"または"default"を全てのシンボル定義について、が最大の(最も詳細な)可視性について制限します。デフォルトの最大の可視性は"default"です。
*注意* データ定義の可視性はこのオプションには影響されません。 ロード時に共有オブジェクト内のシンボルをプリエンプトしたくないときは"protected"を使用してください。 - リンカは同一のライブラリから保護された可視性のシンボルを呼び出すのにPLTエントリを生成する必要がなくなります。 ロード時に共有オブジェクト内のシンボルにプリエンプトを許す場合"default"を使用してください。
- リンカは同一のライブラリからデフォルトの可視性のシンボルを呼び出すのにPLTエントリを生成します。
fromelf
- fromelfはR_ARM_RELATIVEリロケーションを含むSysVシェアドライブラリで"--strip symbols"を使用したときにクラッシュしなくなりました。
- fromelfはネストしたディレクトリに出力ファイルを生成できるようになりました。例えば、"fromelf --bin foo.axf -o bar/foo"はbarが既にあると仮定して期待通り動作します。
armar
- armarは6文字以上のユーザIDのUnixシステムで、壊れたアーカイブヘッダを生成しなくなりました。
ライブラリ
- __rt_raiseの再実装は、正しくライブラリからdefault_signal_handlerのリンクをしないようになりました。
- Microlib内のstrstr()は正しい値を返すように修正されました。
- Microlib内のstrpbrk()は文字列の最初のキャラクタが合致しないとき(例:strpbrk("abc","b"))に無限ループしないようになりました。
RVCT3.1(Build 640から674) †
RVCTパッチ Build 640ではアップデート手順が上記“RVCTパッチアップデート時の注意点”とは異なりますので、ご注意ください。
このパッチは、RVCT/RVDS 3.1コンパイラ、リンカ、アセンブラ、fromelfおよびarmarのアップデートバージョンを含む5つのファイルから構成されています。 これら通常のRVCT実行形式に加えて、次のような追加ファイルを含みます: ctype.h, dspfns.h, c55x.hおよび6つのCortex-M1 Cライブラリファイル(h_p*.bおよびh_p*.l)。 これらのうち、dspfns.hは以前のパッチビルド640で修正されています。
RVCTv3.1パッチBuild 640から674への変更点および改善点は下記の通りとなります。
ヘッダファイル
- dspfns.h内のnorm_sおよびnorm_l関数はゼロ入力に対してゼロリターンを返すようになり、RVCT 3.0と同様の動作をします。
コンパイラ
- コンパイラのインラインアセンブラは不正にMSRおよびMOVS命令をインラインアセンブラシーケンスから削除しないようになりました。
- コンパイラは一部のケースにおいて誤ってError #1560をレポートしないようになりました。(抑制可能な)ワーニングが代わりに表示されます。
- 'setjmp'を使用する関数内で、'volatile'でマークされたローカル変数から読み込まれた値が時折ロングジャンプからのリターン(return-from-longjmp)のケースにおいて不正な事がありました。
- __ldrexまたは__strexおよびスタティック変数における同様のintrinsicsの使用時、不正に"Error: #1199: there is no type with the width specified"のエラーを返さないようになりました。
- コンパイラは、非スタンダードに戻り値または引数として2つの異なったenum型で1つの関数を2回定義しようとする時フォルトしなくなりました。これは一部の旧コードで発生する問題ですので、non-strictモードで警告となります。
- 3.1のコンパイラはC++例外を用いる形でコンパイルする際に、3.0よりもテイルコールの数を少なく生成することがなくなりました。
- バーチャルベースを持つクラス内でのオブジェクトデストラクタを完了させるためのthunkがある場合、それらが消滅したところで放されます。
- ローカルスタティックの初期化のためのC++ガード変数はnon-weakになりました。これはRVCT 3.0と同様で、最新のAEABIでの説明と合致しています。新しいオブジェクトファイルは、以前のRVCTで生成されたオブジェクトファイルと依然互換性があります。
- build 640で発生していた一部のVTT(virtual table tables)の欠落が修正されました。
- O3 -OtimeをつけてC++コードをコンパイルする際、コンパイラは不正に__restrictに対してエラー#167を返していました。
- O3オプション使用時、過去のスケジューリングバリアを越えて一部のメモリアクセスが可能になってしまっていました。これは修正されました。
- コンパイラは__enable_irq()または__breakpoint() intrinsicsをまたいでThumbのストアを移動しなくなりました。
- ABIにおいて要求されるように、インライン化される'dllexport'関数はout-of-lineコピーを生成し、エクスポートされます。
- コンパイラは、不要な情報を含み、イメージの領域を浪費する.debug_lineセクションを生成しないようになりました。
- クラス、構造体および共用体における__declspec()の使用(例:__declspec(notshared), __declspec(dllexport)等)は無視されなくなり、以前のリリースおよびドキュメンテーションと合致した振る舞いをするようになりました。
- Tag_ABI_FP_number_modelおよびTag_ABI_FP_denormalビルド属性セクションが不正な事がありました。また全てのTag_ABI_FP_*タグは--fpu=noneにおいて0になるようになりました。
- O3 -Otimeオプション使用時のコード生成/最適化に関する一部の問題が修正されました。
- "Error: #2401: Internal fault: table overflow."を起こす可能性のある原因が修正されました。
- 以下のinternal faultをを起こす可能性のある原因が修正されました: 0x0d9189, 0x1173d7, 0x2bb15d, 0x382b30, 0x61e737, 0x87ecef, 0x995e1d, 0xa0269c, 0xac2086, 0xb2d4ef, 0xca4d2f, --interleave使用時の0xd31364, 0xe82e38
アセンブラ
- アセンブラはARMv6-MおよびARMv7-Mにおいて、MRSおよびMSR命令でXPSRを受け付けられるようになりました。
- アセンブラが一部の64-bit VLDR.F64リテラルプールを不正にロードしていました。
- アセンブラはimmediate0を用いたNEON VQSHRNおよびVQRSHRUN命令を不正にアセンブルしていました。
- アセンブラはスカラ命令によるNEON乗算を不正にアセンブルしていました。
- 一部の旧アーキテクチャv6アセンブラニーモニックがインラインアセンブラから以前削除されました。これらは旧コードの利便性の為に復活されました。新しいコードはできるだけ新しいニーモニックを使用するようにしてください。
old name == new name [US]ADD8TO16 == [US]XTAB16 [US]ADD8TO32 == [US]XTAB [US]ADD16TO32 == [US]XTAH [US]UNPK8TO16 == [US]XTB16 [US]UNPK8TO32 == [US]XTB [US]UNPK16TO32 == [US]XTH
リンカ
- リンカはRW-data圧縮に関連するシンボルを含むsymdefsファイルを使用したときにクラッシュしないようになりました。
- リンカはSYMDEFファイルからシンボルをオーバーライドするライブラリファイル内での$Sub$$/$Super$$シンボルを処理する際に多重定義シンボルエラーL6200Eを返さないようになりました。
- リンカはweak(STB_WEAK)として扱う代わりに、SysVイメージをリンクするときに非STV_DEFAULTシンボルに対する参照のエラーとしてレポートします。
- リンカは"--apcs=/fpic"オプションを用いてコンパイルし、"--sysv --shared --fpic"オプションを用いてリンクされたSysVシェアドオブジェクト内のPIベニアを直接生成できるようになりました。
- リンカは4バイトアラインでない場合に、--autoatオプションを用いるとリンカによって生成された実行リージョンをエラーにするでしょう。
- リンカは1つのチャンク内に2GB以上のメモリをアロケートしようとしたときにクラッシュしなくなりました。
- リンカはサイズ0のEMPTY実行リージョンがあるときに、--no_legacyalignオプションを使用した場合クラッシュしなくなりました。
- 一部の"Execution interrupted due to an illegal storage access."リンカエラーを起こす可能性のある原因が修正されました。
Fromelf
- fromelf --elf --strip symbols,debug は単にローカルシンボルを削除するかわりに、イメージから正しくストリングおよびシンボルテーブル(".strtab"および".symtab")を削除するようになりました。
RVCT3.1(Build 616から640) †
[red]RVCTパッチ Build 640ではアップデート手順が上記“RVCTパッチアップデート時の注意点”とは異なりますので、ご注意ください。 [/red]
このパッチは、RVCT/RVDSv3.1のコンパイラ、リンカ、アセンブラ、fromelfおよび、armarのアップデートから構成されています。 これら通常のRVCT実行ファイルに加えて、一部の追加ファイルも含まれます。 ctype.h, dspfns.h, c55x.hおよび6つのCortex-M1 Cライブラリファイル(h_p*.bおよびh_p*.l)
[h3]パッチをインストールするには以下の手順で行います[/h3]
1.以下をタイプしてRVCTv3.1 build569以降が使用されていることを確認してください。
armcc --vsn
また、Linux環境の場合以下のコマンドを実行してarmccの場所を確認してください。
which armcc
2.ZIPファイルをテンポラリディレクトリに解凍してください。 3.3つのヘッダファイルをテンポラリディレクトリからRVCT includeディレクトリにコピーしてください。 例えばWindows版の場合、デフォルトのincludeディレクトリの場所は次の場所になります:
C:¥Program Files¥ARM¥RVCT¥Data¥3.1¥569¥include¥windows
4.6つのCライブラリファイルをテンポラリディレクトリからRVCT libraryディレクトリにコピーしてください。 例えばWindows版の場合、デフォルトのlibディレクトリの場所は次の場所になります。
C:¥Program Files¥ARM¥RVCT¥Data¥3.1¥569¥lib¥armlib
5.5つの実行形式ファイルをテンポラリディレクトリからRVCTインストールディレクトリにコピーしてください。 例えばWindows版の場合、デフォルトのインストールディレクトリの場所は次の場所になります。
C:¥Program Files¥ARM¥RVCT¥Programs¥3.1¥569¥win_32-pentium
もし必要なら、解凍するディレクトリをツールのインストールしている場所にあうように変更してください。 6.*注意* アーカイブのサイズを最小化するために、ひとつのコンパイラの実行形式(armcc)のみがパッチに含まれます。 RVCTv3.0以降では、tcc、armcppおよびtcppの実行形式はこの armccとまったく同じものですので、 同ディレクトリ内で、tcc、armcppおよびtcppの実行形式へ名前を変えてコピーしてください。 例(Windows環境)
copy armcc.exe tcc.exe copy armcc.exe tcpp.exe copy armcc.exe armcpp.exe
7.これでアップデートツールがインストールされます。 コマンドラインから、以下の様に入力し、お客様の意図されるバージョンが返されるかを確認してください。
armcc --vsn armcpp --vsn tcc --vsn tcpp --vsn armlink --vsn armasm --vsn fromelf --vsn armar --vsn
バージョンはRVCTv3.1アップデート後の build 番号が返されるべきです。
RVCTv3.1パッチBuild 616から640への変更点および改善点は下記の通りとなります。
ヘッダおよびライブラリ
- ABIポータブルなctypeマクロ(例:"__aeabi_ctype_table_")がC++モードでコンパイルされたときに、C++ネームスペースに適切に限定されるよう、ctype.hを修正
- 同一のプロジェクト内で2つ以上のソースファイルが#includeしているときに、リンク時に"multiply defined symbol"が--gnuオプションを用いてコンパイルしたものに対して発生しないよう、DSPイントリンジックスのout-of-lineコピーが生成されないようにdspfns.hとc55x.hを修正。
- __ARM_ll_mulssおよび__ARM_ll_mlassにおける問題を吸収するため、Cortex-M1ヘルパライブラリh_p*.*が修正された。 次のような2つのsigned 32ビット整数をかけた結果がsigned64ビットの結果を求められるようなCコードにおいて、Cortex-M1ターゲットでのみ間違った結果を返す可能性があった。
- long long result; long x, y; result = (long long)x * y; 関連する"armlib"ディレクトリ内の6つのファイルは次の通り: h_p.b, h_p.l, h_pe.b, h_pe.l, h_pf.b, h_pf.l
コンパイラ
- Build569と616の間でのコードサイズにおける退化を修正。これは関数が複数のstatic変数を持つ一部のケースで発生する可能性があった。
- コンパイラによって生成されたデバッグ情報がリンク時におけるコモンニングの機会をよりよくするように変更された。これは最終的なデバッグサイズの縮小と、リンク時の全体的な時間の削減を助ける。
- armccは、Windows環境においてarmasmやarmlinkがarmccと同じディレクトリにあり、path環境変数にリストされていない場合に、(組み込みアセンブラなどの場合)それらを実行できるように再びなった。
- 行番号のクロスリファレンスが"--interleaved"の出力において改善された。
- コマンドラインオプションからの代わりに、最終コードセクションから発生したBuild属性が間違ってピックアップされないようになった。
- RVCTv3.1 build616以前、ベクタライジングコンパイラは、一部の飽和イントリンジック関数を再関連付けしてしまい、間違った結果をもたらしていた。これはRVCTv3.1 build 616では修正されているが、飽和イントリンジックを含む一部関数のベクタライズを防いでしまっていた。
- 新しい"--reassociate-saturation"オプションが、以前の振る舞いをリストアするように追加された。
- 一部のコード生成に関する問題を修正。
- 次のinternal faultを発生させる可能性のある原因を修正: 0x0da336, 0x2bb15d, 0x42983d, 0x63faa5, 0x9005f2, 0x87ecef, 0xca4d2f, 0xe35e83, 0xf25893, #1620 (afterburner-unimplemented-2), #2409 (bad simd operation), #2409 (underflow)
リンカ
- リンカはすでにロード済みの参照を解決するために、ライブラリから事前に他のオブジェクトをロードすることができた。これによって、"L6200E multiply defined symbol"エラーが発生していた。リンカはすでにシンボル定義があった場合、再度ライブラリを検索しないように修正された。
- リンカは旧ADSオブジェクトや、RVCTv3.1以前の--apcs /adsabiを用いてビルドされたオブジェクトに対して正しくエラーを発生させるようになった。
- 他の実行リージョンにベニアを移動する(ベニアの共有を促したり、ロングブランチベニアよりもショートブランチベニアを使えるようにするため)前に、リンカはターゲット実行リージョンがそのコードを含むことを許しているかをチェックするようになった。
- DWARF2デバッグ情報を処理しているときに、リンクステップが遅くなったり、メモリを使い果たすことがあった。
fromelf
- 複数ロードリージョンがあるイメージにおいて、fromelfは間違った名前の出力ファイルを生成しないようになった。
- 異なったオブジェクトにおいて同じ名前の構造体を含む場合に、fromelf --fieldoffsetsの実行時、ハングアップしたり"Fatal error: Q0106E: Out of Memory"を発生させないようになった。
RVCT3.1(Build 569から616) †
RVCTv3.1パッチBuild 569から616への変更点および改善点は下記の通りとなります。
コンパイラ
- 巨大な配列に対して見せ掛けだけのsubscript-out-of-rangeワーニングを不正に生成していた。
- v5TにおいてインラインCLZ命令をコンパイルする場合不正にエラーを生成していた。
- C++およびC99モデルにおいて、ローカル配列イニシャライザに対するよりよいコードを生成するようになった。
- 特定のライブラリ関数(memcopyなど)が別の(strcpyなど)ライブラリ関数を通じて最適化されるとき、その関数に対する動的インポートタグが保持されるようになった。
- __smc組み込み関数(intrinsic)はv6Z固有の命令として認識されるようになった。
- 1つのCの式においてvolatile long long型のプレインクリメント/デクリメントと代入の組み合わせにおけるセグメンテーションフォルトを修正した。
- -O0において不要なテンプレートスタティックデータを生成しなくなった。
- -O3 -Otimeにおいてループ回数に関する最適化を改善(__aeabi_idivmodライブラリ関数の呼び出しを減らすなど)した。
- 以下を含む一部のDWARFデバッグ情報が修正された:
- .debug_info中のDW_AT_siblingが正しい場所を示すようになった Debug情報がnamespeceにおいて正しくネストされるようになった
- 一部のコード生成に関する問題を修正した。 以下を含む、インターナルフォルトの原因となりうるものについて修正した:
- 0x3e840d, 0x2bb15d, 0xafee20, 0xfe1945, 0x87ecef, 0x2cc72c, 0xe35e83, 0xca7b8d, 0xca4d2f, 0x7b54d8, 0xe46b32, 0x28aa97, 0x1e1ec0, 0xa95fee, 0x870a6f, #1620(dw_propagate_up-op), #2409(アンダーフロー), #2409(不正なSIMD処理)
リンカ
- イメージのprelinkユーティリティとの互換性を増した。
- デバッグセクションの共通化/マージが正常に動作するようになった。
- "--feedback_image noerrors"使用時、不正なエラーメッセージを生成することがあった。
- スキャッタファイル中のアドレスに対し"L6632W: Subtraction underflow"のワーニングメッセージを不正に出力することがあった。
- スキャッタファイル中のアドレスに対し"L6385W: Addition overflow"のワーニングメッセージを不正に出力することがあった。
- パディングリージョンにベニアを割り当てようとした場合、L6286Eエラーを生成していた。
- --inline使用時、条件コードを使わないARM命令を破壊することがあった。
- ライブラリ選択機能がダイナミックライブラリ中のシンボルを無効にする場合があった。
- "--info veneers,veneercallers"がveneercallerの出力を捨ててしまうことがあった。
- コメントセクションの共通化における多少の改善。
- __atセクションの自動配置は無制限に実行リージョン内に配置できるようになった。
- Thumb-2およびThumb PLTシーケンスを生成しようとした場合には診断情報を生成するようになった。
アセンブラ
- インターナルフォルト0x477a81および0x850686の原因となりうる問題を解決した。
- CPY命令が正しい命令として認識されるようになった。
fromelf
- "-nolinkview"および"--strip all"がプログラムセグメントを不正に消去していた。
- ロードセグメントのディスアセンブルにおいて実在しないゼロを見せる可能性があった。
- サイズゼロのバイナリに不正な名前を出力しなくなった。
armar
- 外部シンボルがない場合にシンボルテーブルを生成していなかった。