(57)【特許請求の範囲】
【請求項１】
記憶媒体に固定されたコンピュータ実行可能な実行情報に含まれる呼び出し対象の識別情報と、その前記記憶媒体内での格納位置とを関連づけて記憶する記憶手段と、
前記実行情報に含まれる呼び出し対象を呼び出す処理命令を含む追加実行可能情報を生成する生成手段と、
前記実行情報の実行前にコンピュータにより実行される事前実行情報であって、前記実行情報によって呼び出される呼び出し対象に対応する呼び出し対象が、前記追加実行可能情報に含まれる場合に、前記実行情報を書き換えて、前記追加実行可能情報に含まれる、対応する呼び出し対象を呼び出すよう設定させる事前実行情報を生成する事前実行情報生成手段と、を有し、
前記生成手段が、
前記記憶手段に記憶された情報を参照し、前記生成する追加実行可能情報に、前記実行情報内の呼び出し対象を呼び出す処理命令があるときに、当該処理命令で呼び出される呼び出し対象を呼び出す呼び出し命令要素を生成し、前記処理命令を、対応する前記呼び出し命令要素の格納位置を呼び出す命令に書き換えて、前記呼び出し命令要素とともに出力する追加実行可能情報生成装置。
【請求項２】
コンピュータを、
記憶媒体に固定されたコンピュータ実行可能な実行情報に含まれる呼び出し対象の識別情報と、その前記記憶媒体内での格納位置とを関連づけて記憶する記憶手段と、
前記実行情報に含まれる呼び出し対象を呼び出す処理命令を含む追加実行可能情報を生成する生成手段と、
前記実行情報の実行前にコンピュータにより実行される事前実行情報であって、前記実行情報によって呼び出される呼び出し対象に対応する呼び出し対象が、前記追加実行可能情報に含まれる場合に、前記実行情報を書き換えて、前記追加実行可能情報に含まれる、対応する呼び出し対象を呼び出すよう設定させる事前実行情報を生成する事前実行情報生成手段と、として機能させ、
前記生成手段として機能させる際に、前記記憶手段に記憶された情報を参照し、前記生成する追加実行可能情報に、前記実行情報内の呼び出し対象を呼び出す処理命令があるときに、当該処理命令で呼び出される呼び出し対象を呼び出す呼び出し命令要素を生成し、前記処理命令を、対応する前記呼び出し命令要素の格納位置を呼び出す命令に書き換えて、前記呼び出し命令要素とともに出力させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、追加実行可能情報生成装置、情報処理装置、及びプログラムに関する。
【背景技術】
【０００２】
ソフトウェアを細分化してモジュールを設定して、モジュール間にまたがってシンボル参照する関係を抽出する。そしてモジュール間参照関係にある被参照モジュールにおいて、他モジュールからシンボル参照される受け入れ参照アドレスを定めたテーブルを定め、かつ受け入れ参照アドレスと自モジュール内のシンボル参照先の実アドレスとを結びつけるベクターテーブル作成部と、他モジュールからの被参照アドレスをベクタテーブルの受け入れ参照アドレスに書き換えるベクタテーブル・シンボル情報作成部とを備えた組み込みソフトウェア開発装置が特許文献１に開示されている。
【特許文献１】特開２００４−１９２６０４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
モジュール内のシンボル参照にかかる負荷を軽減するべく、組み込みソフトウェアではシンボル参照を固定されたアドレス情報で行うもの（絶対アドレスオブジェクトコード）が一般的である。しかし、絶対アドレスオブジェクトコードとする場合、その一部のモジュールに修正を行う場合にも、すべてのモジュールを再度リンクし、当該リンク後のオブジェクトコード全体を記憶媒体に格納してテストを行うなどの必要がある。
【課題を解決するための手段】
【０００４】
請求項１記載の発明は、追加実行可能情報生成装置であって、記憶媒体に固定されたコンピュータ実行可能な実行情報に含まれる呼び出し対象の識別情報と、その前記記憶媒体内での格納位置とを関連づけて記憶する記憶手段と、前記実行情報に含まれる呼び出し対象を呼び出す処理命令を含む追加実行可能情報を生成する生成手段と、前記実行情報の実行前にコンピュータにより実行される事前実行情報であって、前記実行情報によって呼び出される呼び出し対象に対応する呼び出し対象が、前記追加実行可能情報に含まれる場合に、前記実行情報を書き換えて、前記追加実行可能情報に含まれる、対応する呼び出し対象を呼び出すよう設定させる事前実行情報を生成する事前実行情報生成手段と、を有し、前記生成手段が、前記記憶手段に記憶された情報を参照し、前記生成する追加実行可能情報に、前記実行情報内の呼び出し対象を呼び出す処理命令があるときに、当該処理命令で呼び出される呼び出し対象を呼び出す呼び出し命令要素を生成し、前記処理命令を、対応する前記呼び出し命令要素の格納位置を呼び出す命令に書き換えて、前記呼び出し命令要素とともに出力することとしたものである。
【０００５】
請求項２記載の発明は、プログラムであって、コンピュータを、記憶媒体に固定されたコンピュータ実行可能な実行情報に含まれる呼び出し対象の識別情報と、その前記記憶媒体内での格納位置とを関連づけて記憶する記憶手段と、前記実行情報に含まれる呼び出し対象を呼び出す処理命令を含む追加実行可能情報を生成する生成手段と、前記実行情報の実行前にコンピュータにより実行される事前実行情報であって、前記実行情報によって呼び出される呼び出し対象に対応する呼び出し対象が、前記追加実行可能情報に含まれる場合に、前記実行情報を書き換えて、前記追加実行可能情報に含まれる、対応する呼び出し対象を呼び出すよう設定させる事前実行情報を生成する事前実行情報生成手段と、として機能させ、前記生成手段として機能させる際に、前記記憶手段に記憶された情報を参照し、前記生成する追加実行可能情報に、前記実行情報内の呼び出し対象を呼び出す処理命令があるときに、当該処理命令で呼び出される呼び出し対象を呼び出す呼び出し命令要素を生成し、前記処理命令を、対応する前記呼び出し命令要素の格納位置を呼び出す命令に書き換えて、前記呼び出し命令要素とともに出力させることとしたものである。
【発明の効果】
【０００９】
請求項１，５記載の発明によると、実行情報の一部のモジュールに修正を行う場合にも、当該修正したモジュールから既に記憶媒体に格納された実行情報の他のモジュール内の呼び出し対象へのアドレスが設定され、すべてのモジュールを再度リンクする必要がなく、当該リンク後のオブジェクトコード全体を記憶媒体に格納しなおす必要もない。
【発明を実施するための最良の形態】
【００１３】
本発明の実施の形態について図面を参照しながら説明する。本発明の実施の形態に係る追加実行可能情報生成装置１を図１に例示する。追加実行可能情報生成装置１は、図１に例示するように、制御部１１と、記憶部１２と、操作部１３と、出力部１４とを含んで構成される。この追加実行可能情報生成装置１は、また、ディスプレイ等の表示デバイスを含んでも構わない。
【００１４】
制御部１１は、ＣＰＵ（Central Processing Unit）等のプログラム制御デバイスである。この制御部１１は、記憶部１２に格納されているプログラムに従って動作する。この制御部１１は、プログラムのソースコードをコンパイルしてバイナリコードを生成し、またこのバイナリコードをリンクしてオブジェクトコードを生成して出力する。コンパイルの対象となるソースコードは、記憶部１２に格納されており、利用者（プログラマ）は、必要に応じて、ソースコードを書き換える。
【００１５】
本実施の形態の追加実行可能情報生成装置１は、複数のモジュールに分けて開発されたソースコードを処理の対象とする。各モジュールのソースコードは個別に生成されるが、相互に内部の関数や変数等を呼び出す。呼び出しの際には、呼び出しの対象である関数や変数などの格納先アドレス（記憶媒体上の格納位置を表す情報）を用いる。すなわち呼び出しの対象が関数であれば、格納先アドレスから格納されている命令列を読みだして処理する。また呼び出しの対象が変数であれば、格納先アドレスに保持されたデータを読み出す。図２に一般的なソースコードのコンパイルからリンクまでの処理の過程を示す。
【００１６】
ソースコード内には、例えば他のモジュールのソースコードに含まれる関数の呼び出し指令（Ｃ）が含まれる。追加実行可能情報生成装置１がこのソースコードをコンパイルすると、この指令により呼び出されるべき関数の識別情報（例えば関数名を含む情報）が生成される（Ｄ）。
【００１７】
さらに各コンパイル結果をリンクする指示が行われると、追加実行可能情報生成装置１は、呼び出されるべき関数の識別情報を参照し、他のモジュールのコンパイル結果に含まれる、当該識別情報で識別される関数の格納先アドレスを取得する。そして、当該取得した格納先アドレスを呼び出し指令に設定し（Ｅ）、処理を完了する。変数等についても同様に処理が行われる。
【００１８】
本実施の形態の追加実行可能情報生成装置１は、事前にコンパイル及びリンクが行われ、記憶媒体に固定されているコンピュータ実行可能な実行情報の元となったソースコード（オリジナルコード）を利用して処理を行う。当該オリジナルコードの一部のモジュールのソースコードに改変が行われたときに、本実施の形態の追加実行可能情報生成装置１の制御部１１は、コンパイル及びリンクの指示に従い、次のように処理する。
【００１９】
すなわち制御部１１は、改変されたソースコードをコンパイルする。そして制御部１１は、リンクの処理として、呼び出されるべき他のモジュールの関数や変数（呼び出し対象）の識別情報がコンパイル結果に含まれている場合、既にリンクされ、格納先アドレスが決定されている、当該呼び出し対象の格納先アドレスの情報を取得する。制御部１１は、当該格納先アドレスを含む追加実行可能情報を出力する。この制御部１１の処理の内容については、後にさらに詳しく述べる。
【００２０】
記憶部１２は、ＲＡＭ（Random Access Memory）などを含んで構成されている。この記憶部１２には、制御部１１によって実行されるプログラムが保持される。このプログラムは、コンピュータ可読な記録媒体に格納されて提供され、この記憶部１２に複写されたものであってもよい。また本実施の形態では、この記憶部１２に既に格納されている実行可能情報に含まれる、呼び出し対象の識別情報と、格納先アドレスとを関連づけたテーブル（マップ情報）が保持される（図３）。このテーブルは、制御部１１等が実行可能情報とともに生成し、記憶部１２に格納したものであってもよい。さらに記憶部１２は、制御部１１のワークメモリとしても動作する。
【００２１】
操作部１３は、マウスやキーボードなどを含む。この操作部１３は、利用者の操作の内容を制御部１１に出力する。利用者はこの操作部１３を操作して、ソースコードの修正や、コンパイル／リンクの指示などを行う。
【００２２】
出力部１４は、ディスプレイやネットワークインタフェース等であり、制御部１１から入力される指示に従って情報を出力する。また本実施の形態の出力部１４は、制御部１１から入力される指示に従い、記憶媒体に対して、実行可能情報や追加実行可能情報を記録するデバイスを含む。
【００２３】
情報処理装置２は、図４に例示するように、記憶媒体読み取り部２１と、制御部２２と、記憶部２３と、インタフェース部２４と、機能部２５とを含んで構成される。ここに記憶媒体読み取り部２１は、制御部２２からの指示に従ってフラッシュＲＯＭ（Read Only Memory）等の記憶媒体に格納された実行可能情報や、追加実行可能情報を読み出す。
【００２４】
制御部２２は、記憶媒体に格納されている実行可能情報や追加実行可能情報を記憶部２３に複写させる。そして当該記憶部２３に格納した実行可能情報や追加実行可能情報に従って処理を遂行する。なお、この制御部２２は、記憶媒体に格納されている実行可能情報の複写に先立って、事前実行情報（パッチ）として指定されたプログラムに従って前処理を実行してもよい。
【００２５】
記憶部２３は、ＲＡＭなどの記憶素子を含んで構成される。この記憶部２３には、記憶媒体から読み出された実行可能情報や、追加実行可能情報が保持される。また、この記憶部２３は、制御部２２のワークメモリとしても動作する。
【００２６】
インタフェース部２４は、制御部２２から入力される指示に従って、機能部２５に対して指示を出力する。また、このインタフェース部２４は、機能部２５から入力される情報を制御部２２に出力する。例えば機能部２５は、プリンタエンジンなどであり、制御部２２は機能部２５に対し、このインタフェース部２４を介して画像形成の制御の指示を出力する。
【００２７】
次に、本実施の形態の制御部１１の動作について述べる。ここでは制御部１１が、記憶媒体に格納する実行可能情報を生成する処理を行うものとする。制御部１１は、実行可能情報を生成するにあたり、実行可能情報に含めるべきモジュールのソースコードをそれぞれコンパイルし、各コンパイル結果をリンクして、実行可能情報を生成する。既に述べたように、この実行可能情報においては、モジュール間で呼び出し対象となる関数や変数について、その格納先アドレスが明示（ハードコード）されている。例えば図５に示すように、第１モジュールＡと、第２モジュールＢとを含む実行可能情報を用い、第１モジュールＡに含まれる関数 funcA1( ) において、第２モジュールＢに含まれる関数 funcB1( ) を呼び出しているものとして説明すると、次のようになる。
【００２８】
ソースコードの段階では、funcA1( ) 内には、funcB1( ) がその識別情報（例えば funcB1( ) の名称そのもの）を用いて呼び出しの指示が記述されている。制御部１１がこれをコンパイルした後、リンク及び記憶媒体への書き込む段階で、関数 funcB1( ) の実行可能情報部分の格納先アドレス addrB1 を取得する。そして制御部１１は、funcA1( ) 内での funcB1( ) の呼び出しを、その格納アドレス addrB1 の呼び出しに書き換える。
【００２９】
また本実施の形態では、各モジュールでの呼び出し対象の識別情報（シンボル名）と、その格納先アドレスとを関連づけて記憶部１２に格納する。上述の例においては、呼び出し対象である関数 funcB1( ) の識別情報と、その格納先アドレス addrB1 とを関連づけて、図３に例示したようなマップ情報として記憶部１２に格納する。
【００３０】
次に、追加実行可能情報を生成する際の制御部１１の動作について説明する。制御部１１は、利用者が一部のモジュールのソースコードを書き換えて、コンパイル／リンクの指示を行うと、次の図６に例示する処理を実行する。
【００３１】
すなわち制御部１１は、書き換えられたモジュールのソースコードをコンパイルする（Ｓ１）。以下の説明では利用者によってソースコードが書き換えられたモジュールを追加対象モジュールと呼び、ソースコードが書き換えられていないモジュール（そのままとするモジュール）を、既存モジュールと呼ぶ。
【００３２】
制御部１１は、追加対象モジュールから呼び出される呼び出し対象を検索する（Ｓ２）。そして制御部１１は、記憶部１２に保持されているマップ情報を参照して、検索の結果見いだされた各呼び出し対象の識別情報に関連づけられた各格納先アドレスを取得する（Ｓ３）。
【００３３】
制御部１１は、リンクの指示とともに、追加対象モジュールについてのコンパイル結果において、呼び出し対象の呼び出し指示を、処理Ｓ３で取得した、対応する格納先アドレスの呼び出し指示に書き換える（Ｓ４）。制御部１１は、このようにして生成した追加実行可能情報を、書き換え前のモジュールに基づく実行可能情報が記録されている記憶媒体に追記して格納する（Ｓ５）。また制御部１１は、各追加対象モジュールでの呼び出し対象の識別情報（シンボル名）と、その格納先アドレス（コンパイル結果におけるデータ先頭からの相対的なアドレス、すなわちオフセット値でよい）とを関連づけて、追加実行可能情報に含めて記憶部１２に格納しておく。
【００３４】
このとき記憶媒体には、図７（ａ）に例示するように、書き換え前の実行可能情報（ＥＸ）と追加実行可能情報（ＡＥＸ）とが格納され、追加実行可能情報内から実行可能情報に含まれる関数や、実行可能情報で用いられる変数等が、マップ情報に基づくアドレス情報に従って呼び出されることになる。
【００３５】
さらに本実施の形態では、記憶部２３に複写された実行可能情報において、書き換え前のモジュール内の関数や変数等を呼び出す指令が含まれているときに、当該指令を書き換えて、書き換え後のモジュール内の関数や変数を呼び出すようにしてもよい。
【００３６】
このために制御部１１は、追加対象モジュールをコンパイル／リンクするときに、図８に示すように、追加対象モジュールにおいて定義されている呼び出し対象（関数や変数等）に対応する、書き換え前のモジュールの呼び出し対象の格納先アドレスをマップ情報から取得する（Ｓ１１）。
【００３７】
また制御部１１は、書き換え後の呼び出し対象の格納アドレスを取得するべき旨の指示を書き出し（Ｓ１２）、さらに書き換え前のモジュールでの呼び出し対象の格納先アドレスを、書き換え後の呼び出し対象の格納アドレスへ書き換える指示を含めて事前実行情報を生成する（Ｓ１３）。そして制御部１１は、この事前実行情報を追加実行可能情報とともに記憶媒体に書き込む（Ｓ１４）。
【００３８】
既に説明したように、情報処理装置２の制御部２２は、事前実行情報として指定されたプログラムがあれば、記憶媒体に格納された実行可能情報や追加実行可能情報を記憶部２３に複写してから、当該事前実行情報を実行する。これにより制御部２２は、書き換えられていないモジュールに対応する実行可能情報内で、追加実行可能情報に含まれる呼び出し対象を呼び出すべき部分について、追加実行可能情報に含まれる呼び出し対象の格納先アドレスを設定する。従って記憶媒体に格納された実行可能情報から追加実行可能情報に定義された関数や変数などの呼び出し対象が呼び出されるようになる（図７（ｂ））。
【００３９】
なお、この処理において、処理Ｓ１１では、追加対象モジュールにおいて定義されている関数や変数のすべてについて、格納先アドレスを変更する処理命令を事前実行情報に含める必要はない。すなわち、記憶媒体に格納された実行可能情報、またはその元となったソースコードなどを参照して、追加対象モジュールにおいて定義されている関数や変数等のうち、実際に呼び出されている呼び出し対象についてのみ、格納先アドレスを変更する処理命令を事前実行情報に含めてもよい。
【００４０】
また、追加対象モジュールのソースコード等において、外部のモジュールなどから呼び出されるインタフェースとして規定された呼び出し対象が見いだされる場合は、追加対象モジュールにおいて定義されている関数や変数等のうち、当該呼び出されるインタフェースとして規定された呼び出し対象についてのみ、格納先アドレスを変更する処理命令を事前実行情報に含めてもよい。ここでインタフェースとしての規定された呼び出し対象とは、例えばＣ言語であればextern宣言が行われている変数や関数であるとしてもよいし、Ｃ＋＋言語であればpublicの指定が行われているクラスメソッドやインスタンスであってもよい。さらに、書き換えられたモジュールにおいて定義されるグローバル変数があれば、当該グローバル変数も、その格納先アドレスを書き換え前のモジュールにおける格納先アドレスから、書き換え後のモジュールにおける格納先アドレスへ変更してもよい。
【００４１】
本実施の形態の追加実行可能情報生成装置１及び情報処理装置２は、上述の構成を備えるので、次のように動作する。
【００４２】
以下では、説明のために、図９に例示するように、モジュールＡ，Ｂの２つのモジュールを含む実行可能情報を生成するものとする。ここでモジュールＡには、関数 funcA1( ) と、funcA2( ) とが少なくとも定義されている。また、関数 funcA1( ) 内では、モジュールＢの関数 funcB1( ) を呼び出し対象として呼び出す命令（図では、call funcB1( )と記載している）が含まれる。
【００４３】
また、モジュールＢには、関数 funcB1( ) と、funcB2( ) とが少なくとも定義されている。また、関数 funcB2( ) 内では、モジュールＡの関数 funcA2( ) を呼び出し対象として呼び出す命令（図では、call funcA2( )と記載している）が含まれる。
【００４４】
これらのモジュールについてコンパイル及びリンクの指示が行われると、追加実行可能情報生成装置１は、各呼び出し対象の格納先アドレスが規定された実行可能情報を生成する（Ｓ２１）とともに、呼び出し対象を識別する情報（シンボル）と、その格納先アドレスとを関連づけたマップ情報を生成する（Ｓ２２）。
【００４５】
ここで実行可能情報は、記憶媒体に格納されて情報処理装置２での実行処理に供される。この実行可能情報では、モジュールＡ内の関数 funcA1( ) に相当する処理命令列において、モジュールＢの関数 funcB1( ) を呼び出す命令が含まれているが、当該命令はその呼び出し対象である関数 funcB1( ) に相当する処理命令列の格納先アドレス（addrB1）を呼び出す命令に設定されている。また、モジュールＢ内の関数 funcB2( ) に相当する処理命令列において、モジュールＡの関数 funcA2( ) を呼び出す命令が含まれているが、当該命令はその呼び出し対象である関数 funcA2( ) に相当する処理命令列の格納先アドレス（addrA2）を呼び出す命令に設定されている。
【００４６】
従って情報処理装置２では、例えば関数 funcA1( ) に相当する処理命令列を処理しているときに、モジュールＢ内の関数 funcB1( ) を呼び出す指示として、格納先アドレス addrB1 を呼び出すべき命令に出会うと、addrB1 以下に格納されている命令列の処理を行うこととなる。
【００４７】
一方、利用者が、モジュールＡを書き換えてモジュールＡ′を生成する。このモジュールＡ′では、書き換え前のモジュールＡに含まれる呼び出し対象と同じ呼び出し対象が含まれるものとする。利用者の指示により、追加実行可能情報生成装置１がこのモジュールＡ′のコンパイル／リンクを行う。このとき、追加実行可能情報生成装置１は、マップ情報を参照して、モジュールＡ内の関数 funcA1( ) に相当する処理命令列において、モジュールＢの関数 funcB1( ) を呼び出す命令を、その格納先アドレスを呼び出す命令（シンボル funcB1 に関連づけられたアドレス addrB1 を呼び出す命令）に置き換える（Ｓ２３）。
【００４８】
このようにして生成された書き換え後のモジュールＡ′のコンパイル／リンクの結果は、追加実行可能情報として記録される。そしてその格納先アドレスは、例えば関数 funcA1( ) が、addrA1'に、関数 funcA2( ) が addrA2' に…というように、書き換え前のモジュールＡにおいて対応する関数の格納先アドレスとは異なっている。なお、これらの格納先アドレスは、情報処理装置２において、追加実行可能情報が読み出されたときに決定される。
【００４９】
追加実行可能情報生成装置１は、そこで、書き換え後のモジュールＡ′における関数の格納先アドレスを取得し、書き換え前のモジュールＡにおいて対応する関数の格納先アドレスを、書き換え後のモジュールＡ′において対応する関数の格納先アドレスへ書き換える指示命令列を事前実行情報として生成する（Ｓ２４）。なお、これら追加実行可能情報と、事前実行情報とは、例えば元の実行可能情報と同じ記憶媒体に格納される。
【００５０】
なお、この事前実行情報は、インデックスと、書き換え前のモジュールでの対応する呼び出し対象の格納先アドレス（旧アドレス）と、書き換え後のモジュールでの対応する呼び出し対象の格納先アドレス（新アドレス）とを関連づけるテーブルと、インデックスをキーとして、インデックスをインクリメントしつつ、キーとなっているインデックスに関連づけられた旧アドレスを新アドレスに書き換える処理を行うプログラムとを含むものであってもよい。
【００５１】
情報処理装置２は、記憶媒体から実行可能情報と追加実行可能情報とを読み出して、ワークメモリへ記録する。すなわち情報処理装置２は、記憶媒体から、まず実行可能情報を読み出して、ワークメモリの予め定められたアドレス以降へ記録する。また、情報処理装置２は、追加実行可能情報を読み出して、ワークメモリの空き領域に記録する。このとき情報処理装置２は、ワークメモリに格納した追加実行情報に含まれる書き換え後のモジュール内の関数について、追加実行情報の記録開始アドレスを、追加実行情報に含まれている、各関数のオフセット（先頭アドレスからの相対アドレス）にそれぞれ加算して、各関数の実際の格納先アドレスを得る。
【００５２】
そして情報処理装置２は、書き換え後のモジュール内の各関数について、実際の格納先アドレスを記憶する。その後、情報処理装置２は、当該ワークメモリへ記録した実行可能情報や追加実行可能情報の処理を開始するが、当該実行に先立って事前実行情報の処理を行う。この処理において情報処理装置２は、先に記録した書き換え後のモジュールＡ′における各関数の格納先アドレスの情報を参照し、実行可能情報中、書き換えられていないモジュールＢの関数 funcB2( ) に対応する処理命令列において、関数 funcA2( ) を呼び出す指示（元は、addrA2 を呼び出す指示）を、書き換え後のモジュールＡ′における関数funcA2( ) を呼び出す指示（例えば当該関数の格納先のアドレスであるaddrA2'を呼び出す指示）に書き換える（Ｓ２５）。
【００５３】
従って情報処理装置２では、モジュールＡ′に相当する処理においては、addrB1を呼び出すようになっていることで、実行可能情報に含まれる、書き換え前のモジュールＢの関数 funcB1( ) に相当する処理命令列を実行することとなる。また、書き換え前のモジュールＢからモジュールＡに代えてモジュールＡ′内の関数funcA2( ) を、その格納先アドレス addrA2' を呼び出すことによって実行することとなる。
【００５４】
なおここでは、追加実行可能情報を生成する際に、マップ情報を参照して、コンパイル／リンクの結果において、直接、呼び出し対象の格納先アドレスを呼び出すよう、命令を記述しているが、本実施の形態はこれに限られない。
【００５５】
例えば、本実施の形態の追加実行可能情報生成装置１は、次のように動作してもよい。すなわち、追加実行可能情報生成装置１は、追加実行可能情報を生成する際に、他のモジュール内の呼び出し対象を呼び出す命令があると、その格納先アドレス（マップ情報から取得する）を呼び出す命令（例えば格納先アドレスへジャンプする命令）を記述した命令要素を生成する。これを各呼び出し命令について生成して、呼び出し命令要素群（ジャンプテーブル）を生成する。
【００５６】
追加実行可能情報生成装置１は、この呼び出し命令要素群と、コンパイルの結果とを合成して、追加実行可能情報とする（図１０）。この場合、追加実行可能情報内で、呼び出し対象を呼び出す命令は、対応する呼び出し命令要素へのジャンプ命令を含むものとなる。この場合、例えばモジュールＡ′の関数 funcA1( ) において、モジュールＢの関数 funcB1( ) を呼び出す呼び出し命令要素、「call addrB1」が、マップ情報を参照して生成される。そしてこの呼び出し命令要素は格納先アドレス addrCallB1 に格納されるとする。
【００５７】
この場合、モジュールＡ′において、モジュールＢの関数 funcB1( ) を呼び出す命令は、すべて、funcB1( ) を呼び出す呼び出し命令要素が格納されている格納先アドレス addrCallB1 を呼び出すものに書き換えられる。
【００５８】
従って情報処理装置２では、呼び出し命令要素群つきの追加実行可能情報が記録されているときには、呼び出し命令要素を呼び出す命令に従って呼び出し命令要素を実行し、当該実行した呼び出し命令要素によって他のモジュールの呼び出し対象を呼び出す。このようにした場合は、かかる呼び出し命令要素群を含まない実行可能情報と、呼び出し命令要素群を含む追加実行可能情報とが共存することとなる。
【００５９】
また、ここまでの説明では、追加実行可能情報や事前実行情報が実行可能情報とともに記録されている場合、情報処理装置２が特段の判断を行うことなく、事前実行情報を実行したり、追加実行可能情報を読み込むこととしていたが、情報処理装置２は、例えば実行可能情報や追加実行可能情報にバージョン情報などのモジュール識別情報が含まれる場合、当該モジュール識別情報を参照し、追加実行可能情報に含まれる、各モジュールに対応する部分のうち、実行可能情報に含まれるモジュール識別情報を含まないものについては、読み込みを行わないこととしてもよい。
【００６０】
さらに追加実行可能情報や事前実行情報が実行可能情報とともに記録されている場合に、利用者の明示的な指示なく、事前実行情報を実行したり、追加実行可能情報を読み込むか、あるいは利用者の明示的な指示を受けるまで、事前実行情報を実行せず、追加実行可能情報を読み込まないようにするかを、情報処理装置２に予め設定しておいてもよい。この設定は、情報処理装置２の電源断によって揮発しない記憶手段に格納されてもよい。
【００６１】
本実施の形態によると、追加実行可能情報と実行可能情報のうち書き換えられていないモジュールとが関連づけられるので、テストを行う際などに、すべてのモジュールを再度リンクし、当該リンク後のオブジェクトコード全体を記憶媒体に格納する必要がない。
【図面の簡単な説明】
【００６２】
【図１】本発明の実施の形態に係る追加実行可能情報生成装置の構成例を表すブロック図である。
【図２】本発明の実施の形態に係る追加実行可能情報生成装置によるコンパイル・リンクの一般的処理の例を表す説明図である。
【図３】本発明の実施の形態に係る追加実行可能情報生成装置が生成するマップ情報の例を表す説明図である。
【図４】本発明の実施の形態に係る情報処理装置の例を表す構成ブロック図である。
【図５】本発明の実施の形態に係る追加実行可能情報生成装置が生成する実行可能情報の内容例を表す説明図である。
【図６】本発明の実施の形態に係る追加実行可能情報生成装置による追加実行可能情報の生成処理例を表すフローチャート図である。
【図７】本発明の実施の形態に係る追加実行可能情報生成装置によって生成された実行可能情報と追加実行可能情報との関係例を表す説明図である。
【図８】本発明の実施の形態に係る追加実行可能情報生成装置による事前実行情報の生成例を表すフローチャート図である。
【図９】本発明の実施の形態に係る追加実行可能情報生成装置の動作例を表す説明図である。
【図１０】本発明の実施の形態に係る追加実行可能情報生成装置が生成する追加実行可能情報の別の例を表す説明図である。
【符号の説明】
【００６３】
１  追加実行可能情報生成装置、２  情報処理装置、１１，２２  制御部、１２，２３  記憶部、１３  操作部、１４  出力部、２４  インタフェース部、２５  機能部。
【図１】
0005109808.tif 000002
【図２】
0005109808.tif 000003
【図３】
0005109808.tif 000004
【図４】
0005109808.tif 000005
【図５】
0005109808.tif 000006
【図６】
0005109808.tif 000007
【図７】
0005109808.tif 000008
【図８】
0005109808.tif 000009
【図９】
0005109808.tif 000010
【図１０】
0005109808.tif 000011