2012-02-01 10 views
4

-fdump-tree- *フラグを使用すると、ソースコードファイルのコンパイル時に中間形式ファイルをダンプすることができます。私の質問は、最終的なオブジェクトファイルを取得するためにgccへの入力としてその中間ファイルを使用できるかどうかです。gccの中間ファイルからオブジェクトファイルをコンパイル

私は(-fdumpツリー-GIMPLEフラグを使用して得られた)GIMPLE形式の中間ファイルにコードを追加したいので、私はこれを聞いていますのよ。確かに私はフックを使用して自分のパスを追加することができますが、私はまだ複雑さのレベルに到達したくないです。 gccに私の変更された中間ファイルを与えたいので、そこからコンパイルを開始し、最終的なオブジェクトファイルを私に渡すことができます。どのようにこれを達成するための任意のアイデアですか?

+0

(+1)どちらも答えはありませんが、同じことをしたいです。 – umlcat

+1

[this](http://gcc.gnu.org/wiki/GimpleFrontEnd)を見たことがありますか? –

答えて

3

GIMPLEは完全にダンプして正しく再ロードするのが難しいバイナリ形式です。 LLVMと比較して、LLVM IRはで、を通常のファイル(そのファイルのテキスト形式とバイナリ形式はそれぞれ別の形式に完全に変換可能)にダンプ可能で再ロード可能に設計されていました。あなたはLLVMIRを発射するために前進することができ、次にいくつかの最適化を伴うoptプログラムを開始し、その後、他のものを使用して、位相の間にLLVM IRビットコードファイルが存在する。そして、あなたはIRビットコードからネイティブコードへのコード生成を開始できます(理論的には、同じプラットフォームではなく、PNaClプロジェクトを参照してください)。

GCCの内部表現をダンプ/リロードするプロジェクトがあります。このようなプロジェクトはgccと商用コンパイラツールを統合するために作成されたものです。著者は商用コードとgccをリンクすることはできません。なぜなら、gccはVIRAL(リンクされたコードに反商用GPLを感染させるからです)だからです。だから、著者はGIMPLEのGPLダンパー/ローダーをいくつかの外部(xml)フォーマットに書きました。独自のツールはこのXMLを読み込んで同じフォーマットの他のXMLに変換してから、GPLツールを使用して再読み込みされました。

より新しいgccでは、プラグインを書くオプションがあります。これはGPLの点でis VIRAL (23.2.1)です。プラグインはプログラムのメモリ内表現で動作し、外部ファイル経由でGIMPLEのダンプ/リロードの問題は発生しません。 MELT(Lisp)やGCC Python(Python)などのユーザ提供のプログラムを使用するプラグインがいくつかあります。 gccプラグインのいくつかのリストis there

+0

私はgcc-xilという名前のgccのプロジェクトを知っていて、GPLに感染しています(無料でダウンロードできます)。 //少し後でこのコメントを削除します。 – osgx

+0

つまり、LLVMははるかに扱いやすいと言っていますか? – MetallicPriest

1

テキストのGIMPLE表現を元のGIMPLEの内部表現に変換する組み込みの機能はありません。

ダンプされたGIMPLEを理解するには、カスタムフロントエンド(推奨GIMPLE FEなど)を使用する必要があります。

関連する問題