JP5910197B2 - 組み込み用プログラム開発装置、コンパイル方法およびコンパイラプログラム - Google Patents

組み込み用プログラム開発装置、コンパイル方法およびコンパイラプログラム Download PDF

Info

Publication number
JP5910197B2
JP5910197B2 JP2012057118A JP2012057118A JP5910197B2 JP 5910197 B2 JP5910197 B2 JP 5910197B2 JP 2012057118 A JP2012057118 A JP 2012057118A JP 2012057118 A JP2012057118 A JP 2012057118A JP 5910197 B2 JP5910197 B2 JP 5910197B2
Authority
JP
Japan
Prior art keywords
assembly language
variable
language
compiler
assembly
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.)
Active
Application number
JP2012057118A
Other languages
English (en)
Other versions
JP2013191038A (ja
Inventor
準 岸川
準 岸川
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.)
Ricoh Co Ltd
Original Assignee
Ricoh 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 Ricoh Co Ltd filed Critical Ricoh Co Ltd
Priority to JP2012057118A priority Critical patent/JP5910197B2/ja
Publication of JP2013191038A publication Critical patent/JP2013191038A/ja
Application granted granted Critical
Publication of JP5910197B2 publication Critical patent/JP5910197B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Description

本発明は、ソースプログラムからアセンブリ言語コード生成するコンパイラを備えた組み込み用プログラム開発装置と、コンパイル方法およびコンパイラプログラムに関する。
従来の組み込み用プログラム開発は、図13に示すように、例えばホストコンピュータ上でソースファイル(ソースプログラム)をコンパイラによりコンパイルし、アセンブリ言語コードファイル生成後、アセンブラによりオブジェクトファイルが生成され、そのオブジェクトファイルをリンカによりライブラリや他のオブジェクトファイルなどとの結合処理が行われることで実行形式プログラムが生成されていた。
ここで、コンパイラには、例えばC言語などのコンパイル言語上のプログラミングでは冗長なコードになり易い部分を、直接アセンブリ言語記述できるインラインアセンブル機能を持つものがあり、一般的に用いられている。このインラインアセンブルが可能なコンパイラにおいて、インラインアセンブリ言語中のレジスタと、コンパイル言語部分にて展開され使用されるレジスタとの競合のチェックや、よりコード量の少ない、または実行速度が速くなるような最適なレジスタの使用に関するコンパイラの技術は、例えば特許文献1〜3に提案されている。
特許文献1には、レジスタで引き渡される仮引数に関しては、仮引数自体をコンパイラ内部で生成した変数に置き換え、さらに、変数へのレジスタ割り付け時に、変数の生存区間がインラインアセンブラルーチンを含む場合、インラインアセンブラルーチンで更新されるレジスタとは異なるレジスタを変数に割り付けることが記載されている。
特許文献2には、インラインアセンブラ内で参照される外部変数、定義される外部変数を指定可能な記述仕様と、高級言語記述部分とインラインアセンブラ部分とのデータ授受をレジスタを介して行なう記述仕様を設けて、この記述仕様の情報を使って、インラインアセンブラに跨がった外部変数に関する最適化によるコード効率向上や、コンパイラ自体の解析コストを軽減することが記載されている。
特許文献3には、プログラム開発装置が、ターゲットプロセッサ上で実行される目的プログラムのための原始プログラム中に、ターゲットプロセッサのレジスタを直接指定している1以上の代入文を含むか否かを解析する構文解析部と、原始プログラムがコンパイルされ割り付けられるレジスタの生存区間情報を検出し、検出した生存区間情報に基づき割り付けられるレジスタが1以上の代入文を跨いで生存しているか否かを検出する検出部とを有して、アセンブリ言語の部分を跨いで生存するレジスタとアセンブリ言語の部分において指定されるレジスタとが実際にバッティングする場合のみ検出することが記載されている。
上述したインラインアセンブルが可能なコンパイラにおいて、インラインアセンブリ言語(コンパイル言語内のアセンブリ言語)中に使用されるコンパイル言語で宣言された変数の使い方に矛盾があっても、コンパイラはおろか、その後段に実行されるアセンブラでも検出されることはなく、プログラムの不具合の要因となる問題があった。
上述した問題を図14を参照して詳細に説明する。例えば、インラインアセンブルが可能なC言語用コンパイラにおいて、図14(a)のように宣言されたグローバル変数があったとする。この変数をインラインアセンブル記述内で使用する場合に図14(b)のような記述を行なったとする。ここで、図14(b)の#asmと#endasmは、両者で挟まれる部分がアセンブリ言語記述であることを示すものであり、C言語側で宣言された変数abcは、アセンブリ言語側では先頭に“_”を付加して、同じ領域を表すものとする。また、ld.w _abc,g0は、アドレス_abcから1ワード(=16ビット)分のデータを対象のプロセッサの16ビット汎用レジスタであるg0レジスタにロードする命令、cmp #10,g0は即値10とレジスタg0の内容を比較し、その結果をプロセッサのステータスフラグに設定する命令、bgt label10 は、そのステータスフラグの状態に基いて10より大きかったらlabel10に分岐する命令である。
図14(a)のC言語側の記述も、図14(b)のアセンブリ言語側の記述も、文法的に問題はなく、図13に示すコンパイラや、その後段のアセンブラでもエラーとなることはなく、正常にリンカを通して実行形式プログラムが生成される。しかし、C言語側で宣言された変数abcは、signed charで宣言されているので8ビットデータであり、確保されるメモリ領域も1バイト分である。アセンブリ言語側では、このアドレスより1ワード分のロードを行っているため、g0レジスタの上位8ビット側には、どのようなデータが入るのかが不定となる。そして、このg0レジスタと即値10とを比較し、その結果により分岐を行っているため、上位8ビットの内容によっては、間違った比較となる可能性がある。これは、プログラムの不具合の元となり、この部分が意図した動作にはならない可能性が出てくる。
あるいは、インラインアセンブル記述部分が、図14(c)のような記述を行ったとする。ここで、ld.b _abc,g0は、アドレス_abcから1バイト分のデータをg0レジスタの下位8ビットにロードし、上位8ビットは0詰めを行うものである。この時も同様に、コンパイラもアセンブラもエラーとは認識せず、正常に実行形式プログラムが生成される。しかし、変数abcはsignedであるので、符合付きの8ビットデータとして宣言されているため、データのサイズ指定は正しいものの、g0へのロード時の上位8ビットは、符号ビットで埋められるのが正しい動作となる。これもプログラムの不具合の元となる可能性が出てくる。
正しくは、例えば図14(d)のような記述となる。ここで、ld.bs _abc,g0 は、アドレス_abcから1バイト分のデータをg0レジスタの下位8ビットにロードし、上位8ビットは符号拡張を行うものである。
即ち、図14に例示したように、コンパイラやアセンブラではエラーと認識しないにもかかわらず、インラインアセンブリ言語中の変数の使い方によってはプログラムの不具合となる場合があった。
本発明はかかる問題を解決することを目的としている。
すなわち、本発明は、C言語などのコンパイル言語で宣言した変数をインラインアセンブリ言語中で使用した際に矛盾が生じないようにすることができる組み込み用プログラム開発装置、コンパイル方法およびコンパイラプログラムを提供することを目的としている。
上記に記載された課題を解決するために請求項1に記載された発明は、ソースプログラムを読み込む読み込み手段およびアセンブリ言語コードを生成するアセンブリ言語コード生成手段を備えたコンパイラと、前記アセンブリ言語コードを読み込みオブジェクトファイルを生成するアセンブラと、を有する組み込み用プログラム開発装置において、前記ソースプログラムが、前記コンパイラにてアセンブリ言語に変換されるコンパイル言語および前記アセンブリ言語で構成されており、前記コンパイラが、前記読み込み手段が読み込んだ前記ソースプログラムから前記アセンブリ言語部分を検出するアセンブリ言語検出手段と、前記アセンブリ言語検出手段が検出した前記アセンブリ言語部分から前記コンパイル言語で宣言されている変数と同じ変数を検出する変数検出手段と、前記変数検出手段が検出した前記変数について、前記コンパイル言語上と前記アセンブリ言語上でのサイズまたは符号のうち少なくともいずれか一方を比較する比較手段と、前記コンパイル言語の変数宣言に対する前記アセンブリ言語上の不正な命令と正しい命令の対応テーブルを備え、前記比較手段が比較した結果、前記サイズまたは符号のうち少なくともいずれか一方が異なる場合は、前記対応テーブルに基づいて前記アセンブリ言語を変更する変更手段と、を備えていることを特徴とする組み込み用プログラム開発装置である。
請求項1に記載の発明によれば、コンパイル言語で宣言されている変数と同じ変数をアセンブリ言語中で使用しているか変数検出手段で検出し、検出された変数のサイズまたは符号のうち少なくともいずれか一方を比較手段で比較し、比較結果が異なる場合は、アセンブリ言語を変更手段で変更するので、インラインアセンブリ言語とコンパイル言語とで矛盾を生じないようにすることができる。
本発明の第1の実施形態にかかる組み込み用プログラム開発装置の構成図である。 図1に示された組み込み用プログラム開発装置の機能的な構成を示した構成図である。 図2に示されたコンパイラの構成を示した構成図である。 図3に示された構文解析部の構成を示した構成図である。 図3に示された構文解析部のインラインアセンブリ言語部分の解析動作を示したフローチャートである。 本実施形態のコンパイラの対象となるプロセッサの命令コードのうち、変数を扱うことのできる命令の動作内容一覧の例を示した表である。 C言語命令対応テーブルの例を示した表である。 正しくないインラインアセンブリ言語部分を持つC言語ソースの例である。 図8に示されたソースを正しい命令に変換した例である。 ポインタ変数の場合の正しくないインラインアセンブリ言語部分を持つC言語ソースの例である。 図10に示されたソースを正しい命令に変換した例である。 ポインタ変数の場合のC言語命令対応テーブルの例を示した表である。 従来の組み込み用プログラム開発装置の機能的な構成を示した構成図である。 コンパイル言語で宣言された変数がインラインアセンブリ言語内で不正に扱われていることを示すコード例である。
以下、本発明の一実施形態を、図1乃至図12を参照して説明する。図1は、本発明の第1の実施形態にかかる組み込み用プログラム開発装置の構成図である。図2は、図1に示された組み込み用プログラム開発装置の機能的な構成を示した構成図である。図3は、図2に示されたコンパイラの構成を示した構成図である。図4は、図3に示された構文解析部の構成を示した構成図である。図5は、図3に示された構文解析部のインラインアセンブリ言語部分の解析動作を示したフローチャートである。図6は、本実施形態のコンパイラの対象となるプロセッサの命令コードのうち、変数を扱うことのできる命令の動作内容一覧の例を示した表である。図7は、C言語命令対応テーブルの例を示した表である。図8は、正しくないインラインアセンブリ言語部分を持つC言語ソースの例である。図9は、図8に示されたソースを正しい命令に変換した例である。図10は、ポインタ変数の場合の正しくないインラインアセンブリ言語部分を持つC言語ソースの例である。図11は、図10に示されたソースを正しい命令に変換した例である。図12は、ポインタ変数の場合のC言語命令対応テーブルの例を示した表である。
図1に示した組み込み用プログラム開発装置1は、コンピュータ装置であり、本体装置7と、各種処理の実行結果を表示する表示部2と、キーボード3と、マウス4等の入力部と、を含んで構成されている。なお、入力部として示したキーボード3と、マウス4は一例であり、タッチパネルなど他の入力装置であってもよい。本体装置7は、中央処理装置(以下、CPUという)5と、記憶装置6とを含んで構成されている。記憶装置6には、コンパイラ言語としてC言語及びアセンブリ言語により記述されたソースプログラムが記憶されているとともに、コンパイラやアセンブラおよびリンカなどの実行形式プログラムを生成する各ツールも記憶されている。
ユーザは、各種指示をCPU5に与えるためのキーボード3及びマウス4等の入力部を操作することにより、上述したソースプログラムをコンパイラへの入力として指定することができる。このような組み込み用プログラム開発装置1において上述した各ツールをCPU5上で実行することにより、ソースプログラムから実行形式プログラムを生成することができる。即ち、各ツールはCPU5で実行されるコンピュータプログラムとして構成されている。なお、ソースプログラムは図示しない外部記憶装置から入力したりネットワーク経由で外部から入力されるようにしてもよいし、実行形式プログラムも外部記憶装置に出力したりネットワーク経由で外部へ出力されるようにしてもよい。
図2に組み込み用プログラム開発装置1の機能的な構成を示す。組み込み用プログラム開発装置1は、コンパイラ11と、アセンブラ12と、リンカ13と、を備えている。コンパイラ11は、ソースプログラム21を読み込んでアセンブリコードファイル(アセンブリ言語コード)22を生成する。コンパイラは図3に示したように構文解析部111と、最適化・資源割付部112と、コード生成部113と、を備えている。
構文解析部111は、入力されるソースプログラムに対し、字句解析、構文解析及び意味解析を行うとともに、C言語で宣言されている変数がインラインアセンブリ言語(C言語内のアセンブリ言語部分)中に使用されている場合における矛盾のチェックも行っている。
構文解析部111は、図4に示したように解析部111aと、アセンブリ言語検出部111bと、変数検出部111cと、比較部111dと、変更部111eと、を備えている。読み込み手段としての解析部111aは、入力されるソースプログラム21を読み込んで、字句解析、構文解析及び意味解析を行う。
アセンブリ言語検出手段としてのアセンブリ言語検出部111bは、解析部111aの処理が終了したソースプログラム21について、ソースプログラム21内のインラインアセンブリ言語部分を検出している。変数検出手段としての変数検出部111cは、ソースプログラム21内のインラインアセンブリ言語部分で、コンパイラ言語で宣言されている変数を検出している。比較手段としての比較部111dは、変数検出部111cで検出された変数がサイズの扱いと符号の扱いについてコンパイル言語とアセンブリ言語とで相違があるかを検出している。変更手段としての変更部111eは、比較部111dでの比較結果で相違があると判断された場合にアセンブリ言語部分の当該箇所の変更を行う。
最適化・資源割付部112は、構文解析部111の出力に対し、プログラムのコードサイズ削減及び実行速度向上を目的とした最適化処理およびプログラム実行時に割り付けられるレジスタ等のCPU資源を決定する。
アセンブリ言語コード生成手段としてのコード生成部113は、最適化・資源割付部112の出力に対し、ターゲットプロセッサが実行可能なアセンブリ命令列に変換し、アセンブリコードファイル22を生成する。
アセンブラ12は、アセンブリコードファイル22を読み込んでオブジェクトファイル23を生成する。リンカ13は、オブジェクトファイル23や図示しないライブラリなどを読み込んで実行形式プログラム24を生成する。
なお、ソースプログラム21、実行形式プログラム24は記憶装置6に記憶されることは上述したとおりであるが、アセンブリコードファイル22とオブジェクトファイル23も必要に応じて記憶装置6に記憶される。
次に、上述した構成の組み込み用プログラム開発装置1において、コンパイラ11でのインラインアセンブリ言語部分の解析動作を図5のフローチャートを参照して説明する。
まず、アセンブリ言語検出ステップとしてのステップS1において、ニーモニックを取り出してステップS2に進む。つまり、インラインアセンブリ言語を検出してその中のニーモニックを1つ読み込む。
次に、変数検出ステップとしてのステップS2において、C言語側で宣言された変数を使っている命令か否かを判断し、C言語側で宣言された変数を使っている命令である場合(Yの場合)はステップS3に進み、そうでない場合(Nの場合)はステップS8に進む。即ち、C言語で宣言されている変数と同じ変数を検出している。本ステップでは、ステップS1で取り出したニーモニックに、C言語側で宣言されている変数が使用されているか否かを走査している(検出している)。通常、インラインアセンブリ言語にて変数を扱うのは、ロード/ストア系命令、アドレス取得命令等であり、インラインアセンブリ命令コードの一部に限られる。したがって、予め対象となる命令を指定しておくことで検出が容易かつ高速に行える。図6に、本実施形態のコンパイラ11の対象となるプロセッサの命令コードのうち、変数を扱うことのできる命令の動作内容一覧の例を示す。なお、当該プロセッサのバイト順はリトルエンディアンとする。
次に、比較ステップとしてのステップS3において、C言語命令対応テーブルを使って命令の比較を行いステップS4に進む。本ステップでは、ステップS2で該当する変数が見つかったので、その使用されているニーモニックを解析している。具体的には、その変数に対して、どのようなサイズでアクセスするのか、また符号付きか符号無しかを確認する。そして、その確認結果と、C言語部分で宣言されている変数のサイズと符号付き/符号無しかの情報を比較する。即ち、C言語上とインラインアセンブリ言語上でのサイズおよび符号を比較している。
図7に、C言語による変数宣言に対するインラインアセンブリ言語の命令コードの正しい命令と不正な命令の対応テーブルの例(C言語命令対応テーブル)を示す。図7の例では、char型は8ビット、short型は8ビット、int型は16ビット、long型は16ビットであるものとする。また、char型はsigned char型を示すものとする。図7の対応する命令コードや不正な命令コードに記載されているように命令コードを確認すれば、当該変数のサイズと符号付き/符号無しかの情報は確認できる。なお、図7中「不正とは限らない場合有り」と書かれている部分は、プログラマが2バイトの領域から故意に1バイトのアクセスを行う場合があるためである。このC言語命令対応テーブルは図4の変更部111eに含まれるが、比較部111dからも参照可能となっている。
次に、ステップS4において、ステップS3で比較した結果が正しい命令か否かを判断し、正しい命令である場合(Yの場合)はステップS8に進み、正しい命令で無い場合(Nの場合)はステップS5に進む。即ち、図7に示したC言語命令対応テーブルにより当該ニーモニックが正しい命令か否かを判断している。
次に、ステップS5において、不正であることを示す、または、その可能性があることを示すワーニングメッセージを出力してステップS6に進む。例えば、表示部2にワーニングメッセージが出力される。或いは実行結果のログファイル等にワーニングメッセージを出力するようにしてもよい。
次に、ステップS6において、正しい命令に置換するか否かを判断し、置換する場合(Yの場合)はステップS7に進み、置換しない場合(Nの場合)はステップS8に進む。本ステップでは、不正であると判断された命令のニーモニックを変更するか否かを選択している。なお、この選択は、コンパイルオプションにてプログラマが行う。
次に、変更ステップとしてのステップS7において、C言語命令対応テーブルを基に正しい命令に変更してステップS9に進む。即ち、C言語命令対応テーブルに基づいてニーモニックを変更する。即ち、比較した結果、サイズまたは符号のうち少なくともいずれか一方が異なる場合は、インラインアセンブリ言語部分を変更している。
一方、ステップS8においては、ニーモニック変更なしでステップS9に進む。即ち、ステップS3で比較した結果が正しい命令であった、または、C言語側で宣言された変数を使っている命令でなかった、または、ワーニングメッセージのみの出力としたので、ニーモニック変更なしてそのまま出力する。
次に、ステップS9において、インラインアセンブル言語部分の終わりか否かを判断し、終わりの場合(Yの場合)は最適化・資源割付などの次のコンパイラ処理へ進み、終わりでない場合(Nの場合)はステップS1に戻る。つまり、次のニーモニックを読み込んで同様の処理を繰り返す。
ここで、上述したコンパイラ11でのインラインアセンブリ言語部分の解析の具体的な例を説明する。図8は、正しくないインラインアセンブリ言語部分を持つC言語ソースの例である。
この例の中で、(a)、(b)、(c)、(d)がC言語ソース側で宣言した変数をインラインアセンブリ言語記述内で使用しているものである。それぞれ、インラインアセンブリ言語上の問題はなく、アセンブルエラーとなることはない。しかし、C言語部分で宣言している変数の扱いとは相違がある。
(a)は、signed char型の変数に対して、ld.b、即ち1バイトのデータを2バイトのレジスタg0の下位側バイトにロードするが、その上位側バイトは、0詰めされてしまう。これはunsigned扱いとなり、C言語の宣言とは異なってしまう。ここは、図7のC言語命令対応テーブルにより、
ld.bs _sc,g0
として、上位側バイトを符号拡張してロードすることが正しいため、命令変更の対象となり、命令変更(ニーモニック変更)が行われる。
同様に(b)は、unsigned char型の変数に対して、st、即ち2バイトのレジスタg1の書き込みを行っている。これでは、この変数の領域外の部分にデータの書き込みが行われ、その部分もデータを破壊してしまうことになる。ここは、図7のC言語命令対応テーブルにより、
st.b g1,_uc
として、下位側バイトのみを書き込むことが正しいため、命令変換の対象になり、命令変更(ニーモニック変更)が行われる。
同様に(c)は、signed int型の変数に対して、ld.b、即ち2バイトのデータの1バイト目を2バイトのレジスタg2の下位側バイトにロードするが、その上位側バイトは、0詰めされる。これはロードされるサイズが異なってしまっている。ここは、図7のC言語命令対応テーブルにより、
ld.w _si1,g2
または、
ld _si1,g2
として、2バイトのデータをロードすることが正しいと判断され、命令変更の対象になり得る。ただしこの場合、プログラマが意図して1バイト目のみをロードしている可能性もあるため、ワーニングメッセージを出力するだけに留めるだけにしてもよい。なお、変更候補の命令が複数ある場合は、予めデフォルトで置き換える命令を決めておいてもよい。
同様に(d)は、unsigned int型の変数に対して、ld.bs、即ち2バイトのデータの1バイト目を2バイトのレジスタg3の下位側バイトにロードし、その上位側バイトは符号拡張される。これもロードされるサイズが異なっており、さらに符号拡張が正しいのかさえ疑われる。ここは、図7のC言語命令対応テーブルにより、
ld.w _ui1,g3
または、
ld _ui1,g3
として、2バイトのデータをロードすることが正しいと判断され、命令変更の対象になり得る。ただし、(c)の場合と同様に、プログラマが意図して1バイト目のみをロードしている可能性があるため、ここも、ワーニングメッセージを出力するだけに留めるだけにしてもよい。
図8に示したソースを正しい命令に変換した例を図9に示す。ここでは、(c)、(d)も変換を行うものとする。(a)、(b)、(c)、(d)はそれぞれ、(e)、(f)、(g)、(h)に変換される。
続いてポインタ変数の場合の例を示す。ポインタ変数の場合、通常そのアドレスがレジスタに書き込まれ、そのレジスタからの間接参照が行われる。図10にポインタ変数を用いたインラインアセンブリ言語の例を示し、その変換結果の例を図11に示す。
図10の(i)、(j)、(k)、(l)は、全て1バイトアクセスを行っており、ポインタとして扱うためにはプロセッサのメモリ領域をアクセスできるように2バイトでのアクセスが必要で有り、これら全てが正しくない。図10の(i)、(j)、(k)、(l)部分が、それぞれ図11の(m)、(n)、(o)、(p)に変換される。この変換には、図12に示すポインタ変数に関するC言語命令対応テーブルが用いられる。ただし、ポインタ変数でない場合と同様にプログラマが意図して1バイト目のみをロードしている可能性があるため、ワーニングメッセージを出力するだけに留めるようにしてもよい。即ち、図10の(i)、(j)、(k)、(l)部分を変換しないことをプログラマが選択できるようにしてもよい。
本実施形態によれば、C言語で宣言されている変数と同じ変数をインラインアセンブリ言語中で使用しているかを検出し、検出された変数のサイズおよび符号をC言語における宣言とインラインアセンブリ言語中とで比較し、比較結果が異なる、つまり不正な命令であると判断された場合は、C言語命令対応テーブルに基いてインラインアセンブリ言語のニーモニックを変更するので、C言語記述内のインラインアセンブリ言語内の、変数への不正なアクセスを検出し、必要に応じて、正しい記述へ変換することができ、インラインアセンブリ言語中で矛盾が生じないようにすることができる。
また、正しい命令か不正な命令かは、C言語命令対応テーブルに基いて判断し、当該C言語命令対応テーブルに基いてニーモニックを変更するので、予めC言語命令対応テーブルを用意することで正しい命令か不正な命令かの判断やニーモニックの変更が容易となる。
また、変数は、ポインタ変数であってもよく、その場合も通常の変数と同様に、C言語で宣言されている変数と同じ変数をインラインアセンブリ言語中で使用しているかを検出し、検出された変数のサイズおよび符号をC言語における宣言とインラインアセンブリ言語中とで比較し、比較結果が異なる、つまり不正な命令であると判断された場合は、C言語命令対応テーブルに基いてインラインアセンブリ言語のニーモニックを変更するので、C言語記述内のインラインアセンブリ言語内の、変数への不正なアクセスを検出し、必要に応じて、正しい記述へ変換することができ、インラインアセンブリ言語中で矛盾が生じないようにすることができる。
なお、上述した実施形態では、変数のサイズと符号の両方を比較していたが、いずれか一方のみを比較するようにしてもよい。
また、上述した実施形態では、構文解析部111が、アセンブリ言語検出部111b、変数検出部111c、比較部111d、変更部111eを備えていたが、最適化・資源割付部112に備えてもよい。その場合は、アセンブリ言語検出部111b、変数検出部111c、比較部111d、変更部111eの各処理後に最適化や資源割付処理を行ってもよいし、最適化や資源割付処理後にアセンブリ言語検出部111b、変数検出部111c、比較部111d、変更部111eの各処理を行ってもよい。或いは、コード生成部113のアセンブリコード生成前にアセンブリ言語検出部111b、変数検出部111c、比較部111d、変更部111eの各処理を行うようにしてもよい。要するにコンパイラ11が、アセンブリ言語検出部111b、変数検出部111c、比較部111d、変更部111eを備えていればよい。
なお、本発明は上記実施形態に限定されるものではない。即ち、本発明の骨子を逸脱しない範囲で種々変形して実施することができる。
1 組み込み用プログラム開発装置
5 CPU
6 記憶装置
11 コンパイラ
12 アセンブラ
21 ソースプログラム
111a 構文解析部(読み込み手段)
111b アセンブリ言語検出部(アセンブリ言語検出手段)
111c 変数検出部(変数検出手段)
111d 比較部(比較手段)
111e 変更部(変更手段)
113 コード生成部(アセンブリ言語コード生成手段)
S1 ニーモニックを取り出す(アセンブリ言語検出ステップ)
S2 C言語側で宣言された変数を使っている命令か(変数検出ステップ)
S3 C言語命令対応テーブルを使って命令の比較(比較ステップ)
S7 C言語命令対応テーブルを元に正しい命令に変更(変更ステップ)
特許4041248号公報 特許3630086号公報 特開2009−258796号公報

