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
Application number
JP2000292737A
Other languages
English (en)
Inventor
Hiroaki Sato
弘明 佐藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Original Assignee
Toshiba Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Toshiba Corp filed Critical Toshiba Corp
Priority to JP2000292737A priority Critical patent/JP2002108625A/ja
Publication of JP2002108625A publication Critical patent/JP2002108625A/ja
Pending legal-status Critical Current

Links

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

(57)【要約】 【課題】 コンパイル済みのプログラムに対して変更や
追加等を加える場合に、変更対象のプログラムのみをリ
コンパイルするだけで実行可能なオブジェクトを更新す
ることができる言語処理装置を提供すること。 【解決手段】 各ソースモジュールを翻訳する度にシン
ボルの配置アドレスとサイズとからなるシンボル情報を
格納するシンボル情報格納部を有し、前記ソースモジュ
ールを再翻訳する際に、前記シンボル情報格納部から前
回翻訳時に格納した当該モジュールのアドレスを取得
し、この取得した前回の配置アドレスに今回翻訳した当
該モジュールのオブジェクトを配置し、前記シンボル情
報格納部から当該オブジェクトモジュールが参照する外
部シンボルの配置アドレスを取得して、当該オブジェク
トモジュールにおける外部シンボルのアドレス解決を行
うことによる。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明はコンピュータ・プロ
グラムの言語処理技術に係り、特に、プログラムの部分
コンパイルやオブジェクトレベルでのプログラムの部品
化等を可能にする言語処理装置及び言語処理プログラム
を格納した記録媒体に関する。
【0002】
【従来の技術】一般に、プログラミング言語を翻訳する
言語処理装置は、ソースプログラムを入力して、語彙解
析、構文解析、中間コード生成、コード最適化、コード
生成等の一連の翻訳処理を行い、オブジェクトプログラ
ムとして出力する。
【0003】図18は、ソースプログラムを翻訳するた
めの従来の典型的な言語処理装置を示した概略構成図で
あり、図19はその翻訳処理の一例を示すイメージ図で
ある。ソースファイル102にはソースモジュールとし
て関数FuncA、関数FuncB、関数FuncCの3つの関数が格
納されている。コンパイラ101はソースファイル10
2を入力して、このソースファイル102に格納されて
いる各関数に対してそれぞれ順番に上記一連の翻訳処理
を行い、実行可能オブジェクト103としてメモリ10
0上に配置出力する。
【0004】メモリ100上に配置された各オブジェク
トモジュールFuncA〜FuncCは、それぞれ機械語の命令コ
ード、データ、参照情報(reference)等を含んでい
る。ここで、参照情報とは、関数内部の変数や大域変数
Valを参照したり、他の関数やサブルーチンを呼び出し
たりするための参照先アドレス情報である。
【0005】従来のコンパイル方式では、一旦コンパイ
ルしたプログラムに対して変更や追加等を加える場合に
は、例えそのプログラムの変更量が極めて微細であった
としても、必ずソースファイル単位でコンパイルを行っ
ている。つまり、図19に示した例では、ソースファイ
ル102に含まれている全ての関数FuncA〜FuncCについ
て、リコンパイルを行っているのである。
【0006】
【発明が解決しようとする課題】従って、例えば、ソー
スファイル102の中の関数FuncAだけを変更するよう
なケースでも、無条件にソースファイル102中の全て
の関数FuncA〜FuncCについてコンパイルを行い、実行可
能オブジェクト103の各関数FuncA〜FuncCを最新の状
態に更新している。そのため、実質的な変更がない関数
FuncB,FuncCについても、無駄な翻訳処理が行われてい
るといった問題があった。
【0007】近年、コンピュータで利用されるプログラ
ムは、複雑化、肥大化する傾向にあり、上記のような問
題はますます深刻になってきている。
【0008】また、変更が生じた関数FuncAを他のユー
ザーに配布するような場合にも、関数FuncAのコンパイ
ル後のオブジェクトだけを配布することは出来ず、オブ
ジェクト103全体を配布するか、関数FuncAのソース
プログラムを配布する必要がある。更に、関数FuncAの
ソースプログラムを受け取った側は、関数FuncAだけで
はなく、全ての関数FuncA〜FuncCについてリコンパイル
を行って、オブジェクト103の各関数の参照先アドレ
ス情報を最新の状態に更新する必要がある。
【0009】ネットワーク技術やパーソナルコンピュー
タの普及により、コンピュータプログラムの利用者は広
範囲に拡大してきており、プログラムのバージョンアッ
プ等で更新プログラムを配布する際には、その手間や経
費は大きな負担となっている。
【0010】本発明はこのような課題を鑑みてなされた
ものであって、コンパイル済みのプログラムに対して変
更や追加等を加える場合に、変更対象のプログラムのみ
をリコンパイルするだけで実行可能なオブジェクトを更
新することができる言語処理装置及び言語処理プログラ
ムを格納した記録媒体を提供することを目的とする。
【0011】また、オブジェクトの参照先アドレス情報
の解決をコンパイル時ではなく実行時に行い、オブジェ
クトモジュールレベルで変更モジュールの配布や移植、
部品化等を容易に行うことができる言語処理装置及び言
語処理プログラムを格納した記録媒体を提供することを
第2の目的とする。
【0012】
【課題を解決するための手段】上記課題を解決するため
に、本発明は、ソースファイルを構成する各ソースモジ
ュールを翻訳して実行可能なオブジェクトファイルを生
成する言語処理装置において、前記各ソースモジュール
を翻訳する度にシンボルの配置アドレスとサイズとから
なるシンボル情報を格納するシンボル情報格納部を有
し、前記ソースファイルの少なくとも一部のソースモジ
ュールを再翻訳する際に、前記シンボル情報格納部から
前回翻訳時に格納した当該モジュールのアドレスを取得
し、この取得した前回の配置アドレスに今回翻訳した当
該モジュールのオブジェクトを配置し、前記シンボル情
報格納部から当該オブジェクトモジュールが参照する外
部シンボルの配置アドレスを取得して、当該オブジェク
トモジュールにおける外部シンボルのアドレス解決を行
うことを特徴とする。
【0013】本発明によれば、一旦コンパイルしたプロ
グラムに対して変更等が生じた場合に、その変更のある
ソースモジュールのみをリコンパイルするだけで、作成
しておいたシンボル情報格納部のモジュールや変数等の
シンボルのアドレス情報をもとに、当該モジュールを前
回と同じアドレスに配置することができ、他の変更のな
いモジュールとの整合性が保てる。つまり、部分コンパ
イルが可能になる。更に、当該モジュールにおける外部
シンボルのアドレス解決を行うことができ、他の変更の
ないモジュールや大域変数へのアクセスが可能となる。
【0014】また、本発明は、前記ソースモジュールを
再翻訳する際に、前記シンボル情報格納部から前回翻訳
時の当該モジュールのサイズを取得し、取得したサイズ
より今回翻訳後の当該モジュールのオブジェクトモジュ
ールのサイズの方が大きい場合、当該オブジェクトモジ
ュールを前半部と後半部に分割し、前半部を当該モジュ
ールの前回の配置アドレスに配置し、後半部をメモリ上
の空き領域に配置し、この前半部のサイズは前記シンボ
ル情報格納部から取得した前回翻訳時の当該モジュール
のサイズ以下であることを特徴とする。
【0015】これにより、変更されたモジュールのサイ
ズが変更前よりも大きくなった場合でも、分割して配置
することで整合性を保つことができる。
【0016】また、本発明は、前記オブジェクトモジュ
ールを分割する際に、当該オブジェクトモジュールの前
半部の末尾に後半部へのジャンプ命令を挿入し、このジ
ャンプ命令を含めた前半部のサイズは、前記シンボル情
報格納部から取得した前回翻訳時の当該モジュールのサ
イズ以下であることを特徴とする。
【0017】これにより、分割したモジュールの前半部
から後半部への接続を容易にすることができる。
【0018】また、本発明は、新たにソースモジュール
を追加して翻訳する際には、メモリ上の空き領域に今回
翻訳した当該モジュールのオブジェクトを配置し、前記
シンボル情報格納部から当該オブジェクトモジュールが
参照する外部シンボルの配置アドレスを取得して、当該
オブジェクトモジュールにおける外部シンボルの参照ア
ドレスの解決を行うことを特徴とする。
【0019】これにより、新たなソースモジュールを追
加する場合にもこのモジュールのみをコンパイルするだ
けで、他モジュールとの整合性を保ちつつ、メモリ上の
空き領域に配置することができる。
【0020】また、本発明は、ソースファイルを構成す
る各ソースモジュールを翻訳して実行可能なオブジェク
トファイルを生成する言語処理装置において、前記各ソ
ースモジュールを翻訳する度にシンボルの配置アドレス
とサイズとからなるシンボル情報を格納するシンボル情
報格納部と、生成したオブジェクトが参照する外部シン
ボルの配置アドレスの解決を行うリンカとを有し、前記
ソースファイルの少なくとも一部のソースモジュールを
翻訳する際に、当該モジュールが参照する外部シンボル
の配置アドレスが未解決の状態でオブジェクトモジュー
ルを生成し、生成したオブジェクトモジュールに、アド
レス未解決の外部シンボルのシンボル名称と当該オブジ
ェクトにおける参照位置とからなる未解決シンボル部を
付加してメモリ上に配置し、前記リンカはオブジェクト
ファイルの実行時に、前記オブジェクトモジュールの未
解決シンボル部からアドレスが未解決の外部シンボルを
特定し、特定した未解決シンボルの配置アドレスを前記
シンボル情報格納部から取得して、当該オブジェクトモ
ジュールの前記参照位置に出現する前記未解決シンボル
のアドレス解決を動的に行うことを第2の特徴とする。
この際、好ましくは、前記シンボル情報格納部をメモリ
上に配置する。
【0021】本発明によれば、シンボル解決をプログラ
ムの実行時に行うことができるため、モジュールを追加
/変更する場合などでも、他のモジュールとの整合性を
保ちながら極めて容易に組み込むすることができる。
【0022】また、本発明は、前記未解決シンボル部を
含むオブジェクトモジュールのメモリ上の配置位置を変
更する場合、前記シンボル情報格納部に格納されている
配置アドレスを変更後の配置位置に更新することを特徴
とする。
【0023】これにより、プログラムの実行時にモジュ
ールのコードやデータなどを移動しても、他のモジュー
ルとの整合性を容易に保つことができる。
【0024】また、本発明は、他のプログラム内で更新
された前記未解決シンボル部を含むオブジェクトモジュ
ールを取り込んでメモリ上に配置する場合、前記シンボ
ル情報格納部に格納されている配置アドレスを変更後の
配置位置に更新する。また、他のプログラム内で新規に
生成された前記未解決シンボル部を含むオブジェクトモ
ジュールを取り込んでメモリ上に配置する場合、前記シ
ンボル情報格納部に当該オブジェクトモジュールの配置
アドレスを追加することを特徴とする。
【0025】これにより、互いに独立するプログラム同
士で、オブジェクトモジュールレベルで変更モジュール
のみの配布や移植、部品化等を、他のモジュールとの整
合性を保ちながら極めて容易に行うことができる。
【0026】
【発明の実施の形態】以下、図面に基づいて、本発明の
実施形態について説明する。
【0027】(第1の実施形態)図1は本発明の第1の
特徴に係る言語処理装置の一実施形態を示す概略構成図
である。この言語処理装置は、ソースモジュールが格納
されているソースファイル2、ソースファイル2を入力
して所定の翻訳処理を行うコンパイラ1、翻訳結果とし
てコンパイラ1が出力する実行可能なオブジェクトファ
イル3などから構成され、更に、コンパイラ1は、シン
ボル情報格納部であるシンボル情報テーブル4を参照/
更新する。
【0028】尚、コンパイラ1の行う一連の処理手続き
は、言語処理装置である計算機に実行させることができ
る言語処理プログラムとして各種記録メディアに格納
し、また通信メディアにより伝送して頒布することが可
能である。本言語処理装置を実現する計算機は、記録媒
体に記録された上記言語処理プログラムにより動作制御
され、所定の処理手続きによる各処理を実行する。
【0029】図2はシンボル情報テーブル4の構成例を
示すイメージ図である。このシンボル情報テーブル4
は、シンボル名、シンボルの配置アドレス、シンボルの
サイズなどからなり、シンボル毎に1つレコードで構成
される。ここで、シンボルとは、プログラミングの際に
モジュール(関数)やデータ(変数)などに付加した参
照名である。例えば、関数「FuncA」はアドレス「0x800
0_0000」番地に配置されていて、そのサイズは「0x030
0」バイトであり、大域変数「val」はアドレス「0x8000
_3000」番地に配置されていて、そのサイズは「0x000
4」バイトである。
【0030】シンボル名が「0x00」のレコードはテーブ
ルの終端を表す。また、シンボル名「0xff」のレコード
はメモリ10上の空き領域(未使用領域)を表してお
り、図2の例では、アドレス「0x8000_2000」番地から
「0x1000」バイトの空き領域が存在することを示してい
る。
【0031】尚、このシンボル情報テーブル4は、ファ
イルとして構成される。
【0032】[第1実施例]本実施例では、一旦コンパ
イルしたプログラムに対して変更等が生じた場合などに
行うコンパイル処理の動作について説明する。従来はソ
ースファイル2に含まれる全てのモジュールについてリ
コンパイルする必要があったが、本発明においてはリコ
ンパイルするのは変更が生じたモジュールのみで良く、
そのために以下の処理を行う。
【0033】(1)リコンパイルしたモジュールのオブ
ジェクトは、リコンパイル前にそのオブジェクトモジュ
ールが配置されていたアドレスと同一のアドレスに配置
する。
【0034】(2)リコンパイルしたモジュールに係る
外部モジュールや外部変数などのシンボルのアドレス解
決を行う。
【0035】これによって、更新モジュールを前回と同
じアドレスに配置することができ、他の変更のないモジ
ュールとの整合性が保て、更に、当該モジュールにおけ
る外部シンボルのアドレス解決を行うことができ、他の
モジュールや大域変数へのアクセスが可能となる。
【0036】上記処理の詳細な説明を以下に示す。
【0037】図3は初回のコンパイル処理の動作状況を
示すイメージ図である。コンパイラ1はソースファイル
2に格納されている関数FuncA、FuncB、FuncCについて
順番に翻訳し、翻訳したオブジェクトモジュールをメモ
リ10上に出力する。例えば、オブジェクトモジュール
FuncAはメモリ10の「0x8000_0000」番地に配置され、
大域変数「val」は「0x8000_3000」番地に配置されてい
る。また、それぞれの翻訳処理を行う際に、翻訳したプ
ログラムの中に出現したシンボルのシンボル名、アドレ
ス、サイズ等を、図2に示したように、シンボル情報テ
ーブル4に出力する。
【0038】図4は2回目以降のコンパイル処理、つま
り一旦コンパイルしたプログラムに対して変更等が生じ
た場合などに行うコンパイル処理の動作状況を示すイメ
ージ図であり、図6はその処理の流れを表したフローチ
ャートである。ここでは、関数FuncAに対して変更を加
え、その結果、関数FuncA2に変更される例を示す。
【0039】はじめに、変更が生じた関数FuncA2につい
てコンパイル処理を行う(Step01)。この段階では、関
数FuncA2のシンボルのアドレス解決は行われていない。
【0040】次に、シンボル情報テーブル4から、前回
コンパイル時の関数FuncAの配置アドレスを取得する(S
tep02)。取得したアドレスは、今回のコンパイル後の
オブジェクトFuncA2を再配置するために使用する。
【0041】次に、シンボル情報テーブル4から、前回
コンパイル時の関数FuncAのモジュールサイズを取得し
て(Step03)、前回の関数FuncAのモジュールサイズと
今回のコンパイル後の関数FuncA2のモジュールサイズと
を比較する(Step04)。
【0042】比較した結果、今回更新後のモジュールサ
イズが前回のモジュールサイズより小さいかあるいは等
しい場合、Step01でコンパイルした関数FuncA2のオブジ
ェクトモジュールを関数FuncAが配置されていたアドレ
スに再配置する(Step09)。
【0043】Step04で比較した結果、逆に、今回更新後
のモジュールサイズの方が前回のモジュールサイズより
大きい場合、翻訳したオブジェクトFuncA2を前半部と後
半部に分割する(Step05)。
【0044】次に、図5に示すように、分割したオブジ
ェクトFuncA2の前半部の末尾に、後半部の先頭へジャン
プするジャンプ命令を付加した上で、この前半部を関数
FuncAが配置されていたアドレスに配置する(Step0
6)。この際、ジャンプ命令を含む前半部のサイズは、S
tep03で取得した関数FuncAのモジュールサイズと等しい
か、それより小さい値になるようにする。これにより、
関数FuncA2は他の関数に重なることなく配置される。
【0045】次に、シンボル情報テーブル4から、メモ
リ10上の空き領域の先頭アドレスを取得して(Step0
7)、取得した空き領域の先頭アドレスに関数FuncA2の
後半部を配置する(Step08)。
【0046】次に、関数FuncA2で使用しているローカル
変数などの内部シンボルのアドレスを解決する(Step1
0)。
【0047】更に、シンボル情報テーブル4を参照し
て、関数FuncA2に係る外部モジュールや外部変数などの
シンボルのアドレス解決を行う(Step11)。尚、この
時、シンボル情報テーブルに該当するシンボルの情報が
存在しない場合には、エラーとしてコンパイル処理を終
了する。
【0048】以上の処理の結果、図4に示すように、関
数FuncA2は前半部と後半部とに分割され、前半部は「0x
8000_0000」番地に配置され、後半部は「0x8000_2000」
番地に配置される。従って、更新モジュールである関数
FuncA2のみの部分コンパイルで、オブジェクトファイル
3の更新を行うことができる。尚、今回の関数FuncA2を
コンパイルしたことによるシンボル情報の変更内容は、
シンボル情報テーブル4に反映される。
【0049】[第2実施例]本実施例では、一旦コンパ
イルしたプログラムに対して、新たに追加するモジュー
ルが発生した場合などに行うコンパイル処理の動作につ
いて説明する。従来はソースファイル2に含まれる全て
のモジュールについてリコンパイルする必要があった
が、本発明においてはコンパイルするのは追加するモジ
ュールのみで良く、そのために以下の処理を行う。
【0050】(1)追加するモジュールのオブジェクト
は、メモリ上の空き領域に配置する。
【0051】(2)追加するモジュールに係る外部モジ
ュールや外部変数などのシンボルのアドレス解決を行
う。
【0052】これによって、追加モジュールを他のモジ
ュールに影響しないアドレスに配置することができ、他
の変更のないモジュールとの整合性が保て、更に、当該
モジュールにおける外部シンボルのアドレス解決を行う
ことができ、他のモジュールや大域変数へのアクセスが
可能となる。
【0053】上記処理の詳細な説明を以下に示す。
【0054】図7は2回目以降のコンパイル処理、つま
り一旦コンパイルしたプログラムに対して、新たに追加
するモジュールが発生した場合などに行うコンパイル処
理の動作状況を示すイメージ図であり、図8はその処理
の流れを表したフローチャートである。ここでは、関数
FuncDを新たに追加する例を示す。
【0055】はじめに、追加する関数FuncDについてコ
ンパイル処理を行う(Step21)。この段階では、シンボ
ルのアドレス解決は行われていない。
【0056】次に、シンボル情報テーブル4から、メモ
リ10上の空き領域の先頭アドレスを取得して(Step2
2)、取得した空き領域の先頭アドレスに関数FuncDのオ
ブジェクトを配置する(Step23)。
【0057】次に、関数FuncDで使用しているローカル
変数などの内部シンボルのアドレスを解決する(Step2
4)。
【0058】更に、シンボル情報テーブル4を参照し
て、関数FuncDに係る外部モジュールや外部変数などの
シンボルのアドレス解決を行う(Step25)。尚、この
時、シンボル情報テーブルに該当するシンボルの情報が
存在しない場合には、エラーとしてコンパイル処理を終
了する。
【0059】以上の処理の結果、図7に示すように、関
数FuncDは「0x8000_2000」番地に配置され、追加モジュ
ールのみの部分コンパイルで、オブジェクトファイル3
の更新を行うことができる。尚、今回の関数FuncDを追
加コンパイルしたことによるシンボル情報の変更内容
は、シンボル情報テーブル4に反映される。
【0060】(第2の実施形態)図9は本発明の第2の
特徴に係る言語処理装置の一実施形態を示す概略構成図
である。この言語処理装置は、ソースモジュールが格納
されているソースファイル2、ソースファイル2を入力
して所定の翻訳処理を行うコンパイラ1、翻訳結果とし
てコンパイラ1が出力するアドレス未解決のオブジェク
ト3aなどから構成され、更に、コンパイラ1は、シン
ボル情報格納部であるシンボル情報テーブル4を参照/
更新し、アドレス未解決のモジュール情報を格納する未
解決関数テーブル5を出力する。また、シンボル情報テ
ーブル4と未解決関数テーブル5の情報をもとに、アド
レス未解決オブジェクト3aのアドレス解決を動的に行
う動的リンカ6を備えている。アドレス未解決オブジェ
クト3aに係る未解決シンボルは、実行時に動的リンカ
6によってアドレスを解決される。
【0061】図10はアドレス未解決オブジェクト3a
の構成例を示すイメージ図である。アドレス未解決オブ
ジェクト3aとは、通常のコンパイラが出力するオブジ
ェクトとは異なり、シンボル解決をされていないオブジ
ェクト(関数)である。コンパイラ1は、図10(a)
に示すように、オブジェクトコード本体30(関数本
体)に未解決シンボル部20を付加してこのアドレス未
解決オブジェクト3aを出力する。
【0062】未解決シンボル部20は、先頭にこの未解
決シンボル部20のサイズ21を有し、続いて当該オブ
ジェクトコード本体30が参照するシンボルのシンボル
名221とそのオフセット(出現位置)231が複数個
格納される。尚、同図(b)は、未解決シンボル部20
のデータの格納例である。
【0063】図11はメモリ10上にシンボル情報テー
ブル4と未解決関数テーブル5が配置されている様子を
示すイメージ図である。シンボル情報テーブル4と未解
決関数テーブル5はファイルではなく、このようにメモ
リ10上に配置され、シンボル情報テーブル4の先頭ア
ドレスを指し示すシンボル情報レジスタ41と、未解決
関数テーブル5の先頭アドレスを指し示す未解決関数レ
ジスタ51を用意する。コンパイラ1やリンカ6は、こ
れらのシンボル情報レジスタ41や未解決関数レジスタ
51を用いることによって、シンボル情報テーブル4や
未解決関数テーブル5にアクセスすることができる。
【0064】図12(a)はメモリ10上にシンボル情
報テーブル4が配置された詳細のイメージを示し、同図
(b)はシンボル情報テーブル4のデータの格納例を示
したイメージ図である。このシンボル情報テーブル4に
はオブジェクトに含まれる外部シンボルのシンボル名、
配置アドレス、サイズが格納される。尚、第1〜第2実
施例で説明したシンボル情報テーブルのようにメモリ1
0上の空き領域を示す情報を格納するようにしても良
い。
【0065】図13(a)はメモリ10上に未解決関数
テーブル5が配置された詳細のイメージを示し、同図
(b)は未解決関数テーブル5のデータの格納例を示し
たイメージ図である。この未解決関数テーブル5にはオ
ブジェクトを構成する関数のうちアドレスが未解決の状
態の関数の関数名、配置アドレス、サイズが格納され
る。同図の例では関数FuncAと関数FuncCがアドレスが未
解決の状態であるので、未解決関数テーブル5にはこの
2つの関数の情報が格納されている。尚、全ての関数Fu
ncA〜FuncCのアドレスが未解決であるような場合には、
この未解決関数テーブル5は必ずしも必要ない。
【0066】図14(a)はリンカ6の実行タイミング
例を示すイメージ図であり、同図(b)はそのプログラ
ム例である。このように、リンカ6の実行を関数を呼び
出す処理の直前に行うようにすれば、リンカ6は呼び出
される度に未解決関数テーブル5に登録されている関数
内部のシンボル解決を行う。尚、リンカ6の実行タイミ
ングはこれに限定されるものではなく、リンカ6の実行
は未解決関数が実行されるときまでに行われれば良い。
【0067】図15はリンカ6の処理の流れを例示する
フローチャートである。
【0068】はじめに、未解決関数レジスタ51を用い
て未解決関数テーブル5を参照する(Step31)。
【0069】未解決関数テーブル5に未解決の関数があ
れば以下に続く処理を行うが、未解決関数テーブル5に
未解決の関数がなければ処理を終了する(Step32)。
【0070】未解決関数テーブル5に未解決の関数があ
った場合、次に、未解決関数3aの未解決シンボル部2
0を参照し、その未解決関数3aに出現する未解決シン
ボル名221を取得する(Step33)。
【0071】次に、シンボル情報レジスタ41を用いて
シンボル情報テーブル4を参照し、Step33で取得した未
解決シンボル名221の配置アドレスを取得する(Step
34)。
【0072】次に、未解決関数3aの関数本体30の先
頭アドレスを次式により算出する(Step35)。
【0073】関数本体30の先頭アドレス =未解決関
数3aの先頭アドレス +未解決シンボル部20のサイ
ズ21 例えば、図10に示した例によると、関数FuncAの本体
20の先頭アドレスは、関数FuncAの先頭アドレス「0x8
000_0000」番地に未解決シンボル部20のサイズ「001
e」バイトを加えた値「0x8000_001e」番地となる。
【0074】次に、未解決関数3aの関数本体30に出
現する未解決シンボルのアドレスを解決する(Step3
6)。関数本体30における未解決シンボルの出現位置
は次式により算出する。
【0075】未解決シンボルの出現位置 =関数本体3
0の先頭アドレス +未解決シンボルのオフセット 例えば、図10に示した例によると、関数FuncAの本体
20に出現する外部シンボルFuncBの出現位置は、関数F
uncA本体20の先頭アドレス「0x8000_001e」番地に未
解決シンボルのオフセット「001c」バイトを加えた値
「0x8000_003a」番地となる。この未解決シンボルの出
現位置にStep34で取得したシンボルのアドレスを埋め込
むことで、アドレスが解決される。
【0076】以上説明した実行時に動的にシンボル解決
を行う機能を利用すると、様々な用途に適用することが
できる。以下にその実施例について説明する。
【0077】(実行時シンボル解決機能を利用した関数
の追加)既存の実行可能なオブジェクトに対して新たに
モジュール(関数)を追加する場合、コンパイラ1は追
加するモジュールの内部参照で解決できるシンボルのみ
解決し、内部参照では解決できない外部シンボルなど
は、先に説明したようにオブジェクトコード本体30
(関数本体)に未解決シンボル部20を付加したアドレ
ス未解決オブジェクト3aを出力する。
【0078】例えば、関数FuncDを新たに追加するに
は、以下の手順は手順で行う。
【0079】(1)追加するソースモジュールFuncDを
コンパイルして、メモリ10上の空き領域に配置する。
尚、この際、外部シンボルのアドレスを解決していない
未解決オブジェクト3aとして配置する。
【0080】(2)未解決関数テーブル5に、未解決オ
ブジェクトであるFuncDの情報を追加する。
【0081】(3)動的リンカ6を利用して、未解決オ
ブジェクトFuncD内に出現する外部シンボルのアドレス
を解決する(図15、Step31〜Step36)。この処理は、
関数FuncDの追加時に行っても良いし、あるいは既存の
関数の呼び出し時に実行されるリンカ6に委ねても良
い。
【0082】(実行時シンボル解決機能を利用した位置
独立)実行可能なオブジェクトを形成する全ての関数を
未解決関数にしておくと、各関数は呼び出される度にリ
ンカ6によってシンボル解決をされることになる。これ
を利用して、実行時に関数や大域変数の配置位置を自由
に変更することができる。これを本明細書では「位置独
立」という。つまり、外部シンボルを未解決な状態にし
ておくことで、「位置」に依存することなく「位置」か
ら独立することができるのである。
【0083】図16は位置独立機能を利用して関数Func
Aのオブジェクトモジュールを移動したときのメモリ1
0の状態を示すイメージ図であり、同図(a)が移動前
の状態、同図(b)は移動後の状態を示しており、図1
7はその処理の流れを示したフローチャートである。
【0084】オブジェクトモジュールを移動する場合、
そのオブジェクトモジュールの先頭アドレスとサイズの
情報が必要になるが、それはシンボル情報テーブル4に
格納されている情報から入手することができる。
【0085】まず、シンボル情報テーブル4から、移動
するオブジェクトモジュールの先頭アドレス及びサイズ
を入手し、更に、メモリ10の空き領域のアドレスを取
得する(Step41)。
【0086】次に、オブジェクトモジュールFuncAを空
き領域に移動し(Step42)、移動後のFuncAの情報をシ
ンボル情報テーブル4反映する(Step43)。
【0087】次に、動的リンカ6を呼び出してオブジェ
クトモジュールFuncAのシンボル解決を行って(Step4
4)、オブジェクトを実行する(Step45)。
【0088】(実行時シンボル解決機能を利用した関数
の受け渡し)位置独立機能を利用することにより、互い
に独立するプログラム間で、あるいは言語処理装置間で
オブジェクトモジュールレベルで変更モジュールの配布
や移植、部品化等を行うことができる。
【0089】受け取り側は、受け取ったモジュールを自
分の環境内に組み込んで、動的リンカによって自分の環
境に応じてシンボル解決を行えば良い。従って、多くの
ユーザーに配布する場合や、ネットワークなどを介して
広範囲に配布する場合などでも、変更モジュールのみの
配布を行うことができる上、受け取り側も極めて容易に
変更モジュールの組み込みを行うことができる。
【0090】以上、第1の実施形態を用いて説明したよ
うに、一旦コンパイルしたプログラムに対して変更等が
生じた場合に、その変更のあるソースモジュールのみを
リコンパイルするだけで、作成しておいたシンボル情報
格納部のモジュールや変数等のシンボルのアドレス情報
をもとに、当該モジュールを前回と同じアドレスに配置
する部分コンパイルが可能となり、他の変更のないモジ
ュールとの整合性が保てる。更に、当該モジュールにお
ける外部シンボルのアドレス解決を行うことができ、他
のモジュールや大域変数へのアクセスが可能となる。
【0091】また、変更されたモジュールのサイズが変
更前よりも大きくなった場合でも、分割して配置するこ
とで整合性を保つことができ、分割したモジュールの前
半部から後半部への接続を容易にすることができる。
【0092】新たにソースモジュールを追加して翻訳す
る際にもこのモジュールのみをコンパイルするだけで、
他モジュールとの整合性を保ちつつ、メモリ上の空き領
域に配置することができる。
【0093】また、第2の実施形態を用いて説明したよ
うに、シンボル解決をプログラムの実行時に行うことが
できるため、モジュールを追加/変更する場合などで
も、他のモジュールとの整合性を保ちながら極めて容易
に組み込むすることができる。
【0094】また、プログラムの実行時にモジュールの
コードやデータなどを移動しても、他のモジュールとの
整合性を容易に保つことができる。
【0095】また、互いに独立するプログラム同士で、
あるいは言語処理装置間でオブジェクトモジュールレベ
ルで変更モジュールのみの配布や移植、部品化等を極め
て容易に行うことができる。
【0096】以上、本発明について、詳細に説明した
が、本発明は本実施例に限定されず、本発明の主旨を逸
脱しない範囲において、種々の改良や変更を成し得るで
あろう。
【0097】
【発明の効果】本発明によれば、一旦コンパイルしたプ
ログラムに対して変更等が生じた場合に、その変更のあ
るソースモジュールのみをリコンパイルするだけで、作
成しておいたシンボル情報格納部のモジュールや変数等
のシンボルのアドレス情報をもとに、当該モジュールを
前回と同じアドレスに配置することができる部分コンパ
イルが可能になる。他の変更のないモジュールとの整合
性が保てる上、当該モジュールにおける外部シンボルの
アドレス解決を行うことができ、他のモジュールや大域
変数へのアクセスが可能となる。
【0098】従って、従来のように実質的な変更がない
モジュールについても、無駄な翻訳処理が行われている
といった問題が解決される。
【0099】また、新たにソースモジュールを追加して
翻訳する際にもこのモジュールのみをコンパイルするだ
けで、他モジュールとの整合性を保ちつつ、メモリ上の
空き領域に配置することができる。
【0100】また、本発明の第2の特徴によれば、シン
ボル解決をプログラムの実行時に行うことができるた
め、モジュールを追加/変更する場合などでも、他のモ
ジュールとの整合性を保ちながら極めて容易に組み込む
することができる。
【0101】また、位置に依存した形態から開放され、
プログラムの実行時にモジュールのコードやデータなど
を移動しても、他のモジュールとの整合性を容易に保つ
ことができる。
【0102】また、互いに独立するプログラム同士で、
あるいは言語処理装置間でオブジェクトモジュールレベ
ルで変更モジュールのみの配布や移植、部品化等を、他
のモジュールとの整合性を保ちながら極めて容易に行う
ことができる。
【図面の簡単な説明】
【図1】本発明に係る第1の特徴の言語処理装置の一実
施形態を示す概略構成図である。
【図2】シンボル情報テーブルのレイアウト例を示す概
略図である。
【図3】第1実施例における初回のコンパイル処理の処
理例を示すイメージ図である。
【図4】第1実施例における2回目以降のコンパイル処
理の処理例を示すイメージ図である。
【図5】図4に示したコンパイル処理におけるオブジェ
クトモジュールの分割処理の処理例を示すイメージ図で
ある。
【図6】図4に示したコンパイル処理の処理手順例を示
すフローチャートである。
【図7】第2実施例におけるコンパイル処理の処理例を
示すイメージ図である。
【図8】図7に示したコンパイル処理の処理手順例を示
すフローチャートである。
【図9】本発明に係る第2の特徴の言語処理装置の一実
施形態を示す概略構成図である。
【図10】未解決オブジェクトモジュールのレイアウト
例を示す概略図である。
【図11】シンボル情報テーブル及び未解決関数テーブ
ルのメモリへの配置例を示すイメージ図である。
【図12】シンボル情報テーブルの構成例を示すイメー
ジ図である。
【図13】未解決関数テーブルの構成例を示すイメージ
図である。
【図14】動的リンカの動作タイミング例を示すイメー
ジ図である。
【図15】動的リンカの処理手順例を示すフローチャー
トである。
【図16】位置独立機能を説明するためのイメージ図で
ある。
【図17】図16に示した位置独立機能の処理手順例を
示すフローチャートである。
【図18】従来の言語処理装置の一例を示す概略構成図
である。
【図19】図18に示した従来の言語処理装置のコンパ
イル処理の処理例を示すイメージ図である。
【符号の説明】
1....コンパイラ 2....ソースファイル 3....実行可能オブジェクト 3a....アドレス未解決オブジェクト 4....シンボル情報テーブル 5....未解決関数テーブル 6....動的リンカ 10....メモリ 20....未解決シンボル部 21....未解決シンボル部のサイズ 221....未解決シンボル名 231....オフセット 30....関数本体 41....シンボル情報レジスタ 51....未解決関数レジスタ

