[RFA]: Watchpoints per thread patch

Andrew Cagney cagney@gnu.org
Wed Oct 20 17:27:00 GMT 2004

Jeff Johnston wrote:
> The following patch adds needed support for the ia64 and s390 
> platforms.  For these platforms, watchpoints need to be inserted / 
> removed on each thread so as to work across all threads.  The patch adds 
> support for detecting this at configuration time and setting a new flag 
> WATCHPOINTS_PER_THREAD.  This flag is used when inserting/removing 
> watchpoints and when a new thread event occurs.
> This patch in itself does not give these platforms threaded watchpoint 
> support to pass the watchthreads.exp test case, but I am breaking up my 
> bigger patch that works for x86, x86_64, and ia64.  It still fails on 
> the S390 but gets part marks because threaded watchpoints actually 
> trigger properly however the S390 cannot determine which watchpoint gets 
> triggered when multiple watchpoint events occur. On ia64, the 
> watchthreads.exp test case will fail differently than before because the 
> low-level register and watchpoint code does not properly calculate the 
> LWP for accessing registers so we end up eating through the maximum 
> number of watchpoints quicker than anticipated.  I have a subsequent 
> patch for getting the LWP reliably, but this subsequent patch may be 
> made unnecessary depending on what Daniel does with ptids and the 
> thread-db layer.  Regardless of Daniel's redesign, the watchpoints still 
> must be inserted/removed on each thread.

The controversy here appears to be with the target dependant code being 
added to breakpoint.c.

For the target's that have the problem, modify target_insert_watchpoint 
to include the code your adding.  That way, instead of:

> +  /* If watchpoints do not apply to all threads automatically, we have to insert
> +     and delete them for every thread.  Otherwise, we can insert or delete them
> +     once from any thread.  */
> +  val = thread_switch_and_call (bpt->owner->thread, &insert_one_watchpoint, &args);
> +#else
> +  val = insert_one_watchpoint (&args);
> +#endif

the underlying target (ia64-linux-nat, ...) can locally override the 
method and handle the problem.  The code's the same, but how it is wired 
up is different

Sound reasonable to all?


More information about the Gdb-patches mailing list