| ------------------------------------------------------------------- |
| 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. |
| |