老板让我写生成trace的gcc plugin,在github上找了一份代码参考
https://github.com/GaloisInc/ivory-rtverification/tree/master/gcc-plugin/src
之前用LLVM PASS做这件事,但因为LLVM是IR级别插桩,丢失很多信息,导致生成的trace不准确,因此老板决定用gcc plugin实现插桩,保证信息完整。
因为完全不了解gcc plugin,找了个符合我需求的教程
http://libplugin.sourceforge.net/tutorials/simple-gcc.html
教程中步骤如下:
svn -q checkout svn://gcc.gnu.org/svn/gcc/trunk my-gcc-dir mkdir gcc.obj mkdir gcc.bin cd gcc.obj my-gcc-dir/configure --prefix=path-to-gcc.bin/ --program-prefix=plugin- --enable-languages=c make && make install; beep
在configure那一步,提示gcc configure: error: Building GCC requires GMP 4.2+, MPFR 2.3.1+ and MPC 0.8.0+
解决方法参考http://blog.csdn.net/stormbjm/article/details/9107831
在安装GMP时又提示缺少m4,上面的文章中也有解决方法。
将这些依赖项安装完毕后,重新configure,终于成功。
想一步一步来,没有按照教程里的把make和make install一起执行,先make,提示error找不到gengtype_lex.c,向上翻信息,发现是由于没有安装flex造成的,在安装flex的时候又提示找不到yacc,解决方法如下
sudo apt-get install byacc sudo apt-get install flex
然后回到gcc make,漫长的等待……