JP2014013435A - コンパイル実行・管理方法、装置、及びプログラム - Google Patents

コンパイル実行・管理方法、装置、及びプログラム Download PDF

Info

Publication number
JP2014013435A
JP2014013435A JP2012149747A JP2012149747A JP2014013435A JP 2014013435 A JP2014013435 A JP 2014013435A JP 2012149747 A JP2012149747 A JP 2012149747A JP 2012149747 A JP2012149747 A JP 2012149747A JP 2014013435 A JP2014013435 A JP 2014013435A
Authority
JP
Japan
Prior art keywords
compilation
information
partial
involved
compiling
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.)
Granted
Application number
JP2012149747A
Other languages
English (en)
Other versions
JP5891976B2 (ja
Inventor
Kenji Shimbori
健治 新堀
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.)
Fujitsu Ltd
Original Assignee
Fujitsu 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 Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2012149747A priority Critical patent/JP5891976B2/ja
Priority to US13/894,703 priority patent/US9081584B2/en
Publication of JP2014013435A publication Critical patent/JP2014013435A/ja
Application granted granted Critical
Publication of JP5891976B2 publication Critical patent/JP5891976B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • 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
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

【課題】コンパイルの実行及び/又はコンパイルの管理を行うことを目的とする。
【解決手段】一実施形態は、複数のオペレーションを含むソースからオブジェクトへのコンパイル、及び前記コンパイルの管理を行うプログラムであって、前記オブジェクトは複数の部分オブジェクトを有し、前記オペレーションに対応する前記ソースの一部を前記部分オブジェクトにコンパイルし、該プログラムのうち、前記部分オブジェクトの前記コンパイルに関与した部分を特定する情報を生成し、前記部分オブジェクトに関連付けて、対応する前記オペレーションを表す情報、及び前記コンパイルに関与した部分を特定する情報を含むオブジェクト展開情報をメモリに記憶する、処理をコンピュータに実行させるプログラムであって、前記オブジェクト展開情報は、コンパイル障害に関連する前記コンパイルに関与した部分により生成された前記部分オブジェクトを識別するために用いられる、プログラムを提供する。
【選択図】図13

Description

