I suggest trying to make the sigset_t static, since that generates
exactly the same code as the "nohang" case, and exactly the same stack
layout as the "hang" case.
(In case this wasn't clear: the sigfillset of a static sigset_t should
hang, proving that it's stack layout that comes to the rescue).
The next obvious step would be placing a
watchpoint somewhere.
Yes, but where?
At every word of the sigset (using gdb commands to disable/enable the
watchpoints around the sigfillset, you avoid spurious triggers). One of
those words will be overwritten if an overrun would have smashed the
stack. If it does not fire, s/sigfillset/sigemptyset/ in case it was
writing 0xffffffff. If it still does not fire, dunno. :-(
Paolo