如何在gcc中间表示中保存树?可能吗?

时间:2015-06-15 15:46:40

标签: gcc plugins tree lto gimple

我想以二进制形式保存文件中的树(特别是树的类型),我需要在其他编译单元中加载此树。例如:

我有一个带有2个函数的main.c:

myTypeStruct getWhatever(){
   myTypeStruct my;
   ... doSomething ...
   return my;
}

int main(){
    myTypeStruct my = getWhatever();
   ... doSomething else with my... 
}

我希望保存结构的类型( myTypeStruct )并将其加载到另一个涉及test.c的编译单元中:

int main(){
   ... doSomeTest ...
}

使用gcc插件,我想加载类型并构建一个该类型的变量来转换test.c,例如:

int main(){
   myTypeStruct my;
   ... doSomething with my...
   ... doSomeTest ...
}

我知道是指向 tree_node 的指针,而tree_node是结构的联合。问题是树与它有关系,并且有一系列难以理解的结构。在构建特定类型的变量时,我需要知道哪些数据需要树。

PD:关于LTO如何做这样的事情的文件不足。 PD2:对不起我的英文

1 个答案:

答案 0 :(得分:2)

如果我理解正确,您要做的是序列化类型,然后在后续编译中使用您的插件读取它,以进行其他转换。

没有内置支持。

也许可以使用内置的预编译头支持来完成。核心思想是在调用插件的编译中加载PCH。因此,您可以安排让PCH保留您想要重新阅读的类型,然后您的插件可以只按名称查找类型。

使用LTO很有诱惑力,因为它具有所有的流媒体支持,但我认为目前的LTO代码不是很容易再利用。

另一种方法是编写自己的序列化程序。我碰巧为an experimental PCH plugin I wrote做了这件事。也许这样的事情对你有用。