2005-04-21 16:53:53 +02:00
|
|
|
/* The <signal.h> header defines all the ANSI and POSIX signals.
|
|
|
|
* MINIX supports all the signals required by POSIX. They are defined below.
|
|
|
|
* Some additional signals are also supported.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef _SIGNAL_H
|
|
|
|
#define _SIGNAL_H
|
|
|
|
|
2011-01-28 12:35:02 +01:00
|
|
|
#ifndef _MINIX_ANSI_H
|
|
|
|
#include <minix/ansi.h>
|
2005-04-21 16:53:53 +02:00
|
|
|
#endif
|
|
|
|
#ifdef _POSIX_SOURCE
|
|
|
|
#ifndef _TYPES_H
|
2009-11-06 09:46:22 +01:00
|
|
|
#include <minix/types.h>
|
2005-04-21 16:53:53 +02:00
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* Here are types that are closely associated with signal handling. */
|
|
|
|
typedef int sig_atomic_t;
|
|
|
|
|
|
|
|
#ifdef _POSIX_SOURCE
|
|
|
|
#ifndef _SIGSET_T
|
|
|
|
#define _SIGSET_T
|
|
|
|
typedef unsigned long sigset_t;
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
2006-03-10 17:10:05 +01:00
|
|
|
/* Regular signals. */
|
2005-04-21 16:53:53 +02:00
|
|
|
#define SIGHUP 1 /* hangup */
|
|
|
|
#define SIGINT 2 /* interrupt (DEL) */
|
|
|
|
#define SIGQUIT 3 /* quit (ASCII FS) */
|
|
|
|
#define SIGILL 4 /* illegal instruction */
|
|
|
|
#define SIGTRAP 5 /* trace trap (not reset when caught) */
|
|
|
|
#define SIGABRT 6 /* IOT instruction */
|
2006-02-17 14:43:07 +01:00
|
|
|
#define SIGBUS 7 /* bus error */
|
2005-04-21 16:53:53 +02:00
|
|
|
#define SIGFPE 8 /* floating point exception */
|
|
|
|
#define SIGKILL 9 /* kill (cannot be caught or ignored) */
|
|
|
|
#define SIGUSR1 10 /* user defined signal # 1 */
|
|
|
|
#define SIGSEGV 11 /* segmentation violation */
|
|
|
|
#define SIGUSR2 12 /* user defined signal # 2 */
|
|
|
|
#define SIGPIPE 13 /* write on a pipe with no one to read it */
|
|
|
|
#define SIGALRM 14 /* alarm clock */
|
|
|
|
#define SIGTERM 15 /* software termination signal from kill */
|
2006-02-17 15:12:12 +01:00
|
|
|
#define SIGEMT 16 /* EMT instruction */
|
2005-04-21 16:53:53 +02:00
|
|
|
#define SIGCHLD 17 /* child process terminated or stopped */
|
2006-03-10 17:10:05 +01:00
|
|
|
#define SIGWINCH 21 /* window size has changed */
|
2009-08-15 23:37:26 +02:00
|
|
|
#define SIGVTALRM 24 /* virtual alarm */
|
|
|
|
#define SIGPROF 25 /* profiler alarm */
|
2005-04-21 16:53:53 +02:00
|
|
|
|
|
|
|
/* POSIX requires the following signals to be defined, even if they are
|
|
|
|
* not supported. Here are the definitions, but they are not supported.
|
|
|
|
*/
|
2006-03-15 11:18:59 +01:00
|
|
|
#define SIGCONT 18 /* continue if stopped */
|
|
|
|
#define SIGSTOP 19 /* stop signal */
|
|
|
|
#define SIGTSTP 20 /* interactive stop signal */
|
|
|
|
#define SIGTTIN 22 /* background process wants to read */
|
|
|
|
#define SIGTTOU 23 /* background process wants to write */
|
|
|
|
|
2009-08-15 23:37:26 +02:00
|
|
|
#define _NSIG 26 /* highest signal number plus one */
|
2010-03-17 14:43:34 +01:00
|
|
|
#define NSIG _NSIG
|
2005-04-21 16:53:53 +02:00
|
|
|
|
2006-02-17 14:43:07 +01:00
|
|
|
#ifdef _MINIX
|
|
|
|
#define SIGIOT SIGABRT /* for people who speak PDP-11 */
|
2006-03-15 11:18:59 +01:00
|
|
|
|
|
|
|
/* MINIX specific signals. These signals are not used by user proceses,
|
|
|
|
* but meant to inform system processes, like the PM, about system events.
|
New RS and new signal handling for system processes.
UPDATING INFO:
20100317:
/usr/src/etc/system.conf updated to ignore default kernel calls: copy
it (or merge it) to /etc/system.conf.
The hello driver (/dev/hello) added to the distribution:
# cd /usr/src/commands/scripts && make clean install
# cd /dev && MAKEDEV hello
KERNEL CHANGES:
- Generic signal handling support. The kernel no longer assumes PM as a signal
manager for every process. The signal manager of a given process can now be
specified in its privilege slot. When a signal has to be delivered, the kernel
performs the lookup and forwards the signal to the appropriate signal manager.
PM is the default signal manager for user processes, RS is the default signal
manager for system processes. To enable ptrace()ing for system processes, it
is sufficient to change the default signal manager to PM. This will temporarily
disable crash recovery, though.
- sys_exit() is now split into sys_exit() (i.e. exit() for system processes,
which generates a self-termination signal), and sys_clear() (i.e. used by PM
to ask the kernel to clear a process slot when a process exits).
- Added a new kernel call (i.e. sys_update()) to swap two process slots and
implement live update.
PM CHANGES:
- Posix signal handling is no longer allowed for system processes. System
signals are split into two fixed categories: termination and non-termination
signals. When a non-termination signaled is processed, PM transforms the signal
into an IPC message and delivers the message to the system process. When a
termination signal is processed, PM terminates the process.
- PM no longer assumes itself as the signal manager for system processes. It now
makes sure that every system signal goes through the kernel before being
actually processes. The kernel will then dispatch the signal to the appropriate
signal manager which may or may not be PM.
SYSLIB CHANGES:
- Simplified SEF init and LU callbacks.
- Added additional predefined SEF callbacks to debug crash recovery and
live update.
- Fixed a temporary ack in the SEF init protocol. SEF init reply is now
completely synchronous.
- Added SEF signal event type to provide a uniform interface for system
processes to deal with signals. A sef_cb_signal_handler() callback is
available for system processes to handle every received signal. A
sef_cb_signal_manager() callback is used by signal managers to process
system signals on behalf of the kernel.
- Fixed a few bugs with memory mapping and DS.
VM CHANGES:
- Page faults and memory requests coming from the kernel are now implemented
using signals.
- Added a new VM call to swap two process slots and implement live update.
- The call is used by RS at update time and in turn invokes the kernel call
sys_update().
RS CHANGES:
- RS has been reworked with a better functional decomposition.
- Better kernel call masks. com.h now defines the set of very basic kernel calls
every system service is allowed to use. This makes system.conf simpler and
easier to maintain. In addition, this guarantees a higher level of isolation
for system libraries that use one or more kernel calls internally (e.g. printf).
- RS is the default signal manager for system processes. By default, RS
intercepts every signal delivered to every system process. This makes crash
recovery possible before bringing PM and friends in the loop.
- RS now supports fast rollback when something goes wrong while initializing
the new version during a live update.
- Live update is now implemented by keeping the two versions side-by-side and
swapping the process slots when the old version is ready to update.
- Crash recovery is now implemented by keeping the two versions side-by-side
and cleaning up the old version only when the recovery process is complete.
DS CHANGES:
- Fixed a bug when the process doing ds_publish() or ds_delete() is not known
by DS.
- Fixed the completely broken support for strings. String publishing is now
implemented in the system library and simply wraps publishing of memory ranges.
Ideally, we should adopt a similar approach for other data types as well.
- Test suite fixed.
DRIVER CHANGES:
- The hello driver has been added to the Minix distribution to demonstrate basic
live update and crash recovery functionalities.
- Other drivers have been adapted to conform the new SEF interface.
2010-03-17 02:15:29 +01:00
|
|
|
* The order here determines the order signals are processed by system
|
|
|
|
* processes in user-space. Higher-priority signals should be first.
|
2006-03-15 11:18:59 +01:00
|
|
|
*/
|
2010-03-31 10:55:12 +02:00
|
|
|
/* Signals delivered by a signal manager. */
|
|
|
|
#define SIGSNDELAY 26 /* end of delay for signal delivery */
|
|
|
|
|
|
|
|
#define SIGS_FIRST SIGHUP /* first system signal */
|
|
|
|
#define SIGS_LAST SIGSNDELAY /* last system signal */
|
|
|
|
#define IS_SIGS(signo) (signo>=SIGS_FIRST && signo<=SIGS_LAST)
|
|
|
|
|
|
|
|
/* Signals delivered by the kernel. */
|
2010-04-27 01:21:26 +02:00
|
|
|
#define SIGKMEM 27 /* kernel memory request pending */
|
|
|
|
#define SIGKMESS 28 /* new kernel message */
|
|
|
|
#define SIGKSIGSM 29 /* kernel signal pending for signal manager */
|
|
|
|
#define SIGKSIG 30 /* kernel signal pending */
|
New RS and new signal handling for system processes.
UPDATING INFO:
20100317:
/usr/src/etc/system.conf updated to ignore default kernel calls: copy
it (or merge it) to /etc/system.conf.
The hello driver (/dev/hello) added to the distribution:
# cd /usr/src/commands/scripts && make clean install
# cd /dev && MAKEDEV hello
KERNEL CHANGES:
- Generic signal handling support. The kernel no longer assumes PM as a signal
manager for every process. The signal manager of a given process can now be
specified in its privilege slot. When a signal has to be delivered, the kernel
performs the lookup and forwards the signal to the appropriate signal manager.
PM is the default signal manager for user processes, RS is the default signal
manager for system processes. To enable ptrace()ing for system processes, it
is sufficient to change the default signal manager to PM. This will temporarily
disable crash recovery, though.
- sys_exit() is now split into sys_exit() (i.e. exit() for system processes,
which generates a self-termination signal), and sys_clear() (i.e. used by PM
to ask the kernel to clear a process slot when a process exits).
- Added a new kernel call (i.e. sys_update()) to swap two process slots and
implement live update.
PM CHANGES:
- Posix signal handling is no longer allowed for system processes. System
signals are split into two fixed categories: termination and non-termination
signals. When a non-termination signaled is processed, PM transforms the signal
into an IPC message and delivers the message to the system process. When a
termination signal is processed, PM terminates the process.
- PM no longer assumes itself as the signal manager for system processes. It now
makes sure that every system signal goes through the kernel before being
actually processes. The kernel will then dispatch the signal to the appropriate
signal manager which may or may not be PM.
SYSLIB CHANGES:
- Simplified SEF init and LU callbacks.
- Added additional predefined SEF callbacks to debug crash recovery and
live update.
- Fixed a temporary ack in the SEF init protocol. SEF init reply is now
completely synchronous.
- Added SEF signal event type to provide a uniform interface for system
processes to deal with signals. A sef_cb_signal_handler() callback is
available for system processes to handle every received signal. A
sef_cb_signal_manager() callback is used by signal managers to process
system signals on behalf of the kernel.
- Fixed a few bugs with memory mapping and DS.
VM CHANGES:
- Page faults and memory requests coming from the kernel are now implemented
using signals.
- Added a new VM call to swap two process slots and implement live update.
- The call is used by RS at update time and in turn invokes the kernel call
sys_update().
RS CHANGES:
- RS has been reworked with a better functional decomposition.
- Better kernel call masks. com.h now defines the set of very basic kernel calls
every system service is allowed to use. This makes system.conf simpler and
easier to maintain. In addition, this guarantees a higher level of isolation
for system libraries that use one or more kernel calls internally (e.g. printf).
- RS is the default signal manager for system processes. By default, RS
intercepts every signal delivered to every system process. This makes crash
recovery possible before bringing PM and friends in the loop.
- RS now supports fast rollback when something goes wrong while initializing
the new version during a live update.
- Live update is now implemented by keeping the two versions side-by-side and
swapping the process slots when the old version is ready to update.
- Crash recovery is now implemented by keeping the two versions side-by-side
and cleaning up the old version only when the recovery process is complete.
DS CHANGES:
- Fixed a bug when the process doing ds_publish() or ds_delete() is not known
by DS.
- Fixed the completely broken support for strings. String publishing is now
implemented in the system library and simply wraps publishing of memory ranges.
Ideally, we should adopt a similar approach for other data types as well.
- Test suite fixed.
DRIVER CHANGES:
- The hello driver has been added to the Minix distribution to demonstrate basic
live update and crash recovery functionalities.
- Other drivers have been adapted to conform the new SEF interface.
2010-03-17 02:15:29 +01:00
|
|
|
|
2010-04-27 01:21:26 +02:00
|
|
|
#define SIGK_FIRST SIGKMEM /* first kernel signal */
|
2010-03-31 10:55:12 +02:00
|
|
|
#define SIGK_LAST SIGKSIG /* last kernel signal */
|
New RS and new signal handling for system processes.
UPDATING INFO:
20100317:
/usr/src/etc/system.conf updated to ignore default kernel calls: copy
it (or merge it) to /etc/system.conf.
The hello driver (/dev/hello) added to the distribution:
# cd /usr/src/commands/scripts && make clean install
# cd /dev && MAKEDEV hello
KERNEL CHANGES:
- Generic signal handling support. The kernel no longer assumes PM as a signal
manager for every process. The signal manager of a given process can now be
specified in its privilege slot. When a signal has to be delivered, the kernel
performs the lookup and forwards the signal to the appropriate signal manager.
PM is the default signal manager for user processes, RS is the default signal
manager for system processes. To enable ptrace()ing for system processes, it
is sufficient to change the default signal manager to PM. This will temporarily
disable crash recovery, though.
- sys_exit() is now split into sys_exit() (i.e. exit() for system processes,
which generates a self-termination signal), and sys_clear() (i.e. used by PM
to ask the kernel to clear a process slot when a process exits).
- Added a new kernel call (i.e. sys_update()) to swap two process slots and
implement live update.
PM CHANGES:
- Posix signal handling is no longer allowed for system processes. System
signals are split into two fixed categories: termination and non-termination
signals. When a non-termination signaled is processed, PM transforms the signal
into an IPC message and delivers the message to the system process. When a
termination signal is processed, PM terminates the process.
- PM no longer assumes itself as the signal manager for system processes. It now
makes sure that every system signal goes through the kernel before being
actually processes. The kernel will then dispatch the signal to the appropriate
signal manager which may or may not be PM.
SYSLIB CHANGES:
- Simplified SEF init and LU callbacks.
- Added additional predefined SEF callbacks to debug crash recovery and
live update.
- Fixed a temporary ack in the SEF init protocol. SEF init reply is now
completely synchronous.
- Added SEF signal event type to provide a uniform interface for system
processes to deal with signals. A sef_cb_signal_handler() callback is
available for system processes to handle every received signal. A
sef_cb_signal_manager() callback is used by signal managers to process
system signals on behalf of the kernel.
- Fixed a few bugs with memory mapping and DS.
VM CHANGES:
- Page faults and memory requests coming from the kernel are now implemented
using signals.
- Added a new VM call to swap two process slots and implement live update.
- The call is used by RS at update time and in turn invokes the kernel call
sys_update().
RS CHANGES:
- RS has been reworked with a better functional decomposition.
- Better kernel call masks. com.h now defines the set of very basic kernel calls
every system service is allowed to use. This makes system.conf simpler and
easier to maintain. In addition, this guarantees a higher level of isolation
for system libraries that use one or more kernel calls internally (e.g. printf).
- RS is the default signal manager for system processes. By default, RS
intercepts every signal delivered to every system process. This makes crash
recovery possible before bringing PM and friends in the loop.
- RS now supports fast rollback when something goes wrong while initializing
the new version during a live update.
- Live update is now implemented by keeping the two versions side-by-side and
swapping the process slots when the old version is ready to update.
- Crash recovery is now implemented by keeping the two versions side-by-side
and cleaning up the old version only when the recovery process is complete.
DS CHANGES:
- Fixed a bug when the process doing ds_publish() or ds_delete() is not known
by DS.
- Fixed the completely broken support for strings. String publishing is now
implemented in the system library and simply wraps publishing of memory ranges.
Ideally, we should adopt a similar approach for other data types as well.
- Test suite fixed.
DRIVER CHANGES:
- The hello driver has been added to the Minix distribution to demonstrate basic
live update and crash recovery functionalities.
- Other drivers have been adapted to conform the new SEF interface.
2010-03-17 02:15:29 +01:00
|
|
|
#define IS_SIGK(signo) (signo>=SIGK_FIRST && signo<=SIGK_LAST)
|
|
|
|
|
|
|
|
/* Termination signals for Minix system processes. */
|
|
|
|
#define SIGS_IS_LETHAL(sig) \
|
|
|
|
(sig == SIGILL || sig == SIGBUS || sig == SIGFPE || sig == SIGSEGV \
|
|
|
|
|| sig == SIGEMT || sig == SIGABRT)
|
|
|
|
#define SIGS_IS_TERMINATION(sig) (SIGS_IS_LETHAL(sig) \
|
|
|
|
|| (sig == SIGKILL || sig == SIGPIPE))
|
2010-03-22 23:46:29 +01:00
|
|
|
#define SIGS_IS_STACKTRACE(sig) (SIGS_IS_LETHAL(sig) && sig != SIGABRT)
|
2006-03-15 11:18:59 +01:00
|
|
|
|
2006-02-17 14:43:07 +01:00
|
|
|
#endif
|
|
|
|
|
2005-04-21 16:53:53 +02:00
|
|
|
/* The sighandler_t type is not allowed unless _POSIX_SOURCE is defined. */
|
|
|
|
typedef void _PROTOTYPE( (*__sighandler_t), (int) );
|
|
|
|
|
|
|
|
/* Macros used as function pointers. */
|
|
|
|
#define SIG_ERR ((__sighandler_t) -1) /* error return */
|
|
|
|
#define SIG_DFL ((__sighandler_t) 0) /* default signal handling */
|
|
|
|
#define SIG_IGN ((__sighandler_t) 1) /* ignore signal */
|
|
|
|
#define SIG_HOLD ((__sighandler_t) 2) /* block signal */
|
|
|
|
#define SIG_CATCH ((__sighandler_t) 3) /* catch signal */
|
|
|
|
|
|
|
|
#ifdef _POSIX_SOURCE
|
|
|
|
struct sigaction {
|
|
|
|
__sighandler_t sa_handler; /* SIG_DFL, SIG_IGN, or pointer to function */
|
|
|
|
sigset_t sa_mask; /* signals to be blocked during handler */
|
|
|
|
int sa_flags; /* special flags */
|
|
|
|
};
|
|
|
|
|
|
|
|
/* Fields for sa_flags. */
|
|
|
|
#define SA_ONSTACK 0x0001 /* deliver signal on alternate stack */
|
|
|
|
#define SA_RESETHAND 0x0002 /* reset signal handler when signal caught */
|
|
|
|
#define SA_NODEFER 0x0004 /* don't block signal while catching it */
|
|
|
|
#define SA_RESTART 0x0008 /* automatic system call restart */
|
|
|
|
#define SA_SIGINFO 0x0010 /* extended signal handling */
|
|
|
|
#define SA_NOCLDWAIT 0x0020 /* don't create zombies */
|
|
|
|
#define SA_NOCLDSTOP 0x0040 /* don't receive SIGCHLD when child stops */
|
|
|
|
|
|
|
|
/* POSIX requires these values for use with sigprocmask(2). */
|
|
|
|
#define SIG_BLOCK 0 /* for blocking signals */
|
|
|
|
#define SIG_UNBLOCK 1 /* for unblocking signals */
|
|
|
|
#define SIG_SETMASK 2 /* for setting the signal mask */
|
|
|
|
#define SIG_INQUIRE 4 /* for internal use only */
|
2009-12-02 14:01:48 +01:00
|
|
|
|
|
|
|
/* codes for SIGFPE */
|
|
|
|
#define FPE_INTOVF 1 /* integer divide by zero */
|
|
|
|
#define FPE_INTDIV 2 /* integer overflow */
|
|
|
|
#define FPE_FLTDIV 3 /* floating-point divide by zero */
|
|
|
|
#define FPE_FLTOVF 4 /* floating-point overflow */
|
|
|
|
#define FPE_FLTUND 5 /* floating-point underflow */
|
|
|
|
#define FPE_FLTRES 6 /* floating-point inexact result */
|
|
|
|
#define FPE_FLTINV 7 /* floating-point invalid operation */
|
|
|
|
#define FPE_FLTSUB 8 /* subscript out of range */
|
|
|
|
|
2010-03-12 16:58:41 +01:00
|
|
|
typedef struct sigaltstack {
|
|
|
|
void *ss_sp;
|
|
|
|
int ss_flags;
|
|
|
|
size_t ss_size;
|
|
|
|
} stack_t;
|
|
|
|
|
|
|
|
#define MINSIGSTKSZ 2048 /* Minimal stack size is 2k */
|
|
|
|
|
|
|
|
/* Fields for ss_flags */
|
|
|
|
#define SS_ONSTACK 1 /* Process is executing on an alternate stack */
|
|
|
|
#define SS_DISABLE 2 /* Alternate stack is disabled */
|
|
|
|
|
|
|
|
|
2005-04-21 16:53:53 +02:00
|
|
|
#endif /* _POSIX_SOURCE */
|
|
|
|
|
|
|
|
/* POSIX and ANSI function prototypes. */
|
|
|
|
_PROTOTYPE( int raise, (int _sig) );
|
|
|
|
_PROTOTYPE( __sighandler_t signal, (int _sig, __sighandler_t _func) );
|
|
|
|
|
|
|
|
#ifdef _POSIX_SOURCE
|
|
|
|
_PROTOTYPE( int kill, (pid_t _pid, int _sig) );
|
2006-06-07 16:36:35 +02:00
|
|
|
_PROTOTYPE( int killpg, (pid_t _pgrp, int _sig) );
|
2005-04-21 16:53:53 +02:00
|
|
|
_PROTOTYPE( int sigaction,
|
|
|
|
(int _sig, const struct sigaction *_act, struct sigaction *_oact) );
|
Merge of David's ptrace branch. Summary:
o Support for ptrace T_ATTACH/T_DETACH and T_SYSCALL
o PM signal handling logic should now work properly, even with debuggers
being present
o Asynchronous PM/VFS protocol, full IPC support for senda(), and
AMF_NOREPLY senda() flag
DETAILS
Process stop and delay call handling of PM:
o Added sys_runctl() kernel call with sys_stop() and sys_resume()
aliases, for PM to stop and resume a process
o Added exception for sending/syscall-traced processes to sys_runctl(),
and matching SIGKREADY pseudo-signal to PM
o Fixed PM signal logic to deal with requests from a process after
stopping it (so-called "delay calls"), using the SIGKREADY facility
o Fixed various PM panics due to race conditions with delay calls versus
VFS calls
o Removed special PRIO_STOP priority value
o Added SYS_LOCK RTS kernel flag, to stop an individual process from
running while modifying its process structure
Signal and debugger handling in PM:
o Fixed debugger signals being dropped if a second signal arrives when
the debugger has not retrieved the first one
o Fixed debugger signals being sent to the debugger more than once
o Fixed debugger signals unpausing process in VFS; removed PM_UNPAUSE_TR
protocol message
o Detached debugger signals from general signal logic and from being
blocked on VFS calls, meaning that even VFS can now be traced
o Fixed debugger being unable to receive more than one pending signal in
one process stop
o Fixed signal delivery being delayed needlessly when multiple signals
are pending
o Fixed wait test for tracer, which was returning for children that were
not waited for
o Removed second parallel pending call from PM to VFS for any process
o Fixed process becoming runnable between exec() and debugger trap
o Added support for notifying the debugger before the parent when a
debugged child exits
o Fixed debugger death causing child to remain stopped forever
o Fixed consistently incorrect use of _NSIG
Extensions to ptrace():
o Added T_ATTACH and T_DETACH ptrace request, to attach and detach a
debugger to and from a process
o Added T_SYSCALL ptrace request, to trace system calls
o Added T_SETOPT ptrace request, to set trace options
o Added TO_TRACEFORK trace option, to attach automatically to children
of a traced process
o Added TO_ALTEXEC trace option, to send SIGSTOP instead of SIGTRAP upon
a successful exec() of the tracee
o Extended T_GETUSER ptrace support to allow retrieving a process's priv
structure
o Removed T_STOP ptrace request again, as it does not help implementing
debuggers properly
o Added MINIX3-specific ptrace test (test42)
o Added proper manual page for ptrace(2)
Asynchronous PM/VFS interface:
o Fixed asynchronous messages not being checked when receive() is called
with an endpoint other than ANY
o Added AMF_NOREPLY senda() flag, preventing such messages from
satisfying the receive part of a sendrec()
o Added asynsend3() that takes optional flags; asynsend() is now a
#define passing in 0 as third parameter
o Made PM/VFS protocol asynchronous; reintroduced tell_fs()
o Made PM_BASE request/reply number range unique
o Hacked in a horrible temporary workaround into RS to deal with newly
revealed RS-PM-VFS race condition triangle until VFS is asynchronous
System signal handling:
o Fixed shutdown logic of device drivers; removed old SIGKSTOP signal
o Removed is-superuser check from PM's do_procstat() (aka getsigset())
o Added sigset macros to allow system processes to deal with the full
signal set, rather than just the POSIX subset
Miscellaneous PM fixes:
o Split do_getset into do_get and do_set, merging common code and making
structure clearer
o Fixed setpriority() being able to put to sleep processes using an
invalid parameter, or revive zombie processes
o Made find_proc() global; removed obsolete proc_from_pid()
o Cleanup here and there
Also included:
o Fixed false-positive boot order kernel warning
o Removed last traces of old NOTIFY_FROM code
THINGS OF POSSIBLE INTEREST
o It should now be possible to run PM at any priority, even lower than
user processes
o No assumptions are made about communication speed between PM and VFS,
although communication must be FIFO
o A debugger will now receive incoming debuggee signals at kill time
only; the process may not yet be fully stopped
o A first step has been made towards making the SYSTEM task preemptible
2009-09-30 11:57:22 +02:00
|
|
|
_PROTOTYPE( int sigpending, (sigset_t *_set) );
|
|
|
|
_PROTOTYPE( int sigprocmask,
|
|
|
|
(int _how, const sigset_t *_set, sigset_t *_oset) );
|
|
|
|
_PROTOTYPE( int sigsuspend, (const sigset_t *_sigmask) );
|
|
|
|
|
|
|
|
/* For the sigset functions, only use the library version with error
|
|
|
|
* checking from user programs. System programs need to be able to use
|
|
|
|
* nonstanard signals.
|
|
|
|
*/
|
|
|
|
#ifndef _SYSTEM
|
2005-04-21 16:53:53 +02:00
|
|
|
_PROTOTYPE( int sigaddset, (sigset_t *_set, int _sig) );
|
|
|
|
_PROTOTYPE( int sigdelset, (sigset_t *_set, int _sig) );
|
|
|
|
_PROTOTYPE( int sigemptyset, (sigset_t *_set) );
|
|
|
|
_PROTOTYPE( int sigfillset, (sigset_t *_set) );
|
|
|
|
_PROTOTYPE( int sigismember, (const sigset_t *_set, int _sig) );
|
Merge of David's ptrace branch. Summary:
o Support for ptrace T_ATTACH/T_DETACH and T_SYSCALL
o PM signal handling logic should now work properly, even with debuggers
being present
o Asynchronous PM/VFS protocol, full IPC support for senda(), and
AMF_NOREPLY senda() flag
DETAILS
Process stop and delay call handling of PM:
o Added sys_runctl() kernel call with sys_stop() and sys_resume()
aliases, for PM to stop and resume a process
o Added exception for sending/syscall-traced processes to sys_runctl(),
and matching SIGKREADY pseudo-signal to PM
o Fixed PM signal logic to deal with requests from a process after
stopping it (so-called "delay calls"), using the SIGKREADY facility
o Fixed various PM panics due to race conditions with delay calls versus
VFS calls
o Removed special PRIO_STOP priority value
o Added SYS_LOCK RTS kernel flag, to stop an individual process from
running while modifying its process structure
Signal and debugger handling in PM:
o Fixed debugger signals being dropped if a second signal arrives when
the debugger has not retrieved the first one
o Fixed debugger signals being sent to the debugger more than once
o Fixed debugger signals unpausing process in VFS; removed PM_UNPAUSE_TR
protocol message
o Detached debugger signals from general signal logic and from being
blocked on VFS calls, meaning that even VFS can now be traced
o Fixed debugger being unable to receive more than one pending signal in
one process stop
o Fixed signal delivery being delayed needlessly when multiple signals
are pending
o Fixed wait test for tracer, which was returning for children that were
not waited for
o Removed second parallel pending call from PM to VFS for any process
o Fixed process becoming runnable between exec() and debugger trap
o Added support for notifying the debugger before the parent when a
debugged child exits
o Fixed debugger death causing child to remain stopped forever
o Fixed consistently incorrect use of _NSIG
Extensions to ptrace():
o Added T_ATTACH and T_DETACH ptrace request, to attach and detach a
debugger to and from a process
o Added T_SYSCALL ptrace request, to trace system calls
o Added T_SETOPT ptrace request, to set trace options
o Added TO_TRACEFORK trace option, to attach automatically to children
of a traced process
o Added TO_ALTEXEC trace option, to send SIGSTOP instead of SIGTRAP upon
a successful exec() of the tracee
o Extended T_GETUSER ptrace support to allow retrieving a process's priv
structure
o Removed T_STOP ptrace request again, as it does not help implementing
debuggers properly
o Added MINIX3-specific ptrace test (test42)
o Added proper manual page for ptrace(2)
Asynchronous PM/VFS interface:
o Fixed asynchronous messages not being checked when receive() is called
with an endpoint other than ANY
o Added AMF_NOREPLY senda() flag, preventing such messages from
satisfying the receive part of a sendrec()
o Added asynsend3() that takes optional flags; asynsend() is now a
#define passing in 0 as third parameter
o Made PM/VFS protocol asynchronous; reintroduced tell_fs()
o Made PM_BASE request/reply number range unique
o Hacked in a horrible temporary workaround into RS to deal with newly
revealed RS-PM-VFS race condition triangle until VFS is asynchronous
System signal handling:
o Fixed shutdown logic of device drivers; removed old SIGKSTOP signal
o Removed is-superuser check from PM's do_procstat() (aka getsigset())
o Added sigset macros to allow system processes to deal with the full
signal set, rather than just the POSIX subset
Miscellaneous PM fixes:
o Split do_getset into do_get and do_set, merging common code and making
structure clearer
o Fixed setpriority() being able to put to sleep processes using an
invalid parameter, or revive zombie processes
o Made find_proc() global; removed obsolete proc_from_pid()
o Cleanup here and there
Also included:
o Fixed false-positive boot order kernel warning
o Removed last traces of old NOTIFY_FROM code
THINGS OF POSSIBLE INTEREST
o It should now be possible to run PM at any priority, even lower than
user processes
o No assumptions are made about communication speed between PM and VFS,
although communication must be FIFO
o A debugger will now receive incoming debuggee signals at kill time
only; the process may not yet be fully stopped
o A first step has been made towards making the SYSTEM task preemptible
2009-09-30 11:57:22 +02:00
|
|
|
#else
|
|
|
|
#define sigaddset(set, sig) ((int) ((*(set) |= (1 << (sig))) && 0))
|
|
|
|
#define sigdelset(set, sig) ((int) ((*(set) &= ~(1 << (sig))) && 0))
|
|
|
|
#define sigemptyset(set) ((int) (*(set) = 0))
|
|
|
|
#define sigfillset(set) ((int) ((*(set) = ~0) && 0))
|
|
|
|
#define sigismember(set, sig) ((*(set) & (1 << (sig))) ? 1 : 0)
|
|
|
|
#endif
|
|
|
|
|
2005-04-21 16:53:53 +02:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif /* _SIGNAL_H */
|