本発明は、コンパイルの実行及び/又はコンパイルの管理を行う方法、装置、及びプログラムに関する。
一般に、ソフトウエアは、コンパイラによって、ソースプログラムから実行形式の機械語のオブジェクトに変換される。このオブジェクトを格納したファイルは、ファイルの拡張子として、「.exe」や「.dll」などが付けられるものがある。
一般にコンパイラは、ソースプログラムを中間言語に一旦翻訳し、その後、中間言語を最終的な機械語に翻訳する作業を行うことが多い。
仮に、コンパイラ自体に障害(バグ)が発見された場合には、その障害を含むコンパイラを用いて生成されたオブジェクトには、障害が含まれている可能性がある。なお、コンパイラは、細心の注意を払って開発される基本ソフトウエアである。このため、コンパイラ自体の障害にバグが存在することは、非常に稀であるが、皆無であるとは言えず、コンパイラ開発後、かなりの時間が経過してから、障害が発見されることもある。そして、コンパイラの障害(バグ)は、そのコンパイラが生成した一部のオブジェクトに障害を内在させてしまう可能性がある。なお、コンパイラに障害があっても、その障害を持つコンパイラから生成された全てのオブジェクトに障害が存在するとは限らない。通常は、コンパイル時にコンパイラの障害部分が利用されたオブジェクトにだけ、障害が内在することがある。
コンパイラのリリースから、コンパイラの障害が発見されるまでには、一定の期間が存在する。このため、コンパイラの障害が発見された時点では、既にアプリケーションソフトウエア開発が相当進んでいたり、あるいは、障害のあるコンパイラでコンパイルしたオブジェクトファイルを業務で使用していたりする場合も想定される。
また、コンパイラにも複数のバージョンが存在することが通常である。したがって、コンパイラの障害が発見された場合に、既にコンパイル済みのオブジェクトの複数の資産に対して、コンパイラの障害の影響が及んでいるのか否かの判断は難しい。また、コンパイラ障害の影響がオブジェクトに及んでいる場合に、オブジェクトファイルのどの部分が影響を受けているのか等を発見し、これに対処するニーズが存在する。
しかしながら、オブジェクトの機械語命令の並び(又はパターン)から、コンパイラの障害の影響を受けているかを判断することができない場合が存在する。なぜなら、オブジェクトから、ソースコード(又は中間言語)の範囲、命令パターン、使用されたコンパイラ部分等が、必ずしも特定できないからである。このため、正しいオブジェクトに対しても、コンパイラの障害が影響していると誤って検出してしまう可能性がある。言い換えれば、オブジェクトだけからでは、コンパイル時の状況を完全には把握することができない。また、コンパイラや、中間言語をオブジェクトに変換する中間言語定義ファイルのバージョンなどの情報も必用な場合があるが、必ずしも、オブジェクトファイルだけからこれらのバージョンを取得することができるとは限らない。
他の対処法としては、ソース資産がある場合には、障害を取り除いたコンパイラで、再度コンパイルし直すことも可能である。しかしながら、開発されたソース資産が膨大である場合には、実行が難しい。
或いは、障害の発見されたコンパイラの部分が利用されたか否かをチェックできるよう、コンパイラを改造することが考えられる。この改造されたコンパイラでソースをコンパイルすることによって、コンパイラの障害部分が、既存のオブジェクトのコンパイルに影響したかなどを確認することができる。しかしながら、この場合には、開発環境を用意してコンパイラを改造し、この改造コンパイラでソースをコンパイルすることとなり、コストと時間がかかる。
中間言語を解析することで、静的にユーザプログラムのスタックオーバフローが発生する可能性のある障害を検出し、ユーザアプリケーションの障害を判断する技術が存在する(例えば、特許文献1参照)。
また、中間言語の行番号及びコンパイラが内部で自動生成する内部変数のシンボル情報をデバック情報とし、中間言語でのブレークポイントの設定とステップ実行、内部変数の参照を行うことにより、ソースレベル又は中間言語レベルでのデバックを可能とした技術が存在する(例えば、特許文献2参照)。
特開2004−171064号公報 特開2000−353112号公報
1つの側面では、本発明は、コンパイルの実行及び/又はコンパイルの管理を行うことを目的とする。
一態様のプログラムは、複数のオペレーションを含むソースからオブジェクトへのコンパイル、及び前記コンパイルの管理を行うプログラムであって、前記オブジェクトは複数の部分オブジェクトを有し、前記オペレーションに対応する前記ソースの一部を前記部分オブジェクトにコンパイルし、該プログラムのうち、前記部分オブジェクトの前記コンパイルに関与した部分を特定する情報を生成し、前記部分オブジェクトに関連付けて、対応する前記オペレーションを表す情報、及び前記コンパイルに関与した部分を特定する情報を含むオブジェクト展開情報をメモリに記憶する、処理をコンピュータに実行させるプログラムであって、前記オブジェクト展開情報は、コンパイル障害に関連する前記コンパイルに関与した部分により生成された前記部分オブジェクトを識別するために用いられる。
一態様によれば、コンパイルの実行及び/又はコンパイルの管理を簡便に行うことができる。
一実施形態に従った、コンパイルの概略を示すフローチャートである。 中間言語、オブジェクト、及びオブジェクト展開情報の例を示す図である。 中間言語定義の実施形態を示す図である。 一実施形態におけるレジスタ割り付けに係る障害の例を示す図である。 コンパイラの障害がオブジェクトに影響している場合の例を示す図である。 コンパイラの障害がオブジェクトに影響していない場合の例を示す図である。 一実施形態の処理のフローチャートである。 一実施形態の障害の特定の例を示す図である。 コンパイルでの障害がオブジェクトに影響しているか否かを確認するフローチャートである。 一実施形態の利用の例を示す図である。 中間言語定義に一実施形態をインプリメントする例を示す図である。 中間言語定義の具体例を示す図である。 一実施形態の機能ブロック図である。 一実施形態のハードウェアの構成を示す図である。
以下に、図面を用いて本発明の実施形態を詳細に説明する。なお、以下の実施形態は、発明を理解するためのものであり、本発明の範囲を限定するためのものではない点に留意すべきである。また、以下の複数の実施形態は、相互に排他的なものではない。したがって、矛盾が生じない限り、別々に記載した実施形態の各要素を組み合わせることも意図されていることに留意すべきである。また、請求項に記載された方法やプログラムに係る発明は、矛盾のない限り処理の順番を入れ替えてもよく、あるいは、複数の処理を同時に実行してもよい。そして、これらの実施形態も、請求項に記載された発明の技術的範囲に包含されることは言うまでもない。
また、記録媒体に記憶されたコンピュータが読み出したプログラムコードを実行することにより、後述の実施形態の機能が実現されるだけでなく、そのプログラムコードの指示に基づき、コンピュータ上で稼働しているOSなどの他のプログラムが実際の処理の一部または全部を行ない、その処理によって実施形態の機能が実現される場合も、本発明に含まれることは言うまでもない。
なお、本明細書では、コンパイルの対象となっている原始プログラムを「ソース」と呼ぶ。そして、ソースをコンパイルした機械語の集合を「オブジェクト」と呼ぶ。また、コンパイルの途中で生成される中間的な言語を「中間言語」と呼ぶ。また、中間言語を機械語に変換する規則を含む定義を「中間言語定義」と呼ぶ。なお、本発明は、コンパイルにおいて、必ずしも中間言語を経る必要はなく、ソースからオブジェクトをコンパイルしてもよい。したがって、本発明は、中間言語の生成、中間言語の処理等の存在に限定されるものではない。また、機械語については、その内容の理解を助けるため、アセンブラ言語により表記する場合がある。
図1は、一実施形態に従った、コンパイラ100によるコンパイルの概略を示すフローチャートを示している。
ソース120は、複数の命令を含むソフトウエアである。ソースは、COBOL言語、C言語等のプログラム言語に従った規則で記述される。本発明は、特定のプログラム原語に限定されるものではない。
ステップ102において、ソースの字句解析が行われる。
ステップ104において、字句解析の結果を利用して、ソースの構文解析が行われる。
ステップ106において、解析された構文の最適化が行われる。
この最適化によって、中間言語130が生成される。以上の各ステップは、コンパイラのフロントエンド(FE)と呼ぶ。中間言語は、その後の処理に利用される。
ステップ108において、機械語コードの集合(オブジェクト)が生成される。加えて、機械語に対応した形でオブジェクト展開情報が生成される。このオブジェクト展開情報は、コンパイラ自体の障害が発見された場合に、コンパイラの障害部分が、機械語のどの部分に影響したか等を探索するために用いられてもよい。このステップ108は、コンパイラのバックエンド(BE)と呼び、少なくともオブジェクト及びオブジェクト展開情報140が生成される。
図2は、中間言語、オブジェクト、及びオブジェクト展開情報の例を示している。なお、説明を分かりやすくするために、図面における機械語については、アセンブラ表記を用いている点に留意すべきである。なお、ソースについては、実施形態の説明を分かりやすくするために、省略している。
図2(A)は、中間言語とオブジェクトとを、対応付けて示している。機械語のアセンブラ表記については、オフセットを付記している。オフセットは、ソースの先頭からの距離を表す。なお、図においては、分かりやすさを考慮して、便宜的にオフセットの代わりに、10の刻みを有する行番号を付している点に留意すべきである。そして、1つ又は複数のオブジェクトのアセンブラ表記に対応させて、中間言語のメモリ上での位置を表す情報としてオフセット(行番号)を併記している。
図2(B)は、オブジェクト展開情報の例を示している。オブジェクト展開情報にも、オフセットの代替として行番号が付されている。機械語の命令212、214、及び216は、いずれもLOAD・STORE命令であるが、対応する中間言語は異なっている。すなわち、LOAD/STORE命令212は、中間言語ADD命令222を機械語に展開したものである。LOAD/STORE命令214は、中間言語MOV命令224を機械語に展開したものである。LOAD/STORE命令216は、中間言語ADD命令226を機械個に展開したものであることが分かる。ここで留意すべき点は、機械語だけからは、展開前の中間言語がどのようなものであったかを判断することができないという点である。加えて、機械語命令だけからは、コンパイラのどの部分が用いられて生成されたかということも分からない点に留意すべきである。このことは、コンパイラによる障害が後に発見された場合、機械語命令だけからでは、コンパイラの障害部分の影響を受けているか否かを正確には判断できないことを意味している。このため、本実施形態においては、図2(B)に示すオブジェクト展開情報を機械語に対応させて保持しておくことにより、コンパイラによる障害部分の影響を受けたか否かを判断することができる。
図2(B)におけるオフセット位置00420のオブジェクト展開情報232は、以下の内容を含んでいる。
[ADD],1.5,W,W,W,00190,R4,R5
ここで
「[ADD]」は、中間言語がADD命令であることを示している。中間言語の名前、又は、中間言語を定義している中間言語定義の名前を用いてもよい。中間言語の名前、又は、中間言語を定義している中間言語定義の名前は、オペレーションの一例である。
「1.5」は、中間言語定義のバージョンが1.5であることを示している。
「W,W,W,」は、オペランド割り付け情報を示しており、Wは、ユーザデータであることを示している。Wが3つあることは、オペランドが3つあることを示している。
「00190」は、機械語命令のオフセット(機械語命令の位置)を示している。なお、この実施形態では、オフセットとして、行番号を便宜的に用いている点に留意すべきである。オフセット00190の機械語命令は、「LOAD -30000」である。そして、オフセット00430に示されるオブジェクト展開情報の機械語命令オフセットが「00210」を示していることから、中間言語ADD命令は、機械語のオフセット00190及び00200の2つの命令すなわち、
「LOAD -30000
STORE DATA1」
に対応することが分かる。
「R4,R5」は、ADD命令の中間言語定義の中の基本ブロックのうち、ルート4とルート5がコンパイル時に利用されたことを示している。この情報を利用することにより、中間言語定義の中の利用された基本ブロック(すなわちルート)を特定することができる。基本ブロック(すなわちルート)の詳細は、図3を用いて後述する。
同様に、図2(B)のオフセット00440のオブジェクト展開情報234は、以下の情報を含んでいる。
[MOV],1.0,W,W,00230,R2
この情報から、中間言語は、MOV命令であり、中間言語定義のバージョンは、1.0であり、2つのオペランドは、共にユーザデータであること、機械語命令は、オフセット00230から開始されること、MOV命令の中間言語定義の基本ブロック(ルート)R2が利用されたことが分かる。
同様に図2(B)のオフセット00420のオブジェクト展開情報236は、以下の情報を含んでいる。
[ADD],1.5,C,C,C,00270,R4,R5
この情報から、中間言語は、ADD命令であり、中間言語定義のバージョンは、1.5であり、3つのオペランドは、コンパイラ管理データであること(Cは、コンパイラ管理データを意味する)、機械語命令は、オフセット00270から開始されること、ADD命令の中間言語定義の基本ブロック(ルート)R4,R5が利用されたことが分かる。
例えば、ADD命令の中間言語定義の基本ブロック(ルート)R4及びR5に関連した障害が発見された場合には、オブジェクト展開情報を検索し、ADD命令であり、かつR4及びR5が存在するオブジェクト管理情報を検索すればよい。この検索によって、オブジェクト展開情報232と236がヒットする。この結果から、機械語の命令212と216が、コンパイラの障害によって影響を受けていることが分かる。
図3は、中間言語定義の実施形態を示している。
図3(A)は、ADD命令の中間言語定義の具体例を示している。この中間言語定義においては、2つのオペランドOP2及びOP3が、定数であるか変数であるかに従って、中間言語を具体的な機械語に変換する規則が定義されている。中間言語定義は、その中に存在する複数の分岐命令を境界として、複数の基本ブロックであるルートに分けられる。図3(A)においては、基本ブロックとしてルート1ないしルート5が示されている。このように、中間言語定義を複数のルートに分け、このルートが利用された情報を図2に示したように、オブジェクト管理情報に含めることにより、中間言語のどのルートが利用されたのかを知ることができる。
図3(B)は、CALL命令の中間言語定義を示している。この中間言語定義では、FOR部分は分岐の対象となるため、ルート1およびルート2が示されている。
図3(C)は、MOV命令の中間言語定義を示している。この場合には、ルート1ないしルート3に分割されていることが分かる。
図4は、一実施形態におけるレジスタ割り付けに係る障害の例を示している。
この障害の例では、3つの命令が順番に並んでいる命令パターンが存在する場合(アドレス計算命令、アドレス計算命令、MOV命令の場合)に、レジスタ割り付けの障害が発生する例を示している。この場合、LD命令は、レジスタreg2を利用している。このLD命令は、SETHI命令よりも前に割り当て済みのレジスタが利用されることを前提としている。しかしながら、図4の例においては、LD命令の直前のADD命令において、reg2を変更してしまっている。従って、LD命令では、誤ったアドレスからデータをロードしており、障害が発生している。この場合の障害は、図4に示す一連の機械語命令パターンが存在する場合に発生する障害であり、かつ、その元となった中間言語が、それぞれアドレス計算命令、アドレス計算命令、MOV命令である場合に発生する。しかしながら、機械語のパターンが図4に示すパターンであっても、元となった中間言語が、それぞれアドレス計算命令、アドレス計算命令、MOV命令のパターンの間に他の命令が存在する場合には、この障害は発生しない。
図5は、コンパイラの障害がオブジェクトに影響している場合の例を示している。図5(A)に示すように、機械語502と機械語504のパターンは、図4に示した機械語パターンと一致している。そして、図5(B)のオブジェクト展開情報に示されるように、元となった中間言語の命令が、アドレス計算命令、アドレス計算命令、MOV命令の場合の順に並んでいることがわかる。したがって、機械語命令のパターンと、オブジェクト展開情報に示された、それぞれの機械語に対応する中間言語のパターンとをチェックすることにより、コンパイラの障害がオブジェクトに影響していることが確認できる。
図6は、コンパイラの障害がオブジェクトに影響していない場合の例を示している。図6(A)は、オブジェクト内の機械語を示している。機械語602と機械語604は、図4に示した機械語のパターンと一致している。しかしながら、図6(B)に示すオブジェクト展開情報には、2つのアドレス計算命令の間に中間言語の加算命令612に対応する機械語が存在していることが分かる。このため、中間言語の命令パターンは、アドレス加算、加算、アドレス加算、文字比較となり、図4に示した中間言語の命令パターンとは一致していない。したがって、図4に示すコンパイラの障害は、図6に示すオブジェクトの機械語には影響していないことが分かる。
このように、オブジェクト内の機械語の命令パターンと、オブジェクト展開情報の中間言語の命令パターンを比較することにより、図4に示したコンパイラの障害が、オブジェクトに影響しているか否かが判断できる。
なお、コンパイラの障害は、機械語の命令パターンと、中間言語の命令パターンとの組合せに限定されるものではない。たとえば、オペランドがユーザデータであるか、コンパイラ管理データであるか、機械語定義のバージョン、機械語定義のルート情報等を組み合わせて、障害の内容に応じて合致するパターンは異なる。したがって、障害に応じて、適切なパターンを定義し、そのパターンに合致するオブジェクトの部分を探索することが望ましい。上記の説明は、コンパイラ障害のオブジェクトへの波及の探索に関する一例に過ぎない点に留意すべきである。
図7は、一実施形態の処理のフローチャートを示している。なお、図1に示したフロントエンドの部分は、省略し、バックエンドの部分のみを示す。
まず、フロントエンドで生成された中間言語130が、この処理に投入される。
ステップ702において、中間言語130の先頭の中間言語を取得し、処理対象とする。
ステップ704において、中間言語をコンパイルし、中間言語に対応する機械語を含む部分オブジェクトを生成する。
ステップ708において、コンパイルに関与した部分、すなわちバージョン等を含む中間言語定義名、利用されたルート等を特定した展開情報を取得する。
ステップ710において、生成された部分オブジェクトとオブジェクト展開情報とを対応付けてメモリに記憶する。
ステップ712において、処理した中間言語が、中間言語130の最後の中間言語であるか否かが判断される。判断が「いいえ」であれば、ステップ720に移る。判断が「はい」であれば、終了する。
ステップ720において、中間言語130の次の中間言語を処理対象とするために取得する。そして、処理はステップ704に移る。
以上の処理によって、オブジェクト及びオブジェクト展開情報140が生成される。
なお、上記のフローのステップは、この順番に処理されなくてもよい。例えば、ステップ704とステップ708は、同時に実行されてもよい。或いは、これらは、逆の順番に実行されてもよい。
図8は、一実施形態の障害の特定の例を示している。
この場合には、文字比較の中間言語を機械語に変換する中間言語定義のルートR53に関連して、障害が発見された例を示している。
図8(A)は、中間言語定義を示している。中間言語定義の変換定義802に誤りが発見された場合を示している。変換定義802は、本来以下の命令として定義されるべきものである。
ROL w0,16
そして、この部分のルートは、setROOT(53)命令によって、ルート53(R53)と定義されている。
したがって、コンパイラの障害がオブジェクトに及んでいる場合には、対応するオブジェクト展開情報の中に、文字比較命令でかつルートがR53であるエントリが存在することとなる。
図8(B)に示すように、文字比較の命令であり、かつルート53(R53)が存在するエントリ812が発見された。したがって、オフセット0000001B0に存在する機械語の部分に、コンパイラの障害が及んでいることが分かる。なお、図6(B)におけるオフセットは、16進数で表現されている点に留意すべきである。
図9は、コンパイルでの障害がオブジェクトに影響しているか否かを確認するフローチャートを示している。
図9(A)は、オブジェクト展開情報を確認するフローチャートを示している。このフローは、たとえば、オブジェクト展開情報だけを確認することで、コンパイル障害の影響が確認できる場合(例えば、障害に関与している中間言語定義のバージョンと、そのルートをチェックする場合)に利用できる。
ステップ902において、オブジェクト展開情報を読み込む。
ステップ904において、コンパイル障害と関連する(問題となる)中間言語定義のバージョンと、ルート情報を検索する。
ステップ906において、オブジェクト展開情報に、検索にヒットするエントリが存在したかがチェックされる。チェック結果が「はい」であれば、ステップ908に移る。チェック結果が「いいえ」であれば、ステップ909に移る。
ステップ908において、障害があったことを、ディスプレイ等に出力させてもよい。また、オブジェクト展開情報の検索にヒットした部分を解析し、コンパイル障害の影響を受けている機械語のオフセットアドレス情報、オフセットアドレスの機械語等を表示させてもよい。
ステップ909において、障害が発見されなかったことを、ディスプレイ等に出力させてもよい。
図9(B)は、オブジェクトにおける機械語のパターンと、オブジェクト展開情報との両者の組合せによる障害のパターンを検出するフローチャートを示している。
ステップ912において、オブジェクト展開情報を読み込む。
ステップ914において、オブジェクトを読み込む。
ステップ916において、オブジェクトの機械語のパターンと、オブジェクト展開情報のパターンが、検索にヒットしたか否かがチェックされる。
ステップ918において、チェック結果が判断される。チェック結果が「はい」であれば、ステップ920に移る。チェック結果が「いいえ」であれば、ステップ922に移る。
ステップ920において、障害があったことを、ディスプレイ等に出力させてもよい。また、検索にヒットしたオブジェクト展開情報、及びオブジェクトの部分を表示させてもよい。
ステップ922において、障害が発見されなかったことを、ディスプレイ等に出力させてもよい。
図10は、一実施形態の利用の例を示している。
ユーザ開発マシン1010においては、図1に示したコンパイラ100を用いて、ソース120をコンパイルし、オブジェクト及びオブジェクト展開情報140を取得する。そして、リンカ1012を用いて実行ファイルに変換してもよい。なお、実行ファイルには、オブジェクト展開情報を含ませることが望ましい。オブジェクト展開情報は、.dllなどの実行ファイルの.txt部分に格納されているオブジェクトの後などに格納してもよい。また、オブジェクト展開情報は、圧縮プログラムなどで圧縮して格納してもよい。また、オブジェクトは、コンパイラの障害を発見するためにチェックされてもよい(不図示)。
ユーザ運用マシン1050では、作成された実行ファイル1014がハードディスク等の記憶メディア1058に格納されてもよい。そして、メモリ1052上には、スタック、ヒープ等の領域1054が存在してもよい。加えて、メモリ1052に、実行ファイル内の.textの情報や、オブジェクト展開情報がロードされ、必要に応じて、オブジェクトが実行されてもよい。オブジェクトは、コンパイラの障害を発見するためにチェックされてもよい(不図示)。
図11は、中間言語定義に一実施形態をインプリメントする例を示している。
上述のように、中間言語定義のバージョン情報や、利用されたルートの情報を取得することが望ましい。このために、例えば、既存の中間言語定義の中に、中間言語定義のバージョン情報や、利用されたルートの情報を取得する命令を加える修正を行ってもよい。
既存の中間言語定義1102を、中間言語定義修正部1104に入力する。
中間言語定義修正部1104では、既存の中間言語定義の中に、中間言語定義のバージョン情報や、利用されたルートの情報を取得する命令を加える処理を実行する。この例については、図12を用いて説明する。
この処理によって、中間言語定義のバージョン情報や、ルート情報が抽出できる機能を持った中間言語定義1106が生成される。
図12は、中間言語定義の具体例を示している。
図12は、C言語を用いて記述されている。
行1210において、中間言語定義の名称、バージョン等の情報がset関数を用いて取得できるようになっている。
行1221,1222,1223,1224,1225,1226,1227,1228,1229は、set関数を用いて、分岐命令で区切られた基本ブロック単位にルートを定義している。特定の基本ブロックが実行されると、その部分のset関数が実行されるため、ルートの情報として取得することができる。
これらの取得された情報を元に、オブジェクト展開情報のエントリを生成させることができる。
図13は、一実施形態の機能ブロック図を示している。この実施形態は、コンパイル管理部1330と識別部1360を含む。
コンパイル管理部1330における動作は以下の通りである。
まず、ソース1310が、中間言語定義を含むコンパイル実行プログラム1332に入力される。コンパイル実行プログラム1332は、中間言語1320を生成してもよい。更に中間言語1320は、コンパイル実行プログラムによって、部分オブジェクト1342に順次変換される。また、コンパイル実行プログラムは、コンパイル関与生成部1334に、コンパイル時における中間言語定義部の利用状況等の情報を伝達する。
コンパイル関与生成部1334は、コンパイルに関与した情報(中間言語名、中間言語定義部で利用されたルート情報等)をコンパイルに関与した部分の情報1352として、部分オブジェクトと関連付けて、オブジェクト展開情報の中に記憶してもよい。
オブジェクト展開情報生成部1336は、コンパイルに関与した部分の情報1352等の情報を統合して、オブジェクト展開情報1350を生成してもよい。
ファイル結合部1338は、オブジェクト1340とオブジェクト展開情報1350とを結合して、例えば1つの.textファイル中に結合させてもよい。
識別部1360は、コンパイラの障害が見つかった場合に利用される。
まず、コンパイラの障害に基づき、オペレータの作成した識別パターン1361を取得する。
部分オブジェクト識別部1364は、オブジェクト展開情報1350と、識別パターン1361とを比較し、マッチするオブジェクト展開情報が存在するか否かをチェックする。チェック結果は、出力されてもよい(1365)。
オブジェクト関係識別部1362は、オブジェクトとオブジェクト展開情報とを読み込み、識別パターン1361と比較し、マッチするパターンがあるか否かをチェックする。チェック結果は、出力されてもよい(1365)。
図14は、一実施形態のハードウェアの構成を示す図である。ハードウェアは、CPU1402、メモリ1404、入出力装置1406、表示装置1408、ハードディスク1410、記録媒体駆動装置1412、が含まれる。そして、それぞれの機器は、バス1416によって接続されている。また、記録媒体駆動装置1412は、可搬記録媒体1414を読み書きすることができる。
本ハードウェアは、コンパイル管理部1330、識別部1360、中間言語定義修正部1104などが実装されてもよい。また、図面に記した各フローチャートの処理が実行されてもよい。
なお、本実施形態の全部又は一部はプログラムによってインプリメントされ得る。このプログラムは、可搬記録媒体1414に格納することができる。可搬記録媒体1414とは、構造(structure)を有する1つ以上の非一時的(non−transitory)な、有形(tangible)な、記録媒体を言う。例示として、可搬記録媒体1414としては、磁気記録媒体、光ディスク、光磁気記録媒体、不揮発性メモリなどがある。磁気記録媒体には、HDD、フレキシブルディスク(FD)、磁気テープ(MT)などがある。光ディスクには、DVD(Digital Versatile Disc)、DVD−RAM、CD−ROM(Compact Disc−Read Only Memory)、CD−R(Recordable)/RW(ReWritable)などがある。また、光磁気記録媒体には、MO(Magneto−Optical disk)などがある。可搬型記録媒体に格納されたプログラムが読み込まれ、プロセッサによって実行されることにより、本発明の実施形態の全部又は一部が実施され得る。
以上の実施形態に関し、以下の付記を開示する。
(付記1)
複数のオペレーションを含むソースからオブジェクトへのコンパイル、及び前記コンパイルの管理を行うプログラムであって、前記オブジェクトは複数の部分オブジェクトを有し、
前記オペレーションに対応する前記ソースの一部を前記部分オブジェクトにコンパイルし、
該プログラムのうち、前記部分オブジェクトの前記コンパイルに関与した部分を特定する情報を生成し、
前記部分オブジェクトに関連付けて、対応する前記オペレーションを表す情報、及び前記コンパイルに関与した部分を特定する情報を含むオブジェクト展開情報をメモリに記憶する、
処理をコンピュータに実行させるプログラムであって、
前記オブジェクト展開情報は、コンパイル障害に関連する前記コンパイルに関与した部分により生成された前記部分オブジェクトを識別するために用いられる、
プログラム。
(付記2)
前記オブジェクト展開情報は、コンパイル障害に関連する複数の前記コンパイルに関与した部分により生成された複数の前記部分オブジェクトの位置関係が、所定の関係を満たすか否かを識別するために用いられる、
付記1に記載のプログラム。
(付記3)
前記オペレーションを表す情報は、前記コンパイルの過程において生成される中間言語に基づき決定される、
付記1又は2に記載のプログラム。
(付記4)
前記コンパイルに関与した部分を特定する情報は、前記コンパイルの過程において生成される中間言語をオブジェクトに変換するために用いる中間言語定義のバージョン、及び、前記中間言語定義の部分を特定する情報を含む、
付記1ないし3のうちいずれか1項に記載のプログラム。
(付記5)
前記オブジェクトと、前記オブジェクト展開情報とを1つのファイルに結合する処理を、コンピュータに実行させる、付記1ないし4のうちいずれか1項記載のプログラム。
(付記6)
複数のオペレーションを含むソースからオブジェクトへのコンパイル、及び前記コンパイルの管理をコンピュータが行う方法であって、前記オブジェクトは複数の部分オブジェクトを有し、
前記オペレーションに対応する前記ソースの一部を前記部分オブジェクトにコンパイルし、
前記コンパイルを実行するプログラムのうち、前記部分オブジェクトの前記コンパイルに関与した部分を特定する情報を生成し、
前記部分オブジェクトに関連付けて、対応する前記オペレーションを表す情報、及び前記コンパイルに関与した部分を特定する情報を含むオブジェクト展開情報をメモリに記憶する、
処理を有する方法であって、
前記オブジェクト展開情報は、コンパイル障害に関連する前記コンパイルに関与した部分により生成された前記部分オブジェクトを識別するために用いられる、
方法。
(付記7)
前記オブジェクト展開情報は、コンパイル障害に関連する複数の前記コンパイルに関与した部分により生成された複数の前記部分オブジェクトの位置関係が、所定の関係を満たすか否かを識別するために用いられる、
付記6に記載の方法。
(付記8)
前記オペレーションを表す情報は、前記コンパイルの過程において生成される中間言語に基づき決定される、
付記6又は7に記載の方法。
(付記9)
前記コンパイルに関与した部分を特定する情報は、前記コンパイルの過程において生成される中間言語をオブジェクトに変換するために用いる中間言語定義のバージョン、及び、前記中間言語定義の部分を特定する情報を含む、
付記6ないし8のうちいずれか1項に記載の方法。
(付記10)
前記オブジェクトと、前記オブジェクト展開情報とを1つのファイルに結合する処理、を有する付記6ないし9のうちいずれか1項記載の方法。
(付記11)
複数のオペレーションを含むソースからオブジェクトへのコンパイル、及び前記コンパイルの管理を行う装置であって、前記オブジェクトは複数の部分オブジェクトを有し、
前記オペレーションに対応する前記ソースの一部を前記部分オブジェクトにコンパイルする、コンパイル部と、
前記コンパイルを実行するプログラムのうち、前記部分オブジェクトの前記コンパイルに関与した部分を特定する情報を生成する、コンパイル関与生成部と、
前記部分オブジェクトに関連付けて、対応する前記オペレーションを表す情報、及び前記コンパイルに関与した部分を特定する情報を含むオブジェクト展開情報をメモリに記憶する、オブジェクト展開情報作成部と、
を有する装置であって、
前記オブジェクト展開情報は、コンパイル障害に関連する前記コンパイルに関与した部分により生成された前記部分オブジェクトを識別するために用いられる、
装置。
(付記12)
前記オブジェクト展開情報は、コンパイル障害に関連する複数の前記コンパイルに関与した部分により生成された複数の前記部分オブジェクトの位置関係が、所定の関係を満たすか否かを識別するために用いられる、
付記11に記載の装置。
(付記13)
前記オペレーションを表す情報は、前記コンパイルの過程において生成される中間言語に基づき決定される、
付記11又は12に記載の装置。
(付記14)
前記コンパイルに関与した部分を特定する情報は、前記コンパイルの過程において生成される中間言語をオブジェクトに変換するために用いる中間言語定義のバージョン、及び、前記中間言語定義の部分を特定する情報を含む、
付記11ないし13のうちいずれか1項に記載の装置。
(付記15)
前記オブジェクトと、前記オブジェクト展開情報とを1つのファイルに結合する、ファイル結合部を有する、付記11ないし14のうちいずれか1項記載の装置。
(付記16)
複数のオペレーションを含むソースからオブジェクトへのコンパイル、及び前記コンパイルの管理を行うプログラムであって、前記オブジェクトは複数の部分オブジェクトを有し、
前記オペレーションに対応する前記ソースの一部を前記部分オブジェクトにコンパイルし、
該プログラムのうち、前記部分オブジェクトの前記コンパイルに関与した部分を特定する情報を生成し、
前記部分オブジェクトに関連付けて、対応する前記オペレーションを表す情報、及び前記コンパイルに関与した部分を特定する情報を含むオブジェクト展開情報をメモリに記憶し、
前記オブジェクト展開情報に基づき、コンパイル障害に関連する前記コンパイルに関与した部分により生成された前記部分オブジェクトを識別する、
処理をコンピュータに実行させるプログラム。
(付記17)
前記オブジェクトと、前記オブジェクト展開情報に基づき、コンパイル障害に関連する複数の前記コンパイルに関与した部分により生成された複数の前記部分オブジェクトの位置関係が、所定の関係を満たすか否かを識別する、
処理をコンピュータに実行させる付記16に記載のプログラム。
(付記18)
複数のオペレーションを含むソースからオブジェクトへのコンパイル、及び前記コンパイルの管理を行う方法であって、前記オブジェクトは複数の部分オブジェクトを有し、
前記オペレーションに対応する前記ソースの一部を前記部分オブジェクトにコンパイルし、
前記コンパイルを実行するプログラムのうち、前記部分オブジェクトの前記コンパイルに関与した部分を特定する情報を生成し、
前記部分オブジェクトに関連付けて、対応する前記オペレーションを表す情報、及び前記コンパイルに関与した部分を特定する情報を含むオブジェクト展開情報をメモリに記憶し、
前記オブジェクト展開情報に基づき、コンパイル障害に関連する前記コンパイルに関与した部分により生成された前記部分オブジェクトを識別する、
処理を有する方法。
(付記19)
前記オブジェクトと、前記オブジェクト展開情報に基づき、コンパイル障害に関連する複数の前記コンパイルに関与した部分により生成された複数の前記部分オブジェクトの位置関係が、所定の関係を満たすか否かを識別する、
処理を有する付記18に記載のプログラム。
(付記20)
複数のオペレーションを含むソースからオブジェクトへのコンパイル、及び前記コンパイルの管理を行う装置であって、前記オブジェクトは複数の部分オブジェクトを有し、
前記オペレーションに対応する前記ソースの一部を前記部分オブジェクトにコンパイルする、コンパイル部と、
前記コンパイルを実行するプログラムのうち、前記部分オブジェクトの前記コンパイルに関与した部分を特定する情報を生成する、コンパイル関与生成部と、
前記部分オブジェクトに関連付けて、対応する前記オペレーションを表す情報、及び前記コンパイルに関与した部分を特定する情報を含むオブジェクト展開情報をメモリに記憶する、オブジェクト展開情報作成部と、
前記オブジェクト展開情報に基づき、コンパイル障害に関連する前記コンパイルに関与した部分により生成された前記部分オブジェクトを識別する、識別部、
とを有する装置。
(付記21)
前記オブジェクトと、前記オブジェクト展開情報に基づき、コンパイル障害に関連する複数の前記コンパイルに関与した部分により生成された複数の前記部分オブジェクトの位置関係が、所定の関係を満たすか否かを識別する、オブジェクト関係識別部、
を有する付記20に記載の装置。
1310 ソース
1320 中間言語
1330 管理部
1330 コンパイル管理部
1332 コンパイル実行プログラム
1334 コンパイル関与生成部
1336 オブジェクト展開情報生成部
1338 ファイル結合部
1340 オブジェクト
1342 部分オブジェクト
1350 オブジェクト展開情報
1352 コンパイルに関与した部分の情報
1360 識別部
1361 識別パターン
1362 オブジェクト関係識別部
1364 部分オブジェクト識別部
1365 出力

