Subject: psignal() and COMPAT_MACH exceptions
To: Jaromir Dolecek <email@example.com>
From: Emmanuel Dreyfus <firstname.lastname@example.org>
Date: 11/29/2003 15:42:46
I came the following ideas, but it is not yet complete. Any input is
All Darwin or Mach processes get their signal masks sets so that any
ignorable signal is ignored: everything except SIGKILL and SIGSTOP.
In darwin_emuldata, I maintain another signal mask, which will be
manipulated by the process with sigsetmask.
For each Darwin or Mach processes, I install a kqueue listener that will
be notified if any signal is sent by psignal(). This function will check
for exception ports ready to catch the exception, ane eventually call
mach_exception() do do the job.
For Darwin processes when no exception may be send, the kqueue listener
will check for the alternate signal mask in darwin_emuldata, and
eventually send a signal.
Problem: I cannot recall psignal() from the kqueue listener, as the
signal is masked by the real signal mask. I cannot unmask it
temporarily, as other lwp may fall in this hole if the current lwp comes
Additionnaly, I would have to duplicate all trapsignal and do
mach_trapsignal to suppress the signal mask checks there too.
This is rather complicated!
Il y a 10 sortes de personnes dans le monde: ceux qui comprennent
le binaire et ceux qui ne le comprennent pas.