-----------------------------------------------------------------------------
64-bit cleanness
-----------------------------------------------------------------------------
The following are places I know or suspect contain code that is not 64-bit
clean.  Please mark them off this list as they are fixed, and add any new ones
you know of.

Memcheck is full of 32-bit assumptions:
- shadow memory in general -- two-level lookup table, etc -- is totally 32-bit
  specific.
- new_mem_stack_4 etc are all very 32-bit specific... should make it
  new_mem_stack_1wd, etc.  Also then need to change
  make_aligned_word_noaccess() et al (heaps of places)
- also rotateRight16 and all its dependents...
- all the calls to IS_ALIGNED4_ADDR are 32-bit specific code.  Likewise
  with Addrcheck?  Not sure.  Plus there's one in vg_transtab.c which doesn't
  look right.

Addrcheck has similar problems.  Helgrind too, especially the 32-bit specific
"OTHER_BITS".

Symbol table stuff:
- is vg_dwarf.h 32-bit specific?
- Elf32_* constants everywhere in vg_symtab2.c, blecch
- symtab -- 32-bit specific stuff in here?  eg. search for
  "(UInt)sym->st_value"
- stabtype_parser -- all those literal 4's as args to VG_(st_mkint) -- are they
  64-bit clean?  Who knows...

Others:
- search for the following casts: (UInt*), (Int*), (UInt *), (Int *)
- should deref_UInt be deref_UWord??  Is socklen_t word-sized?
- vki_sigset_t.sig use: the debug printing in do_setmask() is wrong -- it
  touches sig[1], thus assuming 32-bits.  Likewise in handle_SCSS_change()
- client_auxv in vg_main.c is UInt** -- should it be UWord** ?

