问题标签 [gcc-plugins]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 带有 arm64 交叉编译器的 gcc 插件:无法打开共享对象文件
我正在尝试使用 gcc 插件在编译时计算每个结构的大小。搜索,我偶然发现了这篇文章。
我用我的原生 x64 gcc 编译器在下面的测试程序上进行了尝试,得到了以下结果。
结果 :-
现在我为我的 aarch64 交叉编译器尝试同样的方法。我拥有的交叉编译器的版本是:-
我将 gcc 插件编译为:-
现在,我尝试将 test.c 编译为:-
为什么会出现这个错误?我用我下载的 linaro 二进制工具链尝试了它并得到了同样的错误。我错过了什么?
gcc - 将 gcc 插件添加到 cmake 项目
我想在我的 cmake 项目中添加一个 gcc 插件。解决方案应满足以下条件:
- gcc 插件应该从 git 存储库中提取(我可以为此使用外部项目)
- 所有不是 gcc 插件的东西都应该自动排序 - 依赖于 gcc 插件。这意味着如果插件没有构建,它会在其他任何东西之前构建。
- 可选:一切都应该自动完全依赖于 gcc 插件。这意味着如果插件得到更新,那么它和其他一切都将被重建。
请注意,自动我的意思是我不必为每个目标手动添加此依赖项。
我怎样才能用cmake实现这个?
gcc - GCC 通行证注册 - opt_pass 未定义符号
我正在尝试在我的 gcc 插件代码中注册一个通行证。为此,我首先声明派生自 gimple_opt_pass 的 my_first_pass 类,而该类又派生自 opt_pass 等等……
然后,我尝试像下面的代码一样实例化一个 my_first_pass 对象,同时配置 register_pass_info 结构的其余字段。
为了编译上面的代码,我生成了一个共享库,然后由 gcc 加载。每当我运行 gcc 时,我都会收到以下错误,我知道这是由上面代码中 my_first_pass 对象的创建引起的:
我正在关注一个在线示例,但如果我运行 $(GCC_SRC)/gcc/testsuite/gcc.dg/plugin/one_time_plugin.c 我会遇到完全相同的问题。
(使用从源代码编译的 GCC 4.9.2)
在此先感谢,干杯。
编辑:在 GCC 6.3.0 上试过,我也有同样的问题。
gcc - Gcc 插件 - 为生成的程序集添加标签
我正在尝试使用插件生成带有以下代码的标签:
虽然这在我尝试为我的英特尔处理器生成代码时有效,但如果我在交叉编译器中运行此插件以用于 arm,则标签的名称将更改为具有随机名称的本地符号。例如,我得到的是“.L4:”,而不是“test_text:”。此外,还添加了一条附加指令。
下面是在未启用标签生成代码的情况下生成的代码示例。
现在,它遵循使用第一个显示的代码生成的代码(在树中生成标签和 gimple 表示)。您可以看到 test_text 标签被替换为 .L5 并且在标签下方添加了一条添加指令。这怎么可能?
CFG 通过后我正在运行我的插件。另外,我正在使用 Linaro 交叉编译器 arm-eabi-gcc 6.3.1 版。
此致
编辑1:还发现,通过使用-fdump-tree-optimized,直到这个阶段一切都很好。*.optmized 文件的部分输出:
<bb 4>:
_8 = i_2 % 3;
_9 = _8 == 0;
test_text:
div_3 = _9;
_11 = i_2 % 5;
c - 如何让 gcc 向可执行文件添加函数?
我正在编写一个 gcc(5.4.0 版)插件,旨在检测函数中的一些代码。通过在某个函数中插入一些 rtx 或 gimple 指令很容易做到这一点:
但由于函数中的上下文可能不同,我想检测对我的函数的调用,例如:
问题是我找不到添加函数的方法,无论是在 gcc 中还是在插件中。有一个相关的问题:how-to-add-a-builtin-function-in-a-gcc-plugin,但它不能解决我的问题。有什么建议么?
c - GCC 编译器、插件和结构
我有这样的场景:
当我查看 gimple 表示(用 编译-fdump-tree-all
)时,我看到如下内容:
我没有得到的是任务发生在哪里open_file: open_ext2
我的问题
- GCC 是如何做到这一点的?
- 它发生在什么阶段?
- 有没有办法找出映射标签-> 成员函数?
gcc - GCC 插件 API : Gimple pass
我一直在寻找有关编写 GCC 插件的在线资源。我目前正在使用 GCC 版本 7.3.0。我尝试编写一个简单的插件,其中包含一个将被调用的回调PLUGIN_FINISH_TYPE
。它工作得很好。
接下来,我正在尝试编写一个使用类似于此处列出的示例的“gimple pass”的插件。然而,struct gimple_opt_pass
似乎并不存在。
我试图寻找声明这个结构的头文件。我发现 tree-pass.h 有以下代码块:-
- 我如何从我的插件中看到这个?我似乎无法以上面链接中描述的方式使用它。
- 使用当前的 GCC 插件 API,是否可以编写纯 C 插件(而不是必须使用 C++)。
c++ - 在 Windows 10 中运行 gcc 插件的问题
我在 Windows 10 操作系统中工作。我想运行一个简单的 gcc 插件,所以首先我安装了 Mingw。然后我编译了一个简单的hellowrd.c 并且工作正常。但是当我尝试模拟使用“gcc-pugin.h”包含的插件时,会出现错误,因为 gcc-plugin.h“没有这样的文件或目录”。
显然mingw安装并没有安装我需要的一切。
是不是 Windows 不能工作的问题?
gcc - 创建自定义 gcc 属性以检测特定功能:白名单,而不是黑名单
我正在使用 gcc 的-finstrument-functions
选项。为了最大限度地减少开销,我只想检测几个函数。但是,gcc 只允许您将函数列入黑名单(使用no_instrument_function
属性,或通过提供路径列表)。它不允许您将功能列入白名单。
所以我写了一个小gcc插件添加一个instrument_function
属性。这让我可以为特定功能设置检测“标志”(或者,更确切地说,清除无检测标志):
但是,据我了解,这是行不通的。查看 gcc 源代码,要让这个标志真正做任何事情,您还需要使用-finstrument-functions
. 见gcc/gimplify.c:14436
:
它首先检查-finstrument-functions
是否启用了全局标志。然后它检查特定功能的标志,据我了解,默认情况下启用该标志。所以所有其他没有我的instrument_function
属性的函数仍然会被检测。
有没有办法先清除所有函数的这个标志,然后处理我的instrument_function
属性以只为这些函数设置标志?
c++ - 使用 GCC 插件 api 动态定义虚拟方法
我很难创建 GCC (8.3.0) 插件。
我正在尝试使用 [[c++11::attributes]] 提供的一些信息为用户定义的类定义一个虚拟方法。到目前为止,我一直在尝试做的——在进入更复杂的东西之前——定义一个虚拟函数,它给出了以下定义和代码:
像这样写一个假的json stdout
:
我能够注册属性并收集有关用户定义的类及其字段的信息,但我不知道如何在类型中注入虚拟方法声明,也不知道如何定义它的主体。我在 GCC 插件文档(极差)和在线搜索,但我没有运气。
编辑
好的,所以我设法使用build_method_type_directly
and为给定的类定义了一个方法add_method
,但我不知道如何定义方法的主体。有什么帮助吗?