JP2007304840A - コンパイル方法、デバッグ方法、コンパイルプログラムおよびデバッグプログラム - Google Patents

コンパイル方法、デバッグ方法、コンパイルプログラムおよびデバッグプログラム Download PDF

Info

Publication number
JP2007304840A
JP2007304840A JP2006132380A JP2006132380A JP2007304840A JP 2007304840 A JP2007304840 A JP 2007304840A JP 2006132380 A JP2006132380 A JP 2006132380A JP 2006132380 A JP2006132380 A JP 2006132380A JP 2007304840 A JP2007304840 A JP 2007304840A
Authority
JP
Japan
Prior art keywords
language specification
program
language
function
partial
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
JP2006132380A
Other languages
English (en)
Inventor
Shinobu Asao
忍 浅尾
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.)
Panasonic Holdings Corp
Original Assignee
Matsushita Electric Industrial Co Ltd
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 Matsushita Electric Industrial Co Ltd filed Critical Matsushita Electric Industrial Co Ltd
Priority to JP2006132380A priority Critical patent/JP2007304840A/ja
Priority to US11/797,797 priority patent/US20070266379A1/en
Priority to CNA2007101068355A priority patent/CN101071385A/zh
Publication of JP2007304840A publication Critical patent/JP2007304840A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3628Software debugging of optimised code

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Devices For Executing Special Programs (AREA)
  • Debugging And Monitoring (AREA)

Abstract

【課題】従来の方法でC言語とC++言語のプログラムを結合させるためには、リンケージ指定をするか、C++言語としてコンパイルする必要がある。リンケージ指定はユーザにプログラム修正の負担を強いる。また、C++言語でコンパイルする場合は、コードが冗長に生成されてしまう。
【解決手段】入力プログラムの特定の範囲に対する言語仕様を解析し中間コードに記録しておく。特定の範囲間で言語仕様に相違がある場合にサブセット側の言語仕様をスーパーセット側の言語仕様に合わせた名前解決を行う。また、多重定義外部関数、名前空間に所属する外部関数、テンプレートから生成される外部関数は、プログラム中唯一の名前を持つ外部関数に変更する。この結果、リンケージ指定をする必要なくプログラムの結合が可能となり、かつ部分的に最適な言語仕様でコンパイルが可能となり、コードの冗長性を防ぐことができる。
【選択図】図1

Description

