From 2f7a5c89cc1d36b43ef1a1c12e7d3043560c49c3 Mon Sep 17 00:00:00 2001 From: Yaakov Selkowitz Date: Wed, 4 May 2011 22:12:15 +0000 Subject: [PATCH] * cygwin.din (psiginfo): Export. (psignal): Export. (sys_siglist): Export. * posix.sgml (std-notimpl): Move psiginfo and psignal from here... (std-susv4): ... to here. (std-deprec): Add sys_siglist. * strsig.cc (sys_siglist): New array. (psiginfo): New function. * include/cygwin/signal.h (sys_siglist): Declare. (psiginfo): Declare. * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump. --- winsup/cygwin/ChangeLog | 14 ++++++++ winsup/cygwin/cygwin.din | 3 ++ winsup/cygwin/include/cygwin/signal.h | 5 ++- winsup/cygwin/include/cygwin/version.h | 3 +- winsup/cygwin/posix.sgml | 5 +-- winsup/cygwin/strsig.cc | 49 +++++++++++++++++++++++++- 6 files changed, 74 insertions(+), 5 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 243358a84..bc7053240 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,17 @@ +2011-05-04 Yaakov Selkowitz + + * cygwin.din (psiginfo): Export. + (psignal): Export. + (sys_siglist): Export. + * posix.sgml (std-notimpl): Move psiginfo and psignal from here... + (std-susv4): ... to here. + (std-deprec): Add sys_siglist. + * strsig.cc (sys_siglist): New array. + (psiginfo): New function. + * include/cygwin/signal.h (sys_siglist): Declare. + (psiginfo): Declare. + * include/cygwin/version.h (CYGWIN_VERSION_API_MINOR): Bump. + 2011-05-04 Christopher Faylor * dll_list::detach (dll_list::detach): Avoid doing anything with detach diff --git a/winsup/cygwin/cygwin.din b/winsup/cygwin/cygwin.din index 31f0004fa..36a1fadad 100644 --- a/winsup/cygwin/cygwin.din +++ b/winsup/cygwin/cygwin.din @@ -28,6 +28,7 @@ _sys_errlist DATA sys_nerr = _sys_nerr DATA _sys_nerr DATA sys_sigabbrev DATA +sys_siglist DATA _timezone DATA _tzname DATA _Exit SIGFE @@ -1167,6 +1168,8 @@ program_invocation_name DATA program_invocation_short_name DATA _printf = printf SIGFE pselect SIGFE +psiginfo SIGFE +psignal SIGFE pthread_atfork SIGFE pthread_attr_destroy SIGFE pthread_attr_getdetachstate SIGFE diff --git a/winsup/cygwin/include/cygwin/signal.h b/winsup/cygwin/include/cygwin/signal.h index 25d501d1d..77dde3c99 100644 --- a/winsup/cygwin/include/cygwin/signal.h +++ b/winsup/cygwin/include/cygwin/signal.h @@ -1,6 +1,6 @@ /* signal.h - Copyright 2004, 2005, 2006 Red Hat, Inc. + Copyright 2004, 2005, 2006, 2011 Red Hat, Inc. This file is part of Cygwin. @@ -261,6 +261,7 @@ struct sigaction #define SIG_HOLD ((_sig_func_ptr)2) /* Signal in signal mask */ +void psiginfo (const siginfo_t *, const char *); int sigwait (const sigset_t *, int *); int sigwaitinfo (const sigset_t *, siginfo_t *); int sighold (int); @@ -272,8 +273,10 @@ int sigqueue(pid_t, int, const union sigval); int siginterrupt (int, int); #ifdef __INSIDE_CYGWIN__ extern const char *sys_sigabbrev[]; +extern const char *sys_siglist[]; #else extern const char __declspec(dllimport) *sys_sigabbrev[]; +extern const char __declspec(dllimport) *sys_siglist[]; #endif #ifdef __cplusplus diff --git a/winsup/cygwin/include/cygwin/version.h b/winsup/cygwin/include/cygwin/version.h index 8279e3a81..7a2974945 100644 --- a/winsup/cygwin/include/cygwin/version.h +++ b/winsup/cygwin/include/cygwin/version.h @@ -407,12 +407,13 @@ details. */ 240: Export ppoll. 241: Export pthread_attr_getstack, pthread_attr_getstackaddr, pthread_getattr_np. + 242: Export psiginfo, psignal, sys_siglist. */ /* Note that we forgot to bump the api for ualarm, strtoll, strtoull */ #define CYGWIN_VERSION_API_MAJOR 0 -#define CYGWIN_VERSION_API_MINOR 241 +#define CYGWIN_VERSION_API_MINOR 242 /* There is also a compatibity version number associated with the shared memory regions. It is incremented when incompatible diff --git a/winsup/cygwin/posix.sgml b/winsup/cygwin/posix.sgml index 67d958b97..2758cb2e6 100644 --- a/winsup/cygwin/posix.sgml +++ b/winsup/cygwin/posix.sgml @@ -527,6 +527,8 @@ also IEEE Std 1003.1-2008 (POSIX.1-2008). pread printf pselect + psiginfo + psignal pthread_atfork pthread_attr_destroy pthread_attr_getdetachstate @@ -1244,6 +1246,7 @@ also IEEE Std 1003.1-2008 (POSIX.1-2008). setutent (XPG2) sys_errlist (BSD) sys_nerr (BSD) + sys_siglist (BSD) ttyslot (SUSv2) ualarm (SUSv3) usleep (SUSv3) @@ -1375,8 +1378,6 @@ also IEEE Std 1003.1-2008 (POSIX.1-2008). posix_trace[...] posix_typed_[...] powl - psiginfo - psignal pthread_attr_getguardsize pthread_attr_setguardsize pthread_attr_setstack diff --git a/winsup/cygwin/strsig.cc b/winsup/cygwin/strsig.cc index 2dc1e4447..8afa8db7a 100644 --- a/winsup/cygwin/strsig.cc +++ b/winsup/cygwin/strsig.cc @@ -1,6 +1,6 @@ /* strsig.cc - Copyright 2004, 2007, 2008, 2010 Red Hat, Inc. + Copyright 2004, 2007, 2008, 2010, 2011 Red Hat, Inc. This file is part of Cygwin. @@ -10,6 +10,8 @@ details. */ #include "winsup.h" #include +#include +#include struct sigdesc { @@ -64,6 +66,16 @@ const char *sys_sigabbrev[] NO_COPY_INIT = __signals }; +#undef _s +#undef _s2 +#define _s(n, s) s +#define _s2(n, s, n1, s1) s +const char *sys_siglist[] NO_COPY_INIT = +{ + NULL, + __signals +}; + #undef _s #undef _s2 #define _s(n, s) {n, #n, s} @@ -96,3 +108,38 @@ strtosigno (const char *name) return siglist[i].n; return 0; } + +extern "C" void +psiginfo (const siginfo_t *info, const char *s) +{ + if (s != NULL && *s != '\0') + fprintf (stderr, "%s: ", s); + + fprintf (stderr, "%s", strsignal (info->si_signo)); + + if (info->si_signo > 0 && info->si_signo < NSIG) + { + switch (info->si_signo) + { + case SIGILL: + case SIGBUS: + case SIGFPE: + case SIGSEGV: + fprintf (stderr, " (%d [%p])", info->si_code, info->si_addr); + break; + case SIGCHLD: + fprintf (stderr, " (%d %d %d %ld)", info->si_code, info->si_pid, + info->si_status, info->si_uid); + break; +/* FIXME: implement si_band + case SIGPOLL: + fprintf (stderr, " (%d %ld)", info->si_code, info->si_band); + break; +*/ + default: + fprintf (stderr, " (%d %d %ld)", info->si_code, info->si_pid, info->si_uid); + } + } + + fprintf (stderr, "\n"); +}