0

我一直在寻找有关编写 GCC 插件的在线资源。我目前正在使用 GCC 版本 7.3.0。我尝试编写一个简单的插件,其中包含一个将被调用的回调PLUGIN_FINISH_TYPE。它工作得很好。

接下来,我正在尝试编写一个使用类似于此处列出的示例的“gimple pass”的插件。然而,struct gimple_opt_pass似乎并不存在。

我试图寻找声明这个结构的头文件。我发现 tree-pass.h 有以下代码块:-

/* Description of GIMPLE pass.  */
class gimple_opt_pass : public opt_pass
{
protected:
  gimple_opt_pass (const pass_data& data, gcc::context *ctxt)
    : opt_pass (data, ctxt)
  {
  }
};
  1. 我如何从我的插件中看到这个?我似乎无法以上面链接中描述的方式使用它。
  2. 使用当前的 GCC 插件 API,是否可以编写纯 C 插件(而不是必须使用 C++)。
4

1 回答 1

0

我找到了答案。GCC 插件的 API 从 4.8 到 4.9 发生了巨大变化。在 4.8 之前,gimple_opt_class 是一个结构,您可以创建一个实例并与 register_pass_info 一起使用。从 4.9 开始,它是一个您需要继承、创建实例并与 register_pass_info 一起使用的类。

为了能够在 GCC 中使用纯 C 插件,似乎使用以下版本的 API 并包括 4.8 将是解决方案。4.6 对我来说似乎工作正常,但似乎确实有调试/转储功能。

于 2018-07-16T18:06:38.357 回答