Claims (11)

  1. 複数のオペレーションを含むソースからオブジェクトへのコンパイル、及び前記コンパイルの管理を行うプログラムであって、前記オブジェクトは複数の部分オブジェクトを有し、
    前記オペレーションに対応する前記ソースの一部を前記部分オブジェクトにコンパイルし、
    該プログラムのうち、前記部分オブジェクトの前記コンパイルに関与した部分を特定する情報を生成し、
    前記部分オブジェクトに関連付けて、対応する前記オペレーションを表す情報、及び前記コンパイルに関与した部分を特定する情報を含むオブジェクト展開情報をメモリに記憶する、
    処理をコンピュータに実行させるプログラムであって、
    前記オブジェクト展開情報は、コンパイル障害に関連する前記コンパイルに関与した部分により生成された前記部分オブジェクトを識別するために用いられる、
    プログラム。
  2. 前記オブジェクト展開情報は、コンパイル障害に関連する複数の前記コンパイルに関与した部分により生成された複数の前記部分オブジェクトの位置関係が、所定の関係を満たすか否かを識別するために用いられる、
    請求項1に記載のプログラム。
  3. 前記オペレーションを表す情報は、前記コンパイルの過程において生成される中間言語に基づき決定される、
    請求項1又は2に記載のプログラム。
  4. 前記コンパイルに関与した部分を特定する情報は、前記コンパイルの過程において生成される中間言語をオブジェクトに変換するために用いる中間言語定義のバージョン、及び、前記中間言語定義の部分を特定する情報を含む、
    請求項1ないし3のうちいずれか1項に記載のプログラム。
  5. 前記オブジェクトと、前記オブジェクト展開情報とを1つのファイルに結合する処理を、コンピュータに実行させる、請求項1ないし4のうちいずれか1項記載のプログラム。
  6. 複数のオペレーションを含むソースからオブジェクトへのコンパイル、及び前記コンパイルの管理をコンピュータが行う方法であって、前記オブジェクトは複数の部分オブジェクトを有し、
    前記オペレーションに対応する前記ソースの一部を前記部分オブジェクトにコンパイルし、
    前記コンパイルを実行するプログラムのうち、前記部分オブジェクトの前記コンパイルに関与した部分を特定する情報を生成し、
    前記部分オブジェクトに関連付けて、対応する前記オペレーションを表す情報、及び前記コンパイルに関与した部分を特定する情報を含むオブジェクト展開情報をメモリに記憶する、
    処理を有する方法であって、
    前記オブジェクト展開情報は、コンパイル障害に関連する前記コンパイルに関与した部分により生成された前記部分オブジェクトを識別するために用いられる、
    方法。
  7. 複数のオペレーションを含むソースからオブジェクトへのコンパイル、及び前記コンパイルの管理を行う装置であって、前記オブジェクトは複数の部分オブジェクトを有し、
    前記オペレーションに対応する前記ソースの一部を前記部分オブジェクトにコンパイルする、コンパイル部と、
    前記コンパイルを実行するプログラムのうち、前記部分オブジェクトの前記コンパイルに関与した部分を特定する情報を生成する、コンパイル関与生成部と、
    前記部分オブジェクトに関連付けて、対応する前記オペレーションを表す情報、及び前記コンパイルに関与した部分を特定する情報を含むオブジェクト展開情報をメモリに記憶する、オブジェクト展開情報作成部と、
    を有する装置であって、
    前記オブジェクト展開情報は、コンパイル障害に関連する前記コンパイルに関与した部分により生成された前記部分オブジェクトを識別するために用いられる、
    装置。
  8. 複数のオペレーションを含むソースからオブジェクトへのコンパイル、及び前記コンパイルの管理を行うプログラムであって、前記オブジェクトは複数の部分オブジェクトを有し、
    前記オペレーションに対応する前記ソースの一部を前記部分オブジェクトにコンパイルし、
    該プログラムのうち、前記部分オブジェクトの前記コンパイルに関与した部分を特定する情報を生成し、
    前記部分オブジェクトに関連付けて、対応する前記オペレーションを表す情報、及び前記コンパイルに関与した部分を特定する情報を含むオブジェクト展開情報をメモリに記憶し、
    前記オブジェクト展開情報に基づき、コンパイル障害に関連する前記コンパイルに関与した部分により生成された前記部分オブジェクトを識別する、
    処理をコンピュータに実行させるプログラム。
  9. 前記オブジェクトと、前記オブジェクト展開情報に基づき、コンパイル障害に関連する複数の前記コンパイルに関与した部分により生成された複数の前記部分オブジェクトの位置関係が、所定の関係を満たすか否かを識別する、
    処理をコンピュータに実行させる請求項8に記載のプログラム。
  10. 複数のオペレーションを含むソースからオブジェクトへのコンパイル、及び前記コンパイルの管理を行う方法であって、前記オブジェクトは複数の部分オブジェクトを有し、
    前記オペレーションに対応する前記ソースの一部を前記部分オブジェクトにコンパイルし、
    前記コンパイルを実行するプログラムのうち、前記部分オブジェクトの前記コンパイルに関与した部分を特定する情報を生成し、
    前記部分オブジェクトに関連付けて、対応する前記オペレーションを表す情報、及び前記コンパイルに関与した部分を特定する情報を含むオブジェクト展開情報をメモリに記憶し、
    前記オブジェクト展開情報に基づき、コンパイル障害に関連する前記コンパイルに関与した部分により生成された前記部分オブジェクトを識別する、
    処理を有する方法。
  11. 複数のオペレーションを含むソースからオブジェクトへのコンパイル、及び前記コンパイルの管理を行う装置であって、前記オブジェクトは複数の部分オブジェクトを有し、
    前記オペレーションに対応する前記ソースの一部を前記部分オブジェクトにコンパイルする、コンパイル部と、
    前記コンパイルを実行するプログラムのうち、前記部分オブジェクトの前記コンパイルに関与した部分を特定する情報を生成する、コンパイル関与生成部と、
    前記部分オブジェクトに関連付けて、対応する前記オペレーションを表す情報、及び前記コンパイルに関与した部分を特定する情報を含むオブジェクト展開情報をメモリに記憶する、オブジェクト展開情報作成部と、
    前記オブジェクト展開情報に基づき、コンパイル障害に関連する前記コンパイルに関与した部分により生成された前記部分オブジェクトを識別する、識別部、
    とを有する装置。
