On Mon, Feb 25, 2008 at 1:42 PM, Julian Seward <[EMAIL PROTECTED]> wrote:
>
>  > Only _start. Even if I would track _stop, I still would need code in
>  > the drd_trace_load() / drd_trace_store() functions for verifying
>  > whether VG_(get_running_tid)() changed.
>
>  You really need to intercept the _stop function.
>
>  * when notified with _start, cache the thread ID provided.
>
>  * when notified with _stop, discard the cached thread ID.
>
>  * when you need to know the thread ID, first see if you have
>   a cached ID.  If not, call VG_(get_running_tid) (but don't
>   cache the result).

The code that is currently executed by exp-drd at the start of every
memory load and store is about as follows:
  if (VG_(get_running_tid) != cached_tid)
  { cached_tid = VG_(get_running_tid); /* update danger set */; }

When tracking both _start and _stop, the code at the start of every
memory load and store will look as follows:
  if (tracked_thread_id == VG_INVALID_THREADID && VG_(get_running_tid)
!= cached_tid)
  { cached_tid = VG_(get_running_tid); /* update danger set */; }

Is this an improvement ? This would save one function call in the
common path, but there is also an alternative solution for this --
declaring VG_(get_running_tid)() inline. And the code for checking the
thread ID still has to be executed for every client memory load and
for every client memory store.

I still prefer that the Valgrind core calls a tracking function to
notify a tool about any thread ID changes.

Bart.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Valgrind-developers mailing list
Valgrind-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/valgrind-developers

Reply via email to