------------------------------------------------------------------- Guide to the directory structure ------------------------------------------------------------------- [This should be merged with coregrind/README_MODULES.txt] Valgrind has 2 main levels of genericity. 1. Multiple tools, plus the core. 2. Multiple architectures, OSes, and platforms (arch/OS combinations). This file is a guide to where different things live. Basic layout ------------ 1. Core stuff lives in: - include/ for declarations that must be seen by tools - coregrind/ for code that need not be seen by tools Some subdirs of coregrind/ hold modules that consist of multiple files. Tool stuff lives in: - $TOOL/ main files - $TOOL/tests regression tests - $TOOL/docs documentation Other stuff lives in: - docs/ main, non-tool-specific docs - tests/ regression test machinery - nightly/ overnight test stuff (should be in tests/) - auxprogs/ auxiliary programs 2. Generic things go in the directory specified in (1). Arch-specific, OS-specific, or platform-specific things are sprinkled throughout the code -- there is no single place for all the architecture-specific things, for example. Sometimes we have a whole file holding things specific to a particular arch/OS/platform. Such files have an appropriate suffix, eg. sigframe-x86-linux.c. More often we use #ifdefs inside source files to specify the different cases for different archs/OSes/platforms. It's pretty straightforward. A final case: arch-specific regression tests for tools go in a subdirectory, eg. cachegrind/tests/x86/. Guide to headers ---------------- See coregrind/README_MODULES.txt for details of the core/tool header file split. Note that every single C file will #include pub_basics.h. Every single asm file will #include pub_basics_asm.h. Our versions of kernel types are in the vki*.h headers. When searching for something, rgrep is very useful. If you don't have a version of rgrep, use a command something like this: find . -name '*.h' | xargs grep <pattern> find . -name '*.h' \ -type f \ -not -path '*.svn\/*' | xargs grep "$1" The -name option gives the file wildcard, the -type says "look in normal files only" and the -not -path tells it to not look in Subversions hidden directories.