老板让我写生成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,漫长的等待……