JP2002108625A - 言語処理装置及び言語処理プログラムを格納した記録媒体 - Google Patents
言語処理装置及び言語処理プログラムを格納した記録媒体Info
- Publication number
- JP2002108625A JP2002108625A JP2000292737A JP2000292737A JP2002108625A JP 2002108625 A JP2002108625 A JP 2002108625A JP 2000292737 A JP2000292737 A JP 2000292737A JP 2000292737 A JP2000292737 A JP 2000292737A JP 2002108625 A JP2002108625 A JP 2002108625A
- Authority
- JP
- Japan
- Prior art keywords
- module
- symbol
- address
- unresolved
- language processing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
追加等を加える場合に、変更対象のプログラムのみをリ
コンパイルするだけで実行可能なオブジェクトを更新す
ることができる言語処理装置を提供すること。 【解決手段】 各ソースモジュールを翻訳する度にシン
ボルの配置アドレスとサイズとからなるシンボル情報を
格納するシンボル情報格納部を有し、前記ソースモジュ
ールを再翻訳する際に、前記シンボル情報格納部から前
回翻訳時に格納した当該モジュールのアドレスを取得
し、この取得した前回の配置アドレスに今回翻訳した当
該モジュールのオブジェクトを配置し、前記シンボル情
報格納部から当該オブジェクトモジュールが参照する外
部シンボルの配置アドレスを取得して、当該オブジェク
トモジュールにおける外部シンボルのアドレス解決を行
うことによる。
Description
グラムの言語処理技術に係り、特に、プログラムの部分
コンパイルやオブジェクトレベルでのプログラムの部品
化等を可能にする言語処理装置及び言語処理プログラム
を格納した記録媒体に関する。
言語処理装置は、ソースプログラムを入力して、語彙解
析、構文解析、中間コード生成、コード最適化、コード
生成等の一連の翻訳処理を行い、オブジェクトプログラ
ムとして出力する。
めの従来の典型的な言語処理装置を示した概略構成図で
あり、図19はその翻訳処理の一例を示すイメージ図で
ある。ソースファイル102にはソースモジュールとし
て関数FuncA、関数FuncB、関数FuncCの3つの関数が格
納されている。コンパイラ101はソースファイル10
2を入力して、このソースファイル102に格納されて
いる各関数に対してそれぞれ順番に上記一連の翻訳処理
を行い、実行可能オブジェクト103としてメモリ10
0上に配置出力する。
トモジュールFuncA〜FuncCは、それぞれ機械語の命令コ
ード、データ、参照情報(reference)等を含んでい
る。ここで、参照情報とは、関数内部の変数や大域変数
Valを参照したり、他の関数やサブルーチンを呼び出し
たりするための参照先アドレス情報である。
ルしたプログラムに対して変更や追加等を加える場合に
は、例えそのプログラムの変更量が極めて微細であった
としても、必ずソースファイル単位でコンパイルを行っ
ている。つまり、図19に示した例では、ソースファイ
ル102に含まれている全ての関数FuncA〜FuncCについ
て、リコンパイルを行っているのである。
スファイル102の中の関数FuncAだけを変更するよう
なケースでも、無条件にソースファイル102中の全て
の関数FuncA〜FuncCについてコンパイルを行い、実行可
能オブジェクト103の各関数FuncA〜FuncCを最新の状
態に更新している。そのため、実質的な変更がない関数
FuncB,FuncCについても、無駄な翻訳処理が行われてい
るといった問題があった。
ムは、複雑化、肥大化する傾向にあり、上記のような問
題はますます深刻になってきている。
ザーに配布するような場合にも、関数FuncAのコンパイ
ル後のオブジェクトだけを配布することは出来ず、オブ
ジェクト103全体を配布するか、関数FuncAのソース
プログラムを配布する必要がある。更に、関数FuncAの
ソースプログラムを受け取った側は、関数FuncAだけで
はなく、全ての関数FuncA〜FuncCについてリコンパイル
を行って、オブジェクト103の各関数の参照先アドレ
ス情報を最新の状態に更新する必要がある。
タの普及により、コンピュータプログラムの利用者は広
範囲に拡大してきており、プログラムのバージョンアッ
プ等で更新プログラムを配布する際には、その手間や経
費は大きな負担となっている。
ものであって、コンパイル済みのプログラムに対して変
更や追加等を加える場合に、変更対象のプログラムのみ
をリコンパイルするだけで実行可能なオブジェクトを更
新することができる言語処理装置及び言語処理プログラ
ムを格納した記録媒体を提供することを目的とする。
の解決をコンパイル時ではなく実行時に行い、オブジェ
クトモジュールレベルで変更モジュールの配布や移植、
部品化等を容易に行うことができる言語処理装置及び言
語処理プログラムを格納した記録媒体を提供することを
第2の目的とする。
に、本発明は、ソースファイルを構成する各ソースモジ
ュールを翻訳して実行可能なオブジェクトファイルを生
成する言語処理装置において、前記各ソースモジュール
を翻訳する度にシンボルの配置アドレスとサイズとから
なるシンボル情報を格納するシンボル情報格納部を有
し、前記ソースファイルの少なくとも一部のソースモジ
ュールを再翻訳する際に、前記シンボル情報格納部から
前回翻訳時に格納した当該モジュールのアドレスを取得
し、この取得した前回の配置アドレスに今回翻訳した当
該モジュールのオブジェクトを配置し、前記シンボル情
報格納部から当該オブジェクトモジュールが参照する外
部シンボルの配置アドレスを取得して、当該オブジェク
トモジュールにおける外部シンボルのアドレス解決を行
うことを特徴とする。
グラムに対して変更等が生じた場合に、その変更のある
ソースモジュールのみをリコンパイルするだけで、作成
しておいたシンボル情報格納部のモジュールや変数等の
シンボルのアドレス情報をもとに、当該モジュールを前
回と同じアドレスに配置することができ、他の変更のな
いモジュールとの整合性が保てる。つまり、部分コンパ
イルが可能になる。更に、当該モジュールにおける外部
シンボルのアドレス解決を行うことができ、他の変更の
ないモジュールや大域変数へのアクセスが可能となる。
再翻訳する際に、前記シンボル情報格納部から前回翻訳
時の当該モジュールのサイズを取得し、取得したサイズ
より今回翻訳後の当該モジュールのオブジェクトモジュ
ールのサイズの方が大きい場合、当該オブジェクトモジ
ュールを前半部と後半部に分割し、前半部を当該モジュ
ールの前回の配置アドレスに配置し、後半部をメモリ上
の空き領域に配置し、この前半部のサイズは前記シンボ
ル情報格納部から取得した前回翻訳時の当該モジュール
のサイズ以下であることを特徴とする。
ズが変更前よりも大きくなった場合でも、分割して配置
することで整合性を保つことができる。
ールを分割する際に、当該オブジェクトモジュールの前
半部の末尾に後半部へのジャンプ命令を挿入し、このジ
ャンプ命令を含めた前半部のサイズは、前記シンボル情
報格納部から取得した前回翻訳時の当該モジュールのサ
イズ以下であることを特徴とする。
から後半部への接続を容易にすることができる。
を追加して翻訳する際には、メモリ上の空き領域に今回
翻訳した当該モジュールのオブジェクトを配置し、前記
シンボル情報格納部から当該オブジェクトモジュールが
参照する外部シンボルの配置アドレスを取得して、当該
オブジェクトモジュールにおける外部シンボルの参照ア
ドレスの解決を行うことを特徴とする。
加する場合にもこのモジュールのみをコンパイルするだ
けで、他モジュールとの整合性を保ちつつ、メモリ上の
空き領域に配置することができる。
る各ソースモジュールを翻訳して実行可能なオブジェク
トファイルを生成する言語処理装置において、前記各ソ
ースモジュールを翻訳する度にシンボルの配置アドレス
とサイズとからなるシンボル情報を格納するシンボル情
報格納部と、生成したオブジェクトが参照する外部シン
ボルの配置アドレスの解決を行うリンカとを有し、前記
ソースファイルの少なくとも一部のソースモジュールを
翻訳する際に、当該モジュールが参照する外部シンボル
の配置アドレスが未解決の状態でオブジェクトモジュー
ルを生成し、生成したオブジェクトモジュールに、アド
レス未解決の外部シンボルのシンボル名称と当該オブジ
ェクトにおける参照位置とからなる未解決シンボル部を
付加してメモリ上に配置し、前記リンカはオブジェクト
ファイルの実行時に、前記オブジェクトモジュールの未
解決シンボル部からアドレスが未解決の外部シンボルを
特定し、特定した未解決シンボルの配置アドレスを前記
シンボル情報格納部から取得して、当該オブジェクトモ
ジュールの前記参照位置に出現する前記未解決シンボル
のアドレス解決を動的に行うことを第2の特徴とする。
この際、好ましくは、前記シンボル情報格納部をメモリ
上に配置する。
ムの実行時に行うことができるため、モジュールを追加
/変更する場合などでも、他のモジュールとの整合性を
保ちながら極めて容易に組み込むすることができる。
含むオブジェクトモジュールのメモリ上の配置位置を変
更する場合、前記シンボル情報格納部に格納されている
配置アドレスを変更後の配置位置に更新することを特徴
とする。
ールのコードやデータなどを移動しても、他のモジュー
ルとの整合性を容易に保つことができる。
された前記未解決シンボル部を含むオブジェクトモジュ
ールを取り込んでメモリ上に配置する場合、前記シンボ
ル情報格納部に格納されている配置アドレスを変更後の
配置位置に更新する。また、他のプログラム内で新規に
生成された前記未解決シンボル部を含むオブジェクトモ
ジュールを取り込んでメモリ上に配置する場合、前記シ
ンボル情報格納部に当該オブジェクトモジュールの配置
アドレスを追加することを特徴とする。
士で、オブジェクトモジュールレベルで変更モジュール
のみの配布や移植、部品化等を、他のモジュールとの整
合性を保ちながら極めて容易に行うことができる。
実施形態について説明する。
特徴に係る言語処理装置の一実施形態を示す概略構成図
である。この言語処理装置は、ソースモジュールが格納
されているソースファイル2、ソースファイル2を入力
して所定の翻訳処理を行うコンパイラ1、翻訳結果とし
てコンパイラ1が出力する実行可能なオブジェクトファ
イル3などから構成され、更に、コンパイラ1は、シン
ボル情報格納部であるシンボル情報テーブル4を参照/
更新する。
は、言語処理装置である計算機に実行させることができ
る言語処理プログラムとして各種記録メディアに格納
し、また通信メディアにより伝送して頒布することが可
能である。本言語処理装置を実現する計算機は、記録媒
体に記録された上記言語処理プログラムにより動作制御
され、所定の処理手続きによる各処理を実行する。
示すイメージ図である。このシンボル情報テーブル4
は、シンボル名、シンボルの配置アドレス、シンボルの
サイズなどからなり、シンボル毎に1つレコードで構成
される。ここで、シンボルとは、プログラミングの際に
モジュール(関数)やデータ(変数)などに付加した参
照名である。例えば、関数「FuncA」はアドレス「0x800
0_0000」番地に配置されていて、そのサイズは「0x030
0」バイトであり、大域変数「val」はアドレス「0x8000
_3000」番地に配置されていて、そのサイズは「0x000
4」バイトである。
ルの終端を表す。また、シンボル名「0xff」のレコード
はメモリ10上の空き領域(未使用領域)を表してお
り、図2の例では、アドレス「0x8000_2000」番地から
「0x1000」バイトの空き領域が存在することを示してい
る。
イルとして構成される。
イルしたプログラムに対して変更等が生じた場合などに
行うコンパイル処理の動作について説明する。従来はソ
ースファイル2に含まれる全てのモジュールについてリ
コンパイルする必要があったが、本発明においてはリコ
ンパイルするのは変更が生じたモジュールのみで良く、
そのために以下の処理を行う。
ジェクトは、リコンパイル前にそのオブジェクトモジュ
ールが配置されていたアドレスと同一のアドレスに配置
する。
外部モジュールや外部変数などのシンボルのアドレス解
決を行う。
じアドレスに配置することができ、他の変更のないモジ
ュールとの整合性が保て、更に、当該モジュールにおけ
る外部シンボルのアドレス解決を行うことができ、他の
モジュールや大域変数へのアクセスが可能となる。
示すイメージ図である。コンパイラ1はソースファイル
2に格納されている関数FuncA、FuncB、FuncCについて
順番に翻訳し、翻訳したオブジェクトモジュールをメモ
リ10上に出力する。例えば、オブジェクトモジュール
FuncAはメモリ10の「0x8000_0000」番地に配置され、
大域変数「val」は「0x8000_3000」番地に配置されてい
る。また、それぞれの翻訳処理を行う際に、翻訳したプ
ログラムの中に出現したシンボルのシンボル名、アドレ
ス、サイズ等を、図2に示したように、シンボル情報テ
ーブル4に出力する。
り一旦コンパイルしたプログラムに対して変更等が生じ
た場合などに行うコンパイル処理の動作状況を示すイメ
ージ図であり、図6はその処理の流れを表したフローチ
ャートである。ここでは、関数FuncAに対して変更を加
え、その結果、関数FuncA2に変更される例を示す。
てコンパイル処理を行う(Step01)。この段階では、関
数FuncA2のシンボルのアドレス解決は行われていない。
コンパイル時の関数FuncAの配置アドレスを取得する(S
tep02)。取得したアドレスは、今回のコンパイル後の
オブジェクトFuncA2を再配置するために使用する。
コンパイル時の関数FuncAのモジュールサイズを取得し
て(Step03)、前回の関数FuncAのモジュールサイズと
今回のコンパイル後の関数FuncA2のモジュールサイズと
を比較する(Step04)。
イズが前回のモジュールサイズより小さいかあるいは等
しい場合、Step01でコンパイルした関数FuncA2のオブジ
ェクトモジュールを関数FuncAが配置されていたアドレ
スに再配置する(Step09)。
のモジュールサイズの方が前回のモジュールサイズより
大きい場合、翻訳したオブジェクトFuncA2を前半部と後
半部に分割する(Step05)。
ェクトFuncA2の前半部の末尾に、後半部の先頭へジャン
プするジャンプ命令を付加した上で、この前半部を関数
FuncAが配置されていたアドレスに配置する(Step0
6)。この際、ジャンプ命令を含む前半部のサイズは、S
tep03で取得した関数FuncAのモジュールサイズと等しい
か、それより小さい値になるようにする。これにより、
関数FuncA2は他の関数に重なることなく配置される。
リ10上の空き領域の先頭アドレスを取得して(Step0
7)、取得した空き領域の先頭アドレスに関数FuncA2の
後半部を配置する(Step08)。
変数などの内部シンボルのアドレスを解決する(Step1
0)。
て、関数FuncA2に係る外部モジュールや外部変数などの
シンボルのアドレス解決を行う(Step11)。尚、この
時、シンボル情報テーブルに該当するシンボルの情報が
存在しない場合には、エラーとしてコンパイル処理を終
了する。
数FuncA2は前半部と後半部とに分割され、前半部は「0x
8000_0000」番地に配置され、後半部は「0x8000_2000」
番地に配置される。従って、更新モジュールである関数
FuncA2のみの部分コンパイルで、オブジェクトファイル
3の更新を行うことができる。尚、今回の関数FuncA2を
コンパイルしたことによるシンボル情報の変更内容は、
シンボル情報テーブル4に反映される。
イルしたプログラムに対して、新たに追加するモジュー
ルが発生した場合などに行うコンパイル処理の動作につ
いて説明する。従来はソースファイル2に含まれる全て
のモジュールについてリコンパイルする必要があった
が、本発明においてはコンパイルするのは追加するモジ
ュールのみで良く、そのために以下の処理を行う。
は、メモリ上の空き領域に配置する。
ュールや外部変数などのシンボルのアドレス解決を行
う。
ュールに影響しないアドレスに配置することができ、他
の変更のないモジュールとの整合性が保て、更に、当該
モジュールにおける外部シンボルのアドレス解決を行う
ことができ、他のモジュールや大域変数へのアクセスが
可能となる。
り一旦コンパイルしたプログラムに対して、新たに追加
するモジュールが発生した場合などに行うコンパイル処
理の動作状況を示すイメージ図であり、図8はその処理
の流れを表したフローチャートである。ここでは、関数
FuncDを新たに追加する例を示す。
ンパイル処理を行う(Step21)。この段階では、シンボ
ルのアドレス解決は行われていない。
リ10上の空き領域の先頭アドレスを取得して(Step2
2)、取得した空き領域の先頭アドレスに関数FuncDのオ
ブジェクトを配置する(Step23)。
変数などの内部シンボルのアドレスを解決する(Step2
4)。
て、関数FuncDに係る外部モジュールや外部変数などの
シンボルのアドレス解決を行う(Step25)。尚、この
時、シンボル情報テーブルに該当するシンボルの情報が
存在しない場合には、エラーとしてコンパイル処理を終
了する。
数FuncDは「0x8000_2000」番地に配置され、追加モジュ
ールのみの部分コンパイルで、オブジェクトファイル3
の更新を行うことができる。尚、今回の関数FuncDを追
加コンパイルしたことによるシンボル情報の変更内容
は、シンボル情報テーブル4に反映される。
特徴に係る言語処理装置の一実施形態を示す概略構成図
である。この言語処理装置は、ソースモジュールが格納
されているソースファイル2、ソースファイル2を入力
して所定の翻訳処理を行うコンパイラ1、翻訳結果とし
てコンパイラ1が出力するアドレス未解決のオブジェク
ト3aなどから構成され、更に、コンパイラ1は、シン
ボル情報格納部であるシンボル情報テーブル4を参照/
更新し、アドレス未解決のモジュール情報を格納する未
解決関数テーブル5を出力する。また、シンボル情報テ
ーブル4と未解決関数テーブル5の情報をもとに、アド
レス未解決オブジェクト3aのアドレス解決を動的に行
う動的リンカ6を備えている。アドレス未解決オブジェ
クト3aに係る未解決シンボルは、実行時に動的リンカ
6によってアドレスを解決される。
の構成例を示すイメージ図である。アドレス未解決オブ
ジェクト3aとは、通常のコンパイラが出力するオブジ
ェクトとは異なり、シンボル解決をされていないオブジ
ェクト(関数)である。コンパイラ1は、図10(a)
に示すように、オブジェクトコード本体30(関数本
体)に未解決シンボル部20を付加してこのアドレス未
解決オブジェクト3aを出力する。
決シンボル部20のサイズ21を有し、続いて当該オブ
ジェクトコード本体30が参照するシンボルのシンボル
名221とそのオフセット(出現位置)231が複数個
格納される。尚、同図(b)は、未解決シンボル部20
のデータの格納例である。
ブル4と未解決関数テーブル5が配置されている様子を
示すイメージ図である。シンボル情報テーブル4と未解
決関数テーブル5はファイルではなく、このようにメモ
リ10上に配置され、シンボル情報テーブル4の先頭ア
ドレスを指し示すシンボル情報レジスタ41と、未解決
関数テーブル5の先頭アドレスを指し示す未解決関数レ
ジスタ51を用意する。コンパイラ1やリンカ6は、こ
れらのシンボル情報レジスタ41や未解決関数レジスタ
51を用いることによって、シンボル情報テーブル4や
未解決関数テーブル5にアクセスすることができる。
報テーブル4が配置された詳細のイメージを示し、同図
(b)はシンボル情報テーブル4のデータの格納例を示
したイメージ図である。このシンボル情報テーブル4に
はオブジェクトに含まれる外部シンボルのシンボル名、
配置アドレス、サイズが格納される。尚、第1〜第2実
施例で説明したシンボル情報テーブルのようにメモリ1
0上の空き領域を示す情報を格納するようにしても良
い。
テーブル5が配置された詳細のイメージを示し、同図
(b)は未解決関数テーブル5のデータの格納例を示し
たイメージ図である。この未解決関数テーブル5にはオ
ブジェクトを構成する関数のうちアドレスが未解決の状
態の関数の関数名、配置アドレス、サイズが格納され
る。同図の例では関数FuncAと関数FuncCがアドレスが未
解決の状態であるので、未解決関数テーブル5にはこの
2つの関数の情報が格納されている。尚、全ての関数Fu
ncA〜FuncCのアドレスが未解決であるような場合には、
この未解決関数テーブル5は必ずしも必要ない。
例を示すイメージ図であり、同図(b)はそのプログラ
ム例である。このように、リンカ6の実行を関数を呼び
出す処理の直前に行うようにすれば、リンカ6は呼び出
される度に未解決関数テーブル5に登録されている関数
内部のシンボル解決を行う。尚、リンカ6の実行タイミ
ングはこれに限定されるものではなく、リンカ6の実行
は未解決関数が実行されるときまでに行われれば良い。
フローチャートである。
て未解決関数テーブル5を参照する(Step31)。
れば以下に続く処理を行うが、未解決関数テーブル5に
未解決の関数がなければ処理を終了する(Step32)。
った場合、次に、未解決関数3aの未解決シンボル部2
0を参照し、その未解決関数3aに出現する未解決シン
ボル名221を取得する(Step33)。
シンボル情報テーブル4を参照し、Step33で取得した未
解決シンボル名221の配置アドレスを取得する(Step
34)。
頭アドレスを次式により算出する(Step35)。
数3aの先頭アドレス +未解決シンボル部20のサイ
ズ21 例えば、図10に示した例によると、関数FuncAの本体
20の先頭アドレスは、関数FuncAの先頭アドレス「0x8
000_0000」番地に未解決シンボル部20のサイズ「001
e」バイトを加えた値「0x8000_001e」番地となる。
現する未解決シンボルのアドレスを解決する(Step3
6)。関数本体30における未解決シンボルの出現位置
は次式により算出する。
0の先頭アドレス +未解決シンボルのオフセット 例えば、図10に示した例によると、関数FuncAの本体
20に出現する外部シンボルFuncBの出現位置は、関数F
uncA本体20の先頭アドレス「0x8000_001e」番地に未
解決シンボルのオフセット「001c」バイトを加えた値
「0x8000_003a」番地となる。この未解決シンボルの出
現位置にStep34で取得したシンボルのアドレスを埋め込
むことで、アドレスが解決される。
を行う機能を利用すると、様々な用途に適用することが
できる。以下にその実施例について説明する。
の追加)既存の実行可能なオブジェクトに対して新たに
モジュール(関数)を追加する場合、コンパイラ1は追
加するモジュールの内部参照で解決できるシンボルのみ
解決し、内部参照では解決できない外部シンボルなど
は、先に説明したようにオブジェクトコード本体30
(関数本体)に未解決シンボル部20を付加したアドレ
ス未解決オブジェクト3aを出力する。
は、以下の手順は手順で行う。
コンパイルして、メモリ10上の空き領域に配置する。
尚、この際、外部シンボルのアドレスを解決していない
未解決オブジェクト3aとして配置する。
ブジェクトであるFuncDの情報を追加する。
ブジェクトFuncD内に出現する外部シンボルのアドレス
を解決する(図15、Step31〜Step36)。この処理は、
関数FuncDの追加時に行っても良いし、あるいは既存の
関数の呼び出し時に実行されるリンカ6に委ねても良
い。
独立)実行可能なオブジェクトを形成する全ての関数を
未解決関数にしておくと、各関数は呼び出される度にリ
ンカ6によってシンボル解決をされることになる。これ
を利用して、実行時に関数や大域変数の配置位置を自由
に変更することができる。これを本明細書では「位置独
立」という。つまり、外部シンボルを未解決な状態にし
ておくことで、「位置」に依存することなく「位置」か
ら独立することができるのである。
Aのオブジェクトモジュールを移動したときのメモリ1
0の状態を示すイメージ図であり、同図(a)が移動前
の状態、同図(b)は移動後の状態を示しており、図1
7はその処理の流れを示したフローチャートである。
そのオブジェクトモジュールの先頭アドレスとサイズの
情報が必要になるが、それはシンボル情報テーブル4に
格納されている情報から入手することができる。
するオブジェクトモジュールの先頭アドレス及びサイズ
を入手し、更に、メモリ10の空き領域のアドレスを取
得する(Step41)。
き領域に移動し(Step42)、移動後のFuncAの情報をシ
ンボル情報テーブル4反映する(Step43)。
クトモジュールFuncAのシンボル解決を行って(Step4
4)、オブジェクトを実行する(Step45)。
の受け渡し)位置独立機能を利用することにより、互い
に独立するプログラム間で、あるいは言語処理装置間で
オブジェクトモジュールレベルで変更モジュールの配布
や移植、部品化等を行うことができる。
分の環境内に組み込んで、動的リンカによって自分の環
境に応じてシンボル解決を行えば良い。従って、多くの
ユーザーに配布する場合や、ネットワークなどを介して
広範囲に配布する場合などでも、変更モジュールのみの
配布を行うことができる上、受け取り側も極めて容易に
変更モジュールの組み込みを行うことができる。
うに、一旦コンパイルしたプログラムに対して変更等が
生じた場合に、その変更のあるソースモジュールのみを
リコンパイルするだけで、作成しておいたシンボル情報
格納部のモジュールや変数等のシンボルのアドレス情報
をもとに、当該モジュールを前回と同じアドレスに配置
する部分コンパイルが可能となり、他の変更のないモジ
ュールとの整合性が保てる。更に、当該モジュールにお
ける外部シンボルのアドレス解決を行うことができ、他
のモジュールや大域変数へのアクセスが可能となる。
更前よりも大きくなった場合でも、分割して配置するこ
とで整合性を保つことができ、分割したモジュールの前
半部から後半部への接続を容易にすることができる。
る際にもこのモジュールのみをコンパイルするだけで、
他モジュールとの整合性を保ちつつ、メモリ上の空き領
域に配置することができる。
うに、シンボル解決をプログラムの実行時に行うことが
できるため、モジュールを追加/変更する場合などで
も、他のモジュールとの整合性を保ちながら極めて容易
に組み込むすることができる。
コードやデータなどを移動しても、他のモジュールとの
整合性を容易に保つことができる。
あるいは言語処理装置間でオブジェクトモジュールレベ
ルで変更モジュールのみの配布や移植、部品化等を極め
て容易に行うことができる。
が、本発明は本実施例に限定されず、本発明の主旨を逸
脱しない範囲において、種々の改良や変更を成し得るで
あろう。
ログラムに対して変更等が生じた場合に、その変更のあ
るソースモジュールのみをリコンパイルするだけで、作
成しておいたシンボル情報格納部のモジュールや変数等
のシンボルのアドレス情報をもとに、当該モジュールを
前回と同じアドレスに配置することができる部分コンパ
イルが可能になる。他の変更のないモジュールとの整合
性が保てる上、当該モジュールにおける外部シンボルの
アドレス解決を行うことができ、他のモジュールや大域
変数へのアクセスが可能となる。
モジュールについても、無駄な翻訳処理が行われている
といった問題が解決される。
翻訳する際にもこのモジュールのみをコンパイルするだ
けで、他モジュールとの整合性を保ちつつ、メモリ上の
空き領域に配置することができる。
ボル解決をプログラムの実行時に行うことができるた
め、モジュールを追加/変更する場合などでも、他のモ
ジュールとの整合性を保ちながら極めて容易に組み込む
することができる。
プログラムの実行時にモジュールのコードやデータなど
を移動しても、他のモジュールとの整合性を容易に保つ
ことができる。
あるいは言語処理装置間でオブジェクトモジュールレベ
ルで変更モジュールのみの配布や移植、部品化等を、他
のモジュールとの整合性を保ちながら極めて容易に行う
ことができる。
施形態を示す概略構成図である。
略図である。
理例を示すイメージ図である。
理の処理例を示すイメージ図である。
クトモジュールの分割処理の処理例を示すイメージ図で
ある。
すフローチャートである。
示すイメージ図である。
すフローチャートである。
施形態を示す概略構成図である。
例を示す概略図である。
ルのメモリへの配置例を示すイメージ図である。
ジ図である。
図である。
ジ図である。
トである。
ある。
示すフローチャートである。
である。
イル処理の処理例を示すイメージ図である。
Claims (13)
- 【請求項1】 ソースファイルを構成する各ソースモジ
ュールを翻訳して実行可能なオブジェクトファイルを生
成する言語処理装置において、 前記各ソースモジュールを翻訳する度にシンボルの配置
アドレスとサイズとからなるシンボル情報を格納するシ
ンボル情報格納部を有し、 前記ソースファイルの少なくとも一部のソースモジュー
ルを再翻訳する際に、前記シンボル情報格納部から前回
翻訳時に格納した当該モジュールのアドレスを取得し、
この取得した前回の配置アドレスに今回翻訳した当該モ
ジュールのオブジェクトを配置し、 前記シンボル情報格納部から当該オブジェクトモジュー
ルが参照する外部シンボルの配置アドレスを取得して、
当該オブジェクトモジュールにおける外部シンボルのア
ドレス解決を行うことを特徴とする言語処理装置。 - 【請求項2】 前記ソースモジュールを再翻訳する際
に、前記シンボル情報格納部から前回翻訳時の当該モジ
ュールのサイズを取得し、取得したサイズより今回翻訳
後の当該モジュールのオブジェクトモジュールのサイズ
の方が大きい場合、当該オブジェクトモジュールを前半
部と後半部に分割し、前半部を当該モジュールの前回の
配置アドレスに配置し、後半部をメモリ上の空き領域に
配置し、前記前半部のサイズは前記シンボル情報格納部
から取得した前回翻訳時の当該モジュールのサイズ以下
であることを特徴とする請求項1に記載の言語処理装
置。 - 【請求項3】 前記オブジェクトモジュールを分割する
際に、当該オブジェクトモジュールの前半部の末尾に後
半部へのジャンプ命令を挿入し、このジャンプ命令を含
めた前半部のサイズは、前記シンボル情報格納部から取
得した前回翻訳時の当該モジュールのサイズ以下である
ことを特徴とする請求項2に記載の言語処理装置。 - 【請求項4】 請求項1に記載の言語処理装置におい
て、 新たにソースモジュールを追加して翻訳する際に、メモ
リ上の空き領域に今回翻訳した当該モジュールのオブジ
ェクトを配置し、 前記シンボル情報格納部から当該オブジェクトモジュー
ルが参照する外部シンボルの配置アドレスを取得して、
当該オブジェクトモジュールにおける外部シンボルの参
照アドレスの解決を行うことを特徴とする言語処理装
置。 - 【請求項5】 前記各ソースモジュールを翻訳する度
に、前記シンボル情報格納部にメモリ上の空き領域のア
ドレスを格納し、 前記メモリ上の空き領域にオブジェクトモジュールを配
置する際には、前記シンボル情報格納部からメモリ上の
空き領域のアドレスを取得し、この取得したアドレスに
配置することを特徴とする請求項2ないし請求項4のい
ずれかに記載の言語処理装置。 - 【請求項6】 ソースファイルを構成する各ソースモジ
ュールを翻訳して実行可能なオブジェクトファイルを生
成する言語処理装置において、 前記各ソースモジュールを翻訳する度にシンボルの配置
アドレスとサイズとからなるシンボル情報を格納するシ
ンボル情報格納部と、 生成したオブジェクトが参照する外部シンボルの配置ア
ドレスの解決を行うリンカとを有し、 前記ソースファイルの少なくとも一部のソースモジュー
ルを翻訳する際に、当該モジュールが参照する外部シン
ボルの配置アドレスが未解決の状態でオブジェクトモジ
ュールを生成し、 生成したオブジェクトモジュールに、アドレス未解決の
外部シンボルのシンボル名称と当該オブジェクトにおけ
る参照位置とからなる未解決シンボル部を付加してメモ
リ上に配置し、 前記リンカはオブジェクトファイルの実行時に、前記オ
ブジェクトモジュールの未解決シンボル部からアドレス
が未解決の外部シンボルを特定し、特定した未解決シン
ボルの配置アドレスを前記シンボル情報格納部から取得
して、当該オブジェクトモジュールの前記参照位置に出
現する前記未解決シンボルのアドレス解決を動的に行う
ことを特徴とする言語処理装置。 - 【請求項7】 前記シンボル情報格納部をメモリ上に配
置することを特徴とする請求項6に記載の言語処理装
置。 - 【請求項8】 前記未解決シンボル部を含むオブジェク
トモジュールのメモリ上の配置位置を変更する場合、前
記シンボル情報格納部に格納されている配置アドレスを
変更後の配置位置に更新することを特徴とする請求項6
ないし請求項7のいずれかに記載の言語処理装置。 - 【請求項9】 他のプログラム内で更新された前記未解
決シンボル部を含むオブジェクトモジュールを取り込ん
でメモリ上に配置する場合、 前記シンボル情報格納部に格納されている配置アドレス
を変更後の配置位置に更新することを特徴とする請求項
6ないし請求項8のいずれかに記載の言語処理装置。 - 【請求項10】 他のプログラム内で新規に生成された
前記未解決シンボル部を含むオブジェクトモジュールを
取り込んでメモリ上に配置する場合、 前記シンボル情報格納部に当該オブジェクトモジュール
の配置アドレスを追加することを特徴とする請求項6な
いし請求項8のいずれかに記載の言語処理装置。 - 【請求項11】 ソースファイルを構成する各ソースモ
ジュールを翻訳して実行可能なオブジェクトファイルを
生成する言語処理プログラムにおいて、 前記ソースモジュールを再翻訳するステップと、 前記各ソースモジュールを翻訳する度にシンボルの配置
アドレスとサイズとからなるシンボル情報を格納するシ
ンボル情報格納部から前回翻訳時に格納した当該モジュ
ールのアドレスを取得するステップと、 前記シンボル情報格納部から前回翻訳時の当該モジュー
ルのサイズを取得するステップと、 取得したサイズより今回翻訳後の当該モジュールのオブ
ジェクトモジュールのサイズの方が大きい場合、当該オ
ブジェクトモジュールを前半部と後半部に分割するステ
ップと、 分割した当該オブジェクトモジュールの前半部の末尾に
後半部へのジャンプ命令を挿入するステップと、 前半部を当該モジュールの前回の配置アドレスに配置す
るステップと、 メモリ上の空き領域を探すステップと、 分割した当該オブジェクトモジュールの後半部をメモリ
上の空き領域に配置するステップと、 前記シンボル情報格納部から当該オブジェクトモジュー
ルが参照する外部シンボルの配置アドレスを取得して、
当該オブジェクトモジュールにおける外部シンボルのア
ドレス解決を行うステップとを有することを特徴とする
言語処理プログラムを格納した記録媒体。 - 【請求項12】 ソースファイルを構成する各ソースモ
ジュールを翻訳して実行可能なオブジェクトファイルを
生成する言語処理プログラムにおいて、 新規のソースモジュールを追加して翻訳するステップ
と、 メモリ上の空き領域を探すステップと、 メモリ上の空き領域に今回翻訳した当該モジュールのオ
ブジェクトを配置するステップと、 前記各ソースモジュールを翻訳する度にシンボルの配置
アドレスとサイズとからなるシンボル情報を格納するシ
ンボル情報格納部から当該オブジェクトモジュールが参
照する外部シンボルの配置アドレスを取得して、当該オ
ブジェクトモジュールにおける外部シンボルのアドレス
解決を行うステップと を有することを特徴とする言語処理プログラムを格納し
た記録媒体。 - 【請求項13】 ソースファイルを構成する各ソースモ
ジュールを翻訳して実行可能なオブジェクトファイルを
生成する言語処理プログラムにおいて、 前記ソースモジュールが参照する外部シンボルの配置ア
ドレスを未解決の状態で翻訳してオブジェクトモジュー
ルを生成するステップと、 生成したオブジェクトモジュールに、アドレスが未解決
の外部シンボルのシンボル名称と当該オブジェクトにお
ける参照位置とからなる未解決シンボル部を付加してメ
モリ上に配置するステップと、 前記オブジェクトファイルの実行時に、前記オブジェク
トモジュールの未解決シンボル部から未解決シンボルを
特定し、特定した未解決シンボルの配置アドレスを、前
記各ソースモジュールを翻訳する度にシンボルの配置ア
ドレスとサイズとからなるシンボル情報を格納するシン
ボル情報格納部から取得して、当該オブジェクトモジュ
ールにおける前記参照位置に出現する未解決シンボルの
アドレス解決を行うステップとを有することを特徴とす
る言語処理プログラムを格納した記録媒体。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000292737A JP2002108625A (ja) | 2000-09-26 | 2000-09-26 | 言語処理装置及び言語処理プログラムを格納した記録媒体 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2000292737A JP2002108625A (ja) | 2000-09-26 | 2000-09-26 | 言語処理装置及び言語処理プログラムを格納した記録媒体 |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2002108625A true JP2002108625A (ja) | 2002-04-12 |
Family
ID=18775634
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2000292737A Pending JP2002108625A (ja) | 2000-09-26 | 2000-09-26 | 言語処理装置及び言語処理プログラムを格納した記録媒体 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2002108625A (ja) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011028648A (ja) * | 2009-07-28 | 2011-02-10 | Renesas Electronics Corp | オブジェクトコード生成システム、及びオブジェクトコード生成方法 |
US8813045B2 (en) | 2009-09-25 | 2014-08-19 | International Business Machines Corporation | Object level compatibility and class resizing utilizing semantic values |
JP2015524964A (ja) * | 2012-06-27 | 2015-08-27 | ノルディック セミコンダクタ アーエスアーNordic Semiconductor ASA | 集積回路型無線 |
JP2016192154A (ja) * | 2015-03-31 | 2016-11-10 | 株式会社デンソー | 並列化コンパイル方法、並列化コンパイラ、及び車載装置 |
-
2000
- 2000-09-26 JP JP2000292737A patent/JP2002108625A/ja active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2011028648A (ja) * | 2009-07-28 | 2011-02-10 | Renesas Electronics Corp | オブジェクトコード生成システム、及びオブジェクトコード生成方法 |
US8813045B2 (en) | 2009-09-25 | 2014-08-19 | International Business Machines Corporation | Object level compatibility and class resizing utilizing semantic values |
JP2015524964A (ja) * | 2012-06-27 | 2015-08-27 | ノルディック セミコンダクタ アーエスアーNordic Semiconductor ASA | 集積回路型無線 |
JP2016192154A (ja) * | 2015-03-31 | 2016-11-10 | 株式会社デンソー | 並列化コンパイル方法、並列化コンパイラ、及び車載装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3961376A1 (en) | Improving smart contracts execution with just-in-time compilation | |
CN101697131B (zh) | 一种可重定位文件动态加载的方法及装置 | |
US11966727B2 (en) | Load module compiler | |
US6609248B1 (en) | Cross module representation of heterogeneous programs | |
Vouillon et al. | From bytecode to JavaScript: the Js_of_ocaml compiler | |
Grant et al. | DyC: an expressive annotation-directed dynamic compiler for C | |
JP4841118B2 (ja) | ソフトウェア開発インフラストラクチャ | |
JP4050764B2 (ja) | コンパイルシステム | |
KR101137126B1 (ko) | 확장성 컴파일러 및 툴의 기반 구조에 대한 기술 언어 | |
TWI453671B (zh) | 用於程式碼轉換期間之本機碼和目標碼的組合執行之方法與裝置 | |
US7913243B2 (en) | Method and system for generating and applying patches to a computer program concurrently with its execution | |
US11366684B2 (en) | Import mechanism for hardware intrinsics | |
US8881123B2 (en) | Enabling symbol resolution of private symbols in legacy programs and optimizing access to the private symbols | |
JP2001216169A (ja) | 第1ビット・アーキテクチャの命令を第2ビット・アーキテクチャの命令に変換する方法、システム、プログラムおよびデータ構造 | |
JP2002108625A (ja) | 言語処理装置及び言語処理プログラムを格納した記録媒体 | |
Weidendorfer et al. | The case for binary rewriting at runtime for efficient implementation of high-level programming models in HPC | |
US10402320B1 (en) | Verifying the validity of a transition from a current tail template to a new tail template for a fused object | |
Drescher et al. | Fast Template-Based Code Generation for MLIR | |
Korsholm | Flash memory in embedded Java programs | |
Payer et al. | Lldsal: A low-level domain-specific aspect language for dynamic code-generation and program modification | |
Pedersen et al. | Resumable Java Bytecode–Process Mobility for the JVM | |
Jelenkovic | Ahead-of-time compilation of WebAssembly using Eclipse OMR | |
Stanek et al. | Online software maintenance for mission-critical systems | |
Ogel et al. | Supporting efficient dynamic aspects through reflection and dynamic compilation | |
JP2020086734A (ja) | コンパイラ |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050308 |
|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20071113 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20071204 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080204 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20080311 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20080512 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20080610 |