Claims (6)

  1. ソースプログラムを読み込む読み込み手段およびアセンブリ言語コードを生成するアセンブリ言語コード生成手段を備えたコンパイラと、前記アセンブリ言語コードを読み込みオブジェクトファイルを生成するアセンブラと、を有する組み込み用プログラム開発装置において、
    前記ソースプログラムが、前記コンパイラにてアセンブリ言語に変換されるコンパイル言語および前記アセンブリ言語で構成されており、
    前記コンパイラが、
    前記読み込み手段が読み込んだ前記ソースプログラムから前記アセンブリ言語部分を検出するアセンブリ言語検出手段と、
    前記アセンブリ言語検出手段が検出した前記アセンブリ言語部分から前記コンパイル言語で宣言されている変数と同じ変数を検出する変数検出手段と、
    前記変数検出手段が検出した前記変数について、前記コンパイル言語上と前記アセンブリ言語上でのサイズまたは符号のうち少なくともいずれか一方を比較する比較手段と、
    前記コンパイル言語の変数宣言に対する前記アセンブリ言語上の不正な命令と正しい命令の対応テーブルを備え、前記比較手段が比較した結果、前記サイズまたは符号のうち少なくともいずれか一方が異なる場合は、前記対応テーブルに基づいて前記アセンブリ言語を変更する変更手段と、
    を備えていることを特徴とする組み込み用プログラム開発装置。
  2. 前記変数が、ポインタ変数であることを特徴とする請求項1に記載の組み込み用プログラム開発装置。
  3. ソースプログラムからアセンブリ言語コードを生成するコンパイル方法において、
    前記ソースプログラムが、アセンブリ言語に変換されるコンパイル言語および前記アセンブリ言語で構成されており、
    前記ソースプログラムから前記アセンブリ言語部分を検出するアセンブリ言語検出ステップと、
    前記アセンブリ言語検出ステップで検出した前記アセンブリ言語部分から前記コンパイル言語で宣言されている変数と同じ変数を検出する変数検出ステップと、
    前記変数検出ステップで検出した前記変数について、前記コンパイル言語上と前記アセンブリ言語上でのサイズまたは符号のうち少なくともいずれか一方を比較する比較ステップと、
    前記比較ステップで比較した結果、前記サイズまたは符号のうち少なくともいずれか一方が異なる場合は、前記コンパイル言語の変数宣言に対する前記アセンブリ言語上の不正な命令と正しい命令の対応テーブルに基づいて前記アセンブリ言語を変更する変更ステップと、
    を順次実行することを特徴とするコンパイル方法。
  4. 前記変数が、ポインタ変数であることを特徴とする請求項に記載のコンパイル方法。
  5. ソースプログラムからアセンブリ言語コードを生成するコンパイラとしてコンピュータを機能させるコンパイラプログラムにおいて、
    前記ソースプログラムが、前記コンパイラにてアセンブリ言語に変換されるコンパイル言語および前記アセンブリ言語で構成されており、
    前記コンパイラが、
    前記ソースプログラムから前記アセンブリ言語部分を検出するアセンブリ言語検出手段と、
    前記アセンブリ言語検出手段が検出した前記アセンブリ言語部分から前記コンパイル言語で宣言されている変数と同じ変数を検出する変数検出手段と、
    前記変数検出手段が検出した前記変数について、前記コンパイル言語上と前記アセンブリ言語上でのサイズまたは符号のうち少なくともいずれか一方を比較する比較手段と、
    前記コンパイル言語の変数宣言に対する前記アセンブリ言語上の不正な命令と正しい命令の対応テーブルを備え、前記比較手段が比較した結果、前記サイズまたは符号のうち少なくともいずれか一方が異なる場合は、前記対応テーブルに基づいて前記アセンブリ言語を変更する変更手段と、
    して前記コンピュータを機能させることを特徴とするコンパイラプログラム。
  6. 前記変数が、ポインタ変数であることを特徴とする請求項5に記載のコンパイラプログラム。
