From 5c8891e9624d80b5b85ce485c0c1616993c3e8f0 Mon Sep 17 00:00:00 2001 From: Christopher Faylor Date: Tue, 10 Jul 2007 00:12:54 +0000 Subject: [PATCH] * cygwin/strsig.cc (__signals): New macro. (sys_sigabbrev): New array of signal strings, patterned after linux. (siglist): Use __signals. * cygwin/include/cygwin/signal.h (sys_sigabbrev): Define. * cygwin/include/cygwin/version.h: Bump API minor version to 177. * utils/Makefile.in (kill.exe): Remove reliance on libiberty. * utils/kill.cc (strsigno): New function patterned after libiberty but using newly exported cygwin array. --- winsup/cygwin/ChangeLog | 8 +++ winsup/cygwin/include/cygwin/signal.h | 2 + winsup/cygwin/include/cygwin/version.h | 3 +- winsup/cygwin/strsig.cc | 84 +++++++++++++++----------- winsup/utils/ChangeLog | 6 ++ winsup/utils/Makefile.in | 2 +- winsup/utils/kill.cc | 12 +++- 7 files changed, 78 insertions(+), 39 deletions(-) diff --git a/winsup/cygwin/ChangeLog b/winsup/cygwin/ChangeLog index 26cae0977..0197dd377 100644 --- a/winsup/cygwin/ChangeLog +++ b/winsup/cygwin/ChangeLog @@ -1,3 +1,11 @@ +2007-07-09 Christopher Faylor + + * strsig.cc (__signals): New macro. + (sys_sigabbrev): New array of signal strings, patterned after linux. + (siglist): Use __signals. + * include/cygwin/signal.h (sys_sigabbrev): Define. + * include/cygwin/version.h: Bump API minor version to 177. + 2007-07-09 Corinna Vinschen * dir.cc (closedir): Revert change from 2007-06-29. diff --git a/winsup/cygwin/include/cygwin/signal.h b/winsup/cygwin/include/cygwin/signal.h index 7f34506d7..71fdf7440 100644 --- a/winsup/cygwin/include/cygwin/signal.h +++ b/winsup/cygwin/include/cygwin/signal.h @@ -269,6 +269,8 @@ _sig_func_ptr sigset (int, _sig_func_ptr); int sigqueue(pid_t, int, const union sigval); int siginterrupt (int, int); +extern const char __declspec(dllimport) *sys_sigabbrev[]; + #ifdef __cplusplus } #endif diff --git a/winsup/cygwin/include/cygwin/version.h b/winsup/cygwin/include/cygwin/version.h index a8911bdfd..10a93e28a 100644 --- a/winsup/cygwin/include/cygwin/version.h +++ b/winsup/cygwin/include/cygwin/version.h @@ -317,12 +317,13 @@ details. */ 174: Export stpcpy, stpncpy. 175: Export fdopendir. 176: Export wcstol, wcstoll, wcstoul, wcstoull, wcsxfrm. + 177: Export sys_sigabbrev */ /* Note that we forgot to bump the api for ualarm, strtoll, strtoull */ #define CYGWIN_VERSION_API_MAJOR 0 -#define CYGWIN_VERSION_API_MINOR 176 +#define CYGWIN_VERSION_API_MINOR 177 /* There is also a compatibity version number associated with the shared memory regions. It is incremented when incompatible diff --git a/winsup/cygwin/strsig.cc b/winsup/cygwin/strsig.cc index 6d3c479ec..c8aaa9920 100644 --- a/winsup/cygwin/strsig.cc +++ b/winsup/cygwin/strsig.cc @@ -23,44 +23,58 @@ struct sigdesc const char *str; }; +#define __signals \ + _s(SIGHUP, "Hangup"), /* 1 */ \ + _s(SIGINT, "Interrupt"), /* 2 */ \ + _s(SIGQUIT, "Quit"), /* 3 */ \ + _s(SIGILL, "Illegal instruction"), /* 4 */ \ + _s(SIGTRAP, "Trace/breakpoint trap"), /* 5 */ \ + _s(SIGABRT, "Aborted"), /* 6 */ \ + _s(SIGEMT, "EMT instruction"), /* 7 */ \ + _s(SIGFPE, "Floating point exception"), /* 8 */ \ + _s(SIGKILL, "Killed"), /* 9 */ \ + _s(SIGBUS, "Bus error"), /* 10 */ \ + _s(SIGSEGV, "Segmentation fault"), /* 11 */ \ + _s(SIGSYS, "Bad system call"), /* 12 */ \ + _s(SIGPIPE, "Broken pipe"), /* 13 */ \ + _s(SIGALRM, "Alarm clock"), /* 14 */ \ + _s(SIGTERM, "Terminated"), /* 15 */ \ + _s(SIGURG, "Urgent I/O condition"), /* 16 */ \ + _s(SIGSTOP, "Stopped (signal)"), /* 17 */ \ + _s(SIGTSTP, "Stopped"), /* 18 */ \ + _s(SIGCONT, "Continued"), /* 19 */ \ + _s2(SIGCHLD, "Child exited", /* 20 */ \ + SIGCLD, "Child exited"), \ + _s(SIGTTIN, "Stopped (tty input)"), /* 21 */ \ + _s(SIGTTOU, "Stopped (tty output)"), /* 22 */ \ + _s2(SIGIO, "I/O possible", /* 23 */ \ + SIGPOLL, "I/O possible"), \ + _s(SIGXCPU, "CPU time limit exceeded"), /* 24 */ \ + _s(SIGXFSZ, "File size limit exceeded"), /* 25 */ \ + _s(SIGVTALRM, "Virtual timer expired"), /* 26 */ \ + _s(SIGPROF, "Profiling timer expired"), /* 27 */ \ + _s(SIGWINCH, "Window changed"), /* 28 */ \ + _s(SIGLOST, "Resource lost"), /* 29 */ \ + _s(SIGUSR1, "User defined signal 1"), /* 30 */ \ + _s(SIGUSR2, "User defined signal 2"), /* 31 */ \ + _s2(SIGRTMIN, "Real-time signal 0", /* 32 */ \ + SIGRTMAX, "Real-time signal 0") + +#define _s(n, s) #n +#define _s2(n, s, n1, s1) #n +const char __declspec(dllexport) * sys_sigabbrev[] NO_COPY_INIT = +{ + NULL, + __signals +}; + +#undef _s +#undef _s2 #define _s(n, s) {n, #n, s} +#define _s2(n, s, n1, s1) {n, #n, s}, {n, #n1, #s1} static const sigdesc siglist[] = { - _s(SIGHUP, "Hangup"), - _s(SIGINT, "Interrupt"), - _s(SIGQUIT, "Quit"), - _s(SIGILL, "Illegal instruction"), - _s(SIGTRAP, "Trace/breakpoint trap"), - _s(SIGABRT, "Aborted"), - _s(SIGEMT, "EMT instruction"), - _s(SIGFPE, "Floating point exception"), - _s(SIGKILL, "Killed"), - _s(SIGBUS, "Bus error"), - _s(SIGSEGV, "Segmentation fault"), - _s(SIGSYS, "Bad system call"), - _s(SIGPIPE, "Broken pipe"), - _s(SIGALRM, "Alarm clock"), - _s(SIGTERM, "Terminated"), - _s(SIGURG, "Urgent I/O condition"), - _s(SIGSTOP, "Stopped (signal)"), - _s(SIGTSTP, "Stopped"), - _s(SIGCONT, "Continued"), - _s(SIGCHLD, "Child exited"), - _s(SIGCLD, "Child exited"), - _s(SIGTTIN, "Stopped (tty input)"), - _s(SIGTTOU, "Stopped (tty output)"), - _s(SIGIO, "I/O possible"), - _s(SIGPOLL, "I/O possible"), - _s(SIGXCPU, "CPU time limit exceeded"), - _s(SIGXFSZ, "File size limit exceeded"), - _s(SIGVTALRM, "Virtual timer expired"), - _s(SIGPROF, "Profiling timer expired"), - _s(SIGWINCH, "Window changed"), - _s(SIGLOST, "Resource lost"), - _s(SIGUSR1, "User defined signal 1"), - _s(SIGUSR2, "User defined signal 2"), - _s(SIGRTMIN, "Real-time signal 0"), - _s(SIGRTMAX, "Real-time signal 0"), + __signals, {0, NULL, NULL} }; diff --git a/winsup/utils/ChangeLog b/winsup/utils/ChangeLog index 7a0c80d53..ca410f189 100644 --- a/winsup/utils/ChangeLog +++ b/winsup/utils/ChangeLog @@ -1,3 +1,9 @@ +2007-07-09 Christopher Faylor + + * Makefile.in (kill.exe): Remove reliance on libiberty. + * kill.cc (strsigno): New function patterned after libiberty but using + newly exported cygwin array. + 2007-06-03 Christopher Faylor * cygcheck.cc (pathlike): New class. diff --git a/winsup/utils/Makefile.in b/winsup/utils/Makefile.in index b8f86d8b4..10f7d6550 100644 --- a/winsup/utils/Makefile.in +++ b/winsup/utils/Makefile.in @@ -166,7 +166,7 @@ else $(MINGW_CXX) $c -o $(@D)/$(basename $@)$o $(MINGW_CXXFLAGS) -I$(updir) $< endif -kill.exe: kill.o $(bupdir1)/libiberty/strsignal.o +kill.exe: kill.o ifdef VERBOSE $(CXX) -o $@ $^ -B$(cygwin_build)/ $(ALL_LDFLAGS) $(KILL_LIB) else diff --git a/winsup/utils/kill.cc b/winsup/utils/kill.cc index 2ff41545c..f43ef7762 100644 --- a/winsup/utils/kill.cc +++ b/winsup/utils/kill.cc @@ -34,8 +34,6 @@ static struct option longopts[] = static char opts[] = "hl::fs:v"; -extern "C" const char *strsigno (int); - static void usage (FILE *where = stderr) { @@ -76,6 +74,16 @@ Compiled on %s\n\ ", prog_name, len, v, __DATE__); } +static const char * +strsigno (int signo) +{ + if (signo >= 0 && signo < NSIG) + return sys_sigabbrev[signo]; + static char buf[sizeof ("Unknown signal") + 32]; + sprintf (buf, "Unknown signal %d", signo); + return buf; +} + static int getsig (const char *in_sig) {