介绍
Smatch is a static analysis tool for C. Most of the checks are for the linux kernel. Smatch 分析程序代码的逻辑错误。它可以检测到诸如“为一个没锁上的 spinlock 执行解锁”的逻辑错误。所以提前修复一些代码中隐含的BUG是很有必要的。
官方:
http://smatch.sourceforge.net/
Smatch需要自己下载和编译:
git clone git://repo.or.cz/smatch.git
cd smatch; make clean all
但是有可能会遇到一些编译问题,如对库的依赖 libxml, libgtk2, llvm-3.0, libsqlite3-dev,或许你还要更新你的源。
sudo apt-get install libsqlite3-dev
安装完llvm-3.0后,再修改smatch/Makefile llvm-config -> llvm-config-3.0
使用
C=1是只check重新编译的,C=2是所有代码都check.
make -j32 CHECK="/home/tools/smatch/smatch/smatch" C=2 > smatch_kernel.log 2>&1
分析
一般有info, warn, error三种提示,我们重点关注mediatek代码里的error case.
error: