最近、OpenVOSのお客様から明らかなコンパイラの問題を診断しました。お客様はOpenVOSリリース17.1を実行する2つのモジュールをお持ちです。一方のモジュールではプログラムのコンパイルに成功しましたが、もう一方のモジュールで同じプログラムをコンパイルしようとすると、gccコンパイラが「内部コンパイラエラー」を診断しました。こちらで問題を再現しようと試みましたが、再現できませんでした。 そこで、この問題はコンパイラではなく、エラーが発生した特定のモジュールに起因するに違いないと考えました。当初、OpenVOS Release 17.1でデフォルトのコマンド制限値を変更したことが原因かと思いました。gccやgmakeを含む多くのプログラムは、コマンド制限値が一貫した値に設定されていない場合、あるいは無限大に設定されていない場合、Release 17.1では動作しません。 しかしこの顧客はmodule_start_up.cm内のサンプルset_default_cmd_limitsコマンドをコメントアウトしていたため、既に無限値を使用していました。これは当リリースで推奨する設定です。次に、コンパイラエラー発生時のsyserr_logを確認するよう依頼しました。 案の定、モジュールのページング領域が不足したことを示すメッセージが見つかりました。アドレス空間の制限は使用量を制限していなかったものの、ページング領域が不足していたため、オペレーティングシステムは追加の仮想メモリ要求を拒否せざるを得ませんでした。これがgccのアドレス指定例外を引き起こし、不明瞭なエラーメッセージにつながったのです。ディスクの1つに新しいページングファイルを作成すると、巨大なソースプログラムのビルドが可能になりました。
この話の教訓は、奇妙なエラー(見たことのないものや理解できないもの)が発生した際には、syserrログを確認してOpenVOSがメッセージを記録していないか調べることに損はないということです。このケースでは、syserrログにページング領域の枯渇に至る過程を追跡する一連のメッセージが含まれていました。エラーが再現可能だったため、その関連性は極めて明白でした。
syserr_log のメッセージについて質問がある場合は、OpenVOS フォーラムに投稿するか、お近くのカスタマー・アシスタンス・センターにお問い合わせください。