Claims (13)

    【特許請求の範囲】
  1. 【請求項1】 ソースファイルを構成する各ソースモジ
    ュールを翻訳して実行可能なオブジェクトファイルを生
    成する言語処理装置において、 前記各ソースモジュールを翻訳する度にシンボルの配置
    アドレスとサイズとからなるシンボル情報を格納するシ
    ンボル情報格納部を有し、 前記ソースファイルの少なくとも一部のソースモジュー
    ルを再翻訳する際に、前記シンボル情報格納部から前回
    翻訳時に格納した当該モジュールのアドレスを取得し、
    この取得した前回の配置アドレスに今回翻訳した当該モ
    ジュールのオブジェクトを配置し、 前記シンボル情報格納部から当該オブジェクトモジュー
    ルが参照する外部シンボルの配置アドレスを取得して、
    当該オブジェクトモジュールにおける外部シンボルのア
    ドレス解決を行うことを特徴とする言語処理装置。
  2. 【請求項2】 前記ソースモジュールを再翻訳する際
    に、前記シンボル情報格納部から前回翻訳時の当該モジ
    ュールのサイズを取得し、取得したサイズより今回翻訳
    後の当該モジュールのオブジェクトモジュールのサイズ
    の方が大きい場合、当該オブジェクトモジュールを前半
    部と後半部に分割し、前半部を当該モジュールの前回の
    配置アドレスに配置し、後半部をメモリ上の空き領域に
    配置し、前記前半部のサイズは前記シンボル情報格納部
    から取得した前回翻訳時の当該モジュールのサイズ以下
    であることを特徴とする請求項1に記載の言語処理装
    置。
  3. 【請求項3】 前記オブジェクトモジュールを分割する
    際に、当該オブジェクトモジュールの前半部の末尾に後
    半部へのジャンプ命令を挿入し、このジャンプ命令を含
    めた前半部のサイズは、前記シンボル情報格納部から取
    得した前回翻訳時の当該モジュールのサイズ以下である
    ことを特徴とする請求項2に記載の言語処理装置。
  4. 【請求項4】 請求項1に記載の言語処理装置におい
    て、 新たにソースモジュールを追加して翻訳する際に、メモ
    リ上の空き領域に今回翻訳した当該モジュールのオブジ
    ェクトを配置し、 前記シンボル情報格納部から当該オブジェクトモジュー
    ルが参照する外部シンボルの配置アドレスを取得して、
    当該オブジェクトモジュールにおける外部シンボルの参
    照アドレスの解決を行うことを特徴とする言語処理装
    置。
  5. 【請求項5】 前記各ソースモジュールを翻訳する度
    に、前記シンボル情報格納部にメモリ上の空き領域のア
    ドレスを格納し、 前記メモリ上の空き領域にオブジェクトモジュールを配
    置する際には、前記シンボル情報格納部からメモリ上の
    空き領域のアドレスを取得し、この取得したアドレスに
    配置することを特徴とする請求項2ないし請求項4のい
    ずれかに記載の言語処理装置。
  6. 【請求項6】 ソースファイルを構成する各ソースモジ
    ュールを翻訳して実行可能なオブジェクトファイルを生
    成する言語処理装置において、 前記各ソースモジュールを翻訳する度にシンボルの配置
    アドレスとサイズとからなるシンボル情報を格納するシ
    ンボル情報格納部と、 生成したオブジェクトが参照する外部シンボルの配置ア
    ドレスの解決を行うリンカとを有し、 前記ソースファイルの少なくとも一部のソースモジュー
    ルを翻訳する際に、当該モジュールが参照する外部シン
    ボルの配置アドレスが未解決の状態でオブジェクトモジ
    ュールを生成し、 生成したオブジェクトモジュールに、アドレス未解決の
    外部シンボルのシンボル名称と当該オブジェクトにおけ
    る参照位置とからなる未解決シンボル部を付加してメモ
    リ上に配置し、 前記リンカはオブジェクトファイルの実行時に、前記オ
    ブジェクトモジュールの未解決シンボル部からアドレス
    が未解決の外部シンボルを特定し、特定した未解決シン
    ボルの配置アドレスを前記シンボル情報格納部から取得
    して、当該オブジェクトモジュールの前記参照位置に出
    現する前記未解決シンボルのアドレス解決を動的に行う
    ことを特徴とする言語処理装置。
  7. 【請求項7】 前記シンボル情報格納部をメモリ上に配
    置することを特徴とする請求項6に記載の言語処理装
    置。
  8. 【請求項8】 前記未解決シンボル部を含むオブジェク
    トモジュールのメモリ上の配置位置を変更する場合、前
    記シンボル情報格納部に格納されている配置アドレスを
    変更後の配置位置に更新することを特徴とする請求項6
    ないし請求項7のいずれかに記載の言語処理装置。
  9. 【請求項9】 他のプログラム内で更新された前記未解
    決シンボル部を含むオブジェクトモジュールを取り込ん
    でメモリ上に配置する場合、 前記シンボル情報格納部に格納されている配置アドレス
    を変更後の配置位置に更新することを特徴とする請求項
    6ないし請求項8のいずれかに記載の言語処理装置。
  10. 【請求項10】 他のプログラム内で新規に生成された
    前記未解決シンボル部を含むオブジェクトモジュールを
    取り込んでメモリ上に配置する場合、 前記シンボル情報格納部に当該オブジェクトモジュール
    の配置アドレスを追加することを特徴とする請求項6な
    いし請求項8のいずれかに記載の言語処理装置。
  11. 【請求項11】 ソースファイルを構成する各ソースモ
    ジュールを翻訳して実行可能なオブジェクトファイルを
    生成する言語処理プログラムにおいて、 前記ソースモジュールを再翻訳するステップと、 前記各ソースモジュールを翻訳する度にシンボルの配置
    アドレスとサイズとからなるシンボル情報を格納するシ
    ンボル情報格納部から前回翻訳時に格納した当該モジュ
    ールのアドレスを取得するステップと、 前記シンボル情報格納部から前回翻訳時の当該モジュー
    ルのサイズを取得するステップと、 取得したサイズより今回翻訳後の当該モジュールのオブ
    ジェクトモジュールのサイズの方が大きい場合、当該オ
    ブジェクトモジュールを前半部と後半部に分割するステ
    ップと、 分割した当該オブジェクトモジュールの前半部の末尾に
    後半部へのジャンプ命令を挿入するステップと、 前半部を当該モジュールの前回の配置アドレスに配置す
    るステップと、 メモリ上の空き領域を探すステップと、 分割した当該オブジェクトモジュールの後半部をメモリ
    上の空き領域に配置するステップと、 前記シンボル情報格納部から当該オブジェクトモジュー
    ルが参照する外部シンボルの配置アドレスを取得して、
    当該オブジェクトモジュールにおける外部シンボルのア
    ドレス解決を行うステップとを有することを特徴とする
    言語処理プログラムを格納した記録媒体。
  12. 【請求項12】 ソースファイルを構成する各ソースモ
    ジュールを翻訳して実行可能なオブジェクトファイルを
    生成する言語処理プログラムにおいて、 新規のソースモジュールを追加して翻訳するステップ
    と、 メモリ上の空き領域を探すステップと、 メモリ上の空き領域に今回翻訳した当該モジュールのオ
    ブジェクトを配置するステップと、 前記各ソースモジュールを翻訳する度にシンボルの配置
    アドレスとサイズとからなるシンボル情報を格納するシ
    ンボル情報格納部から当該オブジェクトモジュールが参
    照する外部シンボルの配置アドレスを取得して、当該オ
    ブジェクトモジュールにおける外部シンボルのアドレス
    解決を行うステップと を有することを特徴とする言語処理プログラムを格納し
    た記録媒体。
  13. 【請求項13】 ソースファイルを構成する各ソースモ
    ジュールを翻訳して実行可能なオブジェクトファイルを
    生成する言語処理プログラムにおいて、 前記ソースモジュールが参照する外部シンボルの配置ア
    ドレスを未解決の状態で翻訳してオブジェクトモジュー
    ルを生成するステップと、 生成したオブジェクトモジュールに、アドレスが未解決
    の外部シンボルのシンボル名称と当該オブジェクトにお
    ける参照位置とからなる未解決シンボル部を付加してメ
    モリ上に配置するステップと、 前記オブジェクトファイルの実行時に、前記オブジェク
    トモジュールの未解決シンボル部から未解決シンボルを
    特定し、特定した未解決シンボルの配置アドレスを、前
    記各ソースモジュールを翻訳する度にシンボルの配置ア
    ドレスとサイズとからなるシンボル情報を格納するシン
    ボル情報格納部から取得して、当該オブジェクトモジュ
    ールにおける前記参照位置に出現する未解決シンボルの
    アドレス解決を行うステップとを有することを特徴とす
    る言語処理プログラムを格納した記録媒体。
JP2000292737A 2000-09-26 2000-09-26 言語処理装置及び言語処理プログラムを格納した記録媒体 Pending JP2002108625A (ja)

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)

* Cited by examiner, † Cited by third party
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 株式会社デンソー 並列化コンパイル方法、並列化コンパイラ、及び車載装置

Cited By (4)

* Cited by examiner, † Cited by third party
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