Page History
...
- Setup a RHEL 6.3 (or 6.4, or 6.5) image capable of building the kernel and Lustre source code. Use a disk image with at least 24 GB.
- gcc (GCC) 4.4.6 20120305 (Red Hat 4.4.6-4). gcc that is packaged with EL 6.5 also works.
- install git
- Install Clang and LLVM. RPMs are available from elrepo. Clang/LLVM version 3.0 has good parity with gcc-4.4. Parity with gcc-4.4 is important as gcc is used during the analysis.
llvm-devel-3.0-5.el6.elrepo.x86_64
- llvm-libs-3.0-5.el6.elrepo.x86_64
- llvm-doc-3.0-5.el6.elrepo.noarch
- llvm-3.0-5.el6.elrepo.x86_64
- clang-devel-3.0-5.el6.elrepo.x86_64
- clang-3.0-5.el6.elrepo.x86_64
- clang-analyzer-3.0-5.el6.elrepo.x86_64
clang-doc-3.0-5.el6.elrepo.noarch
Info title elrepo-extras Once elrepo is available as a repo, only the main channel is available by default. To install llvm and clang you need the elrepo-extras repo. This can be enabled by including
--enablerepo=elrepo-extras
in your yum command.
- Download lustre-static-analysis Clang plugin:
git clone gitclone http://reviewgit.whamcloud.com:29418/tools/lustre-static-analysis/.git
- Make the contents of Endian, DeclUse and Utils directories.
Building Lustre for static analysis
- Build a Lustre patched kernel with GCC. This document assumes a Lustre patched kernel version: 2.6.32-279.19.1.el6_lustre_gcov.x86_64.
- Build SPL and ZFS if necessary.
Build Lustre software using a script included in lustre-static-analysis for assistance:
Code Block language none # cd lustre-release # git clean -fxd # sh autogen.sh && ./configure # ~/lustre-static-analysis/DeclUse/decl_use_make
For each
.c
to.o
compilation performed by GCC,decl_use_make
will also run Clang with the lustre-static-analysis plugin. When compilingfile.c
the outputfile.o
is produced by GCC and should be identical to a normal Lustre build. Simultaneouslydecl_use_make
instructs Clang to read file.c and produce correspondingfile.o._Ref
andfile.o._Err
. Note: Clang does not compile file.c to an object file. Clang parses file.c and produces an AST in memory. Thefile.o._Err
file records the errors Clang discovered during processingfile.c
.Info In practice,
file.o
is first build as.tmp_file.o
then renamed tofile.o
. This happens in the Makefile so GCC and Clang are unaware of thefile.o
.
...