JP2012057118A 2012-03-14 2012-03-14 組み込み用プログラム開発装置、コンパイル方法およびコンパイラプログラム Active JP5910197B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012057118A JP5910197B2 (ja) 2012-03-14 2012-03-14 組み込み用プログラム開発装置、コンパイル方法およびコンパイラプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012057118A JP5910197B2 (ja) 2012-03-14 2012-03-14 組み込み用プログラム開発装置、コンパイル方法およびコンパイラプログラム

Publications (2)

Publication Number Publication Date
JP2013191038A JP2013191038A (ja) 2013-09-26
JP5910197B2 true JP5910197B2 (ja) 2016-04-27

Family

ID=49391202

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012057118A Active JP5910197B2 (ja) 2012-03-14 2012-03-14 組み込み用プログラム開発装置、コンパイル方法およびコンパイラプログラム

Country Status (1)

Country Link
JP (1) JP5910197B2 (ja)

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS58169637A (ja) * 1982-03-31 1983-10-06 Fujitsu Ltd コンパイル処理方式
JP2004118494A (ja) * 2002-09-26 2004-04-15 Hitachi Software Eng Co Ltd 異種言語プログラム間インターフェイスのチェックプログラム及びチェック方法
JP2008020972A (ja) * 2006-07-11 2008-01-31 Hitachi Ltd ソフトウエア解析システム

Also Published As

Publication number Publication date
JP2013191038A (ja) 2013-09-26

Similar Documents

Publication Publication Date Title
US8453128B2 (en) Method and system for implementing a just-in-time compiler
US7725883B1 (en) Program interpreter
EP1728155B1 (en) Method and system for performing link-time code optimization without additional code analysis
US10713024B2 (en) Load module compiler
JP5893038B2 (ja) ユーザ定義型のコンパイル時境界検査
US8843920B2 (en) Systems and methods for deferring software implementation decisions until load time
CN110825386B (zh) 代码的编译方法和装置、存储介质
Hummel et al. Annotating the Java bytecodes in support of optimization
US9235389B2 (en) Method of providing embedded software development tool for supporting embedded software development environment based on native building, and apparatus thereof
JP2007304840A (ja) コンパイル方法、デバッグ方法、コンパイルプログラムおよびデバッグプログラム
Hong et al. Improving simd parallelism via dynamic binary translation
JP2008276735A (ja) プログラムコード変換装置及びプログラムコード変換方法
JP2008305337A (ja) プログラム変換装置、プログラム変換方法、プログラム、記憶媒体、デバッグ装置、デバッグ方法及びプログラム開発システム
JP5910197B2 (ja) 組み込み用プログラム開発装置、コンパイル方法およびコンパイラプログラム
El-Shobaky et al. Automatic vectorization using dynamic compilation and tree pattern matching technique in Jikes RVM
JP3840149B2 (ja) コンパイラ、演算処理システム及び演算処理方法
JP2007226589A (ja) プログラム変換システム
JP5891976B2 (ja) コンパイル実行・管理方法、装置、及びプログラム
Sharma et al. Can we run in parallel? Automating loop parallelization for TornadoVM
JP2009258796A (ja) プログラム開発装置及びプログラム開発方法
US20040045018A1 (en) Using address space bridge in postoptimizer to route indirect calls at runtime
KR20040044655A (ko) 자바 가상머신에서 루프 문 처리를 위해 바이트코드를생성 및 수행하는 방법
JP2007114934A (ja) コンパイラシステム
Quinlan et al. Rose user manual: A tool for building source-to-source translators draft user manual (version 0.9. 11.115)
Tian et al. Inside the Intel 10.1 Compilers: New Threadizer and New Vectorizer for Intel Core2 Processors.

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150217

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20151007

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20151013

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20151207

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: 20160301

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160314

R151 Written notification of patent or utility model registration

Ref document number: 5910197

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R151