一起学习LLVM(四):学习llvm-cbe

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/feibabeibei_beibei/article/details/90233560

近来学习一下LLVM-cbe这个后端对于ir解析成c的一个框架,很有意思。

github源码:https://github.com/buzhishishi/llvm-cbe

一、安装注意事项:

由于要编译C到ir的过程,所以要安装clang,这里注意由于后面要执行make llvm-cbe,要在llvm 下面的CmakeList.txt中添加这个任务:

        option (LLVM_BUILD_EXTERNAL_LLVM_CBE

  "Build llvm-cbe as an external project." ON)

其他的步骤按照链接中所说的去安装就可以了。

二、原理分析:

大致原理是根据ir的结构去解析,然后进行等价的翻译为C语言的语法格式。

2.1数据类型:

2.2对应的Array、Vector的名字:

2.3对应的比较语句的转换:

等等

三、结果分析:

3.1实验分析

转换前:

转换后:

转换完以后:以大量的goto语句存在。

3.2已知问题

1.可能是由于clang版本问题,解析格式有问题:

2.对于太复杂的C编译成的文件估计2c会有问题:

一种为变量的定义问题以及对于一些类型的识别。

但是能做到这一步已经很厉害了,可以在此基础上更新,修复。

四、总结:

 缺点是只是支持对于C语言,但是要支持C++确实是很难,毕竟C++在C的基础上扩展那么多。

 优点就是XX2IR,IR2c等等,与clang LLC -macrh=cpp 这种以API的格式来表现完全不一样。这个是真正的转为C语言。当然还有一个很大用途就是可以增加安全保护的轻量化。

猜你喜欢

转载自blog.csdn.net/feibabeibei_beibei/article/details/90233560
今日推荐