(57)【要約】【課題】コンパイラに不良が含まれる場合に、非該当のオブジェクトの単体再評価を不要とし、統合再評価の工数を減らすこと。【解決手段】本発明にかかる言語処理装置は、入力されたソースコードをコンパイル処理し、生成されたオブジェクトコードのリンク処理を行う。入力されたソースコードにおけるコンパイル処理に基づく不良を検出する不良検出部と、不良検出部により不良が検出された場合に、入力されたソースコードからコンパイル処理により生成されたオブジェクトコードにおける配置領域を取得し、領域情報記憶部に格納する領域情報取得部と、入力されたソースコードを修正したソースコードについて、不良検出部により不良が検出されなかった場合に、領域情報記憶部に格納された配置領域に基づいて、修正したソースコードからコンパイル処理により生成された修正後オブジェクトコードを配置するリンク処理部と、を備える。【選択図】図１
2010277149.tif 000002
【特許請求の範囲】
【請求項１】
入力されたソースコードをコンパイル処理し、生成されたオブジェクトコードのリンク処理を行う言語処理装置であって、
前記生成されたオブジェクトコードが前記リンク処理により配置される場合の配置領域を格納する領域情報記憶部と、
前記入力されたソースコードにおける前記コンパイル処理に基づく不良を検出する不良検出部と、
前記不良検出部により不良が検出された場合に、前記入力されたソースコードから前記コンパイル処理により生成されたオブジェクトコードにおける前記配置領域を取得し、前記領域情報記憶部に格納する領域情報取得部と、
前記入力されたソースコードを修正したソースコードについて、前記不良検出部により不良が検出されなかった場合に、前記領域情報記憶部に格納された配置領域に基づいて、前記修正したソースコードから前記コンパイル処理により生成された修正後オブジェクトコードを配置するリンク処理部と、
を備える言語処理装置。
【請求項２】
前記不良検出部は、前記コンパイル処理を行う際の内部状態を監視することにより不良を検出することを特徴とする請求項１に記載の言語処理装置。
【請求項３】
前記リンク処理部は、前記領域情報記憶部を参照し、過去のリンク処理によりオブジェクトコードが配置されていない領域である空き領域を検出し、前記修正後オブジェクトコードを前記検出された空き領域に配置し、前記領域情報記憶部に格納された配置領域に当該空き領域への参照を配置することを特徴とする請求項１又は２に記載の言語処理装置。
【請求項４】
前記リンク処理部は、前記修正後オブジェクトコードが前記領域情報記憶部に格納された配置領域内に配置可能である場合に、前記修正後オブジェクトコードを当該配置領域に配置する、
ことを特徴とする請求項３に記載の言語処理装置。
【請求項５】
前記領域情報取得部は、前記不良検出部により不良が検出された場合に、前記入力されたソースコード以外のソースコードにおける正常なオブジェクトコードにおける前記配置領域をさらに取得し、前記領域情報記憶部に格納し、
前記リンク処理部は、前記修正したソースコードについて、前記不良検出部により不良が検出されなかった場合に、前記正常なオブジェクトコードを前記領域情報記憶部に格納された当該正常なオブジェクトコードの配置領域に配置することを特徴とする請求項１乃至４のいずれか１項に記載の言語処理装置。
【請求項６】
複数のコンパイル処理を所定の順序で実行する実行制御部をさらに備え、
前記不良検出部は、前記複数のコンパイル処理の内、少なくとも一つに対応し、
前記実行制御部は、前記不良検出部に対応するコンパイル処理から独立して前記不良検出部を実行することを特徴とする請求項１乃至５のいずれか１項に記載の言語処理装置。
【請求項７】
前記実行制御部は、前記入力されたソースコードについて前記所定の順序で前記複数のコンパイル処理を実行した場合の当該複数のコンパイル処理のそれぞれの処理対象データの内、前記不良検出部に対応するコンパイル処理の処理対象データについて前記不良検出部を実行することを特徴とする請求項６に記載の言語処理装置。
【請求項８】
前記不良検出部は、前記入力されたソースコードにおける前記コンパイル処理に基づく不良を検出した場合に、当該ソースコード内の該当箇所、該当するシンボル名及び不良内容を含めた不良情報を出力することを特徴とする請求項１乃至７のいずれか１項に記載の言語処理装置。
【請求項９】
入力されたソースコードをコンパイル処理し、生成されたオブジェクトコードのリンク処理を行う言語処理装置の制御方法であって、
前記言語処理装置は、前記生成されたオブジェクトコードが前記リンク処理により配置される場合の配置領域を格納する領域情報記憶部を備え、
前記入力されたソースコードにおける前記コンパイル処理に基づく不良を検出する不良検出ステップと、
前記不良検出ステップにより不良が検出された場合に、前記入力されたソースコードから前記コンパイル処理により生成されたオブジェクトコードにおける前記配置領域を取得し、前記領域情報記憶部に格納する領域情報取得ステップと、
前記入力されたソースコードを修正したソースコードについて、前記不良検出ステップにより不良が検出されなかった場合に、前記領域情報記憶部に格納された配置領域に基づいて、前記修正したソースコードから前記コンパイル処理により生成された修正後オブジェクトコードを配置するリンク処理ステップと、
を含む制御方法。
【請求項１０】
前記不良検出ステップは、前記コンパイル処理を行う際の内部状態を監視することにより不良を検出することを特徴とする請求項９に記載の制御方法。
【請求項１１】
前記リンク処理ステップは、前記領域情報記憶部を参照し、過去のリンク処理によりオブジェクトコードが配置されていない領域である空き領域を検出し、前記修正後オブジェクトコードを前記検出された空き領域に配置し、前記領域情報記憶部に格納された配置領域に当該空き領域への参照を配置することを特徴とする請求項９又は１０に記載の制御方法。
【請求項１２】
前記リンク処理ステップは、前記修正後オブジェクトコードが前記領域情報記憶部に格納された配置領域内に配置可能である場合に、前記修正後オブジェクトコードを当該配置領域に配置する、
ことを特徴とする請求項１１に記載の制御方法。
【請求項１３】
前記領域情報取得ステップは、前記不良検出ステップにより不良が検出された場合に、前記入力されたソースコード以外のソースコードにおける正常なオブジェクトコードにおける前記配置領域をさらに取得し、前記領域情報記憶部に格納し、
前記リンク処理ステップは、前記修正したソースコードについて、前記不良検出ステップにより不良が検出されなかった場合に、前記正常なオブジェクトコードを前記領域情報記憶部に格納された当該正常なオブジェクトコードの配置領域に配置することを特徴とする請求項９乃至１２のいずれか１項に記載の制御方法。
【請求項１４】
複数のコンパイル処理を所定の順序で実行する実行制御ステップをさらに含み、
前記不良検出ステップは、前記複数のコンパイル処理の内、少なくとも一つに対応し、
前記実行制御ステップは、前記不良検出ステップに対応するコンパイル処理から独立して前記不良検出ステップを実行することを特徴とする請求項９乃至１３のいずれか１項に記載の制御方法。
【請求項１５】
前記実行制御ステップは、前記入力されたソースコードについて前記所定の順序で前記複数のコンパイル処理を実行した場合の当該複数のコンパイル処理のそれぞれの処理対象データの内、前記不良検出ステップに対応するコンパイル処理の処理対象データについて前記不良検出ステップを実行することを特徴とする請求項１４に記載の制御方法。
【請求項１６】
前記不良検出ステップは、前記入力されたソースコードにおける前記コンパイル処理に基づく不良を検出した場合に、当該ソースコード内の該当箇所、該当するシンボル名及び不良内容を含めた不良情報を出力することを特徴とする請求項９乃至１５のいずれか１項に記載の制御方法。
【請求項１７】
入力されたソースコードをコンパイル処理し、生成されたオブジェクトコードのリンク処理を行う言語処理をコンピュータに実行させる言語処理プログラムであって、
前記コンピュータは、前記生成されたオブジェクトコードが前記リンク処理により配置される場合の配置領域を格納する領域情報記憶部を備え、
前記入力されたソースコードにおける前記コンパイル処理に基づく不良を検出する不良検出ステップと、
前記不良検出ステップにより不良が検出された場合に、前記入力されたソースコードから前記コンパイル処理により生成されたオブジェクトコードにおける前記配置領域を取得し、前記領域情報記憶部に格納する領域情報取得ステップと、
前記入力されたソースコードを修正したソースコードについて、前記不良検出ステップにより不良が検出されなかった場合に、前記領域情報記憶部に格納された配置領域に基づいて、前記修正したソースコードから前記コンパイル処理により生成された修正後オブジェクトコードを配置するリンク処理ステップと、
を含む言語処理プログラム。
【請求項１８】
前記不良検出ステップは、前記コンパイル処理を行う際の内部状態を監視することにより不良を検出することを特徴とする請求項１７に記載の言語処理プログラム。
【請求項１９】
前記リンク処理ステップは、前記領域情報記憶部を参照し、過去のリンク処理によりオブジェクトコードが配置されていない領域である空き領域を検出し、前記修正後オブジェクトコードを前記検出された空き領域に配置し、前記領域情報記憶部に格納された配置領域に当該空き領域への参照を配置することを特徴とする請求項１７又は１８に記載の言語処理プログラム。
【請求項２０】
前記リンク処理ステップは、前記修正後オブジェクトコードが前記領域情報記憶部に格納された配置領域内に配置可能である場合に、前記修正後オブジェクトコードを当該配置領域に配置する、
ことを特徴とする請求項１９に記載の言語処理プログラム。
【請求項２１】
前記領域情報取得ステップは、前記不良検出ステップにより不良が検出された場合に、前記入力されたソースコード以外のソースコードにおける正常なオブジェクトコードにおける前記配置領域をさらに取得し、前記領域情報記憶部に格納し、
前記リンク処理ステップは、前記修正したソースコードについて、前記不良検出ステップにより不良が検出されなかった場合に、前記正常なオブジェクトコードを前記領域情報記憶部に格納された当該正常なオブジェクトコードの配置領域に配置することを特徴とする請求項１７乃至２０のいずれか１項に記載の言語処理プログラム。
【請求項２２】
複数のコンパイル処理を所定の順序で実行する実行制御ステップをさらに含み、
前記不良検出ステップは、前記複数のコンパイル処理の内、少なくとも一つに対応し、
前記実行制御ステップは、前記不良検出ステップに対応するコンパイル処理から独立して前記不良検出ステップを実行することを特徴とする請求項１７乃至２１のいずれか１項に記載の言語処理プログラム。
【請求項２３】
前記実行制御ステップは、前記入力されたソースコードについて前記所定の順序で前記複数のコンパイル処理を実行した場合の当該複数のコンパイル処理のそれぞれの処理対象データの内、前記不良検出ステップに対応するコンパイル処理の処理対象データについて前記不良検出ステップを実行することを特徴とする請求項２２に記載の言語処理プログラム。
【請求項２４】
前記不良検出ステップは、前記入力されたソースコードにおける前記コンパイル処理に基づく不良を検出した場合に、当該ソースコード内の該当箇所、該当するシンボル名及び不良内容を含めた不良情報を出力することを特徴とする請求項１７乃至２３のいずれか１項に記載の言語処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、言語処理装置、言語処理装置の制御方法及び言語処理プログラムに関し、不良が内在するコンパイラを用いて、入力されたソースコードをコンパイル処理し、生成されたオブジェクトコードのリンク処理を行う言語処理装置、言語処理装置の制御方法及び言語処理プログラムに関する。
【背景技術】
【０００２】
特許文献１には、コンパイラ不良修正による出力オブジェクトの改変を最小化することを目的とするコンパイラに関する技術が記載されている。特許文献１にかかるコンパイラは、コンパイラ不良によって不正オブジェクトとなるソースプログラムのみを抽出し、そのソースプログラムを不良修正したコンパイラによりコンパイルする。具体的には、入力ソースプログラムがコンパイラ不良に該当して不正オブジェクトとなるかをチェックする処理をコンパイラ内部に新たに設ける。入力ソースプログラムが不正オブジェクトとなる場合に限り、不良修正したコンパイラによるコンパイルが行なわれる。コンパイラ不良に該当しないソースプログラムは、チェック処理を組み込んだ不良コンパイラによりそのままコンパイルする。
【０００３】
特許文献２に開示された言語処理装置は、各ソースプログラムをコンパイルする度に、オブジェクトのサイズとリンクアドレスをシンボル情報格納部に格納する。このシンボル情報を利用して、再コンパイル後のオブジェクトを同じアドレスにリンクするための発明が記載されている。具体的には、ソースプログラムを再コンパイル後、前回コンパイル時に格納したシンボル情報を使用して、今回コンパイルしたオブジェクトを前回と同じアドレスにリンクすることで、リンクアドレスを変更しないアドレス解決を行う。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００５−１４１６１０号公報
【特許文献２】特開２００２−１０８６２５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１及び２には、再評価のコストが大きいため、コンパイラ不良に迅速に対応することができないという問題点がある。特許文献１では、コンパイラの不良修正と、不良修正に伴うコンパイラ評価を行う必要がある。また、コンパイラ内部に調査処理を新たに設けることによる出力オブジェクトへの影響が考慮されていない。また、特許文献２では、オブジェクト分割による影響を再評価しなければならない。
【０００６】
コンパイラに不良が含まれることによって、コンパイラが不正なオブジェクトを出力している可能性がある。そのため、コンパイラベンダは、コンパイラの内部的な処理を変更することによって不良を修正する。ユーザは、不良修正されたコンパイラを使用して再度コンパイルし、正常オブジェクトを出力及び評価することで回避する方法が一般的であった。
【０００７】
しかし、コンパイラに不良が含まれるからといって、全てのソースプログラムが不正なオブジェクトとなる訳ではない。正常なオブジェクトを出力している可能性の方が高いと考えられる。このような場合に、不良修正したコンパイラによってオブジェクトが改変されると、全ての出力オブジェクトに対して単体再評価が必要となる。また、オブジェクト同士を結合（リンク）した実行形式ファイルであるヘキサに対する統合再評価も必要である。
【０００８】
例えばあるユーザにおいて、不良を含むコンパイラにて開発を完了して量産間近にコンパイラ不良が判明した場合を想定する。ベンダはコンパイラ不良を修正し、評価をしなければならない。またベンダによるコンパイラ修正後、修正コンパイラの出力オブジェクトに対してユーザが単体再評価と統合再評価を行う必要がある。このようにコンパイラ不良に迅速に対応することが出来ないという問題点があった。
【０００９】
上述したように特許文献１では、コンパイラの不良修正を行う必要がある。また、不良修正が正常に行われたことを確認するため、コンパイラ自体の評価を行う必要がある。従って、コンパイラ不良が判明してからユーザに修正コンパイラが提供されるまでに多大な時間が費やされてしまう。また、コンパイラ不良に該当しないソースプログラムは、チェック機能を組み込んだ不良コンパイラにてコンパイルされるが、新たに設ける調査処理は、コンパイラ内部に組み込まれるものである。従って、出力オブジェクに影響を与えないとは断言出来ない。出力オブジェクトに影響を与えていないことを確認するためには、チェック機能を組み込んだ不良コンパイラに対する評価も必要となる。このように、特許文献１のアイデアを実現するためには、コンパイラ自身の修正と、２系統のコンパイラ評価が必要であり、コンパイラ不良に対して迅速に対応出来ない。
【００１０】
また、上述したように特許文献２では、ソースプログラムの記述変更前後でオブジェクトサイズが大きくなった場合に、リンクの際、該当オブジェクトを前半部と後半部に分割する。その後、前半部を前回と同じアドレスにリンクし、後半部をメモリ上の空き領域にリンクし、前半部の末尾に後半部へのジャンプ命令を挿入するリンク方法を実現している。しかし、この手法は、ユーザの意図しない部分でオブジェクト分割とジャンプ命令の挿入が行われるという問題点がある。従って、オブジェクト分割が発生した際には、単体評価に加えて、オブジェクト分割による影響を調査する統合評価をしなければならない。
【課題を解決するための手段】
【００１１】
本発明の第１の態様にかかる言語処理装置は、入力されたソースコードをコンパイル処理し、生成されたオブジェクトコードのリンク処理を行う言語処理装置であって、前記生成されたオブジェクトコードが前記リンク処理により配置される場合の配置領域を格納する領域情報記憶部と、前記入力されたソースコードにおける前記コンパイル処理に基づく不良を検出する不良検出部と、前記不良検出部により不良が検出された場合に、前記入力されたソースコードから前記コンパイル処理により生成されたオブジェクトコードにおける前記配置領域を取得し、前記領域情報記憶部に格納する領域情報取得部と、前記入力されたソースコードを修正したソースコードについて、前記不良検出部により不良が検出されなかった場合に、前記領域情報記憶部に格納された配置領域に基づいて、前記修正したソースコードから前記コンパイル処理により生成された修正後オブジェクトコードを配置するリンク処理部と、を備える。
【００１２】
本発明の第２の態様にかかる制御方法は、入力されたソースコードをコンパイル処理し、生成されたオブジェクトコードのリンク処理を行う言語処理装置の制御方法であって、前記言語処理装置は、前記生成されたオブジェクトコードが前記リンク処理により配置される場合の配置領域を格納する領域情報記憶部を備え、前記入力されたソースコードにおける前記コンパイル処理に基づく不良を検出する不良検出ステップと、前記不良検出ステップにより不良が検出された場合に、前記入力されたソースコードから前記コンパイル処理により生成されたオブジェクトコードにおける前記配置領域を取得し、前記領域情報記憶部に格納する領域情報取得ステップと、前記入力されたソースコードを修正したソースコードについて、前記不良検出ステップにより不良が検出されなかった場合に、前記領域情報記憶部に格納された配置領域に基づいて、前記修正したソースコードから前記コンパイル処理により生成された修正後オブジェクトコードを配置するリンク処理ステップと、を含む。
【００１３】
本発明の第３の態様にかかる言語処理プログラムは、入力されたソースコードをコンパイル処理し、生成されたオブジェクトコードのリンク処理を行う言語処理をコンピュータに実行させる言語処理プログラムであって、前記コンピュータは、前記生成されたオブジェクトコードが前記リンク処理により配置される場合の配置領域を格納する領域情報記憶部を備え、前記入力されたソースコードにおける前記コンパイル処理に基づく不良を検出する不良検出ステップと、前記不良検出ステップにより不良が検出された場合に、前記入力されたソースコードから前記コンパイル処理により生成されたオブジェクトコードにおける前記配置領域を取得し、前記領域情報記憶部に格納する領域情報取得ステップと、前記入力されたソースコードを修正したソースコードについて、前記不良検出ステップにより不良が検出されなかった場合に、前記領域情報記憶部に格納された配置領域に基づいて、前記修正したソースコードから前記コンパイル処理により生成された修正後オブジェクトコードを配置するリンク処理ステップと、を含む。
【００１４】
上述した本発明の第１乃至第３の態様にかかる言語処理装置、言語処理装置の制御方法及び言語処理プログラムでは、まず、現状のソースコードにコンパイル処理に起因する不良が含まれるか否かを検出することができる。これにより、ソースコードの開発者は、検出された不良について、ソースコードを修正することができる。そして、修正したソースコードに対して不良が検出されなかった場合に、前回の配置領域に基づいてリンク処理を行うため、不必要に配置領域が変更されることがなくなる。そのため、修正後の実行形式コードについて、変更箇所が減らされるため、再評価のコストを抑えることができる。
【発明の効果】
【００１５】
本発明により、コンパイラに不良が含まれる場合に、非該当のオブジェクトの単体再評価を不要とし、統合再評価の工数を減らす言語処理装置、言語処理装置の制御方法及び言語処理プログラムを提供することができる。
【図面の簡単な説明】
【００１６】
【図１】本発明の実施の形態１にかかる言語処理装置の構成を示すブロック図である。
【図２】本発明の実施の形態１にかかる言語処理装置の一実施例の構成を示すブロック図である。
【図３】本発明の実施の形態１にかかる言語処理の流れを示すフローチャート図である。
【図４】本発明の実施の形態１にかかる修正リンク処理の流れを示すフローチャート図である。
【図５】本発明の実施の形態１にかかる標準的なコンパイラ処理及びリンク処理の概念を説明する図である。
【図６】本発明の実施の形態１にかかる言語処理の概念を説明する図である。
【図７】本発明の実施の形態１にかかる言語処理の概念を説明する図である。
【図８】不良に該当するソースコードの例を示す図である。
【図９】本発明の実施の形態１にかかる不良情報の出力例を示す図である。
【図１０】本発明の実施の形態１にかかる不良を回避したソースコードの例を示す図である。
【図１１】本発明の実施の形態１にかかる言語処理の概念を説明する図である。
【図１２】本発明の実施の形態１にかかる言語処理の概念を説明する図である。
【図１３】ソースコードと実行形式コードとの関係を説明する図である。
【図１４】関連技術にかかる修正前後の実行形式コードの関係を説明する図である。
【図１５】本発明の実施の形態１にかかる修正前後の実行形式コードの関係を説明する図である。
【発明を実施するための形態】
【００１７】
以下では、本発明を適用した具体的な実施の形態について、図面を参照しながら詳細に説明する。各図面において、同一要素には同一の符号が付されており、説明の明確化のため、必要に応じて重複説明は省略する。
【００１８】
＜発明の実施の形態１＞
図１は、本発明の実施の形態１にかかる言語処理装置１の構成を示すブロック図である。言語処理装置１は、入力されたソースコード２又は修正ソースコード３をコンパイル処理し、生成されたオブジェクトコードのリンク処理を行い、実行形式コード４として出力する。言語処理装置１は、実行制御部１１と、コンパイル処理部１２と、不良検出部１３と、領域情報取得部１４と、リンク処理部１５と、オブジェクトコード記憶部１６と、領域情報記憶部１７と、を備える。
【００１９】
オブジェクトコード記憶部１６は、生成されたオブジェクトコードを格納する記憶装置である。オブジェクトコード記憶部１６は、少なくともリンク処理が完了するまでの間、一時的にオブジェクトコードを記憶すればよい。領域情報記憶部１７は、生成されたオブジェクトコードがリンク処理により配置される場合の配置領域を格納する記憶装置である。配置領域とは、例えば、オブジェクトコードに含まれる関数におけるコードのサイズ情報と、当該関数が実行形式コードにおいて配置される開始位置のアドレス情報である。尚、配置領域は、これに限定されず、例えば、配置領域は、開始位置のアドレス情報と終了位置のアドレス情報で挟まれる領域としてもよい。
【００２０】
コンパイル処理部１２は、複数のコンパイル処理を含むものである。コンパイル処理とは、例えば、コンパイラの各工程を実装したモジュールであるとよい。コンパイル処理部１２は、当該複数のコンパイル処理を所定の順序で実行することにより、ソースコード２及び修正ソースコード３からオブジェクトコードを生成し、生成されたオブジェクトコードをオブジェクトコード記憶部１６に格納する。尚、コンパイル処理部１２は、複数のコンパイル処理毎に生成される中間コードをオブジェクトコード記憶部１６に格納し、必要に応じて、読み出してもよい。尚、本発明の実施の形態にかかるコンパイル処理は、少なくとも一部に不良を含むものとする。
【００２１】
不良検出部１３は、入力されたソースコード２及び修正ソースコード３におけるコンパイル処理に基づく不良を検出する。不良検出部１３は、コンパイル処理を行う際の内部状態を監視することにより不良を検出する。不良検出部１３は、複数のコンパイル処理の内、少なくとも一つに対応するものとする。不良検出部１３は、入力されたソースコード２におけるコンパイル処理に基づく不良を検出した場合に、当該ソースコード内の該当箇所、該当するシンボル名及び不良内容を含めた不良情報を出力する。
【００２２】
領域情報取得部１４は、不良検出部１３により不良が検出された場合に、入力されたソースコード２からコンパイル処理により生成されたオブジェクトコードにおける配置領域を取得し、領域情報記憶部１７に格納する。例えば、領域情報取得部１４は、オブジェクトコード記憶部１６に格納されたオブジェクトコードから関数毎にサイズ情報を取得し、オブジェクトコード及び関数の識別情報と関連付けて領域情報記憶部１７に格納する。また、領域情報取得部１４は、後述するリンク処理部１５により出力された実行形式コード４からオブジェクトコード及び関数のアドレス情報を取得し、オブジェクトコード及び関数の識別情報と関連付けて領域情報記憶部１７に格納する。すなわち、オブジェクトコード及び関数の識別情報は、サイズ情報とアドレス情報の対の情報が関連付けられている。
【００２３】
リンク処理部１５は、入力されたソースコード２を修正した修正ソースコード３について、不良検出部１３により不良が検出されなかった場合に、領域情報記憶部１７に格納された配置領域に基づいて、修正ソースコード３からコンパイル処理により生成された修正後オブジェクトコードを配置する。また、リンク処理部１５は、領域情報記憶部１７を参照し、過去のリンク処理によりオブジェクトコードが配置されていない領域である空き領域を検出し、修正後オブジェクトコードを検出された空き領域に配置し、領域情報記憶部１７に格納された配置領域に当該空き領域への参照を配置することが望ましい。これにより、修正後の実行形式コードは、修正後オブジェクトコードのみが前回のリンク処理の際と異なる配置領域となるため、再評価の範囲を狭めることができる。尚、空き領域への参照とは、例えば、ｊｍｐ命令であるとよい。さらに、リンク処理部１５は、修正後オブジェクトコードが領域情報記憶部１７に格納された配置領域内に配置可能である場合に、修正後オブジェクトコードを当該配置領域に配置する。これにより、修正によりサイズの小さくなったオブジェクトコードの配置領域の開始アドレスを変更することがなくなるため、再評価の範囲を狭めることができる。さらに、空き領域への配置を最小限に抑えることができるため、修正後に生成される実行形式コードのサイズを抑えることができる。
【００２４】
実行制御部１１は、複数のコンパイル処理を所定の順序で実行する制御手段である。また、実行制御部１１は、コンパイル処理部１２と、不良検出部１３と、領域情報取得部１４と、リンク処理部１５とに対して実行の指示及び実行順序の制御を行う。実行制御部１１は、例えば、コンパイラドライバである。さらに、実行制御部１１は、不良検出部１３に対応するコンパイル処理部１２から独立して不良検出部１３を実行するとよい。これにより、言語処理装置１におけるリソースの使用度合を勘案して最適なタイミングでコンパイル処理部１２及び不良検出部１３を実行することができる。また、実行制御部１１は、入力されたソースコードについて所定の順序で複数のコンパイル処理を実行した場合の当該複数のコンパイル処理のそれぞれの処理対象データの内、不良検出部１３に対応するコンパイル処理の処理対象データについて不良検出部１３を実行するとよい。つまり、対応するコンパイル処理部１２と不良検出部１３とは、同一の入力データとすることが望ましい。これにより、不良検出部１３は、入力されるソースコード２を始めからコンパイル処理を行う必要がなく、必要最小限のコンパイル処理について不良の検出を行うことができる。そのため、不良の検出が正確かつ効率的となる。
【００２５】
尚、領域情報取得部１４は、不良検出部１３により不良が検出された場合に、入力されたソースコード以外のソースコードにおける正常なオブジェクトコードにおける配置領域をさらに取得し、オブジェクトコード記憶部１６に格納する。このとき、リンク処理部１５は、修正した修正ソースコード３について、不良検出部１３により不良が検出されなかった場合に、正常なオブジェクトコードを領域情報記憶部１７に格納された当該正常なオブジェクトコードの配置領域に配置するとよい。
【００２６】
図２は、本発明の実施の形態１にかかる言語処理装置１の一実施例の構成を示すブロック図である。言語処理装置１は、ＣＰＵ（Central Processing Unit）１０１と、ＲＡＭ（Random Access Memory）１０２と、ＲＯＭ（Read Only Memory）１０３と、ＩＦ（InterFace）部１０４と、ハードディスク１０５とを備える。また、ハードディスク１０５は、不揮発性記憶装置であり、ＯＳ（Operating System）１１１、コンパイラドライバ１１２、リンカ１１３、シンボル情報１１４、モジュールＸ１１５、モジュールＹ１１６、モジュールＺ１１７、パッチＹ１１８を格納する。コンパイラドライバ１１２は、図１の実行制御部１１を実現する処理が実装されたプログラムである。リンカ１１３は、図１のリンク処理部１５を実現する処理が実装されたプログラムである。シンボル情報１１４は、図１の領域情報記憶部１７に格納されている配置領域を示す情報である。モジュールＸ１１５、モジュールＹ１１６及びモジュールＺ１１７は、図１のコンパイル処理部１２を実現する処理が実装されたプログラムである。パッチＹ１１８は、図１の不良検出部１３を実現する処理が実装されたプログラムである。パッチＹ１１８は、特に、モジュールＹ１１６により実現されるコンパイル処理に対応付けられたプログラムである。そして、パッチＹ１１８は、モジュールＹ１１６における内部状態を監視することにより、モジュールＹ１１６に内在する不良の影響を受けた中間データが生成されているか否かを検出することができる。尚、ハードディスク１０５は、図１のソースコード２、修正ソースコード３、実行形式コード４をさらに格納しても構わない。また、図１のオブジェクトコード記憶部１６は、ハードディスク１０５又はＲＡＭ１０２内で実現されればよい。
【００２７】
ＣＰＵ１０１は、言語処理装置１における各種処理、ＲＡＭ１０２、ＲＯＭ１０３、ＩＦ部１０４及びハードディスク１０５へのアクセス等を制御する。ＩＦ部１０４は、言語処理装置１の外部とのデータの入出力を行う。言語処理装置１は、ＣＰＵ１０１が、ＲＡＭ１０２、ＲＯＭ１０３又はハードディスク１０５に格納されたＯＳ１１１、コンパイラドライバ１１２を読み込み、実行する。これにより、実行制御部１１として機能する。そして、ＣＰＵ１０１は、コンパイラドライバ１１２によりモジュールＸ１１５、モジュールＹ１１６、モジュールＺ１１７、パッチＹ１１８及びリンカ１１３を起動し、処理結果を受け取る。
【００２８】
図３は、本発明の実施の形態１にかかる言語処理の流れを示すフローチャート図である。まず、実行制御部１１は、ソースコード２を入力する（Ｓ１０１）。次に、実行制御部１１は、モジュールを実行する（Ｓ１０２）。具体期には、実行制御部１１は、コンパイル処理部１２の内、所定の順序により該当するコンパイル処理が実装されたモジュールプログラムを起動する。また、実行制御部１１は、ステップＳ１０２で実行されるモジュールに対応するパッチを実行する（Ｓ１０３）。具体的には、実行制御部１１は、不良検出部１３がステップＳ１０２で実行されるモジュールに対応する場合に、不良検出部１３を起動する。但し、不良検出部１３の実行タイミングは、コンパイル処理部１２の実行状況に依存する必要はない。不良検出部１３は、少なくともリンク処理部１５が実行される前までに実行されていればよい。
【００２９】
その後、不良検出部１３は、パッチ実行の結果不良が含まれるか否かを判定する（Ｓ１０４）。尚、不良検出部１３は、モジュールＹ１１６の入力データ自体を解析して、不良を検出してもよい。または、不良検出部１３は、パッチＹ１１８の処理中の内部状態の変化を監視することにより、不良を検出してもよい。又は、不良検出部１３は、パッチＹ１１８の実行結果である中間データを解析して不良を検出してもよい。ステップＳ１０４により不良を検出した場合、不良検出部１３は、不良情報を出力する（Ｓ１０５）。具体的には、不良検出部１３は、解析結果から得られるシンボル名及び不良内容を不良情報に含めればよい。
【００３０】
その後、領域情報取得部１４は、コンパイル処理部１２により生成されたオブジェクトコードからサイズ情報を取得する（Ｓ１０６）。すなわち、領域情報取得部１４は、コンパイル処理部１２によりオブジェクトコード記憶部１６に書き込まれたオブジェクトコードを対象にサイズ情報を取得し、領域情報記憶部１７に格納する。
【００３１】
ここで、実行制御部１１は、前回の当該言語処理において不良が検出されたこと、かつ、今回の当該言語処理において不良が検出されないことを満たすか否かを判定する（Ｓ１０７）。前回の当該言語処理において不良が検出されたこととは、例えば、次のことを示す。まず、言語処理装置１は、当該言語処理の１回目にソースコード２について実行する。その際、ステップＳ１０４において、不良が検出されたとする。そして、言語処理装置１は、当該言語処理の２回目にソースコード２を修正した修正ソースコード３について実行する。このとき、ステップＳ１０７において、前回の当該言語処理において不良が検出されたと判定する。
【００３２】
また、今回の当該言語処理において不良が検出されないこととは、例えば、次のことを示す。言語処理装置１は、上述した当該言語処理の２回目に修正ソースコード３について実行した場合に、ステップＳ１０４において、不良が検出されなかったとする。このとき、ステップＳ１０７において、今回の当該言語処理において不良が検出されないと判定する。
【００３３】
ステップＳ１０７において、満たすと判定した場合、実行制御部１１は、修正リンク処理を実行する（Ｓ１０８）。すなわち、実行制御部１１は、リンク処理部１５を起動して、図４に後述するリンク処理を実行する。また、ステップＳ１０７において、満たさないと判定した場合、実行制御部１１は、標準リンク処理を実行する（Ｓ１０９）。すなわち、実行制御部１１は、リンク処理部１５を起動して、オブジェクトコード記憶部１６に格納されたオブジェクトコードのリンク処理を行う。尚、一般的なリンク処理は公知なものであるため、詳細な説明を省略する。
【００３４】
その後、領域情報取得部１４は、リンク処理部１５により生成された実行形式コードからアドレス情報を取得する（Ｓ１１０）。すなわち、領域情報取得部１４は、実行形式コードに含まれる各オブジェクトコード及び関数の開始アドレスを取得し、領域情報記憶部１７に格納する。そして、実行制御部１１は、リンク処理部１５により生成された実行形式コード４を出力する（Ｓ１１１）。尚、ステップＳ１０７において今回の当該言語処理において不良が検出された場合、実行制御部１１は、実行形式コード４を削除しても構わない。また、オブジェクトコード記憶部１６に格納されたオブジェクトコードは、当該言語処理が終了する度に、削除しても構わない。
【００３５】
図４は、本発明の実施の形態１にかかる修正リンク処理の流れを示すフローチャート図である。まず、リンク処理部１５は、空き領域を特定する（Ｓ２０１）。具体的には、リンク処理部１５は、領域情報記憶部１７を参照し、前回、リンク処理部１５により生成されたオブジェクトコードの配置領域から未配置の領域を空き領域として特定する。
【００３６】
次に、リンク処理部１５は、未配置のオブジェクトあるか否かを判定する（Ｓ２０２）。具体的には、リンク処理部１５は、オブジェクトコード記憶部１６を参照し、今回、コンパイル処理部１２により生成されたオブジェクトコードの内、未配置のオブジェクトコードを検索し、処理対象のオブジェクトコードを特定する。
【００３７】
そして、未配置のオブジェクトあると判定した場合、リンク処理部１５は、当該オブジェクトの内、未配置の関数があるか否かを判定する（Ｓ２０３）。具体的には、リンク処理部１５は、オブジェクトコード記憶部１６を参照し、ステップＳ２０２により判定されたオブジェクトコードの関数の内、未配置の関数を検索し、処理対象の関数を特定する。
【００３８】
未配置の関数があると判定した場合、リンク処理部１５は、前回と今回の領域情報を取得する（Ｓ２０４）。具体的には、リンク処理部１５は、領域情報記憶部１７を参照し、処理対象の関数について前記と今回のサイズ情報及びアドレス情報を取得する。
【００３９】
ここで、リンク処理部１５は、前回のサイズ情報より今回のサイズ情報の方が大きいか否かを判定する（Ｓ２０５）。すなわち、リンク処理部１５は、ステップＳ２０４で取得した関数のサイズ情報について前回と今回とを比較する。
【００４０】
前回のサイズ情報より今回のサイズ情報の方が大きいと判定した場合、リンク処理部１５は、当該関数を空き領域に配置する（Ｓ２０６）。続いて、リンク処理部１５は、当該関数の前回の配置アドレスにjmp命令を埋め込む（Ｓ２０７）。これにより、当該関数以外の他の関数から参照については、前回のリンク処理により生成された実行形式コードと同じ参照先となり、他の関数における動作への影響は小さい。そのため、今回の修正における影響範囲を狭めることができ、再評価の範囲を縮めることができる。
【００４１】
また、ステップＳ２０５において、今回のサイズ情報が前回のサイズ情報以下であると判定した場合、リンク処理部１５は、前回の配置アドレスに当該関数を再配置する（Ｓ２０８）。今回のサイズ情報が前回のサイズ情報以下であるので、当該関数の終了位置のアドレス情報は、隣接して配置される他の関数の領域と重ならない。そのため、前回と同じ開始アドレスから配置することにより、他の関数における動作への影響を小さくするばかりでなく、生成される実行形式コードのサイズを抑えることができる。
【００４２】
その後、リンク処理部１５は、未配置のオブジェクトコード及び関数がなくなった時に当該修正リンク処理を終了する。
【００４３】
このように、本発明の実施の形態１により、コンパイラに不良が含まれる場合に、非該当のオブジェクトの単体再評価を不要とし、統合再評価の工数を減らすことができる。
【００４４】
図５は、本発明の実施の形態１にかかる標準的なコンパイラ処理及びリンク処理の概念を説明する図である。図５に示す通り、コンパイラドライバ１１２が各コンパイラモジュールであるモジュールＸ１１５、モジュールＹ１１６及びモジュールＺ１１７を所定の順序により起動する。起動したモジュールは、入力されるソースファイル２１、２２及び２３に対してある特定の処理を行い、次のモジュールへの入力コードを出力する。例えば、モジュールＸ１１５、モジュールＹ１１６及びモジュールＺ１１７は、ソースファイル２１、２２及び２３を入力し、オブジェクトファイル３１、３２及び３３を出力する。また、リンカ１１３は、オブジェクトファイル３１、３２及び３３を入力し、実行形式ファイル４０を出力する。ここで、コンパイラとは、コンパイラドライバ１１２がこのコンパイラモジュールを順次に起動し、コードがモジュールへの入出力を繰り返すことにより、ソースファイルをターゲットシステム上で動作可能な機械語である実行形式ファイルに変換する装置である。
【００４５】
また、本発明の実施の形態１にて想定しているコンパイラ不良とは、コンパイラドライバ１１２が起動するモジュール内部に不良が内在することを指す。不良モジュールが不正コードを出力し、結果として、コンパイラが出力するオブジェクトと、オブジェクト同士を結合した実行形式ファイルであるヘキサが不正となることをコンパイラ不良とする。
【００４６】
例として、モジュールＹ１１６に不良が内在し、ソースファイル２３である「3.c」がコンパイラ不良に該当する場合の動作を例に以降に示す。本発明の実施の形態１では、コンパイラ不良判明時に、不良モジュールの入力コードと同じコードを入力コードとするパッチＹ１１８が提供されるものとする。そして、コンパイラドライバ１１２は、オプションが指定されることによって、パッチＹ１１８を起動して実行するものとする。例えば、モジュールＹ１１６に不良が内在する場合は、コンパイラドライバ１１２は、モジュールＹ１１６用パッチであるパッチＹ１１８をモジュールＹ１１６が実行される前に実行する。
【００４７】
パッチＹ１１８は、入力コードに対して、不良モジュールが不正コードを出力するかどうかをチェックする。不正コードを出力する場合には、不良に該当するソースプログラム名と不良該当部分を抽出して、不良情報としてコンパイラドライバ１１２に渡す。図６は、このような言語処理の概念を説明する図である。図６に示すように、パッチＹ１１８は、モジュールＸ１１５から出力されたデータを入力し、中間ファイル５１、５２及び５３を出力する。ここで、中間ファイル５１、５２及び５３は、モジュールＹ１１６により出力されるそのものの出力結果ではなく、モジュールＹ１１６相当の処理が行われる際の内部状態等を出力した結果である。そして、パッチＹ１１８は、中間ファイル５１、５２及び５３を解析して不良に該当するか否かを判定する。ここでは、中間ファイル５１及び５２は、不良に非該当であり、中間ファイル５３が不良に該当したものとする。そして、パッチＹ１１８は、不良情報６０をコンパイラドライバ１１２へ通知する。パッチＹ１１８が不良情報を通知した場合、コンパイラドライバ１１２は、標準出力に不良情報６０を出力する。不良情報６０は、例えば、不良該当するソースプログラム名と不良該当部分等である。
【００４８】
続いて、コンパイラドライバ１１２は、出力したオブジェクトのサイズと配置アドレス情報を取得することを目的として、このままコンパイルを続行する。すなわち、オブジェクトやヘキサを出力することが目的ではない。このとき、コンパイラ内部に設けられたパッチ処理の影響を無効とするため、パッチ入力前のコードを次モジュール以降に入力する。図７は、本発明の実施の形態１にかかる言語処理の概念を説明する図である。つまり、モジュールＸ１１５は、ソースファイル２１、２２及び２３を入力し、中間ファイル５１ａ、５２ａ及び５３ａをそれぞれ出力する。そして、パッチＹ１１８は、中間ファイル５１ａ、５２ａ及び５３ａを入力し、上述した中間ファイル５１、５２及び５３を出力する。ここで、コンパイラドライバ１１２は、モジュールＹ１１６の入力を中間ファイル５１ａ、５２ａ及び５３ａとする。これにより、パッチＹ１１８とモジュールＹ１１６は同じ入力コードにより処理されることとなる。つまり、解析対象のモジュールの処理については、処理中の内部状態を取得するが、別途、通常のモジュールＹ１１６により同一の入力コードにより処理を行うことにより、以降の処理を継続させることができる。尚、図７に示すように、モジュールＹ１１６は、不良箇所１１６ａを有し、モジュールＹ１１６は、中間ファイル５３ａを入力して処理する際、不良箇所１１６ａを通った処理となるものとする。
【００４９】
また、モジュールＺ１１７は、モジュールＹ１１６の出力データを入力し、オブジェクトファイル３１ａ、３２ａ及び３３ａを出力する。そして、リンカ１１３は、オブジェクトファイル３１ａ、３２ａ及び３３ａを入力し、実行形式ファイル４０ａを出力する。ここで、パッチＹ１１８が不良情報を通知した場合、不正なコードを生成し得る中間ファイル５３ａから生成されたオブジェクトファイル３３ａ及び実行形式ファイル４０ａは、不正コードを含む。ここで、領域情報取得部１４は、正常オブジェクトであるオブジェクトファイル３１ａ及び３２ａと、不正オブジェクトであるオブジェクトファイル３３ａとからサイズ情報６１を取得し、コンパイラドライバ１１２へ通知する。また、領域情報取得部１４は、実行形式ファイル４０ａにおいてオブジェクトファイル３１ａ、３２ａ及び３３ａが配置されるアドレスであるアドレス情報６２を取得し、コンパイラドライバ１１２へ通知する。ここで、サイズ情報６１及びアドレス情報６２は、シンボル情報である。続いて、コンパイラドライバ１１２は、全オブジェクトファイルとヘキサファイルの削除を行う。
【００５０】
この後、コンパイラユーザは、標準出力に出力されている不良情報を利用して、コンパイラ不良に該当しないように該当ソースプログラム記述を修正する。例えば、ある自動変数の定義が、不正なコンパイラ最適化処理により不正に削除される不良が判明したとする。このとき、標準出力には不良情報として「不良概要・不良該当ソースプログラム名・不正に削除される自動変数名・その自動変数名が定義されている行番号」を出力するものとする。不良の内容や回避策の詳細はパッチと共にユーザに提供する。
【００５１】
図８は、不良に該当するソースコードの例を示す図である。図９は、本発明の実施の形態１にかかる不良情報の出力例を示す図である。図１０は、本発明の実施の形態１にかかる不良を回避したソースコードの例を示す図である。まず、図８では、"sample.c"が不良に該当するソースプログラムであることを示す。そして、図９では、４行目の"int val = 1;"が不正に削除される不良に該当したことを示す。この場合、回避策は、自動変数の定義部分に対して"volatile指定"することにより"val"の最適化を明示的に抑止することであるとする。このとき、図１０に示すように、ユーザは不良情報を元に"sample.c"の4行目の"int val = 1;"に"volatile指定"するのみでコンパイラ不良を回避することが可能である。
【００５２】
図１１は、本発明の実施の形態１にかかる言語処理の概念を説明する図である。ここでは、ソースファイル２３を修正ソースファイル２３ａに修正したものとする。そして、モジュールＸ１１５及びパッチＹ１１８は、ソースファイル２１、２２及び２３ａを入力し、中間ファイル５１、５２及び５３ｂを出力する。この時、パッチＹ１１８は、修正ソースファイル２３ａがコンパイラの不良に該当していなければ、不良情報をコンパイラドライバ１１２に通知しない。つまり、コンパイラ不良の影響を受けない正常なオブジェクトやヘキサが出力されることが分かる。
【００５３】
そこで、コンパイラドライバ１１２は、オブジェクトやヘキサを出力することを目的として、以降のモジュールを起動する。このときコンパイラ内部に設けられたパッチ処理の影響を無効とするため、パッチ入力前のコードを次モジュール以降に入力する。同時にパッチが出力したコードを削除する。図１２は、本発明の実施の形態１にかかる言語処理の概念を説明する図である。以下では、図７との違いを中心に説明し、同等の部分の説明を省略する。
【００５４】
モジュールＸ１１５は、ソースファイル２３ａを入力し、中間ファイル５３ｂを出力する。そして、パッチＹ１１８は、中間ファイル５３ａを入力し、中間ファイル５３ｂを出力する。ここで、コンパイラドライバ１１２は、モジュールＹ１１６の入力を中間ファイル５３ｃとする。但し、モジュールＹ１１６は、中間ファイル５３ｃを入力して処理する際、不良箇所１１６ａを通らない処理となるものとする。
【００５５】
また、モジュールＺ１１７は、モジュールＹ１１６の出力データを入力し、オブジェクトファイル３３ｂを出力する。そして、リンカ１１３は、オブジェクトファイル３１ａ、３２ａ及び３３ｂを入力し、実行形式ファイル４０ｂを出力する。ここで、コンパイラ不良に該当していないソースファイル２１及び２２については、パッチ挿入実行前後でソースプログラム記述もコンパイル処理も変わらないため、オブジェクトが改変されることはない。そのため、オブジェクトの単体再評価は不要となる。一方、記述を変更した修正ソースファイル２３ａについては、コンパイラ不良の影響を受けない正常オブジェクトが出力されており、当然オブジェクトは改変されている。そのため、単体再評価は必要である。上記のコンパイル処理により全ソースプログラムに対して、コンパイラ不良の影響を受けない正常なオブジェクトを出力することが可能となる。
【００５６】
ここで、領域情報取得部１４は、正常オブジェクトであるオブジェクトファイル３１ａ、３２ａ及び３３ａからサイズ情報６１を取得し、コンパイラドライバ１１２へ通知する。また、領域情報取得部１４は、実行形式ファイル４０ｂにおいてオブジェクトファイル３１ａ、３２ａ及び３３ｂが配置されるアドレスであるアドレス情報６２を取得し、コンパイラドライバ１１２へ通知する。
【００５７】
続いて、リンカ１１３によるリンク処理について説明する。リンク処理とは、各オブジェクトのターゲットシステム上での配置アドレスを決定し、オブジェクトを結合してヘキサファイルを出力することである。図１３は、ソースコードと実行形式コードとの関係を説明する図である。例えば、図１３では"1.obj"を0x7000番地に、"2.obj"を0x5000番地に配置した際のメモリイメージを示している。実際にはオブジェクト内の関数単位でアドレスを決定しているため、"3.c"内に関数"func1"〜"func4"が存在する場合、例えば"func1"を0x1000番地に、"func2"を0x2600番地に、"func3"を0x3700番地に、"func4"を0x4500番地に配置するという手順でアドレスを決定している。アドレス決定後、ヘキサファイルを出力する。
【００５８】
次に、ソースプログラムの記述を変更したオブジェクトをそのままリンクする場合を考える。図１４は、関連技術にかかる修正前後の実行形式コードの関係を説明する図である。この場合、図１４に示すように記述変更前後でオブジェクトのサイズが異なると、不良に該当していないオブジェクトのリンクアドレスも異なる可能性がある。ヘキサファイルはコード情報と、そのコードが配置されるアドレス情報を持つ。そのため、記述変更の前後で出力ヘキサが大きく異なってしまう。結果として、リンカが出力したヘキサに対する統合再評価が必要となる。
【００５９】
そこで、本発明の実施の形態１では、リンカに対して機能追加したリンカ１１３を用いることによって、配置アドレスを可能な限り変更しないリンク方法を実現する。以下では、リンカ１１３の動作を説明する。まず、配置アドレスの決定はオブジェクト内の関数毎に行われるが、この際、前回リンク時のシンボル情報を利用する。このシンボル情報の利用により、前回リンク時からサイズが変わっていない関数については前回リンク時のアドレスにそのまま配置する。前回リンク時からサイズが変わっている関数については以下の規則により配置アドレスを決定する。
（１）関数サイズが大きくなる場合、該当関数(図１４のfunc1'とfunc3')を空き領域に配置する。そして、該当関数が前回リンク時に配置されていたアドレス(図１４の修正前のfunc1とfunc3のアドレス)に該当関数へのjmp命令を埋め込む。
（２）関数サイズが不変あるいは小さくなった場合、該当関数(図１４のfunc2とfunc4')を前回リンク時に配置されていたアドレスに再配置する。
【００６０】
図１５は、本発明の実施の形態１にかかる修正前後の実行形式コードの関係を説明する図である。図１５に示すように、不良に該当しないソースプログラムは記述を変更する必要はないため、必ず前回リンク時と同じアドレスに配置される。このように可能な限り配置アドレスを変更しないリンク方法を実現することで、ヘキサの改変を最小化することができる。
【００６１】
以上のことから本発明の実施の形態１により、コンパイラ自身に不良があった場合に、コンパイラの出力オブジェクトやヘキサに対するユーザの再評価部分を最小にすることができる。同時に、コンパイラベンダによるコンパイラ修正及びコンパイラ評価を省略することによって、コンパイラベンダの負荷も最小にすることができる。結果として、コンパイラ不良判明からユーザによる不良影響の評価完了までの期間を最小化することができる。
【００６２】
＜その他の実施の形態＞
尚、特許文献１では、コンパイラ不良の修正が必要であったが、本発明の実施の形態１では、コンパイラ修正を行う必要がないため、ベンダはパッチの提供だけに注力することが出来る。従って、ベンダによるコンパイラ不良修正からコンパイラ評価の期間を省略することが可能となる。
【００６３】
また、特許文献２では、ジャンプ命令がユーザの意図しない箇所に追加されると正常に動作しない可能性が生じるため、統合再評価が必要であった。しかし、本発明の実施の形態１では、関数の先頭部分にジャンプ命令を追加するため、先頭部分へのジャンプ後の動作は単体評価通りの動作となる。つまり、出力ヘキサに対する統合再評価は、修正されたオブジェクトのサイズが増加した関数へのジャンプ命令のみに最小化することが可能となる。すなわち、図７のfunc1'とfunc3'の呼び出し部分に限定可能となる。このように、コンパイラ出力結果への影響部分を最小にすることで、ユーザプログラムの評価期間の短縮も可能となる。結果として、コンパイラ不良判明からユーザ評価完了までの期間を最小化することを実現出来る。
【００６４】
さらに、本発明は上述した実施の形態のみに限定されるものではなく、既に述べた本発明の要旨を逸脱しない範囲において種々の変更が可能であることは勿論である。例えば、上述の実施の形態にかかるコンピュータプログラムは、記録媒体に記録して提供することも可能であり、また、インターネットその他の伝送媒体を介して伝送することにより提供することも可能である。また、記憶媒体には、例えば、フレキシブルディスク、ハードディスク、磁気ディスク、光磁気ディスク、ＣＤ−ＲＯＭ（Compact Disk Read Only Memory）、ＤＶＤ（Digital Versatile Disk）、ＲＯＭ（Read Only Memory）カートリッジ、バッテリバックアップ付きＲＡＭ（Random Access Memory）メモリカートリッジ、フラッシュメモリカートリッジ、不揮発性ＲＡＭカートリッジ等が含まれる。また、通信媒体には、電話回線等の有線通信媒体、マイクロ波回線等の無線通信媒体等が含まれる。
【符号の説明】
【００６５】
１  言語処理装置
１１  実行制御部
１２  コンパイル処理部
１３  不良検出部
１４  領域情報取得部
１５  リンク処理部
１６  オブジェクトコード記憶部
１７  領域情報記憶部
２  ソースコード
３  修正ソースコード
４  実行形式コード
１０１  ＣＰＵ
１０２  ＲＡＭ
１０３  ＲＯＭ
１０４  ＩＦ部
１０５  ハードディスク
１１１  ＯＳ
１１２  コンパイラドライバ
１１３  リンカ
１１４  シンボル情報
１１５  モジュールＸ
１１６  モジュールＹ
１１６ａ  不良箇所
１１７  モジュールＺ
１１８  パッチＹ
２１  ソースファイル
２２  ソースファイル
２３  ソースファイル
２３ａ  修正ソースファイル
３１  オブジェクトファイル
３１ａ  オブジェクトファイル
３２  オブジェクトファイル
３２ａ  オブジェクトファイル
３３  オブジェクトファイル
３３ａ  オブジェクトファイル
３３ｂ  オブジェクトファイル
４０  実行形式ファイル
４０ａ  実行形式ファイル
４０ｂ  実行形式ファイル
４０ｃ  実行形式ファイル
５１  中間ファイル
５１ａ  中間ファイル
５２  中間ファイル
５２ａ  中間ファイル
５３  中間ファイル
５３ａ  中間ファイル
５３ｂ  中間ファイル
５３ｃ  中間ファイル
６０  不良情報
６１  サイズ情報
６２  アドレス情報
【図１】
2010277149.tif 000003
【図２】
2010277149.tif 000004
【図３】
2010277149.tif 000005
【図４】
2010277149.tif 000006
【図５】
2010277149.tif 000007
【図６】
2010277149.tif 000008
【図７】
2010277149.tif 000009
【図８】
2010277149.tif 000010
【図９】
2010277149.tif 000011
【図１０】
2010277149.tif 000012
【図１１】
2010277149.tif 000013
【図１２】
2010277149.tif 000014
【図１３】
2010277149.tif 000015
【図１４】
2010277149.tif 000016
【図１５】
2010277149.tif 000017