本発明は、高級言語により記述されたプログラムを目的プログラムに変換するコンパイル方法、そのデバッグ方法、コンパイルプログラムおよびデバッグプログラムに関する。
近年のソフトウェア開発においては、プログラムの規模が大規模化してきており、それに伴って保守性、再利用性の高いオブジェクト指向言語が注目されている。オブジェクト指向言語の代表例に、例えばC++言語が挙げられる。C++言語は、長年プログラミングに広く使用されているC言語に代わるものとして注目されており、C言語からC++言語へのプログラミング移行が各所で行われている。移行においては、C++言語はC言語の上位互換であるため、通常は単にC言語コンパイラをC++言語コンパイラに置き換えるだけで問題なく動作する目的コードを生成することができる。しかし、C言語で記載されたプログラムをC++言語としてコンパイルすると、コードサイズ、実行時間が増加するという問題が発生する。
この問題に対する従来の解決方法は、プログラムに対してリンケージ指定を使用するものがある(例えば、非特許文献1参照)。また、プログラム内の言語仕様の範囲を解析し、自動的にできるだけサブセットの仕様を適用してコンパイルしているものもある(例えば、特許文献1参照、図21)。
特開2003−50700号公報(第5−6頁、第1−3図)“プログラム変換方法” M・A・エリス、B・ストラウストラップ 著 足立高徳、小山裕司 訳"注解 C++ リファレンスマニュアル""The Annotated C++ Reference Manual"7.4章 リンケージ指定
しかし、非特許文献1で説明しているリンケージ指定を使用する方法では、プログラマに対してリンケージ指定を考慮したプログラミングを強制させることになり、容易なC++言語への移行の妨げとなる。また、特許文献1で説明しているプログラム変換方法では、C++言語から組み込み向けのC++サブセット仕様であるEC++としてのコンパイルは可能であるものの、プログラム中のシンボル(関数名や変数名など)符号化の整合性を考慮していないため、C言語としてのコンパイルまでは対応していない。その結果、言語仕様の縮退による十分なコードサイズ削減、実行時間短縮の最適化が見込めない。
本発明は、かかる課題に鑑みてなされたものであり、プログラマがリンケージ指定を意識することなく容易に上位互換プログラムへの移行が可能であり、かつ最大限の言語仕様縮退によるコードサイズ削減、実行時間短縮を実現するコンパイル方法ならびに容易にチューニングが可能なデバッグ方法を提供することを目的とする。
本発明のコンパイル方法は、入力プログラムを目的プログラムに変換するコンパイル方法であって、前記入力プログラムの特定の範囲に対する言語仕様を決定する部分言語仕様決定ステップと、特定の範囲間で言語仕様に相違がある場合に前記特定の範囲の一方において少なくとも一部のコードを補正する部分コード補正ステップとを含むものである。すなわち、コードを結合可能とするようにコードを補正する。
この方法によれば、部分的に異なる言語仕様を含むプログラムを結合でき、最適な言語仕様でコンパイルが可能となるため、コード生成効率が向上する。
好ましくは、前記部分言語仕様決定ステップは、前記入力プログラムの特定の範囲内で使用されているプログラミング言語の機能に基づいて言語仕様を決定するものとする。
この方法によれば、プログラマが特にソースプログラムを修正することなく、部分的に異なる言語仕様を含むプログラムを結合でき、最適な言語仕様でコンパイルが可能となるため、コード生成効率が向上する。
さらに好ましくは、前記部分言語仕様決定ステップは、前記入力プログラム中に言語仕様制御文が存在する場合、前記言語仕様制御文に基づいて言語仕様を決定するものとする。
この方法によれば、例えばプログラマがソースプログラムに#pragma指令による言語仕様制御文を記述することで、もともとソースプログラムに記述されている機能に影響されず、自由に言語仕様を選択することができる。
さらに好ましくは、前記部分言語仕様決定ステップは、前記入力プログラムをコンパイルするコンパイルシステムに言語仕様制御命令が与えられている場合、前記言語仕様制御命令に基づいて言語仕様を決定するものとする。
この方法によれば、例えばプログラマがコンパイラシステムのオプションによって言語仕様制御命令を与えることで、ソースプログラムに修正を加えることなく、かつもともとソースプログラムに記述されている機能に影響されず、自由に言語仕様を選択することができる。
さらに好ましくは、前記部分コード補正ステップは、すべての関数に対して、定義と参照で言語仕様に相違がある場合は、サブセットの言語仕様を持つ関数符号化名を、スーパーセットの言語仕様を持つ関数符号化名に変更するものとする。
この方法によれば、定義と参照の言語仕様に相違がある場合でも正しくプログラムを結合することができる。
さらに好ましくは、前記部分コード補正ステップは、多重定義されているすべての外部関数を、プログラム中唯一の関数名を持つ多重定義されていない外部関数に変更して、再度前記部分言語仕様決定ステップを行うものとする。
この方法によれば、多重定義関数を使用しているC++プログラムをCプログラムとしてコンパイルすることができ、コード生成効率が向上する。
さらに好ましくは、前記部分コード補正ステップは、名前空間に所属するすべての外部関数を、プログラム中唯一の関数名を持つ名前空間に所属しない外部関数に変更して、再度前記部分言語仕様決定ステップを行うものとする。
この方法によれば、名前空間を使用しているC++プログラムをCプログラムとしてコンパイルすることができ、コード生成効率が向上する。
さらに好ましくは、前記部分コード補正ステップは、テンプレートから生成されるすべての外部関数を、プログラム中唯一の関数名を持つテンプレートから生成されない外部関数に変更して、再度前記部分言語仕様決定ステップを行うものとする。
この方法によれば、テンプレートを使用しているC++プログラムをCプログラムとしてコンパイルすることができ、コード生成効率が向上する。
本発明のデバッグ方法は、入力プログラムをデバッグするデバッグ方法であって、前記入力プログラムの特定の範囲に対する言語仕様を認識する部分言語仕様認識ステップと、各範囲の言語仕様をプログラムソースとともに表示する部分言語仕様表示ステップとを含むものである。
この方法によれば、プログラマは各プログラム部分がどの言語仕様でコンパイルされたかを容易に確認でき、デバッグならびにチューニング作業を効率良く行うことができる。
さらに好ましくは、解析対象がテンプレートから生成されたインスタンスの場合に、テンプレートを展開したソースプログラムを表示するテンプレート展開表示ステップを含むものとする。
この方法によれば、プログラマがテンプレート展開後のソースプログラムを容易に把握でき、さらにデバッグならびにチューニング作業を効率良く行うことができる。
さらに好ましくは、認識した言語仕様に対してサブセットの言語仕様が定義されている場合に、サブセットの言語仕様から逸脱しているプログラム部分の内容を明記するサブセット言語仕様違反部分の表示ステップを含むものとする。
この方法によれば、プログラマがサブセットから逸脱しているプログラム部分を容易に把握でき、さらにチューニング作業を効率良く行うことができる。
なお、本発明は、このような特徴的なステップを有するコンパイル方法ならびにデバッグ方法として実現することができるだけでなく、当該コンパイル方法ならびにデバッグ方法に含まれる特徴的なステップをコンピュータに実行させるコンパイルプログラム、デバッグプログラムとして実現したり、当該コンパイル方法ならびにデバッグ方法に含まれる特徴的なステップを手段とするコンパイラ装置、デバッガ装置として実現したりすることもできる。そして、そのようなコンパイラ、デバッガは、CD−ROM(Compact Disc-Read Only Memory)などの記憶媒体やインターネット等の伝送媒体を介して流通させることができるのは言うまでもない。
コンパイルプログラムについては、入力プログラムを目的プログラムに変換するコンパイルプログラムであって、前記入力プログラムの特定の範囲に対する言語仕様を決定する部分言語仕様決定機能と、特定の範囲間で言語仕様に相違がある場合に前記特定の範囲の一方において少なくとも一部のコードを補正する部分コード補正機能とを含むものとする。
好ましくは、前記部分言語仕様決定機能は、前記入力プログラムの特定の範囲内で使用されているプログラミング言語の機能に基づいて言語仕様を決定するものとする。
さらに好ましくは、前記部分言語仕様決定機能は、前記入力プログラム中に言語仕様制御文が存在する場合、前記言語仕様制御文に基づいて言語仕様を決定するものとする。
さらに好ましくは、前記部分言語仕様決定機能は、前記入力プログラムをコンパイルするコンパイルシステムに言語仕様制御命令が与えられている場合、前記言語仕様制御命令に基づいて言語仕様を決定するものとする。
さらに好ましくは、前記部分コード補正機能は、すべての関数に対して、定義と参照で言語仕様に相違がある場合は、サブセットの言語仕様を持つ関数符号化名を、スーパーセットの言語仕様を持つ関数符号化名に変更するものとする。
さらに好ましくは、前記部分コード補正機能は、多重定義されているすべての外部関数を、プログラム中唯一の関数名を持つ多重定義されていない外部関数に変更して、再度前記部分言語仕様決定機能を行うものとする。
さらに好ましくは、前記部分コード補正機能は、名前空間に所属するすべての外部関数を、プログラム中唯一の関数名を持つ名前空間に所属しない外部関数に変更して、再度前記部分言語仕様決定機能を行うものとする。
さらに好ましくは、前記部分コード補正機能は、テンプレートから生成されるすべての外部関数を、プログラム中唯一の関数名を持つテンプレートから生成されない外部関数に変更して、再度前記部分言語仕様決定機能を行うものとする。
また、デバッグプログラムについては、入力プログラムをデバッグするデバッグプログラムであって、前記入力プログラムの特定の範囲に対する言語仕様を認識する部分言語仕様認識機能と、各範囲の言語仕様をプログラムソースとともに表示する部分言語仕様表示機能を行うことを特徴とする。
好ましくは、さらに、解析対象がテンプレートから生成されたインスタンスの場合に、テンプレートを展開したソースプログラムを表示するテンプレート展開表示機能を行うものとする。
さらに好ましくは、認識した言語仕様に対してサブセットの言語仕様が定義されている場合に、サブセットの言語仕様から逸脱しているプログラム部分の内容を明記するサブセット言語仕様違反部分の表示機能を行うものとする。
本発明のコンパイル方法によれば、部分的に異なる言語仕様を含むプログラムを容易に結合でき、より最適な言語仕様でコンパイルが可能となるため、コード生成効率が向上する。また、本発明のデバッグ方法によれば、プログラマは各プログラム部分がどの言語仕様でコンパイルされたか、サブセットの言語仕様に落とし込む場合にどのソース部分を修正すればよいかが容易に把握でき、デバッグならびにチューニング作業を効率良く行うことができる。
以下、本発明の実施の形態におけるコンパイル方法について図面を参照しながら説明する。図1は、コンパイラにより実行される処理のフローチャートである。
コンパイラは、プログラム記憶部D1に記憶されているヘッダファイルおよびソースプログラムを読み込む(ステップS1)。コンパイラは、読み込んだソースプログラムの構文を解析し、シンボルテーブルの生成や構文木の生成を行う(ステップS2)。次に、コンパイラは、生成された構文木を基に、中間コードを生成する(ステップS3)。その後、コンパイラは、生成された中間コードに対して各種最適化を施す(ステップS4)。また、コンパイラは、最適化された中間コードに含まれるすべての変数に対して、レジスタやメモリなどのハードウェア資源を割り付け(ステップS5)、資源割付された中間コードをオブジェクトコードに変換して、オブジェクトプログラムを生成コード記憶部D2に出力する(ステップS6)。
最適化ステップS4は、部分言語仕様決定ステップS10と、部分コード補正ステップS11と、その他の最適化ステップS12とを含む。
部分言語仕様決定ステップS10は、中間コードを解析し、各プログラムの部分的な範囲における言語仕様を決定する。部分コード補正ステップS11は、部分言語仕様決定ステップS10で決定した各プログラムの部分的な範囲における言語仕様を解析し、各範囲間での言語仕様の相違に応じて、各範囲のコードを結合可能とするようにコードを補正する。部分言語仕様決定ステップS10ならびに部分コード補正ステップS11の詳細については後述する。その他の最適化ステップS12は、一般的な最適化ステップであり、本発明の要旨ではないため、その説明は省略する。
なお、ソースプログラム入力ステップS1、構文解析ステップS2、中間コード生成ステップS3、その他の最適化ステップS12、資源割付ステップS5、およびオブジェクト出力ステップS6については、既存の処理と同様の処理であり、本発明の主眼ではない。よって詳細な説明は省略する。
以下、本発明の主眼である部分言語仕様決定ステップS10ならびに部分コード補正ステップS11について説明する。
図2は、部分言語仕様決定ステップS10の詳細を示すフローチャートである。
ループ処理L1として、入力プログラムの特定の範囲に対応する中間コード毎に対して、ステップS21からステップS25を実施する。解析対象が存在するときは、ステップS21へ進み、解析対象が存在しないときは、ステップS11へ進む。
ステップS21においては、解析対象範囲内で使用されているプログラミング言語の機能に基づいて言語仕様を決定し、中間言語に言語仕様情報を記録し、次いでステップS22へ進む。ここでの言語仕様情報とは、少なくともどの言語仕様に準拠しているかどうかが判別できる情報(例えば、C++言語であれば、“C++”という文字列など)である。
ステップS22においては、解析対象範囲内で、言語仕様制御文が存在するかどうかを判定する。ここでの言語仕様制御文とは、例えば、#pragma指令のように、ソースプログラムに記述することでコンパイラに対して特定の動作を指定するものである。判定結果が真であればステップS23へ進み、判定結果が偽であればステップS24へ進む。
ステップS23においては、言語仕様制御文に基づいて言語仕様を決定し、中間言語に言語仕様情報を記録し、次いでステップS24へ進む。
ステップS24においては、コンパイルシステムに言語仕様制御命令が与えられているかどうかを判定する。ここでの言語仕様制御命令とは、例えばコマンドラインオプションのように、コンパイラシステムに直接渡して、コンパイラに対して特定の動作を指定するものである。判定結果が真であればステップS25へ進み、判定結果が偽であれば、ループ処理L1へ進む。
図3は、部分コード補正ステップS11の詳細を示すフローチャートである。
ループ処理L2においては、すべての関数に対する中間コード毎に対して、ステップS31からステップS38を実施する。解析対象が存在するときは、ステップS31へ進み、解析対象が存在しないときは、ステップS39へ進む。
ステップS31においては、定義と参照で言語仕様に相違が存在するかどうかを判定する。ここでの言語仕様の相違とは、例えば関数定義部分における言語仕様は“C++”と中間コードに記録されており、関数参照部分における言語仕様は“C”と中間コードに記録されているような場合である。判定結果が真であればステップS32へ進み、判定結果が偽であればステップS33へ進む。
ステップS32においては、サブセットの言語仕様を持つ関数符号化名を、スーパーセットの言語仕様を持つ関数符号化名に変更し、次いでステップS33へ進む。
ステップS33においては、多重定義されている外部関数であるかどうかを判定する。ここでの多重定義とは、f(void)とf(int)のように関数名が同じで引数が異なるように定義されているような場合である。判定結果が真であればステップS34へ進み、判定結果が偽であればステップS35へ進む。
ステップS34においては、プログラム中唯一の関数名を持つ、多重定義されていない外部関数に変更し、次いでステップS35へ進む。
ステップS35においては、名前空間に所属する外部関数であるかどうかを判定する。ここでの名前空間に所属する外部関数とは、namespace S{ int f(void) }のように名前空間(namespace)スコープ内で宣言されている関数である。判定結果が真であればステップS36へ進み、判定結果が偽であればステップS37へ進む。
ステップS36においては、プログラム中唯一の関数名を持つ、名前空間に所属しない外部関数に変更し、次いでステップS37へ進む。
ステップS37においては、テンプレートから生成される外部関数であるかどうかを判定する。ここでのテンプレートから生成される外部関数とは、template <class T> T f(T a) のように定義されている関数テンプレート(function template)からインスタンス化される外部関数である。判定結果が真であればステップS38へ進み、判定結果が偽であれば、ループ処理L2へ進む。
ステップS38においては、プログラム中唯一の関数名を持つ、テンプレートから生成されない外部関数に変更し、次いでL2へ進む。
ステップS39においては、ステップS33、ステップS35、ステップS37のいずれかが真であったかどうかを判定する。判定結果が真であればステップS10へ進み、判定結果が偽であればステップS12へ進む。
以上のような部分言語仕様決定ステップS10と部分コード補正ステップS11を含む最適化ステップS4を施した中間コードに対して、資源割付処理(ステップS5)およびオブジェクトプログラム出力処理(ステップS6)を行うことにより、プログラマがリンケージ指定を意識することなく容易に上位互換プログラムへの移行が可能となり、かつ最大限の言語仕様縮退によるコードサイズ削減、実行時間短縮を実現することができる。
なお、本発明は中間コードに対しての解析に限定するものではなく、ソースプログラムの構文解析結果を表現しているデータであれば、どのような形態に対して解析を行ってもかまわない。
次に、本発明の実施の形態におけるデバッグ方法について図面を参照しながら説明する。図4は、デバッガにより実行される処理のフローチャートである。
デバッガは、プログラム記憶部D1に記憶されているプログラムを読み込む(ステップN1)。デバッガは、読み込んだプログラムを解析したのち、コマンド入力待ちステップN2に移行する。次に、デバッガは、部分言語仕様表示コマンドが入力されたかどうかを判定する(ステップN3)。真の場合、部分的に言語仕様を表示する部分言語仕様表示ステップN10を行う。その後、その他のソース情報表示ステップN11を実施し、コマンド入力待ちステップN2に移行する。偽の場合、その他のデバッグステップを実施し(ステップN4)、コマンド入力待ちステップN2に移行する。部分言語仕様表示ステップN10の詳細については後述する。その他のソース情報表示ステップN11は、一般的なソース情報表示ステップであり、本発明の要旨ではないため、その説明は省略する。
なお、プログラム入力ステップN1、コマンド入力待ちステップN2、その他のデバッグステップN4については、既存の処理と同様の処理であり本発明の主眼ではない。よって詳細な説明は省略する。
以下、本発明の主眼である部分言語表示ステップN10について説明する。図5は、部分言語仕様表示ステップN10の詳細を示すフローチャートである。
ループ処理L3においては、入力プログラムの特定の範囲に対応するデバッグ情報毎に対して、ステップN21からステップN26を実施する。解析対象が存在するときは、ステップN21へ進む。解析対象が存在しないときは、ステップN11へ進む。
ステップN21においては、言語仕様情報が存在するかどうかを判定する。判定結果が真であればステップN22へ進み、判定結果が偽であれば、ループ処理L3へ進む。
ステップN22においては、デバッグ情報に記録されている言語仕様情報に基づいて、各範囲の言語仕様をプログラムソースとともに表示し、次いでステップN23へ進む。
ステップN23においては、解析対象がテンプレートから生成されたインスタンスであるかどうかを判定する。判定結果が真であればステップN24へ進み、判定結果が偽であればステップN25へ進む。
ステップN24においては、テンプレートを展開したソースプログラムを表示し、次いでステップN25へ進む。
ステップN25においては、認識した言語仕様に対して、サブセットの言語仕様が定義されているかどうかを判定する。判定結果が真であればステップN26へ進み、判定結果が偽であれば、ループ処理L3へ進む。
ステップN26においては、サブセットの言語仕様から逸脱しているプログラム部分の内容を明記する。
以上のような部分言語仕様表示ステップN10を施したデバッグステップを行うことにより、プログラマは各プログラム部分がどの言語仕様でコンパイルされたか、サブセットの言語仕様に落とし込む場合に、どのソース部分を修正すればよいかが容易に把握でき、デバッグならびにチューニング作業を効率良く行うことができる。
以下、スーパーセットの言語仕様をC++言語とし、サブセットの言語仕様をC言語とした具体例を参照しながら、本発明のコンパイル方法ならびにデバッグ方法の詳細についてより詳細に説明する。
(具体例1)
図6は、プログラム記憶部D1に記憶されているソースプログラムの一例である。以下では、このソースプログラムを入力した場合のコンパイル方法を説明する。前提として、<main.cpp>はC++言語として、<sub.c>はC言語としてコンパイルすることがユーザよりオプションで指定されているものとする。ソースプログラムに#pragmaを記述する方法で言語仕様を指定することも可能であるが、コマンドラインでのオプションで指定した場合と類似した処理になるので、ここでは省略する。図6に示すソースファイル<main.cpp>は、外部関数fを参照している。ソースファイル<sub.c>は、外部関数fを定義している。
ここで、図7を用いて問題点をあらかじめ指摘しておく。図7は、中間コード生成ステップS3により生成された外部関数fの参照側の中間コードと定義側の中間コードの一部の情報である。
従来の方法で具体例1をコンパイルする場合、解析対象の中間コードの言語仕様を考慮せずにリンクする。そのため、この具体例1では関数符号化名が一致せず(_f_Fvと_f)、リンク時エラーとなってしまう。よって図8に示すように、明示的にリンケージ指定をするようユーザがプログラムを修正することにより(“C”を参照)、関数符号化名を統一させる必要がある。一般的にC言語のソースをC++言語で流用するためには、このような修正の工数がかかるため、開発効率が低下する。
次に、本実施の形態における具体例を示す。本具体例では、関数スコープの範囲に対して解析を実施することとする。
中間コード生成ステップにより生成された中間コードは、部分言語仕様決定ステップS10において、各関数スコープの範囲に対応する中間コード毎に図2のL1のループ処理(ステップS21〜S25の処理)が実施される。本具体例では、<main.cpp>がC++言語、<sub.c>がC言語でコンパイルすることをユーザより指定されていることを前提としているので、ステップS24が真となり、ステップS25が実施される。よって参照側の中間コードには、言語仕様がC++言語であるという情報が記録され、定義側の中間コードでは言語仕様がC言語であるという情報が記録されることになる(図9)。
次に、部分コード補正ステップS11が実施される。まず、図3のL2のループ処理(ステップS31〜S38の処理)が実施される。本具体例では、定義側の中間コードと参照側の中間コードの言語仕様情報に相違がある(C++言語とC言語)ため、ステップS31が真となる。よって、ステップS32が実施される。ここで、C++言語とC言語では、C++言語がスーパーセット、C言語がサブセットの言語仕様であるので、サブセットの言語仕様を持つ定義側中間コードの関数符号化名が、スーパーセットの言語仕様を持つ参照側中間コードの関数符号化名に変更される(図10。_f_Fvに統一)。以降、ステップS33〜S38については、すべて偽と判定される。
以上のように、解析対象の中間コードの言語仕様を考慮することで、関数符号化名を統一させ、明示的にリンケージ指定をすることなくリンクが可能となる。よってC言語のソースをC++言語で流用するために必要であったソース修正の工数がなくなり、開発効率が向上する。
(具体例2)
図11は、プログラム記憶部D1に記憶されている多重定義関数を使用したソースプログラムの一例である。名前空間、テンプレートを使用したソースプログラムは、多重定義関数の場合の具体例と類似した処理になるため、ここでは省略する。以下では、このソースプログラムを入力した場合のコンパイル方法を説明する。前提として、<test.cpp>は、特にユーザから言語仕様指定が与えられることなくコンパイルされるものとする。
ここで、図12を用いて問題点をあらかじめ指摘しておく。従来の方法で本具体例のソースプログラム<test.cpp>をコンパイルする場合、ソースプログラム内にC++言語の機能である多重定義関数を使用しているために、すべての関数をC++言語の関数としてコンパイルすることになる。関数本体がC言語の機能のみを使用していたとしても、C++言語の関数としてコンパイルされるため、冗長なコードが生成される可能性がある。図12は、test.cppのvoid f(void)をC++言語の関数としてコンパイルした場合のコード生成結果と、C言語の関数としてコンパイルした場合のコード生成結果である。図12から明らかなように、C++言語の関数としてコンパイルしたコード生成結果が、C言語の関数としてコンパイルした場合のコード生成結果と比較して冗長にコードが生成されていることがわかる。
次に、本実施の形態における具体例を示す。本具体例も具体例1と同様、関数スコープの範囲に対して解析を実施することとする。
中間コード生成ステップにより生成された中間コードは、部分言語仕様決定ステップS10において、各関数スコープの範囲に対応する中間コード毎に図2のL1のループ処理(ステップS21〜S25の処理)が実施される。本具体例では、ユーザより特に言語仕様の指定が行われていないので、ステップS22、ステップS24がともに偽となり、ステップS23、ステップS25は実施されない。よって解析対象範囲内で使用されているプログラミング言語の機能に基づいて決定した言語仕様情報が中間コードに記録される(ステップS21)。本具体例では、関数void f(void)ならびにvoid f(int)は同じ関数名を持つ多重定義関数であり、これはC++言語の機能である。よってこの機能が使用されている範囲の中間コードは、言語仕様がC++言語であるという情報が記録される(図13。すべてC++)。
次に、部分コード補正ステップS11が実施される。まず、図3のL2のループ処理(ステップS31〜S38の処理)が実施される。本具体例では、定義側の中間コードと参照側の中間コードの言語仕様情報に相違がない(ともに、C++言語)ので、ステップS32は実施されない。一方、多重定義関数であるため、ステップS34が実施される。本具体例では、図14に示すようにプログラム中唯一の関数名を持つ多重定義されていない外部関数として、__L1,__L2という名前に変更され、各言語仕様、関数符号化名が保留状態になる。なお、本具体例は多重定義関数を例にしているが、名前空間やテンプレートを使用しているプログラムに対しても、多重定義関数の場合と同様にプログラム中唯一の関数名を持つ外部関数に変更すればよい(ステップS36,S38)。
ステップS34が実施されたため、ステップS39の判定結果が真となり、再度部分言語仕様決定ステップS10が実行される。二度目のステップS10の実行では、多重定義関数であった関数は関数名が__L1,__L2に変更されているため、多重定義関数とは認識されない。よってステップS21では言語仕様がC言語であるという情報が記録され、C言語としての関数符号化名が与えられる(図15)。二度目のステップS11の実行では特に変更は加えられず、ステップS12以降の処理に移る。
図16は、本具体例に対して本発明を適用しなかった場合のコード生成結果と、適用した場合のコード生成結果である。図16から明らかなように、本発明を適用しなかった場合と比較して、本発明を適用すれば冗長なコードが削除されていることがわかる。
(具体例3)
デバッグ方法についての具体例を示す。前提として、本発明のコンパイラ方法により中間コードに記録される言語仕様情報がデバッグ情報にも記録されているものとする。図17は、デバッグプログラムを実行しているモニターである。部分言語仕様表示コマンドが入力されると、部分言語仕様表示ステップN10が実施される。本具体例では、言語仕様情報がデバッグ情報に記録されていることを前提としているのでステップN22が実施され、デバッグ情報に記録されている言語仕様情報に基づいて、各範囲の言語仕様をプログラムソースとともに表示する。図18が言語仕様表示例の一例である。なお、この表示例はあくまで一例であり、言語仕様に関する情報が表示されていれば、どのような形態でもかまわない。
次に、解析対象がテンプレートから生成されたインスタンスであるかどうかの判定を行う(ステップN23)。本具体例では、解析対象がA<int> objの場合、テンプレートインスタンスが生成されているため判定結果は真となり、図19に示すとおりテンプレートを展開したソースプログラムが表示される。なお、この表示例はあくまで一例であり、テンプレートを展開したソースプログラムに関する情報が表示されていれば、どのような形態でもかまわない。
次に、認識した仕様に対して、サブセットの言語仕様が定義されているかどうかを判定する(ステップN25)。本具体例では、C++言語のサブセット仕様であるC言語が定義されているため、判定結果は真となり、図20に示すとおりC++言語と判定されている範囲において、C言語の言語仕様から逸脱している部分の内容(テンプレート機能)が明記される。なお、この表示例はあくまで一例であり、サブセットの言語仕様から逸脱している部分の内容に関する情報が表示されていれば、どのような形態でもかまわない。
図18から図20の例から明らかなように、本発明のデバッグ方法を用いれば、プログラマは各プログラム部分がどの言語仕様でコンパイルされたか、サブセットの言語仕様に落とし込む場合に、どのソース部分を修正すればよいかが容易に把握でき、デバッグならびにチューニング作業を効率良く行うことができる。
本発明にかかるコンパイル方法ならびにデバッグ方法は、携帯電話やPDA(Personal Digital Assistant)等のコードサイズの小さなオブジェクトコードを必要とする組み込み機器用のコンパイル方法ならびにデバッグ方法等に有用である。
本発明の実施の形態におけるコンパイラにより実行される処理のフローチャート 部分言語仕様決定ステップの詳細を示すフローチャート 部分コード補正ステップの詳細を示すフローチャート 本発明の実施の形態におけるデバッガにより実行される処理のフローチャート 部分言語仕様表示ステップの詳細を示すフローチャート 具体例1で用いられるプログラム記憶部に記憶されているソースプログラムの一例 従来例での中間コード情報の一例 従来方法で修正したソースプログラムの一例 具体例1で用いられるソースプログラムを部分言語仕様決定ステップに適用後の中間コード情報の一例 具体例1で用いられるソースプログラムを部分コード補正ステップに適用後の中間コード情報の一例 具体例2で用いられるプログラム記憶部に記憶されているソースプログラムの一例 具体例2で用いられるソースプログラムをC++言語でコンパイルしたアセンブリコードとC言語でコンパイルしたアセンブリコード 具体例2で用いられるソースプログラムを1回目の部分言語仕様決定ステップに適用後の中間コード情報の一例 具体例2で用いられるソースプログラムを1回目の部分コード補正ステップに適用後の中間コード情報の一例 具体例2で用いられるソースプログラムを2回目の部分言語仕様決定ステップに適用後の中間コード情報の一例 具体例2で用いられるソースプログラムに本発明方法を適用しなかった場合のアセンブリコードと、適用した場合のアセンブリコード 具体例3で用いられるソースプログラムを表示しているデバッガモニタ 具体例3で用いられるソースプログラムの言語仕様情報を表示しているデバッガモニタ 具体例3で用いられるソースプログラムのテンプレートを展開したソースプログラムを表示しているデバッガモニタ 具体例3で用いられるソースプログラムでC言語の言語仕様から逸脱しているプログラム部分の内容を表示しているデバッガモニタ 従来技術(特許文献1)のプログラム変換方法のフローチャート
符号の説明
S10 部分言語仕様決定ステップ
S11 部分コード補正ステップ
N10 部分言語仕様表示ステップ

