summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDagfinn Ilmari Mannsåker <ilmari@ilmari.org>2016-01-15 14:45:01 +0000
committerDagfinn Ilmari Mannsåker <ilmari@ilmari.org>2016-01-26 10:51:42 +0000
commit34e79b757ab6100d44bdbfa6f9603793a4215bbf (patch)
tree4c4ef4031656a8f0dfe3e67b2a972b0d0860924a
parent60027571bba4763dc6538fd3694eccebcd317339 (diff)
downloadperl-34e79b757ab6100d44bdbfa6f9603793a4215bbf.tar.gz
Add SA_SIGINFO 'code' constants to POSIX
Mention them in the sigaction documentation, and document the 'addr' field.
-rw-r--r--ext/POSIX/Makefile.PL12
-rw-r--r--ext/POSIX/lib/POSIX.pm15
-rw-r--r--ext/POSIX/lib/POSIX.pod11
-rw-r--r--ext/POSIX/t/export.t10
-rw-r--r--pod/perldelta.pod7
5 files changed, 54 insertions, 1 deletions
diff --git a/ext/POSIX/Makefile.PL b/ext/POSIX/Makefile.PL
index 5a24a34058..fabbe8a844 100644
--- a/ext/POSIX/Makefile.PL
+++ b/ext/POSIX/Makefile.PL
@@ -128,6 +128,18 @@ push @names, {name=>$_, type=>"IV", default=>["IV", "0"]}
_POSIX_PATH_MAX _POSIX_PIPE_BUF _POSIX_SSIZE_MAX
_POSIX_STREAM_MAX _POSIX_TZNAME_MAX _POSIX_VDISABLE _POSIX_VERSION
));
+push @names, {name=>$_, type =>"IV"},
+ foreach (qw(ILL_ILLOPC ILL_ILLOPN ILL_ILLADR ILL_ILLTRP ILL_PRVOPC ILL_PRVREG
+ ILL_COPROC ILL_BADSTK
+ FPE_INTDIV FPE_INTOVF FPE_FLTDIV FPE_FLTOVF FPE_FLTUND
+ FPE_FLTRES FPE_FLTINV FPE_FLTSUB
+ SEGV_MAPERR SEGV_ACCERR
+ BUS_ADRALN BUS_ADRERR BUS_OBJERR
+ TRAP_BRKPT TRAP_TRACE
+ CLD_EXITED CLD_KILLED CLD_DUMPED CLD_TRAPPED CLD_STOPPED CLD_CONTINUED
+ POLL_IN POLL_OUT POLL_MSG POLL_ERR POLL_PRI POLL_HUP
+ SI_USER SI_QUEUE SI_TIMER SI_ASYNCIO SI_MESGQ
+ ));
if ($rt_signals) {
push @names, {name=>"SIGRTMAX", not_constant=>1},
diff --git a/ext/POSIX/lib/POSIX.pm b/ext/POSIX/lib/POSIX.pm
index d8082074b8..8e5d4acf0c 100644
--- a/ext/POSIX/lib/POSIX.pm
+++ b/ext/POSIX/lib/POSIX.pm
@@ -4,7 +4,7 @@ use warnings;
our ($AUTOLOAD, %SIGRT);
-our $VERSION = '1.59';
+our $VERSION = '1.60';
require XSLoader;
@@ -405,6 +405,19 @@ my %other_export_tags = (
stdlib_h_c99 => [ @{$default_export_tags{stdlib_h}}, 'strtold' ],
nan_payload => [ qw(getpayload setpayload setpayloadsig issignaling) ],
+
+ signal_h_si_code => [qw(
+ ILL_ILLOPC ILL_ILLOPN ILL_ILLADR ILL_ILLTRP ILL_PRVOPC ILL_PRVREG
+ ILL_COPROC ILL_BADSTK
+ FPE_INTDIV FPE_INTOVF FPE_FLTDIV FPE_FLTOVF FPE_FLTUND
+ FPE_FLTRES FPE_FLTINV FPE_FLTSUB
+ SEGV_MAPERR SEGV_ACCERR
+ BUS_ADRALN BUS_ADRERR BUS_OBJERR
+ TRAP_BRKPT TRAP_TRACE
+ CLD_EXITED CLD_KILLED CLD_DUMPED CLD_TRAPPED CLD_STOPPED CLD_CONTINUED
+ POLL_IN POLL_OUT POLL_MSG POLL_ERR POLL_PRI POLL_HUP
+ SI_USER SI_QUEUE SI_TIMER SI_ASYNCIO SI_MESGQ
+ )],
);
{
diff --git a/ext/POSIX/lib/POSIX.pod b/ext/POSIX/lib/POSIX.pod
index 90e4f88c02..b6737f0580 100644
--- a/ext/POSIX/lib/POSIX.pod
+++ b/ext/POSIX/lib/POSIX.pod
@@ -1641,6 +1641,9 @@ semantics, as defined by POSIX/SUSv3:
a user process and the uid and pid make sense,
otherwise the signal was sent by the kernel
+The constants for specific C<code> values can be imported individually
+or using the C<:signal_h_si_code> tag.
+
The following are also defined by POSIX/SUSv3, but unfortunately
not very widely implemented:
@@ -1648,6 +1651,8 @@ not very widely implemented:
uid the uid of the process id generating the signal
status exit value or signal for SIGCHLD
band band event for SIGPOLL
+ addr address of faulting instruction or memory reference
+ for SIGILL, SIGFPE, SIGSEGV or SIGBUS
A third argument is also passed to the handler, which contains a copy
of the raw binary contents of the C<siginfo> structure: if a system has
@@ -2656,6 +2661,12 @@ C<SA_SIGINFO> C<SIGABRT> C<SIGALRM> C<SIGCHLD> C<SIGCONT> C<SIGFPE> C<SIGHUP> C<
C<SIGKILL> C<SIGPIPE> C<SIGQUIT> C<SIGSEGV> C<SIGSTOP> C<SIGTERM> C<SIGTSTP> C<SIGTTIN> C<SIGTTOU>
C<SIGUSR1> C<SIGUSR2> C<SIG_BLOCK> C<SIG_DFL> C<SIG_ERR> C<SIG_IGN> C<SIG_SETMASK>
C<SIG_UNBLOCK>
+C<ILL_ILLOPC> C<ILL_ILLOPN> C<ILL_ILLADR> C<ILL_ILLTRP> C<ILL_PRVOPC> C<ILL_PRVREG> C<ILL_COPROC>
+C<ILL_BADSTK> C<FPE_INTDIV> C<FPE_INTOVF> C<FPE_FLTDIV> C<FPE_FLTOVF> C<FPE_FLTUND> C<FPE_FLTRES>
+C<FPE_FLTINV> C<FPE_FLTSUB> C<SEGV_MAPERR> C<SEGV_ACCERR> C<BUS_ADRALN> C<BUS_ADRERR>
+C<BUS_OBJERR> C<TRAP_BRKPT> C<TRAP_TRACE> C<CLD_EXITED> C<CLD_KILLED> C<CLD_DUMPED> C<CLD_TRAPPED>
+C<CLD_STOPPED> C<CLD_CONTINUED> C<POLL_IN> C<POLL_OUT> C<POLL_MSG> C<POLL_ERR> C<POLL_PRI>
+C<POLL_HUP> C<SI_USER> C<SI_QUEUE> C<SI_TIMER> C<SI_ASYNCIO> C<SI_MESGQ>
=back
diff --git a/ext/POSIX/t/export.t b/ext/POSIX/t/export.t
index 553a8a9ebe..4ef920e12f 100644
--- a/ext/POSIX/t/export.t
+++ b/ext/POSIX/t/export.t
@@ -141,6 +141,16 @@ my %expect = (
# this stuff was added in 5.23
qw(
getpayload issignaling setpayload setpayloadsig
+ ILL_ILLOPC ILL_ILLOPN ILL_ILLADR ILL_ILLTRP ILL_PRVOPC ILL_PRVREG
+ ILL_COPROC ILL_BADSTK
+ FPE_INTDIV FPE_INTOVF FPE_FLTDIV FPE_FLTOVF FPE_FLTUND
+ FPE_FLTRES FPE_FLTINV FPE_FLTSUB
+ SEGV_MAPERR SEGV_ACCERR
+ BUS_ADRALN BUS_ADRERR BUS_OBJERR
+ TRAP_BRKPT TRAP_TRACE
+ CLD_EXITED CLD_KILLED CLD_DUMPED CLD_TRAPPED CLD_STOPPED CLD_CONTINUED
+ POLL_IN POLL_OUT POLL_MSG POLL_ERR POLL_PRI POLL_HUP
+ SI_USER SI_QUEUE SI_TIMER SI_ASYNCIO SI_MESGQ
),
],
);
diff --git a/pod/perldelta.pod b/pod/perldelta.pod
index 6d44914ec2..4d09b82eeb 100644
--- a/pod/perldelta.pod
+++ b/pod/perldelta.pod
@@ -121,6 +121,13 @@ XXX
L<XXX> has been upgraded from version A.xx to B.yy.
+=item *
+
+L<POSIX> has been upgraded from version 1.59 to 1.60.
+
+It can now export constants for the C<code> value in the hash passed to the
+L<sigaction|POSIX/sigaction> handler when using the C<SA_SIGINFO> flag.
+
=back
=head2 Removed Modules and Pragmata