我可以利用Clang静态库中的扩展点向函数添加元数据吗?

时间:2016-10-30 02:57:31

标签: clang llvm llvm-clang

我正在开发一个项目,该项目使用Clang静态库(而非libclang)解析C头,以进行二进制程序分析。我使用AST并且不依赖于codegen。

我希望能够通过修改它们出现的头文件来为函数添加一些额外的元数据。具体来说,我想在二进制程序中添加函数的预期地址。这可能是一种方法:

int foo(int bar) __attribute__((address(0xdeadbeef)));

属性特别方便,因为它们很容易嵌入到宏中,最终看起来像:

#define ADDRESS(x) __attribute__((address(x)))
int foo(int bar) ADDRESS(0xdeadbeef);

由于这是一个仅由我维护的开源项目,我宁愿不分叉Clang,只允许人们使用他们的发行版库存Clang包构建我的程序。遗憾的是,这显然意味着我不能为此目的使用属性,因为属性列表似乎被硬编码为Clang,并且似乎没有任何属性可以为此目的共同选择。 / p>

我是否可以在Clang静态库中使用扩展点来实现此目的?

1 个答案:

答案 0 :(得分:0)

Per Eli Friedmanannotate属性可用于此目的。一个示例用法是:

int foo(int bar) __attribute__((annotate("address:0xdeadbeef")));