Claims (22)

  1. 入力プログラムを目的プログラムに変換するコンパイル方法であって、前記入力プログラムの特定の範囲に対する言語仕様を決定する部分言語仕様決定ステップと、特定の範囲間で言語仕様に相違がある場合に前記特定の範囲の一方において少なくとも一部のコードを補正する部分コード補正ステップとを含むことを特徴とするコンパイル方法。
  2. 前記部分言語仕様決定ステップは、前記入力プログラムの特定の範囲内で使用されているプログラミング言語の機能に基づいて言語仕様を決定する請求項1に記載のコンパイル方法。
  3. 前記部分言語仕様決定ステップは、前記入力プログラム中に言語仕様制御文が存在する場合、前記言語仕様制御文に基づいて言語仕様を決定する請求項1に記載のコンパイル方法。
  4. 前記部分言語仕様決定ステップは、前記入力プログラムをコンパイルするコンパイルシステムに言語仕様制御命令が与えられている場合、前記言語仕様制御命令に基づいて言語仕様を決定する請求項1に記載のコンパイル方法。
  5. 前記部分コード補正ステップは、すべての関数に対して、定義と参照で言語仕様に相違がある場合は、サブセットの言語仕様を持つ関数符号化名を、スーパーセットの言語仕様を持つ関数符号化名に変更する請求項1に記載のコンパイル方法。
  6. 前記部分コード補正ステップは、多重定義されているすべての外部関数を、プログラム中唯一の関数名を持つ多重定義されていない外部関数に変更して、再度前記部分言語仕様決定ステップを行う請求項1に記載のコンパイル方法。
  7. 前記部分コード補正ステップは、名前空間に所属するすべての外部関数を、プログラム中唯一の関数名を持つ名前空間に所属しない外部関数に変更して、再度前記部分言語仕様決定ステップを行う請求項1に記載のコンパイル方法。
  8. 前記部分コード補正ステップは、テンプレートから生成されるすべての外部関数を、プログラム中唯一の関数名を持つテンプレートから生成されない外部関数に変更して、再度前記部分言語仕様決定ステップを行う請求項1に記載のコンパイル方法。
  9. 入力プログラムをデバッグするデバッグ方法であって、前記入力プログラムの特定の範囲に対する言語仕様を認識する部分言語仕様認識ステップと、各範囲の言語仕様をプログラムソースとともに表示する部分言語仕様表示ステップとを含むことを特徴とするデバッグ方法。
  10. さらに、解析対象がテンプレートから生成されたインスタンスの場合に、テンプレートを展開したソースプログラムを表示するテンプレート展開表示ステップを含む請求項9に記載のデバッグ方法。
  11. さらに、認識した言語仕様に対してサブセットの言語仕様が定義されている場合に、サブセットの言語仕様から逸脱しているプログラム部分の内容を明記するサブセット言語仕様違反部分の表示ステップを含む請求項9に記載のデバッグ方法。
  12. 入力プログラムを目的プログラムに変換するコンパイルプログラムであって、前記入力プログラムの特定の範囲に対する言語仕様を決定する部分言語仕様決定機能と、特定の範囲間で言語仕様に相違がある場合に前記特定の範囲の一方において少なくとも一部のコードを補正する部分コード補正機能とを含むことを特徴とするコンパイルプログラム。
  13. 前記部分言語仕様決定機能は、前記入力プログラムの特定の範囲内で使用されているプログラミング言語の機能に基づいて言語仕様を決定する請求項12に記載のコンパイルプログラム。
  14. 前記部分言語仕様決定機能は、前記入力プログラム中に言語仕様制御文が存在する場合、前記言語仕様制御文に基づいて言語仕様を決定する請求項12に記載のコンパイルプログラム。
  15. 前記部分言語仕様決定機能は、前記入力プログラムをコンパイルするコンパイルシステムに言語仕様制御命令が与えられている場合、前記言語仕様制御命令に基づいて言語仕様を決定する請求項12に記載のコンパイルプログラム。
  16. 前記部分コード補正機能は、すべての関数に対して、定義と参照で言語仕様に相違がある場合は、サブセットの言語仕様を持つ関数符号化名を、スーパーセットの言語仕様を持つ関数符号化名に変更する請求項12に記載のコンパイルプログラム。
  17. 前記部分コード補正機能は、多重定義されているすべての外部関数を、プログラム中唯一の関数名を持つ多重定義されていない外部関数に変更して、再度前記部分言語仕様決定機能を行う請求項12に記載のコンパイルプログラム。
  18. 前記部分コード補正機能は、名前空間に所属するすべての外部関数を、プログラム中唯一の関数名を持つ名前空間に所属しない外部関数に変更して、再度前記部分言語仕様決定機能を行う請求項12に記載のコンパイルプログラム。
  19. 前記部分コード補正機能は、テンプレートから生成されるすべての外部関数を、プログラム中唯一の関数名を持つテンプレートから生成されない外部関数に変更して、再度前記部分言語仕様決定機能を行う請求項12に記載のコンパイルプログラム。
  20. 入力プログラムをデバッグするデバッグプログラムであって、前記入力プログラムの特定の範囲に対する言語仕様を認識する部分言語仕様認識機能と、各範囲の言語仕様をプログラムソースとともに表示する部分言語仕様表示機能を行うことを特徴とするデバッグプログラム。
  21. さらに、解析対象がテンプレートから生成されたインスタンスの場合に、テンプレートを展開したソースプログラムを表示するテンプレート展開表示機能を行う請求項20に記載のデバッグプログラム。
  22. さらに、認識した言語仕様に対してサブセットの言語仕様が定義されている場合に、サブセットの言語仕様から逸脱しているプログラム部分の内容を明記するサブセット言語仕様違反部分の表示機能を行う請求項20に記載のデバッグプログラム。