JP2012149747A 2012-07-03 2012-07-03 コンパイル実行・管理方法、装置、及びプログラム Expired - Fee Related JP5891976B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2012149747A JP5891976B2 (ja) 2012-07-03 2012-07-03 コンパイル実行・管理方法、装置、及びプログラム
US13/894,703 US9081584B2 (en) 2012-07-03 2013-05-15 Recording medium storing compiling program, compiling method, and compiling device

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012149747A JP5891976B2 (ja) 2012-07-03 2012-07-03 コンパイル実行・管理方法、装置、及びプログラム

Publications (2)

Publication Number Publication Date
JP2014013435A true JP2014013435A (ja) 2014-01-23
JP5891976B2 JP5891976B2 (ja) 2016-03-23

Family

ID=49879537

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012149747A Expired - Fee Related JP5891976B2 (ja) 2012-07-03 2012-07-03 コンパイル実行・管理方法、装置、及びプログラム

Country Status (2)

Country Link
US (1) US9081584B2 (ja)
JP (1) JP5891976B2 (ja)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103294517B (zh) * 2012-02-22 2018-05-11 国际商业机器公司 堆栈溢出保护装置、堆栈保护方法、相关编译器和计算装置
JP5891976B2 (ja) * 2012-07-03 2016-03-23 富士通株式会社 コンパイル実行・管理方法、装置、及びプログラム

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10289123A (ja) * 1997-04-14 1998-10-27 Nec Corp 最適化コードデバッグ方式
JPH10293683A (ja) * 1997-04-17 1998-11-04 Toshiba Corp プログラムの比較解析装置、プログラムの比較解析方法、及びプログラムの比較解析プログラムを記録した機械読み取り可能な記録媒体
US20080168426A1 (en) * 2007-01-05 2008-07-10 International Business Machines Corporation Automatic inspection of compiled code
WO2012083266A2 (en) * 2010-12-17 2012-06-21 Microsoft Corporation Fusing debug information from different compiler stages

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000353112A (ja) 1999-06-11 2000-12-19 Nec Soft Ltd 中間言語レベルのデバッグ方法及びシステム
JP2004171064A (ja) 2002-11-15 2004-06-17 Mitsubishi Research Institute Inc バッファオーバーフロー静的解析方法およびプログラム
US7120898B2 (en) * 2003-06-26 2006-10-10 Microsoft Corporation Intermediate representation for multiple exception handling models
US7490320B2 (en) * 2005-02-18 2009-02-10 International Business Machines Corporation Method and apparatus for transforming Java Native Interface function calls into simpler operations during just-in-time compilation
US7987457B2 (en) * 2007-06-25 2011-07-26 Microsoft Corporation Targeted patching for native generation images
US8464207B2 (en) * 2007-10-12 2013-06-11 Novell Intellectual Property Holdings, Inc. System and method for tracking software changes
US8578056B1 (en) * 2008-03-31 2013-11-05 Symantec Corporation Optimized application streaming for just in time compiled components
US8365156B2 (en) * 2010-04-17 2013-01-29 Microsoft Corporation Intermediate language support for change resilience
US8924922B2 (en) * 2010-06-14 2014-12-30 Microsoft Corporation Pre-compiling hosted managed code
US8359496B1 (en) * 2010-08-31 2013-01-22 Google Inc. Fault-resistant just-in-time compiler
US20120110560A1 (en) * 2010-10-27 2012-05-03 Microsoft Corporation Data type provider for a web semantic store
JP5891976B2 (ja) * 2012-07-03 2016-03-23 富士通株式会社 コンパイル実行・管理方法、装置、及びプログラム

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH10289123A (ja) * 1997-04-14 1998-10-27 Nec Corp 最適化コードデバッグ方式
JPH10293683A (ja) * 1997-04-17 1998-11-04 Toshiba Corp プログラムの比較解析装置、プログラムの比較解析方法、及びプログラムの比較解析プログラムを記録した機械読み取り可能な記録媒体
US20080168426A1 (en) * 2007-01-05 2008-07-10 International Business Machines Corporation Automatic inspection of compiled code
WO2012083266A2 (en) * 2010-12-17 2012-06-21 Microsoft Corporation Fusing debug information from different compiler stages

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
JPN6016002314; 松田 晋: '"Cプログラム設計技法 PART3 CPL/0コンパイラに見るCプログラム設計の実際"' C MAGAZINE 第5巻,第5号(通巻44号), 19930501, pp.64-74, ソフトバンク株式会社 *

