At every word of the sigset (using gdb commands to disable/enable the
watchpoints around the sigfillset, you avoid spurious triggers).
Not sure how do you mean. When would I enable the watchpoint?
301 static void *aio_thread(void *unused)
302 {
303 pid_t pid;
304 static sigset_t set;
305
306 /* block all signals */
...
312 if (sigfillset(&set)) die("sigfillset");
....
315 pid = getpid();
316
317 while (1) {
b 312 // sets bp 1
p ((long *)&set // prints $1
watch $1[0] // sets bp 2..9
watch $1[1]
watch $1[2]
watch $1[3]
watch $1[4]
watch $1[5]
watch $1[6]
watch $1[7] // only 1/4 of the sigset!
// stop earlier if it starts
// assigning non-hardware watchpoints
// try again with 8..15 if not enough
// up to $1[31]
commands 1 // don't break on next sigfillset
dis 2
dis 3
dis 4
dis 5
dis 6
dis 7
dis 8
dis 9
c // and continue
end
b 315 // sets bp 10
commands 10 // re-enable after sigfillset
ena 2
ena 3
ena 4
ena 5
ena 6
ena 7
ena 8
ena 9
c // run body of aio_thread
end
c // run into aio_thread
Paolo