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

