This is a rough guide to porting Valgrind to a new architecture, or a new
operating system.  It's quite preliminary, but should get you started.

[29-May-2005: the stuff about the locations of files is now badly out of
date.  --njn]

-----------------------------------------------------------------------------
Porting Valgrind to a new architecture
-----------------------------------------------------------------------------
Note that this implies both a new architecture, and a new platform (ie. arch/OS
combination).  Please add to this list if it is missing anything.

To begin:

- Create necessary subdirs (copy x86/ and x86-linux/ subdirs).  Yes, even the
  test subdirectories.  (You should make arch-specific tests later to be
  thorough!)  Put in Makefile.am files for them, edit them for the new
  architecture name. 

- Update configure.in (use x86 and x86-linux as a guide).  Don't forget to
  update VG_ARCH_ALL, VG_PLATFORM_ALL.

Once it configures ok, get it to compile:

- Create the Vex guest state type, VexGuest<ARCH>State

- Copy all the arch-specific and platform-specific files into the new
  directories, eg. from x86 and x86-linux.  Files like (this list is not
  exhaustive!):

    include/x86/core_arch.h
    include/x86-linux/core_platform.h
    coregrind/x86/core_arch.h
    coregrind/x86-linux/core_platform.h
    coregrind/x86-linux/vki_arch.h
    coregrind/x86-linux/vki_arch_posixtypes.h

  Edit obvious things like the file headers, and the #ifdef __X86_TOOL_ARCH_H
  guards, so they refer to the new architecture, rather than x86.

  Comment all their contents out.

- Try compiling.  When it falls over on missing functions/types/constants, just
  uncomment and fix up the copied ones.  Just use stubs that fail (immediately
  and obviously! -- use the "I_die_here" macro) for functions and macros to get
  things compiling.

  For the kernel types, you'll have to copy the types from the kernel source.
  Use a recent kernel source, please.  Don't just pull in all the
  corresponding types/macros that x86 provides, otherwise you might end up
  providing more types/macros than the core actually needs;  only pull in types
  as the compiler asks for them.  You'll need a lot of the types in
  vki_arch_posixtypes.h early on.

  You'll need to update the Makefile.am files if you add/remove files.

Once it compiles ok, get it to run:

- Try running.  When it falls over on stub function/macros, implement them
  properly.  The syscall table and syscall wrappers will be painful;  do them
  individually, on demand.

- A lot of the arch-specific stuff has been abstracted out of the core, but
  there undoubtedly remains some arch-specific stuff in there.  Abstract it out
  as necessary, updating the other archs appropriately.

- If it crashes without telling you why, use lots of diagnostic printfs (or
  OINKs) to track down the exact location of the crash.

Once it runs ok:

- Add the cpu to the tests/cputest.c file so the reg test script will work.
  (Don't forget to add it to all_archs[].)

- Ensure the regression tests work, and add some arch-specific tests to
  none/tests directory.

- Add the relevant entries to valgrind.spec.in (copy the x86 and x86-linux
  ones).

-----------------------------------------------------------------------------
Porting Valgrind to a new OS
-----------------------------------------------------------------------------
Similarly to above, this implies both a new OS, and a new platform.

- Create necessary subdirs (copy linux/ and x86-linux/ subdirs).

- Update configure.in (use linux and x86-linux as a guide).
  Don't forget to update VG_OS_ALL, VG_PLATFORM_ALL.

- Implement all the necessary OS-specific and platform-specific types,
  functions, and macros... use the following as templates:
    
    include/linux/core_os.h
    include/x86-linux/core_platform.h
    coregrind/linux/core_os.h
    coregrind/x86-linux/core_platform.h

- You'll need to copy appropriate kernel types into vki*.h.
  You'll have to ensure that everywhere that vki_*/VKI_* types and constants
  are used, that they are suitable for your new OS, otherwise factor their
  usage out somehow.  This will be painful.

- In particular, you'll need to implement the VGA_(syscall_table).  You may be
  able to reuse some of the generic (eg. POSIX) syscall wrappers, if the types
  match.  Otherwise, you'll have to write your own new wrappers.  Do this
  incrementally, as system calls are hit, otherwise you'll go crazy.

- Probably lots more things;  this list should be added to!


