Solution ID:137107330 Type: External 表題: コンパイラバージョンC++ forte6 update1を利用の際に、MSE/COR エラーでるのはなぜですか。 製品: Purify バージョン: DeveloperTools.2001a.04.00,DeveloperTools.2002.05.00 OS: Solaris 2.x DEFECT #: ORVal00095 PATCH #: 参照事項: Solution ID:21894の日本語訳 作成年月日: 26-Sep-2002 改訂年月日: 26-Sep-2002 現象: SolarisコンパイラC++ forte 6 Update 1にパッチ109505-09(またはそれ以 降のバージョンの109505-XX)と109508-05(またはそれ以降のバージョン の109598-XX)をインストールした後、その環境でビルドし、Purifyを適用し たアプリケーションがMSE及びCORメッセージを出力し、クラッシュします。 しかし、オリジナルのプログラムについては正常に動作します。 Purifyの結果は下記のようになります。 MSE: Memory segment error This is occurring while in: _init [crti.o] _start [crt1.o] Accessing a memory range that crosses a memory segment boundary. Addressing 0x87936332 for 4 bytes ending at 0x87936336, which is neither in the heap nor the main stack. COR: Fatal core dump This is occurring while in: _init [crti.o] _start [crt1.o] Received signal 10 (SIGBUS - Bus Error) Faulting address = 0x87936332 Signal mask: (SIGBUS) Pending signals: 原因: PurifyがこのパッチがあたっているCCrti.o内のあるインストラクションを正しく 調整できていないために発生しています。 解決策: この問題は弊社でも既知の問題として認識されており、不具合IDは ORVal00095となっています。この不具合はプロトバージョン2002a.06 proto 0022以降で修正されています。Proto版をご希望の場合は、ラショナルカス タマサービス(support@japan.rational.com)まで、お客様のRationalアカウン ト番号またはカスタマIDを添えて、ご連絡ください。(正規購入ユーザでサ ポート契約が有効であることが条件となります。) 問題の回避策としては、下記のディレクティブ指定をPurifyのホームディレ クトリ(例えば/releases/purify.sol.2002.05.00)の配下にある .purify.solaris2_32ファイルに追加します。 deadcode .zero+0 .etext+0 CCrti.o static_checking_guardzone 0 CCrti.o ただし、.purifyファイルへのディレクティブ指定は大変デリケートなものです ので、上記の指定に関し、コンパイラとして、C++ forte 6 Update 1を使用 している環境のみに適用することが出来ます。 指定を行った後、必ず一度、Purifyの-force-rebuildオプションを使用して、 プログラム全体の再インストゥルメンテーションを行います。 ご不明な点等ありましたら、ラショナルカスタマサービスへお問い合わせ下さい。