blob: a03e3fd141c2bdae807a0043ad46abba38277302 [file] [log] [blame]
njn009af892004-12-01 11:54:07 +00001-------------------------------------------------------------------
2Guide to the directory structure
3-------------------------------------------------------------------
njnc7561b92005-06-19 01:24:32 +00004[This should be merged with coregrind/README_MODULES.txt]
njn6d828192005-05-16 21:30:24 +00005
njn009af892004-12-01 11:54:07 +00006Valgrind has 2 main levels of genericity.
7
8 1. Multiple tools, plus the core.
9 2. Multiple architectures, OSes, and platforms (arch/OS combinations).
10
njnc7561b92005-06-19 01:24:32 +000011This file is a guide to where different things live.
njn009af892004-12-01 11:54:07 +000012
13
14Basic layout
15------------
161. Core stuff lives in:
17 - include/ for declarations that must be seen by tools
18 - coregrind/ for code that need not be seen by tools
njnc7561b92005-06-19 01:24:32 +000019
20 Some subdirs of coregrind/ hold modules that consist of multiple files.
njn009af892004-12-01 11:54:07 +000021
22 Tool stuff lives in:
23 - $TOOL/ main files
24 - $TOOL/tests regression tests
25 - $TOOL/docs documentation
26
27 Other stuff lives in:
28 - docs/ main, non-tool-specific docs
29 - tests/ regression test machinery
30 - nightly/ overnight test stuff (should be in tests/)
31 - auxprogs/ auxiliary programs
32
332. Generic things go in the directory specified in (1).
34
njnc7561b92005-06-19 01:24:32 +000035 Arch-specific, OS-specific, or platform-specific things are sprinkled
36 throughout the code -- there is no single place for all the
37 architecture-specific things, for example.
38
39 Sometimes we have a whole file holding things specific to a particular
40 arch/OS/platform. Such files have an appropriate suffix, eg.
41 sigframe-x86-linux.c.
njn009af892004-12-01 11:54:07 +000042
njnc7561b92005-06-19 01:24:32 +000043 More often we use #ifdefs inside source files to specify the different
44 cases for different archs/OSes/platforms. It's pretty straightforward.
45
46 A final case: arch-specific regression tests for tools go in a
47 subdirectory, eg. cachegrind/tests/x86/.
njn009af892004-12-01 11:54:07 +000048
49
50Guide to headers
51----------------
njnc7561b92005-06-19 01:24:32 +000052See coregrind/README_MODULES.txt for details of the core/tool header file
53split.
njn009af892004-12-01 11:54:07 +000054
njnc7561b92005-06-19 01:24:32 +000055Note that every single C file will #include pub_basics.h. Every single asm
56file will #include pub_basics_asm.h.
njn009af892004-12-01 11:54:07 +000057
njnc7561b92005-06-19 01:24:32 +000058Our versions of kernel types are in the vki*.h headers.
njn009af892004-12-01 11:54:07 +000059
60When searching for something, rgrep is very useful. If you don't have a
61version of rgrep, use a command something like this:
62
63 find . -name '*.h' | xargs grep <pattern>
64
njnc7561b92005-06-19 01:24:32 +000065 find . -name '*.h' \
66 -type f \
67 -not -path '*.svn\/*' | xargs grep "$1"
68
69The -name option gives the file wildcard, the -type says "look in normal
70files only" and the -not -path tells it to not look in Subversions hidden
71directories.
njn009af892004-12-01 11:54:07 +000072