Also Published As

Publication number Publication date
US20140013314A1 (en) 2014-01-09
US9081584B2 (en) 2015-07-14
JP5891976B2 (ja) 2016-03-23

Similar Documents

Publication Publication Date Title
JP5415557B2 (ja) デバッギングのためのユーザ・スクリプト・コードの変換
US9134966B2 (en) Management of mixed programming languages for a simulation environment
US9898387B2 (en) Development tools for logging and analyzing software bugs
Wang et al. Uroboros: Instrumenting stripped binaries with static reassembling
US8990786B2 (en) Program optimizing apparatus, program optimizing method, and program optimizing article of manufacture
US8694977B2 (en) Distributed compiling process with instruction signature support
US20080104096A1 (en) Software development system
US20110126179A1 (en) Method and System for Dynamic Patching Software Using Source Code
JP6342129B2 (ja) 混合モードプログラムのソースコードエラー位置検出装置及び方法
US9213531B2 (en) Methods to eliminate extra memory loads while accessing global variables in position independent code
US20170269907A1 (en) Single-source-base compilation for multiple target environments
US8898649B2 (en) Application program analysis method, analysis system and recording medium for identifying a contributing factor for an invalid operation of an application program
CN112596739A (zh) 一种数据的处理方法和装置
JP6845429B2 (ja) コンパイラプログラム、情報処理装置およびコンパイル方法
US8918772B1 (en) Statically analyzing program correctness for a dynamic programming language
US7530060B1 (en) Methods and computer program product for optimizing binaries with coding style formalization
US20110202906A1 (en) Compiling method and compiling program
JP5891976B2 (ja) コンパイル実行・管理方法、装置、及びプログラム
Bouraqadi et al. Test-driven development for generated portable Javascript apps
US8930928B2 (en) Method for modifying the assembly output of a compiler
US8756580B2 (en) Instance-based field affinity optimization
JP4763743B2 (ja) プログラム動作比較装置及び方法及びプログラム
US6976247B1 (en) Generating an executable file
JP6081144B2 (ja) ソースコード解析装置
JP5016288B2 (ja) 最適化処理方法、及びその言語処理系

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150406

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20151218

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160126

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160208

R150 Certificate of patent or registration of utility model

Ref document number: 5891976

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees