(57)【要約】【課題】コードサイズに影響を及ぼさずインクリメンタルリンクを実現するリンク装置を提供すること。【解決手段】リンク装置は、変更オブジェクトファイル特定手段１０１Ａと、非変更オブジェクトコード配置手段１０１Ｃ、変更オブジェクトコード配置手段１０１Ｄと、アドレス再計算手段１０１Ｅと、変更情報記録手段１０１Ｇとを備えている。一方、変更情報記憶領域１０２には、各オブジェクトファイルの変更時点を特定するタイムスタンプをリンク時に記録する。そして、２回目以降のリンク時には、上記タイムスタンプとオブジェクトファイルが保持するタイムスタンプとの比較により、変更されたオブジェクトファイルを特定する。変更されたオブジェクトコードをコードイメージの終端に移動し、コードの合間を詰めて配置することにより、オブジェクトコード内に予備領域を設けることなく、インクリメンタルリンクによるリンク処理時間の短縮を実現する。【選択図】図１
2006011799.tif 000002
【特許請求の範囲】
【請求項１】
複数のオブジェクトファイルをリンクして実行可能ファイルを生成するリンク装置であって、
リンク時に、個々のオブジェクトファイルの世代を特定する世代情報とオブジェクトファイルの実行可能ファイル中の位置を示す位置情報を変更情報記憶領域に記録する変更情報記録手段と、
２回目以降のリンクにおいて、前記世代情報を参照して、前回のリンク以降に変更のあった変更オブジェクトファイルを特定する変更オブジェクトファイル特定手段と、
前回生成された実行可能ファイルにおいて変更前の前記変更オブジェクトファイルに対応するオブジェクトコードより前に位置していた前方オブジェクトコードと後方に位置していた後方オブジェクトコードを前記位置情報を参照して特定して、前方オブジェクトコードの直後に後方オブジェクトコードをリンクする非変更オブジェクトコード配置手段と、
変更オブジェクトファイルを最後尾にリンクする変更オブジェクトファイル配置手段を具備することを特徴とするリンク装置。
【請求項２】
前記変更情報記憶領域を中間ファイルに確保し、前記変更情報記録手段は、前記中間ファイルに前記世代情報と前記位置情報を記録することを特徴とする請求項１記載のリンク装置。
【請求項３】
前記変更情報記憶領域を実行可能ファイルの一部に確保し、前記変更情報記録手段は、前記実行可能ファイルに前記世代情報と前記位置情報を記録することを特徴とする請求項１記載のリンク装置。
【請求項４】
前記変更情報記憶領域をメモリ上に確保し、前記変更情報記録手段は、メモリ上に前記世代情報と前記位置情報を記録することを特徴とする請求項１記載のリンク装置。
【請求項５】
前記前方オブジェクトコードについては、それ以外のオブジェクトコードへの参照アドレスを再計算してコードを修正し、前記それ以外のオブジェクトコードについては、すべての参照アドレスを再計算してコードを修正するアドレス再計算手段を具備することを特徴とする請求項１から請求項４のいずれか１項に記載のリンク装置。
【請求項６】
前記世代情報として、個々のオブジェクトファイルが変更された時点を特定するタイムスタンプを用いることを特徴とする請求項１から請求項５のいずれか１項に記載のリンク装置。
【請求項７】
複数のオブジェクトファイルをリンクして実行可能ファイルを生成するリンク方法であって、
リンク時に、個々のオブジェクトファイルの世代を特定する世代情報とオブジェクトファイルの実行可能ファイル中の位置を示す位置情報を変更情報記憶領域に記録する変更情報記録ステップと、
２回目以降のリンクにおいて、前記世代情報を参照して、前回のリンク以降に変更のあった変更オブジェクトファイルを特定する変更オブジェクトファイル特定ステップと、
前回生成された実行可能ファイルにおいて変更前の前記変更オブジェクトファイルに対応するオブジェクトコードより前に位置していた前方オブジェクトコードと後方に位置していた後方オブジェクトコードを前記位置情報を参照して特定して、前方オブジェクトコードの直後に後方オブジェクトコードをリンクする非変更オブジェクトコード配置ステップと、
変更オブジェクトファイルを最後尾にリンクする変更オブジェクトファイル配置ステップを具備することを特徴とするリンク方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプログラム開発環境におけるリンク装置に関する。特に、リンク処理時間の短縮を図るインクリメンタルリンク機能を有するリンク装置に関するものである。
【背景技術】
【０００２】
インクリメンタルリンクとは、入力オブジェクトファイルのタイムスタンプの比較により、前回のリンク時から修正・変更のあったオブジェクトファイルを特定し、実行可能ファイル内の該当オブジェクトコード部分のみを差し替えることで、リンク装置の負担を軽減し、処理時間を短縮するための手法である。このようなインクリメンタルリンクについては、たとえば、特開平９−２０４２９７号公報に開示されている。
【０００３】
図８および図９は、従来から存在する、２つの異なるインクリメンタルリンク処理によるオブジェクトコードの変化パターンを示すものである。
【０００４】
図８において、８０１〜８０３はインクリメンタルリンク処理によって出力される実行可能ファイルイメージを、８０１Ａ〜８０１Ｅ、８０２Ａ〜８０２Ｅ、８０３Ａ〜８０３Ｅは各段階の実行ファイル内のオブジェクトファイル別のコードイメージを示す。最初の実行可能ファイル（８０１）では、各オブジェクトコードに対して一定のパディング間隔が空けられる。ここでオブジェクトＣ（８０１Ｃ）に対してサイズが増加するようなコード修正が行われたとすると、パディング領域が活用され、オブジェクトＣ以外のオブジェクトについては、位置の変動がなく、オブジェクトＣに含まれる外部ラベルに対する参照箇所のコードのみを修正すれば良い。こうして実行可能ファイル（８０２）が完成する。続いて、実行可能ファイル（８０２）においてオブジェクトＢ（８０２Ｂ）が修正された場合も同様にパディング領域が活用され、それ以外のオブジェクトコードについては最小限の修正で実行可能ファイル（８０３）が生成される。
【０００５】
図９において、９０１〜９０３はインクリメンタルリンク処理によって出力される実行可能ファイルイメージを、９０１Ａ〜９０１Ｅ、９０２Ａ〜９０２Ｅ、９０３Ａ〜９０３Ｅは各段階の実行ファイル内のオブジェクトファイル別のコードイメージを示す。最初の実行可能ファイル（９０１）における、オブジェクトＤ（９０１Ｄ）に対してサイズが増加するようなコード修正が行われた場合、オブジェクトＤが元々存在した領域は維持され、新たなオブジェクトＤのコードは全オブジェクトコードの終端に配置される。これにより、オブジェクトＤ以外のオブジェクトについては、位置の変動がなく、オブジェクトＤに含まれる外部ラベルに対する参照箇所のコードのみを修正すれば良い。こうして実行可能ファイル（９０２）が完成する。続いて、実行可能ファイル（９０２）においてオブジェクトＢ（９０２Ｂ）が修正された場合も同様に、オブジェクトＢが元々存在した領域は維持され、新たなオブジェクトＢのコードは全オブジェクトコードの終端に配置される。オブジェクトＢ以外のオブジェクトコードについては最小限の修正で実行可能ファイル（９０３）が生成される。
【特許文献１】特開平９−２０４２９７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、前記従来の方式ではいずれも、変更オブジェクトのコードサイズ変化による影響を修正のなかった他のコード部分が受けないために、プログラムとは全く関係のない予備領域を実行可能ファイルのコード内に設定する必要があった。
【０００７】
このため、通常のリンク方式と比較すると必要以上のコードサイズを要するため、プログラムのコードサイズ制限が厳しい、例えば組込みマイコンプログラム開発などにおいて適用するのが難しいという課題を有していた。
【０００８】
本発明は、前記従来の課題を解決するもので、高速なリンク処理を行い、かつコードサイズの増加も抑制するインクリメンタルリンク装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
前記従来の課題を解決するために、本発明のリンク装置は、複数のオブジェクトファイルをリンクして実行可能ファイルを生成するリンク装置であって、リンク時に、個々のオブジェクトファイルの世代を特定する世代情報と当該オブジェクトファイルの実行可能ファイル中の位置を示す位置情報を変更情報記憶領域に記録する変更情報記録手段と、２回目以降のリンクにおいて、前記世代情報を参照して、前回のリンク以降に変更のあった変更オブジェクトファイルを特定する変更オブジェクトファイル特定手段と、前回生成された実行可能ファイルにおいて変更前の前記変更オブジェクトファイルに対応するオブジェクトコードより前に位置していた前方オブジェクトコードと後方に位置していた後方オブジェクトコードを前記位置情報を参照して特定して、前方オブジェクトコードの直後に後方オブジェクトコードをリンクする非変更オブジェクトコード配置手段と、変更オブジェクトファイルを最後尾にリンクする変更オブジェクトファイル配置手段を具備することを特徴としている。
【００１０】
本構成によるインクリメンタルリンクにおいては、変更オブジェクトのコードサイズの変動に応じたコード配置調整を再リンクのたびに行うため、予備コード領域は不要となる。
【００１１】
また、本発明のリンク装置は、前記変更情報記憶領域を中間ファイルに確保し、前記変更情報記録手段は、前記中間ファイルに前記タイムスタンプと前記位置情報を記録することを特徴としている。
【００１２】
本構成により、インクリメンタルリンクでない通常のリンク処理時と内容が変わらない実行可能ファイルを出力することができ、これを入力とするシミュレータやデバッガなどへの影響を抑えるという効果が得られる。
【００１３】
また、本発明のリンク装置は、前記変更情報記憶領域を実行可能ファイルの一部に確保し、前記変更情報記録手段は、前記実行可能ファイルに前記タイムスタンプと前記位置情報を記録することを特徴としている。
【００１４】
本構成により、実行可能ファイルと内容が必ず同期している変更情報を取得できるという効果が得られる。
【００１５】
また、本発明のリンク装置は、前記変更情報記憶領域をメモリ上に確保し、前記変更情報記録手段は、メモリ上に前記タイムスタンプと前記位置情報を記録することを特徴としている。
【００１６】
本構成により、実行ファイルや中間ファイルを使用する方法に比べて変更情報を高速に読み取り、更新することができ、インクリメンタルリンク処理にかかる全体の時間を短縮するという効果が得られる。
【００１７】
さらに、本発明のリンク装置は、前記前方オブジェクトコードについては、それ以外のオブジェクコードへの参照アドレスを再計算してコードを修正し、前記それ以外のオブジェクトコードについては、すべての参照アドレスを再計算してコードを修正するアドレス再計算手段を具備することを特徴としている。
【００１８】
本構成によりオブジェクトコードが参照アドレスを含む場合であっても、再計算が必要な部分についてのみ再計算を行って、実行可能ファイルを作成することができるという効果が得られる。
【００１９】
さらに、本発明のリンク装置は、前記世代情報として、個々のオブジェクトファイルが変更された時点を特定するタイムスタンプを用いることを特徴としている。
【００２０】
本構成により、前記変更情報記憶手段に記憶された個々のオブジェクトファイルのタイムスタンプと、個々のオブジェクトファイルが保持しているタイムスタンプを比較することにより、前回のリンク時以降に変更のあったオブジェクトファイルを特定することができる。
【発明の効果】
【００２１】
本発明のリンク装置によれば、実行可能ファイル内に余分なコードサイズの増加を発生させることなく、インクリメンタルリンク機能を実現することができる。
【発明を実施するための最良の形態】
【００２２】
以下本発明の実施の形態について、図面を参照しながら説明する。
【００２３】
（実施の形態１）
図１は、本発明の実施の形態１におけるリンク装置の構成を示すブロック図である。
【００２４】
本実施の形態では、変更情報記憶領域を中間ファイルとして２次記憶装置に別途、設定するものである。１０１は、本発明を実施したリンク装置でありコンピュータ上でリンク処理を行うコンピュータ・プログラム（リンカー）を稼動させることにより実現されている。１０２は変更情報記憶領域が設定された中間ファイルであり前回のリンク処理により生成されている。本実施の形態においては、オブジェクトファイルの世代情報として、タイムスタンプ情報を用いる。つまり、リンク時に個々のオブジェクトファイルが保持している変更時点を表すタイムスタンプを、変更情報記憶領域に確保する。
【００２５】
１０３は、リンク処理の対象となるオブジェクトファイル群であり、１０３Ａは前回のリンク処理から変更のあった変更オブジェクトファイルである。１０５は、今回のリンク処理によって生成される更新実行可能ファイルである。１０６は、今回のリンク処理により生成される変更情報記憶領域が確保された中間ファイルである。リンク装置１０１は、変更オブジェクトファイル特定手段１０１Ａ、オブジェクトファイル入力部１０１Ｂ、非変更オブジェクトコード配置手段１０１Ｃ、変更オブジェクトコード配置手段１０１Ｄ、アドレス再計算手段１０１Ｅ、コード修正および実行可能ファイル出力部１０１Ｆ、変更情報記録手段１０１Ｇから構成されている。リンク装置１０１は、まず、変更オブジェクトファイル特定手段１０１Ａにより、変更情報記憶領域１０２を解析し、そこに記録されている各オブジェクトのタイムスタンプ情報と、入力対象となるオブジェクトファイル群１０３に含まれる各オブジェクトファイルが保持しているタイムスタンプとを比較し、更新があったものを抽出する。オブジェクトファイルが更新されていないと、変更情報記憶領域に記録されているタイムススタンプとオブジェクトファイルが保持しているタイムスタンプは同一の時点を指しているが、更新されている場合は、中間ファイル１０２に記録されているタイムスタンプは、オブジェクトファイルが保持しているタイムスタンプより前の時点を示しているので、両者のタイムスタンプを比較することにより更新の有無を知ることができる。上記の手順で抽出されたものを、変更オブジェクトファイル１０３Ａとして特定する。なお、変更情報記憶領域１０２には、タイムスタンプではなく、オブジェクトファイルのバージョン番号を記録しておき、個々のオブジェクトファイルは、別途バージョン番号を保持する構成としてもよい。この場合は、双方のバーション番号を比較して、変更のあったオブジェクトファイルを特定することになる。
【００２６】
次に、オブジェクトファイル入力部１０１Ｂは、前記１０１Ａにより特定された変更オブジェクトファイル１０３Ａと、実行可能ファイル１０４を入力する。
【００２７】
次に、非変更オブジェクトコード配置手段１０１Ｃは、実行可能ファイル内のオブジェクトコードを、変更オブジェクトファイルの変更前のコードが元あった位置を基準に、それよりも前方に存在するものと、後方に存在するものとに分割し、前方に存在するものは元のままコードイメージの先頭から、後方に存在するものはその続きに配置する。
【００２８】
変更オブジェクトコード配置手段１０１Ｄは、変更オブジェクトファイル１０３Ａに含まれる新しいオブジェクトコードは前記の非変更オブジェクトコードの終端に配置する。
【００２９】
すべてのオブジェクトコードの配置場所が決定すると、アドレス再計算手段１０１Ｅによって各コード内のアドレス参照が解決される。非変更オブジェクトコードのうち、前記非変更オブジェクトコード配置手段１０１Ｃにおける前方オブジェクトコードではそこから外部へのアドレス参照についてのみ、再計算を行う。後方オブジェクトコードでは、外部へのアドレス参照に加えて、内部へのアドレス参照についても、配置位置の移動による差分を考慮して再計算する。また、変更オブジェクトではすべてのアドレス参照について再計算を行う。
【００３０】
こうして、配置場所確定後のオブジェクトコードの参照アドレス再計算がすべて終了した後、コード修正および実行可能ファイル出力部１０１Ｆにおいて更新された実行可能ファイル１０５が出力され、さらに、このリンク状態について変更情報記録手段１０１Ｇにより変更情報が中間ファイル１０２に書き込みがなされ、今回のリンク状態を反映した中間ファイル１０６が生成される。
【００３１】
図２は本発明のリンク装置の動作を示すフローチャートであり、ステップＳ２０１からステップＳ２１２までで構成されている。
【００３２】
図３は実行可能ファイル内のオブジェクトコードイメージ図であり、３０１はリンク装置１０１の入力となる実行可能ファイルの、３０２はリンク装置１０１の出力となる実行可能ファイルのオブジェクトコードイメージを示す。また、３０１Ａ〜３０１Ｅ、３０２Ａ〜３０２Ｅはそれぞれのオブジェクトコードの入力オブジェクトファイル単位での区切りを表している。すなわち、オブジェクトコードＡ〜Ｅは、それぞれ別のファイルに格納されている。図３において、オブジェクトコードＣが、変更オブジェクトコードである。
【００３３】
図４は、図３から引き続き、リンク装置が扱う実行可能ファイルのコードイメージを示す図である。図４において、４０１はリンク装置の入力となる実行可能ファイルの、４０２はリンク装置の出力となる実行可能ファイルのオブジェクトコードイメージを示す。また、４０１Ａ〜４０１Ｅ、４０２Ａ〜４０２Ｅはそれぞれのオブジェクトコードの入力オブジェクトファイル単位での区切りを表している。図４においては、オブジェクトコードＢが、変更オブジェクトコードである。
【００３４】
図５は、図４から引き続き、リンク装置が扱う実行可能ファイルのコードイメージを示す図である。図５において、５０１はリンク装置の入力となる実行可能ファイルの、５０２はリンク装置の出力となる実行可能ファイルのオブジェクトコードイメージを示す。また、５０１Ａ〜５０１Ｅ、５０２Ａ〜５０２Ｅはそれぞれのオブジェクトコードの入力オブジェクトファイル単位での区切りを表している。図５においてはオブジェクトコードＢが、変更オブジェクトコードである。
【００３５】
図６は本実施の形態におけるリンク装置の入出力となる変更情報記憶領域の記録形式を示す図である。
【００３６】
変更情報記憶領域６０１は、管理情報部６０２とオブジェクトファイル別リンク情報部６０３から構成される。
【００３７】
管理情報部は識別情報６０２Ａ、ブジェクトファイル別リンク情報へのファイル内オフセット６０２Ｂ、入力オブジェクトファイル数６０２Ｃの各メンバで構成される。識別情報には、この領域がインクリメンタルリンクに使用される変更情報記憶領域であることを示す識別子が格納される。オブジェクトファイル別リンク情報への変更情報記憶領域内オフセットは、オブジェクトファイル別リンク情報の変更情報記憶領域内における開始位置を示し、入力オブジェクトファイル数は変更情報記憶領域と同期して生成された実行可能ファイルに含まれる入力オブジェクトファイルの数を示す。リンク装置はこれらの情報を基に、オブジェクトファイル別リンク情報の各エントリへのアクセスを行う。
【００３８】
オブジェクトファイル別リンク情報は、１つの情報エントリがオブジェクトファイル名６０３Ａ、実行ファイル内オフセット情報６０３Ｂ、タイムスタンプ情報６０３Ｃの要素からなる、入力オブジェクトファイルに対応する数の情報エントリによって構成される。オブジェクトファイル名は各情報エントリと入力オブジェクトファイルとを対応付けるために利用される。実行ファイル内オフセット情報は各入力オブジェクトファイルのオブジェクトコードが実行可能ファイル内のどの位置に保持されているかを示し、リンク装置はこれらの情報を基に、変更／非変更オブジェクトコードイメージの分割および、更新実行可能ファイル生成に向けての再構成を行う。また、タイムスタンプ情報には各入力オブジェクトファイルの作成／更新された時間が格納され、変更オブジェクトファイル特定のために入力対象オブジェクトファイル群の全ファイルのタイムスタンプ情報との比較が行われる。
【００３９】
次に、図２のフローチャートを用いて本発明のリンク装置の動作を説明する。本発明のリンク装置は最初に、参照可能な変更情報記憶領域が存在するかどうかを確認する（ステップＳ２０１）。存在しなければ、最初のリンク処理であるのでインクリメンタルではなくすべてのオブジェクトファイルを入力してその順序で配置する通常のリンク処理を行い（ステップＳ２０９、Ｓ２１０）、実行可能ファイルの出力（ステップＳ２１１）と、リンク処理の内容を記す変更情報領域の出力（ステップＳ２１２）を行う。
【００４０】
変更情報記憶領域が存在すればこれを入力し（ステップＳ２０２）、タイムスタンプの比較によって変更オブジェクトファイルの存在を確認する（ステップＳ２０３）。変更オブジェクトが存在しない場合は処理を終了する。以上のステップＳ２０２およびステップＳ２０３は、変更オブジェクトファイル特定手段１０１Ａが行う処理である。
【００４１】
リンク装置は変更情報記憶領域６０１を入力すると、まず管理情報６０２を読み取る。識別情報６０２Ａからそのファイルがインクリメンタルリンク用の情報領域であることを確認すると、オブジェクトファイル別リンク情報への上法領域内オフセット６０２Ｂが指す位置まで読み取り位置を進める。以降は、入力オブジェクトファイル総数６０２Ｃに従い、オブジェクトファイル別リンク情報６０３を１エントリずつ読み進めてゆく。リンク装置はオブジェクトファイル別リンク情報の１エントリを読み込むと、オブジェクトファイル名６０３Ａと同名のファイルをオブジェクトファイル群１０３から検索し、該当するオブジェクトファイルについてそのタイムスタンプを、同エントリ内のタイムスタンプ情報６０３Ｃと比較する。管理情報に含まれる入力オブジェクトファイル総数６０２Ｃに基づいてオブジェクトファイル別リンク情報に含まれるすべての情報エントリについて同様の比較を行い、タイムスタンプの値が更新されているオブジェクトファイルのみ、変更オブジェクトファイルと特定し、リンク装置への再入力を行う。
【００４２】
変更オブジェクトファイルが存在する場合、これと前回のリンク時に生成された実行可能ファイルを入力する。（ステップＳ２０４、Ｓ２０５）以上のステップＳ２０４およびステップＳ２０５の処理は、オブジェクトファイル入力部が行う処理である。
【００４３】
次に、実行ファイル内における、変更オブジェクトよりも前方に存在するオブジェクトコードの配置（ステップＳ２０６）それに続いて変更オブジェクトよりも後方に存在するオブジェクトコードの配置（ステップＳ２０７）非変更オブジェクトコード配置手段１０１Ｃにより行なわれる。さらに変更オブジェクトファイルに含まれるオブジェクトコードの配置（ステップＳ２０８）が、変更オブジェクトコード配置手段１０１Ｄにより行なわれる。
【００４４】
その後、アドレス再計算手段１０１Ｅにより、アドレス再計算を行う（ステップＳ２１０）。すなわち、オブジェクトコードに含まれるすべてのアドレス参照を修正するため、オブジェクトコード配置変更後の新たなアドレスを再計算するものである。まず非変更オブジェクトコードのうち、ステップＳ２０６で配置されたオブジェクトコードについてそこから外部への参照アドレスを計算する。次にステップＳ２０７で配置されたオブジェクトコードについてそこから外部への参照アドレスと、自オブジェクトコード内の参照アドレスを計算する。最後に、変更オブジェクトコードについてすべての参照アドレスの計算を行う。いずれの計算処理も、オブジェクトコードに付随する再配置情報が保持するシンボル情報（参照先コードに設定されている）のアドレスを利用して行う。
【００４５】
コード修正および実行可能ファイル出力部１０１Ｆによるコード修正および実行可能ファイルの出力処理（ステップＳ２１１）、さらに変更情報記憶領域の出力（ステップＳ２１２）へと移る。
【００４６】
実行可能オブジェクトファイルのコードイメージについて、実際の流れを図３〜５により説明する。
【００４７】
まず図３において、オブジェクトコードＣ（３０１Ｃ）が変更オブジェクトファイルに含まれるコード情報であったとすると、それよりも前方にあるコード（３０１Ａ、３０１Ｂ）は出力時もオブジェクトコードイメージの先頭から配置される（３０２Ａ、３０２Ｂ）。
【００４８】
次に、オブジェクトコードＣよりも後方にあるコード（３０１Ｄ、３０１Ｅ）はオブジェクトコードＡ、Ｂの続きに配置される（３０２Ｄ、３０２Ｅ）。
【００４９】
最後に、オブジェクトコードＣの修正後の内容が配置され（３０２Ｃ）、新たな実行可能ファイルのオブジェクトコードイメージが完成する。
【００５０】
引き続き、図４において、オブジェクトコードＢ（４０１Ｂ）が変更オブジェクトファイルに含まれるコード情報であったとすると、それよりも前方にあるコード（４０１Ａ）は出力時もオブジェクトコードイメージの先頭から配置される（４０２Ａ）。
【００５１】
次に、オブジェクトコードＢよりも後方にあるコード（４０１Ｄ、４０１Ｅ、４０１Ｃ）はオブジェクトコードＡの続きに配置される（４０２Ｄ、４０２Ｅ、４０２Ｃ）。
【００５２】
最後に、オブジェクトコードＢの修正後の内容が配置され（４０２Ｂ）、新たな実行可能ファイルのオブジェクトコードイメージが完成する。
【００５３】
さらに図５において、オブジェクトコードＢ（５０１Ｂ）が変更オブジェクトファイルに含まれるコード情報であったとすると、それよりも前方にあるコード（５０１Ａ、５０１Ｄ、５０１Ｅ、５０１Ｃ）は出力時もオブジェクトコードイメージの先頭から配置される（５０２Ａ、５０２Ｄ、５０２Ｅ、５０２Ｃ）。
【００５４】
次に、オブジェクトコードＢの修正後の内容が配置され（５０２Ｂ）、新たな実行可能ファイルのオブジェクトコードイメージが完成する。
【００５５】
このように、変更のあったコードを再リンクのたびに配置イメージの終端に配置することで、品質の高いもの（変更の頻度が低いもの）ほどコードイメージの前方へ、品質の低いもの（変更の頻度が高いもの）ほどコードイメージの後方へと移動していく。非変更オブジェクトコードのうち、実行可能ファイル中のコードイメージにおいて変更オブジェクトを境に前方にあるコードはそのコード内のアドレス参照についての計算が不要な分、後方にあるコードや変更オブジェクトコードに比べてアドレス再計算の数が少ないため、再リンク処理が繰り返され、特に同一のオブジェクトコードが修正されるほどに前記の前方オブジェクトコードの範囲が広がり、アドレス再計算の総数が減少してゆく。
【００５６】
このため、本発明のリンク装置はリンクを繰り返すほどに処理時間を短縮する効果を持ち合わせている。
【００５７】
変更情報記憶領域６０１は、インクリメンタルリンクが行われるたびに内容が更新され、そのつど出力される実行可能ファイルのリンク状態を記録する。リンク装置は変更情報記憶領域を入力すると、管理情報６０２を解析後、入力オブジェクトファイル数６０２Ｃに対応する数だけ、オブジェクトファイル別リンク情報６０３の内容を読み取り、オブジェクトファイル名６０３Ａに対応するオブジェクトファイルのタイムスタンプをタイムスタンプ情報６０３Ｃと比較、これより情報が新しいものを変更オブジェクトファイルとして特定する。入力実行可能ファイル内におけるオブジェクトコードの非変更／変更分割については、各オブジェクトファイル単位での実行ファイル内オフセット情報６０３Ｂを用いる。その後、新しい配置場所の決定後、すべてのオブジェクトについての実行ファイル内オフセット情報の更新と、変更オブジェクトファイルに対するタイムスタンプ情報の更新を行い、これを変更情報記憶領域へ上書きする。
【００５８】
本実施の形態のリンク装置においては、変更オブジェクトのコードサイズの変動に応じたコード配置調整を再リンクのたびに行うため、予備コード領域は不要となる。
【００５９】
また、非インクリメンタル処理時と比較して、出力する実行可能ファイルの内容に差異がなく、これを入力とするシミュレータやデバッガなどへの影響を考慮しなくて良い。
【００６０】
尚、変更情報記憶領域を特定のメモリ上に設定してもよい。このメモリ領域は、ＯＳまたはそれと同等の機能をもつメモリ管理プログラムにより、インクリメンタルリンク処理が繰り返される間、継続的に保持される。これにより、さらに高速なリンク処理を行うことが可能である。
【００６１】
（実施の形態２）
本発明の実施の形態２においては、変更情報記憶領域を実行可能ファイルの内部に設定するものである。これにより、別途、中間ファイルを生成する必要がなく、実行可能ファイルと内容が必ず同期している変更情報を取得できるという効果が得られる。他の構成は実施の形態１と同様であり、変更オブジェクトのコードサイズの変動に応じたコード配置調整を再リンクのたびに行うため、予備コード領域は不要となるという効果も同様である。
【００６２】
図７は変更情報記憶領域を含む実行可能ファイルの構成図である。７０１は実行可能ファイルの全体像、７０２は実行可能ファイル内部の管理情報、７０３は通常のリンク処理で生成される実行可能ファイルイメージ、７０４はインクリメンタルリンク処理に使用される変更情報記憶領域を示す。また、７０２Ａはこのファイルが実行可能ファイルであることを示す識別情報、７０２Ｂは前回の実行可能ファイルイメージを示す領域先頭へのファイル内オフセット、７０２Ｃは変更情報領域先頭へのファイル内オフセットを示す。
【００６３】
この時、本発明のリンク装置は実行可能ファイル７０１を入力して管理情報７０２を読み込む。これに含まれるファイル内オフセット情報７０２Ｃから変更情報記憶領域７０４を検索してその内容を取得し、前回のリンク時から変更のあったオブジェクトファイルと、ファイル内オフセット情報７０２Ｂにより参照した前回の実行可能ファイルイメージ７０３を基に新たなオブジェクト配置イメージと更新した変更情報記憶領域を用いて実行可能ファイルを再構築する。
【産業上の利用可能性】
【００６４】
本発明にかかるリンク装置は、コードサイズに悪影響を与えないインクリメンタルリンク機能を有し、コードサイズの制約が厳しいプログラム開発を行う場合に有用である。
【図面の簡単な説明】
【００６５】
【図１】本発明の実施の形態１におけるリンク装置の構成を示すブロック図
【図２】本発明の実施の形態１におけるリンク装置の動作を示すフローチャート
【図３】本発明の実施の形態１におけるリンク装置が扱う実行可能ファイルのコードイメージ（１）を示す図
【図４】本発明の実施の形態１リンク装置が扱う実行可能ファイルのコードイメージ（２）を示す図
【図５】本発明の実施の形態１リンク装置が扱う実行可能ファイルのコードイメージ（３）を示す図
【図６】本発明の実施の形態１におけるリンク装置が制御する変更情報記憶領域の構成図
【図７】本発明の実施の形態２におけるリンク装置が制御する実行可能ファイルの構成図
【図８】従来のリンク装置による実行可能ファイルのコード出力の一例を示す図
【図９】従来のリンク装置による実行可能ファイルのコード出力の一例を示す図
【符号の説明】
【００６６】
１０１    リンク装置
１０１Ｇ    変更情報記録手段
１０１Ａ    変更オブジェクトファイル特定手段
１０１Ｃ    非変更オブジェクトコード配置手段
１０１Ｄ    変更オブジェクトコード配置手段
１０１Ｅ    アドレス再計算手段
１０２    変更情報記憶領域が確保された中間ファイル
１０３    オブジェクトファイル
１０４    実行可能ファイル
１０５    更新された実行可能ファイル
１０６    更新された変更情報記憶領域が確保された中間ファイル
【図１】
2006011799.tif 000003
【図２】
2006011799.tif 000004
【図３】
2006011799.tif 000005
【図４】
2006011799.tif 000006
【図５】
2006011799.tif 000007
【図６】
2006011799.tif 000008
【図７】
2006011799.tif 000009
【図８】
2006011799.tif 000010
【図９】
2006011799.tif 000011