プラグインを gcc4.8.3 から GCC の 4.9.1 バージョンに更新しようとしていますが、インターフェースが少し変更されたようで、基本的なことがいくつかわかりません。新しいインターフェイスでパスを登録する方法について、プラグインまたはインターネットに関する GCC ドキュメントの例は見つかりませんでした。プラグインに新しいパスをインストールしたいだけなので、構造体 register_pass_info に入力し、次の方法で register_callback に渡します。
register_callback("my_plugin_
name", PLUGIN_PASS_MANAGER_SETUP, NULL, &pass_info);
構造体 register_pass_info のフィールド「pass」に入力する方法がわかりません。現在、このフィールドは opt_pass クラスであり、単純な構造ではなく、GCC の内部パスと同じクラスのようです。だから私は当然、新しいパスを作成するために内部パスが行っていることをコピーしようとしました。私は自分のパスのためにこれをしました:
class pass_greg : public gimple_opt_pass
{
public:
pass_greg (gcc::context ctxt)
: gimple_opt_pass (pass_data_greg, gcc::context ctxt)
{}
bool gate () { return greg_gate(); }
unsigned int execute () { return greg_pass (); }
};
しかし、パスをインスタンス化するために必要なこのパラメーター gcc::context が何であるかがわかりません。さらに、opt_pass シンボルは、プラグイン API にない「pass-instances.def」を含む pass_manager で定義されています。
たぶん、あなたの何人かは、私を軌道に乗せるための小さな例を持っているか、私が見逃したいくつかのドキュメントを教えてくれます.