パッチプログラムをダウンロードするには、事前にARM社のコネクトサービスのアカウントを取得し、ログインしておく必要があります。アカウントの取得は以下のURLから無償で行う事ができます:
https://login.arm.com/register.php
RVCTパッチ アップデート時の注意点
†
RVDSv3.0およびv3.0 SP1のパッチは、ARM社のWebサイトよりダウンロード可能です。
https://silver.arm.com/browse/RVS30
-
RVDSv3.0 SP1用パッチ
上記ページにRVCT3.0 SP1と明記されているパッチはRVDSv3.0 SP1に含まれるRVCT3.0 SP1にのみ適用可能です。RVCT/RVDS3.0には適用できませんのでご注意下さい。
RVDS 3.0 Service Pack 1へのアップグレードをご希望のお客様は、弊社にご連絡いただきService Packをインストール後にパッチプログラムのインストールを行ってください。
同様に、上記ページよりダウンロード可能なパッチはRVDS 3.0 Evaluation CDおよびRVDK製品とは互換性がありません。
RVCT 3.0 Service Pack 1をお使いになられていることをはじめにご確認ください。
以下をタイプしてRVCT 3.0 build 586が返されることをご確認ください。
armcc --vsn
また、Linux/Solaris環境の場合以下のコマンドを実行してarmccの場所を確認し、新しいarmccはこの場所に格納して下さい。
which armcc
RVCTのインストールディレクトリにZIPファイルを解凍します。
例えばWindows版の場合、デフォルトのディレクトリは以下の通りです
C:Program FilesARMRVCTPrograms.06win_32-pentium
ツールのインストールされた場所に合致するよう、必要があれば解凍先のディレクトリを
変更してください。
パッチプログラムをダウンロード後、解凍しますとコンパイラの実行形式が取り出されますが、このとき取り出されるのはarmccのみとなります。
RVCTでは、tcc、armcppおよびtcppの実行形式はこの armccとまったく同じものですので、同ディレクトリ内で、tcc、armcppおよびtcppの実行形式へ名前を変えてコピーしてください。
例(Windows環境):
copy armcc.exe tcc.exe
copy armcc.exe tcpp.exe
copy armcc.exe armcpp.exe
これでアップデートツールがインストールされます。
コマンドラインから、以下の様に入力し、お客様の意図されるバージョンが
返されるかを確認してください。
armcc --vsn
armcpp --vsn
tcc --vsn
tcpp --vsn
armlink --vsn
armasm --vsn
fromelf --vsn
armar --vsn
ファイルの解凍後、Linux/Solaris版の場合はファイルのパーミッションがリセットされているためにarmccが実行できないことがあります。
この場合、以下の様にして実行可能なパーミッションを設定してください。
chmod u+x armcc
RVCT3.0 SP1(Build 651から688)
†
RVCTパッチBuild 651から688への変更点は、下記の通りとなります。
コンパイラ
以下のソースコード生成の問題が修正されました
-
無条件分岐が条件付分岐になるような、正しくないディスティネーションへのThumb分岐を生成する可能性があった。
-
誤ってフラグの設定命令を削除してしまう可能性があった。
-
1ワードより大きな変数に対し、変数をコンパイル時定数に不正にトランスフォームする可能性があった。
その他以下の様な問題が修正されました
-
--wchar32オプションを用いて整数の範囲を超えるような符号なし配列のスタティック初期化におけるInternal fault 0x9a86b3。
-
変数のアドレスがそのスコープを超えて渡される場合のInternal fault 0x65dab4。
-
C++テンプレートデストラクタにおけるInternal fault 0xfad570。
-
volatileでマークされていないローカル変数へのvolatileポインタを-O2 -Otimeオプションを用いてコンパイルした時のInternal fault 0x9be513。
リンカ
-
最新のレビジョンのAAELF仕様に基づき、R_ARM_THM_PC12リロケーションは、S-P+AのかわりにS-align(P)+Aにアップデートされました。
-
--info sizesまたは--info totalsオプション使用時、部分リンクされたオブジェクトに対するZIサイズを正しくレポートするようになりました。
Fromelf
-
BPABIイメージ中の特定のセクションにおいてバイトオーダーを不正に反転する問題を修正しました。
RVCT3.0 SP1(Build 617から651)
†
RVCTパッチBuild 617から651への変更点は、下記の通りとなります。
コンパイラ
コンパイラのフロントエンドの動作に変更を行いました
-
C++のファイル名拡張子として".cxx"が使用可能となった。
-
ターゲットオブジェクトのパスを含む依存関係ファイルが--dependで生成されるようになった。
-
Cコンパイラは__packedおよびC++テンプレートのインスタンス生成で不正にerror #20をレポートしていた。
-
コンパイラは--fpu=noneおよびC++テンプレートで誤ってerror #1151をレポートすることがあった。
以下のコード生成に関する問題が修正されました
-
-O3 -Otime使用時、以下を含む一部のコード生成に関する問題
-
一部の式における不正な単純化
-
一部のループにおける不正なコード転移
-
volatileオブジェクトが特定のケースで不正に最適化される破壊
-
特定のThumbヘルパライブラリ関数の呼出し後、フラグをする可能性があった。
-
シフトを伴う32bit Thumb-2のMOV.W命令後に不正なコードを生成する可能性があった。
-
volatileな配置エリアからロードされる値が、構造体メンバに縮小されてストアされる場合、不正なコードを生成する可能性があった。
-
--signed_charsオプションによって、enumの符号が不正に変わる。
-
doubleまたはlong long型に定数を不正に代入する。
-
配列におけるdeleteオペレータのnullポインタ用テストのためのコードが不正に生成される。
その他以下の様な問題が修正されました
-
--preincludeと--sys_includeオプションを併用したときのSegmentation fault。
-
組み込みアセンブラ関数内で__mcall_offsetof_vbaseを使用したときのSegmentation fault。
-
constオブジェクトへのポインタに割り付けられた配列のdelete時のSegmentation fault。
-
-O3 -Otimeオプション使用時に#1620, "Internal error detected -- please report (tretrv)"というエラーを生成する。
-
extern volatile const変数を--apcs=/ropiを用いてコンパイルしたときのInternal fault 0x1e1ec0。
-
C++例外および複数ネストしたtry ... catchブロックでのInternal fault 0x2234aa。
-
(double *)でのポインタキャストを含む代入式(例:*(double *)p = d;)でのInternal fault 0xf04372。
-
基底クラスが明確なデストラクタを持つ派生クラス中の関数呼び出しが存在し、--thumb -O0オプションを使用した場合のInternal fault 0x28aa97。
-
MSRに続き関数に渡されたポインタへのストアを行うインラインアセンブラでのInternal fault 0xbd358d。
-
long long型を使用した特定の式におけるInternal fault 0x3e0da2。
-
--apcs=/adsabiを使用してコマンドラインからマルチファイルコンパイルを行ったときにオプションが非推奨である旨のワーニングにおけるソース行を間違ってレポートする。
-
"#pragma arm section code"に続く"#pragma thumb"を含むソースコードにおいてリンク時のワーニングを引きおこす、オブジェクトファイルシンボルテーブル中の間違ったセクションサイズの生成を行う。
リンカ
下記の問題が修正されました
-
BPABI DLLをリンクする際、特定の環境においてクラッシュする可能性があった。
-
ステアリングファイル内で"HIDE *"を用いて部分リンクされたオブジェクトに対し、デバッグ時にワーニングを発生させる、特定のデバッグ関連シンボルの削除を不正に行う可能性があった。
-
BPABIイメージにおいて、関数に対しオフセットではなく誤って絶対ポインタを使用する可能性があった。
-
不正なエンディアンフォーマットのビルド属性セクションを生成する可能性があった。
-
リンカのインライン機能が予期しない命令エンコードを行うことがあった。
-
隣接するリージョン内で圧縮されたRWデータの直前にあるFIXEDリージョンの前に間違った量のパディングを追加していた。
-
リンカの生成したパディングを含む、正しい"Total ROM Size"を"--info totals"使用時にレポートするようになった。
-
"--info totals"使用時、部分リンクにおいてRWおよび/またはZIのサイズを間違ってレポートしていた。
アセンブラ
下記の問題が修正されました:
-
アセンブラはコンパイラと同等の、--depend_formatオプションを使用できるようになった。コンパイラによって生成されるものと同様に扱えるように、行のフォーマッティングはマイナーチェンジされました。
RVCT3.0 SP1(Build 586から617)
†
RVCTパッチ Build 586 から 617 への変更点は下記の通りとなります。
コンパイラ
以下のコード生成に関する問題が修正されました:
-
オーバーフローネゲート処理に関する不正な振る舞いをするコードを生成する可能性があった。
-
複数のシフトを含む式で間違った結果を返す可能性があった。
-
long longの値に対する特定のシフト式で不正なコードを生成する可能性があった。
-
NEON機能を用いる一部の式において不正なThumb-2命令シーケンスを生成する可能性があった。
-
-O2および-O3の最適化レベルにおいて、LDMの前のMOV命令を不正に移動する可能性があった。
-
-O2以上の最適化レベルにおいて、特定のThumb命令シーケンスの不正な並べ替えを行う可能性があった。
-
-O2以上の最適化レベルにおいて、不正なThumb-2命令を生成する可能性があった。
-
-O2以上の最適化レベルにおいて、一部の比較式を誤って反転することがあった。
-
-O3 -Otime使用時の、式の不正な単純化、ループにおける不正な変換を含むコード生成の問題を修正した。
その他以下の様な問題が修正されました:
-
--exceptionsと長い名前を持つC++テンプレート使用時のSegmentation fault。
-
--multifileオプションを指定せずに複数のC++ファイルをコンパイルしたときの InternalおよびSegmentation fault。
-
-O3 -Otime --debug使用時のInternal fault 0x6098ba。
-
Thumbにおいて-O0と巨大な関数使用時のInternal fault 0x995e1d。
-
C++において--remove_unneeded_entities使用時のInternal fault 0x26ed41。
-
-O3 -Otime使用時if条件コンディション内のローカル変数に関するInternal fault 0x4f04a9。
-
-O2および-O3使用時の特定のswitchブロックにおけるInternal fault 0x61e7f4。
-
特定の式においてのInternal fault0x3f08c3, 0x07e885および0x5593a7。
-
デバッグデータ内で、C++のtypedef名がマングリングされて参照されなかった。
リンカ
下記の問題が修正されました:
-
特定のステアリングファイルコマンドを使って部分リンクされたオブジェクトから間違ったデバッグデータセクションを生成する可能性があった。
-
BPABI(Base Platform ABI) DLL生成時、間違ったタイプのインターワーキングベニアを生成する可能性があった。
-
Windows環境において混在したパスセパレータ('/'と'')を使用時にエラーを返してしまうことがあった。
-
ライブラリサーチパス中のディレクトリセパレータに依存して異なった--map出力を行うことがあった。
-
異なったテンプレートタイプのC++関数においてリンカのデバッグ圧縮に失敗していた。
アセンブラ
下記の問題が修正されました:
-
プリプロセスされたソースファイルのアセンブル後、デバッグデータ中のDW_AT_nameフィールド(ソースファイル名を保持する)が不正であることがあった。
RVDv3.0.1 (Build 309 から 321) for Windows
†
RVDパッチBuild 309から321では以下の問題が修正されています。
-
196セクション以上のELFファイルのロードに失敗する。
-
SHN_ABSセクションインデックスを持つシンボルの処理に問題があり、ELFファイルのロードに失敗する。
-
16bitのポート幅をサポートしていないETM実装したコアへの接続に失敗する。