40

独自の(非常に単純な)バイトコード言語と、それを実行するための仮想マシンを作成しました。正常に動作しますが、gcc(または他の無料で入手可能なコンパイラ)を使用して、通常のcプログラムからこのマシンのバイトコードを生成したいと思います。だから問題は、自分のバイトコードを出力できるようにgccを変更または拡張するにはどうすればよいですか?バイトコードをマシンコードにコンパイルしたくないことに注意してください。cコードを(自分の)バイトコードに「コンパイル」したいのです。

これは潜在的に大きな質問であり、最良の答えは「gccソースコードを調べてください」である可能性があることを認識しています。これを始める方法について助けが必要です。gccにカスタムジェネレータを追加するプロセスを説明できるこのテーマに関する記事や本がいくつかあるはずだと思いますが、グーグルで何も見つかりませんでした。

4

3 に答える 3

32

以前に設計した8ビットプロセッサにgccを移植するのに忙しいです。8ビットでアキュムレータが1つしかないので、私たちのマシンにとっては難しい作業ですが、より多くのリソースがあれば簡単になります。これが、gcc4.9とcygwinを使用して管理しようとしている方法です。

  1. gcc4.9ソースをダウンロード
  2. アーキテクチャ名をconfig.sub250行目あたりに追加します# Decode aliases for certain CPU-COMPANY combinations.。そのリストで追加します。| my_processor \
  3. その同じファイルで# Recognize the basic CPU types with company name.、リストに自分を追加してください。| my_processor-* \
  4. ファイルを検索し、ファイル内gcc/config.gccでケース$ {target}が880行目あたりにあることを確認し、次の方法で自分自身を追加します。

      ;;
    my_processor*-*-*)
      c_target_objs="my_processor-c.o"
      cxx_target_objs="my_processor-c.o"
      target_has_targetm_common=no
      tmake_file="${tmake_file} my_processor/t-my_processor"
      ;;
    
  5. フォルダを作成するgcc-4.9.0\gcc\config\my_processor
  6. 既存のプロジェクトからファイルをコピーして編集するか、独自のプロジェクトを最初から作成します。私たちのプロジェクトでは、msp430プロジェクトからすべてのファイルをコピーし、すべて編集しました
  7. 次のファイルが必要です(すべてのファイルが必須というわけではありません)。
    • my_processor.c
    • my_processor.h
    • my_processor.md
    • my_processor.opt
    • my_processor-c.c
    • my_processor.def
    • my_processor-protos.h
    • constraints.md
    • predicates.md
    • README.txt
    • t-my_processor
  8. パスを作成するgcc-4.9.0/build/object
  9. 走る../../configure --target=my_processor --prefix=path for my compiler --enable-languages="c"
  10. 作る
  11. インストールする
  12. 多くの調査とデバッグを行います。
  13. 楽しむ。
于 2014-06-19T14:46:30.870 に答える
13

大変な作業です。

たとえば、独自のバイトコードを使用して独自の「アーキテクチャ」を設計し、GCCを使用してC /C++コードを生成したいとも考えていました。これが私がそれを作る方法です:

  1. 最初に、GCCのマニュアルで移植に関するすべてを読む必要があります。
  2. また、 GCCInternalsもお読みください。
  3. コンパイラについて多くのことを読んでください。
  4. こちらの質問と回答もご覧ください。
  5. 詳細については、Googleをご覧ください。
  6. 本当に準備ができているかどうか自問してください。
  7. 非常に優れたカフェマシンを必ず用意してください...必要になります。
  8. マシン依存ファイルのgccへの追加を開始します。
  9. クロスホストターゲットの方法でgccをコンパイルします。
  10. 16進エディターでコード結果を確認します。
  11. さらにテストを行います。
  12. 今、あなた自身のアーキテクチャを楽しんでください:D

終了したら、os-dependetライブラリなしでのみcまたはc ++を使用できます(現在、アーキテクチャでOSを実行していません)。次に、(必要に応じて)クロスコンパイラで他の多くのライブラリをコンパイルして、優れたフレームワークを作成する必要があります。 。

PS:LLVMClang)は移植が簡単です...多分そこから始めたいですか?

于 2012-05-17T12:40:06.943 に答える
4

それほど難しくはありません。ターゲットマシンが他のマシンとかなり似ている場合は、そのRTL(?)定義を開始点として使用し、それらを修正してmake compile testから、ブートストラップステージを通過します。すすぎ、それが機能するまで繰り返します。おそらく実際のコードを書く必要はなく、マシン定義テンプレートだけを書く必要があります。

于 2012-05-17T05:23:14.867 に答える