JP2006132380A 2006-05-11 2006-05-11 コンパイル方法、デバッグ方法、コンパイルプログラムおよびデバッグプログラム Pending JP2007304840A (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2006132380A JP2007304840A (ja) 2006-05-11 2006-05-11 コンパイル方法、デバッグ方法、コンパイルプログラムおよびデバッグプログラム
US11/797,797 US20070266379A1 (en) 2006-05-11 2007-05-08 Compile method, debug method, compile program and debug program
CNA2007101068355A CN101071385A (zh) 2006-05-11 2007-05-10 编译方法、调试方法、编译程序和调试程序

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006132380A JP2007304840A (ja) 2006-05-11 2006-05-11 コンパイル方法、デバッグ方法、コンパイルプログラムおよびデバッグプログラム

Publications (1)

Publication Number Publication Date
JP2007304840A true JP2007304840A (ja) 2007-11-22

Family

ID=38686555

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006132380A Pending JP2007304840A (ja) 2006-05-11 2006-05-11 コンパイル方法、デバッグ方法、コンパイルプログラムおよびデバッグプログラム

Country Status (3)

Country Link
US (1) US20070266379A1 (ja)
JP (1) JP2007304840A (ja)
CN (1) CN101071385A (ja)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009169864A (ja) * 2008-01-18 2009-07-30 Panasonic Corp コンパイル方法およびコンパイルプログラム
US9047180B2 (en) 2009-11-13 2015-06-02 Samsung Electronics Co., Ltd. Computing system, method and computer-readable medium processing debug information in computing system

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7451206B2 (en) * 2002-05-20 2008-11-11 Siemens Communications, Inc. Send of software tracer messages via IP from several sources to be stored by a remote server
US20070203909A1 (en) * 2006-02-28 2007-08-30 Tekelec Methods, systems, and computer program products for indexing, validating, recovering, and consolidating a database indexed by range-bound numeric data
JP2008059279A (ja) * 2006-08-31 2008-03-13 Internatl Business Mach Corp <Ibm> 文字列出力処理を最適化する技術
JP2010108258A (ja) * 2008-10-30 2010-05-13 Panasonic Corp コンパイル方法及びコンパイルプログラム
CN103677790B (zh) * 2012-09-26 2015-03-25 腾讯科技(深圳)有限公司 软件的函数修改方法
CN105824285B (zh) * 2016-03-14 2018-09-14 上海交通大学 用于单片机的可编程逻辑控制系统的编程设计方法
CN108595183B (zh) * 2018-04-19 2019-12-06 北京微播视界科技有限公司 代码拼接和调试方法、装置、计算机可读存储介质和终端
CN111771187B (zh) * 2019-01-31 2021-12-10 华为技术有限公司 一种消除代码构建差异的方法及装置
CN115617352B (zh) * 2022-12-02 2023-03-28 中汽研软件测评(天津)有限公司 基于安全编码标准的c代码检测方法、设备和存储介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07121379A (ja) * 1993-10-28 1995-05-12 Nec Software Ltd 複数言語混在コンパイラ
JPH09259003A (ja) * 1996-03-27 1997-10-03 Fujitsu Ltd デバッグ情報表示装置
JPH10161904A (ja) * 1996-12-03 1998-06-19 Toshiba Corp 複数言語対応のデバッグ装置およびデバッグ方法
JPH11126164A (ja) * 1997-10-22 1999-05-11 Fujitsu Ltd シンボル名置き換え装置
JPH11154093A (ja) * 1997-11-21 1999-06-08 Toshiba Corp プログラムコンパイラ及びコンパイラ用プログラムを記録した記録媒体
JP2001154854A (ja) * 1999-11-25 2001-06-08 Fujitsu Ltd C++コンパイル装置
JP2003050700A (ja) * 2001-08-06 2003-02-21 Matsushita Electric Ind Co Ltd プログラム変換方法

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2666847B2 (ja) * 1988-06-06 1997-10-22 日本電気株式会社 異種言語間連絡方式
US5097533A (en) * 1988-11-29 1992-03-17 International Business Machines Corporation System and method for interfacing computer application programs written in different languages to a software system
US5504885A (en) * 1993-06-29 1996-04-02 Texas Instruments Incorporated O-R gateway: a system for connecting object-oriented application programs and relational databases
US5500881A (en) * 1993-07-12 1996-03-19 Digital Equipment Corporation Language scoping for modular, flexible, concise, configuration descriptions
US5581769A (en) * 1993-12-29 1996-12-03 International Business Machines Corporation Multipurpose program object linkage protocol for upward compatibility among different compilers
US5768564A (en) * 1994-10-07 1998-06-16 Tandem Computers Incorporated Method and apparatus for translating source code from one high-level computer language to another
US6202205B1 (en) * 1998-07-21 2001-03-13 Hewlett-Packard Company System and method for profile-based, on-the-fly optimization of library code
JP4130713B2 (ja) * 1998-10-21 2008-08-06 松下電器産業株式会社 プログラム変換装置
US7086044B2 (en) * 2001-03-22 2006-08-01 International Business Machines Corporation Method, article of manufacture and apparatus for performing automatic intermodule call linkage optimization
US20030115571A1 (en) * 2001-12-14 2003-06-19 Telefonaktiebolaget L M Ericsson (Publ) Construction of a software application from a plurality of programming languages
JP3956113B2 (ja) * 2002-06-13 2007-08-08 インターナショナル・ビジネス・マシーンズ・コーポレーション データ処理装置及びプログラム
US7346897B2 (en) * 2002-11-20 2008-03-18 Purenative Software Corporation System for translating programming languages
US7707566B2 (en) * 2003-06-26 2010-04-27 Microsoft Corporation Software development infrastructure
US7367023B2 (en) * 2003-07-10 2008-04-29 International Business Machines Corporation Method and apparatus for generating computer programming code selectively optimized for execution performance and not optimized for serviceability
JP2006107338A (ja) * 2004-10-08 2006-04-20 Matsushita Electric Ind Co Ltd プログラム処理装置

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07121379A (ja) * 1993-10-28 1995-05-12 Nec Software Ltd 複数言語混在コンパイラ
JPH09259003A (ja) * 1996-03-27 1997-10-03 Fujitsu Ltd デバッグ情報表示装置
JPH10161904A (ja) * 1996-12-03 1998-06-19 Toshiba Corp 複数言語対応のデバッグ装置およびデバッグ方法
JPH11126164A (ja) * 1997-10-22 1999-05-11 Fujitsu Ltd シンボル名置き換え装置
JPH11154093A (ja) * 1997-11-21 1999-06-08 Toshiba Corp プログラムコンパイラ及びコンパイラ用プログラムを記録した記録媒体
JP2001154854A (ja) * 1999-11-25 2001-06-08 Fujitsu Ltd C++コンパイル装置
JP2003050700A (ja) * 2001-08-06 2003-02-21 Matsushita Electric Ind Co Ltd プログラム変換方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2009169864A (ja) * 2008-01-18 2009-07-30 Panasonic Corp コンパイル方法およびコンパイルプログラム
US9047180B2 (en) 2009-11-13 2015-06-02 Samsung Electronics Co., Ltd. Computing system, method and computer-readable medium processing debug information in computing system

Also Published As

Publication number Publication date
US20070266379A1 (en) 2007-11-15
CN101071385A (zh) 2007-11-14

Similar Documents

Publication Publication Date Title
JP2007304840A (ja) コンパイル方法、デバッグ方法、コンパイルプログラムおよびデバッグプログラム
US7707566B2 (en) Software development infrastructure
US7478366B2 (en) Debugger and method for debugging computer programs across multiple programming languages
US7937692B2 (en) Methods and systems for complete static analysis of software for building a system
US6738967B1 (en) Compiling for multiple virtual machines targeting different processor architectures
US8533698B2 (en) Optimizing execution of kernels
JP4057938B2 (ja) コンパイラ、コンパイル方法、及びプログラム開発ツール
US20070168984A1 (en) Compiling system, debugging system and program development system
US8122440B1 (en) Method and apparatus for enumerating external program code dependencies
US20110126179A1 (en) Method and System for Dynamic Patching Software Using Source Code
AU2892200A (en) Automatic stub/adapter generator
US20100199269A1 (en) Program optimization device and program optimization method
US20140189663A1 (en) Method and apparatus enabling multi threaded program execution for a cobol program including openmp directives by utilizing a two-stage compilation process
US7694289B2 (en) Method for embedding object codes in source codes
JP2002024029A (ja) コンパイラ、コンパイル方法及びコンパイルプログラムを記録したコンピュータ読み取り可能な記録媒体
US8930925B2 (en) Method for enabling compilation of a Cobol source program utilizing a two-stage compilation process, the Cobol source program including a mix of Cobol, C++ or JAVA statements, and optional OpenMP directives
US7458071B2 (en) Compilation method, compiler apparatus and compiler
US20060009962A1 (en) Code conversion using parse trees
US6986129B2 (en) System and method for java preprocessor
JP2008276735A (ja) プログラムコード変換装置及びプログラムコード変換方法
US20060107258A1 (en) Program, program code optimization method, program code compile method, program code, and information processing system
US20070204260A1 (en) Program transformation system
EP1046985A2 (en) File portability techniques
JP3266097B2 (ja) 非リエントラントプログラムの自動リエントラント化方法及びシステム
US9720660B2 (en) Binary interface instrumentation

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090428

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20100623

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110614

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20111018