Files
velzieandClaude Opus 5.5 8ba51a36c1 kernel: siginfo names who sent a signal (SI_USER, SI_TKILL, si_pid, si_uid)
Every signal a frame reported had si_code SI_KERNEL. Now:
- kill() is SI_USER with the sender's pid and uid. The process table keeps
  which pending bits kill sent and who sent each, beside the bitmask a target
  collects; a ^C from the terminal and SIGCHLD stay the kernel's. Two new
  Remote calls carry that to the browser shim's global kernel
  (k_take_kill_signals, k_kill_sender).
- tkill/tgkill (and so raise()) is SI_TKILL, and SIGPIPE is SI_USER from
  the writer, as Linux sends them.
- sigtimedwait fills the same fields (it wrote si_code 0 for everything).
- A synchronous fault still reports its own code and address.
One siginfo writer now serves the aarch64, x86-64, i386 and ppc32 frames.

Also: the plain (non-shared) browser shim exports a stub
gex_nt_callback_done, which the glue calls since a758e65; without it the
plain build failed its glue check and was not installed.

tests/x86-programs/siginfo-sender.c checks it against native, x86-64 and
i386: kill and tgkill of self, raise, a broken pipe, and a kill from a child
read back through sigtimedwait. Same output natively, under gexc, and in the
shared browser shim under Node (through the global kernel).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01FD9dkkmiprztLDZmgKXS62
2026-10-01 12:32:09 -04:00
..