3

我正在尝试编写一个 GCC 插件,对它编译的程序进行一些特定于域的分析。我想知道将分析结果作为某种元数据(如调试信息)嵌入到生成的目标文件中的最佳方法。

理想情况下,一些元数据(在我的例子中是文本)应该嵌入到每个对象文件中,链接器应该保留它链接的所有对象的数据,最后我应该有某种方法来访问最终二进制文件中的所有元数据,objdump使用readelf或类似的。

我目前的想法是尝试通过将其添加到 GIMPLE AST 来为每个编译单元添加一个唯一命名的全局字符串变量。但是,我想知道是否有更“有纪律”的方式;插件如何生成调试信息或其他此类元数据?

4

1 回答 1

2

我给自己一个初步的答案,基于这个关于如何创建全局变量的答案:Insert global variable declaration whit a gcc plugin

此代码似乎仅适用于在二进制文件中嵌入my_string长度size为变量的字符串:varname

// make a char array type
type = build_array_type_nelts(char_type_node, size);

// create the variable and set its name
var = add_new_static_var(type);
name = get_identifier(varname);
DECL_NAME(var) = name;

// make sure this is a definition (otherwise GCC optimizes it away!)
TREE_PUBLIC(var) = 1;

// initialize the variable to a string value
initializer = build_string_literal(size, my_string);
DECL_INITIAL(var) = initializer;
于 2016-05-20T16:18:06.437 回答