[PATCH] Watchpoint followed by catchpoint misreports watchpoint (PR gdb/28621)

Pedro Alves pedro@palves.net
Mon Mar 21 17:28:59 GMT 2022


On 2022-03-07 16:56, Pedro Alves wrote:
> If GDB reports a watchpoint hit, and then the next event is not
> TARGET_WAITKIND_STOPPED, but instead some event for which there's a
> catchpoint, such that GDB calls bpstat_stop_status, GDB mistakenly
> thinks the watchpoint triggered.  Vis, using foll-fork.c:
> 
>   (gdb) awatch v
>   Hardware access (read/write) watchpoint 2: v
>   (gdb) catch fork
>   Catchpoint 3 (fork)
>   (gdb) c
>   Continuing.
> 
>   Hardware access (read/write) watchpoint 2: v
> 
>   Old value = 0
>   New value = 5
>   main () at gdb.base/foll-fork.c:16
>   16        pid = fork ();
>   (gdb)
>   Continuing.
> 
>   Hardware access (read/write) watchpoint 2: v      <<<<
>                                                     <<<< these lines are spurious
>   Value = 5                                         <<<<
> 
>   Catchpoint 3 (forked process 1712369), arch_fork (ctid=0x7ffff7fa4810) at arch-fork.h:49
>   49      arch-fork.h: No such file or directory.
>   (gdb)
> 
> The problem is that when we handle the fork event, nothing called
> watchpoints_triggered before calling bpstat_stop_status.  Thus, each
> watchpoint's watchpoint_triggered field was still set to
> watch_triggered_yes from the previous (real) watchpoint stop.
> watchpoint_triggered is only current called in the handle_signal_stop
> path, when handling TARGET_WAITKIND_STOPPED.
> 
> This fixes it by adding watchpoint_triggered calls in the other events
> paths that call bpstat_stop_status.  But instead of adding them
> explicitly, it adds a new function bpstat_stop_status_nowatch that
> wraps bpstat_stop_status and calls watchpoint_triggered, and then
> replaces most calls to bpstat_stop_status with calls to
> bpstat_stop_status_nowatch.
> 
> This required constifying watchpoints_triggered.
> 
> New test included, which fails without the fix.
> 
> Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=28621
> 
> Change-Id: I282b38c2eee428d25319af3bc842f9feafed461c

I've merged this to master.

Pedro Alvse


More information about the Gdb-patches mailing list