20 Jun 05
~~~~~~~~~
PPC32 port
* Paul wrote some code to deal with setting/clearing reservations.
  (grep USE_MACHINE_RESERVATION, ARCH_SWITCH_TO, lwarx, stwcx.)
  Not yet looked into, but this may be needed.

11 May 05
~~~~~~~~~
ToDo: vex-amd64: check above/below the line for reg-alloc

23 Apr 05 (memcheck-on-amd64 notes)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* If a thread is given an initial stack with address range [lo .. hi],
  we need to tell memcheck that the area [lo - VGA_STACK_REDZONE_SZB
  .. hi] is valid, rather than just [lo .. hi] as has been the case on
  x86-only systems.  However, am not sure where to look for the call
  into memcheck that states the new stack area.

Notes pertaining to the 2.4.0 - 3.0 merge
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
As of 10 March (svn rev 3266, vex svn rev 1019) the merged code base
can start and run programs with --tool=none.  Both threaded and
unthreaded programs appear to work (knode, opera, konqueror).

Known breakage is:

* Basically only x86 works.  I was part-way through getting amd64
  to work when I stopped to do the merge.  I think you can assume
  amd64 is pretty much knackered right now.

* No other tools work.  Memcheck worked fine in 3.0 prior to the
  merge but needs to have Jeremy's space-saving hacks folded in.
  Also the leak checker improvements.  Ditto addrcheck.
  Cachegrind is broken because it is not Vex-aware, and Vex needs
  to be changed to convey info on instruction boundaries to it.
  Helgrind is not Vex aware.  Also, Helgrind will not work because
  thread-event-modelling does not work (see below).  Memcheck
  and Addrcheck could be made to work with minor effort, and
  that should happen asap.  Cachegrind also needs to be fixed
  shortly.

* Function wrapping a la 2.4.0 is disabled, and will likely remain
  disabled for an extended period until I consider the software
  engineering consequences of it, specifically if a cleaner
  implementation is possible.  Result of that is that thread-event
  modelling and Helgrind are also disabled for that period.

* signal contexts for x86 signal deliveries are partially broken.  On
  delivery of an rt-signal, a context frame is built, but only the 8
  integer registers and %eflags are written into it, no SSE and no FP
  state.  Also, the vcpu state is restored on return to whatever it
  was before the signal was delivered; it is not restored from the
  sigcontext offered to the handler.  That means handlers which
  expect to be able to modify the machine state will not work.
  This will be fixed; it requires a small amount of work on the
  Vex side.

* I got rid of extra UInt* flags arg for syscall pre wrappers,
  so they can't add MayBlock after examining the args.  Should
  be reinstated.  I commented out various *flags |= MayBlock"
  so they can easily enough be put back in.

* Tracking of device segments is somehow broken (I forget how)

* Core dumping is disabled (has been for a while in the 3.0 line)
  because it needs to be factored per arch (or is it per arch+os).


Other notes I made:

* Check tests/filter_stderr_basic; I got confused whilst merging it

* Dubious use of setjmp in run_thread_for_a_while -- I thought it
  was only OK to use setjmp as the arg of an if:  if (setjmp(...)) ...

* EmWarn/Int confusion -- what type is it in the guest state?

* Reinstate per-thread dispatch ctrs.  First find out what the
  rationale for per-thread counters is.

* main: TL_(fini) is not given exitcode and it should be.

* Prototype for VG_(_client_syscall) [note leading _] is in a 
  bad place.

(It was a 3-way merge, using the most recent common ancestor
 of the 2.4.0 and 3.0 lines:

   cvs co -D "11/19/2004 17:45:00 GMT" valgrind

 and the 2.4.0 line

   obtained at Fri Mar  4 15:52:46 GMT 2005 by:
   cvs co valgrind

 and the 3.0 line, which is svn revision 3261.
)


Cleanup notes derived from making AMD64 work.  JRS, started 2 March 05.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
The following cleanups need to be done.

AMD64 vsyscalls
~~~~~~~~~~~~~~~
The redirect mechanism should (could) be used to support vsyscalls on
both amd64 and x86, by redirecting jumps to the vsyscall entry
point(s) to appropriate helper stubs instead.  There is no point in
using the current x86 scheme of copying the trampoline code around the
place and making the AT_SYSINFO entry point at it, as that mechanism
does not work on amd64.

On x86-linux, the vsyscall address is whatever the AT_SYSINFO entry
says it is.  Reroute all jumps to that to a suitable stub.

On amd64, there are multiple vsyscall entry points at -10M +
1024*vsyscall_no (currently there are only two). These each need to be
redirected to suitable stubs which do normal syscalls instead.

These redirects should be set up as part of platform-specific
initialisation sequences.  They should not be set up as at present in
vg_symtab2.c.  All this stuff should be within platform-specific
startup code, and should not be visible in generic core service code.


Redirection mechanism
~~~~~~~~~~~~~~~~~~~~~
How this works is difficult to understand.  This should be fixed.  The
list of unresolved redirections should be a seperate data structure
from the currently active (addr, addr) mapping.

There's a whole big #ifdef TEST section in vg_symtab2.c which has
no apparent purpose.

The redirecting-symtab-loader seems like a good idea on the face
of it: you can write functions whose name says, in effect
  "i_am_a_replacement_for_FOO"
and then all jumps/calls to FOO get redirected there.  Problem is
that nameing mechanism involves $ signs etc in symbol names, which
makes it very fragile.  TODO: (1) figure out if we still need
this, and if so (2) fix.


System call handlers
~~~~~~~~~~~~~~~~~~~~
The pre/post functions should be factored into: marshallers, which get
the syscall args from wherever they live, and handlers proper, which
do whatever pre/post checks/hanldling is needed.  The handlers are
more or less platform independent.  The marshallers insulate the
handlers from details of knowing how to get hold of syscall arg/result
values given that different platforms use different and sometimes
strange calling conventions.

The syscall handlers assume that the result register (RES) does not
overlap with any argument register (ARGn).  They assume this by
blithely referring to ARGn in the post-handlers.  This should be fixed
properly -- before the call, a copy of the args should be saved so
they can be safely inspected after the call.

The mechanisms by which a pre-handler can complete a syscall itself
without handing it off to the kernel need to be cleaned up.  The
"Special" syscall designation no longer really makes sense (it never
did) and should be removed.

Sockets: move the socketcall marshaller from vg_syscalls.c into
x86-linux/syscalls.c; it is in the wrong place.

