(57)【要約】      （修正有）【課題】コードサイズを小さくすることが可能な連携編集方法、連携編集プログラム及び記憶媒体を提供する。【解決手段】入力された複数のオブジェクトファイルに含まれる関数呼出し命令の呼び出し先毎にその命令数を数え上げて呼び出し先と命令数を対応付けると共に、命令数の降順に並び替え、一定回数以上の呼び出し回数を持つ呼び出し先を命令数の多い順に特定し、特定された全ての呼び出し先について、夫々の分岐先に制御を移す命令を生成すると共に、元々の関数呼出し命令を対応する分岐命令への呼出し命令に置き換え、各オブジェクトファイルに含まれている各要素の配置アドレスを決定すると共に、未解決のアドレスを決定し、生成した分岐命令をメモリ資源の特定のメモリ領域に配置し、配置アドレスの決定及び分岐命令の配置により完成した実行イメージを、入力された複数のオブジェクトファイルが結合された１つの実行形式ファイルとして出力する。【選択図】図１
2007213257.tif 000002
【特許請求の範囲】
【請求項１】
複数のオブジェクトファイルを結合して１つの実行形式ファイルを作成する連携編集方法であって、
入力された複数のオブジェクトファイルに含まれる関数呼出し命令の呼び出し先毎にその命令数を数え上げて呼び出し先と命令数を対応付けると共に、命令数の降順に並び替える入力ステップと、
一定回数以上の呼び出し回数を持つ呼び出し先を命令数の多い順に特定する特定ステップと、
特定された全ての呼び出し先について、夫々の分岐先に制御を移す命令を生成すると共に、元々の関数呼出し命令を対応する分岐命令への呼出し命令に置き換える置き換えステップと、
各オブジェクトファイルに含まれている各要素の配置アドレスを決定すると共に、未解決のアドレスを決定し、該置き換えステップで生成した分岐命令をメモリ資源の特定のメモリ領域に配置する配置アドレス決定ステップと、
配置アドレスの決定及び分岐命令の配置により完成した実行イメージを、該入力された複数のオブジェクトファイルが結合された１つの実行形式ファイルとして出力する出力ステップとを含むことを特徴とする、連携編集方法。
【請求項２】
該入力ステップは、
該入力された複数のオブジェクトファイルの読み込みを行うと同時に、入力された複数のオブジェクトファイルに対して、全ての関数呼び出し命令を見つけ出し、呼び出し先毎にその命令数を数え上げて呼び出し先と命令数を対応付けた第１の表を作成する走査ステップと、
該第１の表を命令数の降順に並び替えた第２の表を作成するソートステップとからなることを特徴とする、請求項１記載の連携編集方法。
【請求項３】
該特定ステップは、呼び出し先の数の上限に達するまで、該一定回数以上の呼び出し回数を持つ呼び出し先を命令数の多い順に特定することを特徴とする、請求項２記載の連携編集方法。
【請求項４】
コンピュータに、複数のオブジェクトファイルを結合して１つの実行形式ファイルを作成させる連携編集プログラムであって、
該コンピュータに、
入力された複数のオブジェクトファイルに含まれる関数呼出し命令の呼び出し先毎にその命令数を数え上げて呼び出し先と命令数を対応付けさせると共に、命令数の降順に並び替えさせる入力手順と、
一定回数以上の呼び出し回数を持つ呼び出し先を命令数の多い順に特定させる特定手順と、
特定された全ての呼び出し先について、夫々の分岐先に制御を移す命令を生成させると共に、元々の関数呼出し命令を対応する分岐命令への呼出し命令に置き換えさせる置き換え手順と、
各オブジェクトファイルに含まれている各要素の配置アドレスを決定させると共に、未解決のアドレスを決定させ、該置き換えステップで生成させた分岐命令をメモリ資源の特定のメモリ領域に配置する配置アドレス決定手順と、
配置アドレスの決定及び分岐命令の配置により完成した実行イメージを、該入力された複数のオブジェクトファイルが結合された１つの実行形式ファイルとして出力させる出力手順とを含むことを特徴とする、連携編集プログラム。
【請求項５】
請求項４記載の連携編集プログラムを格納したことを特徴とする、コンピュータ読み取り可能な記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は連携編集方法、連携編集プログラム及び記憶媒体に係り、特に複数のオブジェクトファイル（又は、目的モジュール）を結合して１つの実行形式ファイル（又は、実行形式モジュール）を作成する連携編集方法、コンピュータにそのような連携編集方法を実行させる連携編集プログラム、及びそのような連携編集プログラムが格納されたコンピュータ読み取り可能な記憶媒体に関する。
【０００２】
連携編集プログラムは、リンケージエディタ（Linkage Editor）又は単にリンカ（Linker）とも呼ばれる。
【背景技術】
【０００３】
組み込み用途の分野では、必要な機能を限られたメモリ資源を用いて実現する必要がある。組み込み用途の分野の一例としては、電子機器のリモートコントローラ（所謂、リモコン）等のようにメモリ資源が限られている環境が挙げられる。このため、コードサイズを小さくしたり、使用するメモリ資源のデータ領域を小さくすることが求められており、従来よりハードウェア的に、或いは、ソフトウェア的に様々な対策が考えられている。
【０００４】
ハードウェア的な対策の一例を説明する。プロセッサには、メモリ資源の特定の領域に配置したコードに対して他の領域に比べてより効率の良い方法で制御を移すことが可能なものがある。このようなプロセッサにおいては、静的な呼び出し回数の多い関数のコードを、効率の良い方法で制御を移すことが可能なメモリ資源の特定の領域に配置することで、関数呼び出し命令長を短くしてコードサイズを小さくすることが可能である。
【０００５】
特許文献１には、誤って古いバージョンのオブジェクトモジュールが使用されることを防ぐリンケージエディタが提案されている。
【特許文献１】特開平７−１７５６３８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかし、効率の良い方法で制御を移すことが可能なメモリ資源の特定の領域は、通常は大きさに限りがあり、この特定の領域に所望の個数の関数のコードを必ず配置できるとは限らないため、関数呼び出し命令長を短くしてコードサイズを小さくするには限界があるという問題があった。
【０００７】
そこで、本発明は、コードサイズを小さくすることが可能な連携編集方法、連携編集プログラム及び記憶媒体を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記の課題は、複数のオブジェクトファイルを結合して１つの実行形式ファイルを作成する連携編集方法であって、入力された複数のオブジェクトファイルに含まれる関数呼出し命令の呼び出し先毎にその命令数を数え上げて呼び出し先と命令数を対応付けると共に、命令数の降順に並び替える入力ステップと、一定回数以上の呼び出し回数を持つ呼び出し先を命令数の多い順に特定する特定ステップと、特定された全ての呼び出し先について、夫々の分岐先に制御を移す命令を生成すると共に、元々の関数呼出し命令を対応する分岐命令への呼出し命令に置き換える置き換えステップと、各オブジェクトファイルに含まれている各要素の配置アドレスを決定すると共に、未解決のアドレスを決定し、該置き換えステップで生成した分岐命令をメモリ資源の特定のメモリ領域に配置する配置アドレス決定ステップと、配置アドレスの決定及び分岐命令の配置により完成した実行イメージを、該入力された複数のオブジェクトファイルが結合された１つの実行形式ファイルとして出力する出力ステップとを含むことを特徴とする連携編集方法によって達成できる。
【０００９】
上記の課題は、コンピュータに、複数のオブジェクトファイルを結合して１つの実行形式ファイルを作成させる連携編集プログラムであって、該コンピュータに、入力された複数のオブジェクトファイルに含まれる関数呼出し命令の呼び出し先毎にその命令数を数え上げて呼び出し先と命令数を対応付けさせると共に、命令数の降順に並び替えさせる入力手順と、一定回数以上の呼び出し回数を持つ呼び出し先を命令数の多い順に特定させる特定手順と、特定された全ての呼び出し先について、夫々の分岐先に制御を移す命令を生成させると共に、元々の関数呼出し命令を対応する分岐命令への呼出し命令に置き換えさせる置き換え手順と、各オブジェクトファイルに含まれている各要素の配置アドレスを決定させると共に、未解決のアドレスを決定させ、該置き換えステップで生成させた分岐命令をメモリ資源の特定のメモリ領域に配置する配置アドレス決定手順と、配置アドレスの決定及び分岐命令の配置により完成した実行イメージを、該入力された複数のオブジェクトファイルが結合された１つの実行形式ファイルとして出力させる出力手順とを含むことを特徴とする連携編集プログラムによっても達成できる。
【００１０】
上記の課題は、上記連携編集プログラムを格納したことを特徴とするコンピュータ読み取り可能な記憶媒体によっても達成できる。
【発明の効果】
【００１１】
本発明によれば、コードサイズを小さくすることが可能な連携編集方法、連携編集プログラム及び記憶媒体を実現することができる。
【発明を実施するための最良の形態】
【００１２】
本発明では、効率の良い方法で制御を移すことが可能なメモリ資源の特定の領域には関数実体に分岐する命令列のみを配置し、関数実体はメモリ資源の特定の領域以外の領域に配置する。
【００１３】
このようにすることで、効率の良い方法で制御を移すことが可能なメモリ資源の特定の領域に配置するコードを大幅に削減することができる。
【００１４】
以下に、本発明になる連携編集方法、連携編集プログラム及び記憶媒体の各実施例を、図面と共に説明する。
【実施例】
【００１５】
図１は、本発明になる連携編集プログラムの一実施例を示す図である。連携編集プログラムの本実施例は、本発明になる連携編集方法の一実施例を採用し、例えば本発明になる記憶媒体の一実施例に格納されている。
【００１６】
連携編集プログラムを格納する記憶媒体は、連携編集プログラムをコンピュータ読み取り可能に格納できる記録媒体により構成され、記録媒体の種類は特に限定されない。例えば、コンピュータ読み取り可能な記憶媒体は、磁気記録媒体、光記録媒体、光磁気記録媒体、半導体記憶装置等により構成できる。
【００１７】
連携編集プログラムは、汎用のコンピュータシステムにより実行される。具体的には、コンピュータシステムを構成するＣＰＵ等のプロセッサが、コンピュータシステムを構成するメモリ等のメモリ資源を用いて連携編集プログラムを実行することで、複数のオブジェクトファイル（又は、目的モジュール）を結合して１つの実行形式ファイル（又は、実行形式モジュール）を作成する。本実施例では、コンピュータシステムは小規模なものであり、メモリ資源が限られているものとする。メモリ資源が限られている場合の一例としては、コンピュータシステムが電子機器のリモートコントローラ（所謂、リモコン）等に適用されている場合がある。
【００１８】
図１において、連携編集プログラム（以下、単に「リンカ」と言う）１は、オブジェクト走査部１１、ソート部１２、関数呼び出し特定部１３、分岐テーブル生成及び命令置き換え部１４、配置アドレス決定部１５及び実行形式ファイル出力部１６からなる。
【００１９】
オブジェクト走査部１１は、入力された複数のオブジェクトファイルの読み込みを行うと同時に、入力された複数のオブジェクトファイルに対して、全ての関数呼び出し命令を見つけ出し、呼び出し先毎にその命令数を数え上げて、呼び出し先と命令数を対応付けた表Ｔ１を作成する。
【００２０】
図２は、オブジェクト走査部１１が作成する表Ｔ１の一例を示す図である。説明の便宜上、図２は、呼び出し先がＣＤ１，ＣＤ２，ＣＤ３，ＣＤ４，ＣＤ５，ＣＤ６，ＣＤ７の命令を有する複数のオブジェクトファイルについて、呼び出し先と命令数を対応付けた表Ｔ１を示す。例えば、呼び出し先がＣＤ１の命令数が１０、呼び出し先がＣＤ２の命令数が１５、呼び出し先がＣＤ３の命令数が５１である。
【００２１】
ソート部１２は、オブジェクトファイル走査部１１が作成した表Ｔ１を命令数の降順に並び替えた表Ｔ２を作成する。図３は、ソート部１２により図２に示す表Ｔ１を命令数の降順に並び替えられた（即ち、ソートされた）表Ｔ２の一例を示す図である。例えば、呼出し先がＣＤ３の命令数が最も多い５１である。図３の場合、呼び出し先がＣＤ７の命令数が最も少ない１である。
【００２２】
尚、同じ命令数の場合、任意の順でソートを行って良い。図３は、命令数が１０の場合について、呼び出し先がＣＤ１の命令数が上位となっている例を示す。
【００２３】
関数呼び出し特定部１３は、ソート部１２が並び替えた表Ｔ２に基づいて、ユーザにより指定された、或いは、予め設定されている呼び出し先の数の上限に達するまで、ある一定回数以上の呼び出し回数を持つ呼び出し先を、命令数の多い順に特定する。例えば、ある一定回数が「１０」であり、予め設定されている呼び出し先の数の上限が「３」であるとすると、図３に示す表Ｔ２において、呼び出し先ＣＤ３，ＣＤ２，ＣＤ１が命令数の多い順に特定される。この場合、呼び出し先ＣＤ３の命令数が５１、呼び出し先ＣＤ２の命令数が１５、呼び出し先ＣＤ１の命令数が１０である。
【００２４】
分岐テーブル生成及び命令置き換え部１４は、特定された全ての呼び出し先について、夫々の分岐先に制御を移す命令を生成すると共に、元々の関数呼出し命令を対応する分岐命令への呼出し命令に置き換える。
【００２５】
配置アドレス決定部１５は、各オブジェクトファイルに含まれている各要素の配置アドレスを決定すると共に、未解決のアドレスを決定する。このとき、分岐テーブル生成及び命令置き換え部１４が生成した分岐命令を、他の領域に比べて効率の良い方法で制御を移すことが可能なメモリ資源の特定のメモリ領域に配置する。
【００２６】
実行形式ファイル出力部１６は、配置アドレスの決定及び分岐命令の配置により完成した実行イメージを、入力された複数のオブジェクトファイルが結合された１つの実行形式ファイル（又は、実行形式モジュール）として出力する。
【００２７】
例えば、コンピュータシステムのメモリ資源のうち、0番地から0x000fffff番地までの範囲が効率の良い方法で制御を移すことが可能な特定な領域に該当し、且つ、この特定の領域に配置されたコードに制御を移す命令（CALL20）の命令長が６バイト、メモリ資源のその他の領域に配置されたコードに制御を移す命令（CALL32）の命令長が８バイトであるものと仮定する。
【００２８】
この場合、上記構成のリンカ１を用いない場合のアドレス、命令及び命令長の関係は、図４に示す如くである。図４は、リンカ１を用いない場合のアドレス、命令及び命令長の関係を示す図である。
【００２９】
これに対し、上記構成のリンカ１を用いた場合のアドレス、命令及び命令長の関係は、図５に示すようになる。図５は、リンカ１を用いた場合のアドレス、命令及び命令長の関係を示す図である。
【００３０】
このように、上記構成のリンカ１を用いると、 JMP32命令分の８バイトが増加するが、各関数呼び出し命令のコードサイズは夫々２バイト減少するため、全オブジェクトファイル中に５箇所以上同じ関数の呼び出しがあれば、リンカ１を用いることでコードサイズはリンカ１を用いない場合と比べて小さくなる。つまり、全オブジェクトファイル中に同じ関数の呼び出し箇所が増大すればする程、リンカ１を用いることによるコードサイズの減少効果が増大する。
【００３１】
又、効率の良い方法で制御を移すことが可能なメモリ資源の特定な領域に関数呼び出しテーブルのみを配置して、関数コードをメモリ資源のその他に配置することで、限られた大きさしかないメモリ資源の領域を最大限に利用することが可能となる。
【００３２】
このように、上記構成のリンカ１を用いると、特にメモリ資源が限られている環境下での効果が大きい。
【００３３】
図６は、リンカ１の動作を説明するフローチャートである。図６に示す処理は、連携編集方法が行うステップに対応すると共に、連携編集プログラム（リンカ）１によりＣＰＵが実行させられる手順に対応する。
【００３４】
図６において、複数のオブジェクトファイルが入力されて処理が開始されると、ステップＳ１は、入力された複数のオブジェクトファイルの読み込みを行うと同時に、入力された複数のオブジェクトファイルに対して、全ての関数呼び出し命令を見つけ出し、呼び出し先毎にその命令数を数え上げて、呼び出し先と命令数を対応付けた図２に示す如き表Ｔ１を作成する。
【００３５】
ステップＳ２は、ステップＳ１で作成した表Ｔ１を命令数の降順に並び替えた図３に示す如き表Ｔ２を作成する。
【００３６】
ステップＳ３は、ステップＳ２が並び替えた表Ｔ２に基づいて、ある一定回数以上の呼び出し回数を持つ呼び出し先を、命令数の多い順に特定する。ステップＳ４は、ユーザにより指定された、或いは、予め設定されている呼び出し先の数の上限に達したか否かを判定し、判定結果がＮＯであると、処理はステップＳ３へ戻る。
【００３７】
ステップＳ４の判定結果がＹＥＳであると、ステップＳ５は、他の呼び出し先が残っているか否かを判定し、判定結果がＮＯであると、処理は後述するステップＳ７へ進む。他方、ステップＳ５の判定結果がＹＥＳであると、ステップＳ６は、これらの他の呼び出し先については本発明の連携編集方法を適用しないようにして、処理はステップＳ７へ進む。
【００３８】
ステップＳ７は、特定された全ての呼び出し先について、夫々の分岐先に制御を移す命令を生成すると共に、元々の関数呼出し命令を対応する分岐命令への呼出し命令に置き換える。
【００３９】
ステップＳ８は、各オブジェクトファイルに含まれている各要素の配置アドレスを決定すると共に、未解決のアドレスを決定する。このとき、ステップＳ７が生成した分岐命令を、効率の良い方法で制御を移すことが可能なメモリ資源の特定のメモリ領域に配置する。
【００４０】
ステップＳ９は、配置アドレスの決定及び分岐命令の配置により完成した実行イメージを、入力された複数のオブジェクトファイルが結合された１つの実行形式ファイル（又は、実行形式モジュール）として出力し、処理は終了する。
【００４１】
尚、本発明は、以下に付記する発明をも包含するものである。
（付記１）  複数のオブジェクトファイルを結合して１つの実行形式ファイルを作成する連携編集方法であって、
入力された複数のオブジェクトファイルに含まれる関数呼出し命令の呼び出し先毎にその命令数を数え上げて呼び出し先と命令数を対応付けると共に、命令数の降順に並び替える入力ステップと、
一定回数以上の呼び出し回数を持つ呼び出し先を命令数の多い順に特定する特定ステップと、
特定された全ての呼び出し先について、夫々の分岐先に制御を移す命令を生成すると共に、元々の関数呼出し命令を対応する分岐命令への呼出し命令に置き換える置き換えステップと、
各オブジェクトファイルに含まれている各要素の配置アドレスを決定すると共に、未解決のアドレスを決定し、該置き換えステップで生成した分岐命令をメモリ資源の特定のメモリ領域に配置する配置アドレス決定ステップと、
配置アドレスの決定及び分岐命令の配置により完成した実行イメージを、該入力された複数のオブジェクトファイルが結合された１つの実行形式ファイルとして出力する出力ステップとを含むことを特徴とする、連携編集方法。
（付記２）  該入力ステップは、
該入力された複数のオブジェクトファイルの読み込みを行うと同時に、入力された複数のオブジェクトファイルに対して、全ての関数呼び出し命令を見つけ出し、呼び出し先毎にその命令数を数え上げて呼び出し先と命令数を対応付けた第１の表を作成する走査ステップと、
該第１の表を命令数の降順に並び替えた第２の表を作成するソートステップとからなることを特徴とする、付記１記載の連携編集方法。
（付記３）  該特定ステップは、該第２の表に基づいて、該一定回数以上の呼び出し回数を持つ呼び出し先を命令数の多い順に特定することを特徴とする、付記２記載の連携編集方法。
（付記４）  該特定ステップは、呼び出し先の数の上限に達するまで、該一定回数以上の呼び出し回数を持つ呼び出し先を命令数の多い順に特定することを特徴とする、付記２又は３記載の連携編集方法。
（付記５）  該特定なメモリ領域は、他の領域に比べて効率の良い方法で制御を移すことが可能なメモリ資源のメモリ領域であることを特徴とする、付記１〜４のいずれか１項記載の連携編集方法。
（付記６）  コンピュータに、複数のオブジェクトファイルを結合して１つの実行形式ファイルを作成させる連携編集プログラムであって、
該コンピュータに、
入力された複数のオブジェクトファイルに含まれる関数呼出し命令の呼び出し先毎にその命令数を数え上げて呼び出し先と命令数を対応付けさせると共に、命令数の降順に並び替えさせる入力手順と、
一定回数以上の呼び出し回数を持つ呼び出し先を命令数の多い順に特定させる特定手順と、
特定された全ての呼び出し先について、夫々の分岐先に制御を移す命令を生成させると共に、元々の関数呼出し命令を対応する分岐命令への呼出し命令に置き換えさせる置き換え手順と、
各オブジェクトファイルに含まれている各要素の配置アドレスを決定させると共に、未解決のアドレスを決定させ、該置き換えステップで生成させた分岐命令をメモリ資源の特定のメモリ領域に配置する配置アドレス決定手順と、
配置アドレスの決定及び分岐命令の配置により完成した実行イメージを、該入力された複数のオブジェクトファイルが結合された１つの実行形式ファイルとして出力させる出力手順とを含むことを特徴とする、連携編集プログラム。
（付記７）  該入力手順は、該コンピュータに、
該入力された複数のオブジェクトファイルの読み込みを行わせると同時に、入力された複数のオブジェクトファイルに対して、全ての関数呼び出し命令を見つけ出させ、呼び出し先毎にその命令数を数え上げさせて呼び出し先と命令数を対応付けた第１の表を作成させる走査手順と、
該第１の表を命令数の降順に並び替えた第２の表を作成させるソートスソ¬ト？手順とからなることを特徴とする、付記６記載の連携編集プログラム。
（付記８）  該特定手順は、該コンピュータに、該第２の表に基づいて、該一定回数以上の呼び出し回数を持つ呼び出し先を命令数の多い順に特定させることを特徴とする、付記７記載の連携編集プログラム。
（付記９）  該特定手順は、該コンピュータに、呼び出し先の数の上限に達するまで、該一定回数以上の呼び出し回数を持つ呼び出し先を命令数の多い順に特定させることを特徴とする、付記７又は８記載の連携編集プログラム。
（付記１０）  該特定なメモリ領域は、他の領域に比べて効率の良い方法で制御を移すことが可能なメモリ資源のメモリ領域であることを特徴とする、付記６〜９のいずれか１項記載の連携編集プログラム。
（付記１１）  付記６〜１０のいずれか１項記載の連携編集プログラムを格納したことを特徴とする、コンピュータ読み取り可能な記憶媒体。
【００４２】
以上、本発明を実施例により説明したが、本発明は上記実施例に限定されるものではなく、本発明の範囲内で種々の変形及び改良が可能であることは言うまでもない。
【図面の簡単な説明】
【００４３】
【図１】本発明になる連携編集プログラムの一実施例を示す図である。
【図２】オブジェクト走査部が作成する表の一例を示す図である。
【図３】ソート部により命令数の降順に並び替えられた表の一例を示す図である。
【図４】リンカを用いない場合のアドレス、命令及び命令長の関係を示す図である。
【図５】リンカを用いた場合のアドレス、命令及び命令長の関係を示す図である。
【図６】リンカの動作を説明するフローチャートである。
【符号の説明】
【００４４】
１      リンカ
１１      オブジェクト走査部
１２      ソート部
１３      関数呼び出し特定部
１４      分岐テーブル生成及び命令置き換え部
１５      配置アドレス決定部
１６      実行形式ファイル出力部
【図１】
2007213257.tif 000003
【図２】
2007213257.tif 000004
【図３】
2007213257.tif 000005
【図４】
2007213257.tif 000006
【図５】
2007213257.tif 000007
【図６】
2007213257.tif 000008