= Welcome to Vamos =

Topic of the project is variability of system software evoked by the non-functional properties of operating-system functions, which emerges from (a) different implementations of the same system function to make an appearance of certain non-functional properties and (b) the using level of those implementations in order to compensate for effects of these properties.

With this project, the undertaker, we provide tools to examine and evaluate CPP based source files. See http://www4.informatik.uni-erlangen.de/Research/VAMOS/publications.shtml for a list of publications.

For a complete list of local wiki pages, see TitleIndex.

= undertaker =

The undertaker is an implementation of our preprocessor and configuration analysis approaches. It can check the structure of your preprocessor directives against different configuration models to find blocks than can't be selected or deselected.

= Current Results =

We present the current results of undertaker in form of a visualization of a current Linux source tree: http://www4.informatik.uni-erlangen.de/Research/VAMOS/linux-trees/. Each defect is highlighted in the source code.
Please note that there are still some false positives due to implementation issues, which are still work in progress.


= Download =
 * The undertaker is licensed GPLv3 or later. Parts that are imported from the Linux kernel are GPLv2
 * Tarball: http://vamos.informatik.uni-erlangen.de/files/undertaker-1.0.tar.gz (349Kb)
 * Git, but be aware, that there a big files for testing included (repository is >50Mb)
{{{
git clone http://vamos.informatik.uni-erlangen.de/git/vamos/
}}}

= Requirements =
 * libboost-wave (1.40 or above)
 * libboost-regex (1.40 or above)
 * libboost-filesystem (1.40 or above)
 * libboost (1.40 or above)
 * [http://check.sourceforge.net check] - testing suite for C
 * [http://fmv.jku.at/picosat/ picosat] (913-4 or above, Ubuntu lucid users please install the package from [https://launchpad.net/ubuntu/+source/picosat natty])

= Building =
To install the dependencies in Debian or Ubuntu, you paste this in your shell, but be aware that the picosat package in Debian Lenny is far to outdated. 

{{{
apt-get install libboost-wave1.40-dev libboost-regex1.40-dev libboost-filesystem1.40-dev \
   libboost1.40-dev check picosat
}}}

Compiling and installation

{{{
    $ make
and
    $ make install
or  $ PREFIX=/path/to/install make install
}}}

= Workflow (example) =
To check a single file (or all files) in the Linux kernel for dead or undead preprocessor blocks, you have to extract the configuration models from the kconfig first. Therefore you just have to execute '''undertaker-kconfigdump''' in the root of an Linux tree. This will generate models for each architecture and place them in the subfolder '''models'''. 

{{{
$ ls models
alpha.model  blackfin.model  h8300.model  m68k.model        mips.model     powerpc.model  sh.model     x86.model
arm.model    cris.model      ia64.model   m68knommu.model   mn10300.model  s390.model     sparc.model  xtensa.model
avr32.model  frv.model       m32r.model   microblaze.model  parisc.model   score.model    tile.model
}}}

If you want to examine a single file for dead blocks with checks against the models you can execute

{{{
$ undertaker -j dead -m models kernel/sched.c
I: loaded rsf model for alpha
[...]
I: loaded rsf model for xtensa
I: found 23 rsf models
I: Using x86 as primary model
I: creating kernel/sched.c.B250.x86.missing.dead
I: creating kernel/sched.c.B360.x86.missing.dead
I: creating kernel/sched.c.B362.x86.missing.dead
I: creating kernel/sched.c.B364.missing.globally.dead
I: creating kernel/sched.c.B368.x86.missing.dead
I: creating kernel/sched.c.B396.x86.missing.dead
I: creating kernel/sched.c.B408.x86.missing.dead
I: creating kernel/sched.c.B421.x86.missing.dead
I: creating kernel/sched.c.B437.x86.missing.dead
I: creating kernel/sched.c.B447.missing.globally.dead
I: creating kernel/sched.c.B556.x86.missing.dead
}}}

This means in detail:
 * '''-j dead''': do an dead analysis
 * '''-m models''': load all models from directory models/
 * '''kernel/sched.c''': examine this file

 * '''I: Using x86 as primary model"''': x86 is the default model which the file is checked against (this can be changed with  '''-M <arch>''')
 * All '''x86.missing.dead''' files are just dead on x86, there is at least one architecture this block can be enabled
 * '''missing.globally.dead''' files are dead on every architecture.

To check all files in the Linux kernel there is the helper script '''undertaker-linux-tree''', which starts the undertaker with the correct list of working files and gives it the correct count of parallel worker processes on your multicore machine.

{{{
$ undertaker-linux-tree
}}}

= Detailed information =
 * UndertakerModelFiles - syntax and semantic of the kconfig models
 * UndertakerDeadAnalysis - finding dead and undead blocks in your code
 * UndertakerPreconditions - preconditions for line numbers and symbols
 * UndertakerInteractive - interactive mode for the undertaker
 * [UndertakerElDocumentation undertaker.el] - undertaker mode for emacs

= Developer Links =

 - http://vamos.informatik.uni-erlangen.de/undertaker-coverage
