问题标签 [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++ - 使用其他文件构建 gcc 插件
你可能不需要对 gcc 插件了解很多就可以理解这个问题
嗨,我正在尝试创建一个使用其他文件的 gcc 插件,当我没有引用其他类classTree.cpp
时field.cpp
,我在构建插件时从来没有遇到过问题:顺便说一下,我正在使用这个命令:
并将它与这个一起使用:
所有如gcc plugins Doc所示,他们还说当我使用其他文件时,我只需要添加我的文件名,如下所示:
当我使用它时,plugin.so
它被创建了,但是当我尝试像以前一样运行它时,我收到了这个错误:
错误是什么意思?特别是symbol: _ZTV5field
?
gcc - 用于从二进制文件中列出源文件的 GCC 插件
我想问这个问题,gcc 是否有“插件”,它可以从二进制文件中列出源文件(二进制文件没有被剥离)? 如果插件不可用,那么任何人都可以指导我“如何实现与 gcc 相同的功能。
c++ - 使用 gcc 插件获取类注释
我正在创建一个gcc 插件,在解析 C++ 文件后对其进行分析。该插件遍历这些类并生成一些关于它们的信息。该插件正在工作,这就是我如何通过课程。
我想选择他可以分析的课程和他不能分析的课程。我的第一个想法是添加某种注释,我会在解析类时阅读它,并决定是否分析它。
我从未在 C++ 中使用过任何类型的注释,所以我不知道这是否可能。如果是这样,你会如何推荐我使用它们,并在插件中获取注释?如果不是,有什么好方法可以做我需要的吗?
c++ - 在 gcc 5.1.0 中注册一个 GIMPLE pass
嗨,我一直在为 gcc 4.8 和 4.9 做 gcc 插件,但我在 gcc 5.1.0 中遇到了问题。问题是我无法在这个新的 gcc 版本中注册 GIMPLE 通行证。
这是一个示例插件代码:
使用此插件编译某些文件时,应打印一些 B 和 C,但没有打印任何内容。
与 gcc 4.9 的不同之处在于“pass_data”类型比以前少了两个字段(has_gate 和 has_execute)。其他一切似乎都和以前一样。如果有人知道我做错了什么或我错过了什么,我将不胜感激。
gcc - 带有动态链接 GCC 插件的 Valgrind
我已经使用分析工具 valgrind 有一段时间了。它需要一个可执行文件才能运行,即
我想在动态链接的 GCC 插件上使用它,并列出插件中使用的每个函数所花费的时间和调用次数。我正在运行 GCC 插件,如下所示:
当我运行以下命令时,valgrind 只报告 gcc 而不是 plugin.so 的内存泄漏。我需要一种专门在我的插件上运行 valgrind 的方法,这是一个 .so 文件。
甚至有可能做到这一点吗?我已经对此进行了很多搜索,但没有找到任何具体的答案。
gcc - 如何在 gcc 中间表示中保存树?可能吗?
我想以二进制形式将一棵树(特别是树的类型)保存在一个文件中,并且我需要在其他编译单元中加载这棵树。例如:
我有一个带有 2 个功能的 main.c:
我想保存结构的类型(myTypeStruct)并将其加载到另一个涉及 test.c 的编译单元中:
使用 gcc 插件,我想加载类型并构建该类型的变量以将 test.c 转换为:
我知道树是指向tree_node的指针,而 tree_node 是结构的联合。问题是一棵树与它有关系,并且有一系列难以理解的结构。在构建特定类型的变量时,我需要知道哪些数据需要树。
PD:关于 LTO 如何做这样的事情的文档不足。PD2:对不起我的英语
c++ - 将枚举声明注入当前编译单元的 GCC 插件
向 GCC 中的当前编译单元注入枚举声明的最佳方法是什么?例如,我想注入枚举 global_ids:
免责声明:我正在尝试了解 GCC 内部结构,并希望直接在我的项目中使用 GCC 插件,一旦我对 GCC 内部结构有了很好的了解,我就会查看 MELT/GCC Python 插件。
gcc - How to determine which stages of compilation?
I have tried all the register_callback defined in the list of plugin.def. Now I need to determine which plugin to use at which stage of compilation. The following are my questions:
1) May I know what are the source codes related to generating the RTL tree 2) Is it possible to have my plugin intercept between the stages of GIMPLE or RTL? Thanks. Thanks
gcc - 如何从 GCC 插件将元数据嵌入到目标文件中
我正在尝试编写一个 GCC 插件,对它编译的程序进行一些特定于域的分析。我想知道将分析结果作为某种元数据(如调试信息)嵌入到生成的目标文件中的最佳方法。
理想情况下,一些元数据(在我的例子中是文本)应该嵌入到每个对象文件中,链接器应该保留它链接的所有对象的数据,最后我应该有某种方法来访问最终二进制文件中的所有元数据,objdump
使用readelf
或类似的。
我目前的想法是尝试通过将其添加到 GIMPLE AST 来为每个编译单元添加一个唯一命名的全局字符串变量。但是,我想知道是否有更“有纪律”的方式;插件如何生成调试信息或其他此类元数据?
c - 如何在 GCC 插件中添加内置函数?
GCC 插件可以添加新的内置函数吗?如果是这样,如何正确地做到这一点?
GCC 版本是 5.3(或更新)。代码由用 C 编写的插件编译和处理。
在 gcc-melt.org 的 GCC 插件的基本原理中提到这是可行的,但我看不出如何。
据我在 GCC 的源代码中所见,内置函数是使用add_builtin_function()
gcc /langhooks.c创建的:
这个函数的参数应该具有哪些值或多或少是清楚的,除了函数function_code
的唯一数字 ID。
看起来(请参阅 参考资料add_builtin_function_common()
),那里应该有一个值,enum built_in_function
但 GCC 插件无法更改该枚举。
似乎不能传递任何大于两者的随机值END_BUILTINS
。并且在这种情况下会有一个失败的断言。function_code
builtin_decl_implicit()
builtin_decl_explicit()
那么,在 GCC 插件中添加内置函数的正确方法是什么(不使用 MELT 等,只使用 GCC 插件 API)?
更新
我再次查看了 C 的add_builtin_function_common()
和 of的实现langhooks.builtin_function()
以及它们在 GCC 中的使用方式。function_code
在某些情况下,0 似乎是可以接受的。那时你不能使用builtin_decl_implicit()
,但你可以保存返回的 DECLadd_builtin_function()
并在以后使用它。
看起来我可以尝试以这种方式创建内置插件的唯一事件是 PLUGIN_START_UNIT (否则 GCC 可能由于external_scope
变量为 NULL 而崩溃)。
我在那个阶段尝试了以下(fntype
之前创建的):
my_helper
在与主源文件编译和链接的不同 C 源文件中定义。gimple_build_call
然后我使用 decl在我的 GIMPLE 传递期间将该函数的调用插入到其他函数 ( ) 中。
GCC 没有输出任何错误,并且确实插入了对my_helper
但作为对普通函数的调用的调用。我实际上需要一个内置函数来避免调用,而是插入函数体。
另一方面,tsan0
在我的 pass 之后立即执行的 pass 插入了内置函数的调用,就像人们期望的那样:结果没有显式调用,只是插入了函数的主体。然而,它的内置函数是由 GCC 本身而不是插件定义的。
所以我想我的内置仍然需要一些东西才能成为有效的内置,但我不知道它是什么。那会是什么?