The situation is a little complicated.  POSIX defines the third
argument to the sa_sigaction handler as void * and says it may be
cast to ucontext_t.  On OpenBSD, it is really a pointer to struct
sigcontext but this is really an implementation detail.

 - todd

Index: lib/libc/sys/sigaction.2
===================================================================
RCS file: /cvs/src/lib/libc/sys/sigaction.2,v
retrieving revision 1.68
diff -u -p -u -r1.68 sigaction.2
--- lib/libc/sys/sigaction.2    14 Dec 2014 07:42:50 -0000      1.68
+++ lib/libc/sys/sigaction.2    14 Apr 2015 16:49:48 -0000
@@ -352,7 +352,7 @@ If the
 option is enabled, the canonical way to declare it is:
 .Bd -literal -offset indent
 void
-handler(int sig, siginfo_t *sip, struct sigcontext *scp)
+handler(int sig, siginfo_t *sip, void *ctx)
 .Ed
 .Pp
 Here
@@ -375,13 +375,19 @@ The function specified in
 .Fa sa_sigaction
 will be called instead of the function specified by
 .Fa sa_handler
-(Note that in some implementations these are in fact the same).
-.Fa scp
-is a pointer to the
+(note that in some implementations these are in fact the same).
+.Fa ctx
+may be cast to a pointer to
+.Fa ucontext_t
+which can be used to restore the thread's context from before the signal.
+On
+.Ox ,
+.Fa ucontext_t
+is an alias for the
 .Fa sigcontext
-structure (defined in
-.In signal.h ) ,
-used to restore the context from before the signal.
+structure defined in
+.In signal.h .
+The contents of this structure are machine-dependent.
 .Sh ERRORS
 .Fn sigaction
 will fail and no new signal handler will be installed if one

Reply via email to