about summary refs log tree commit diff
path: root/sysdeps/unix/sysv/linux/hppa
diff options
context:
space:
mode:
authorZack Weinberg <zackw@panix.com>2017-06-03 16:22:24 -0400
committerZack Weinberg <zackw@panix.com>2017-06-20 20:32:50 -0400
commit8082d91e1c449e0cb137468b731004a5e605c8c6 (patch)
tree0d90492e10b87d6d30a0c094fae8d7375439938a /sysdeps/unix/sysv/linux/hppa
parentaf85385f311c574590381f7897461643f8a2fe6f (diff)
downloadglibc-8082d91e1c449e0cb137468b731004a5e605c8c6.tar.gz
glibc-8082d91e1c449e0cb137468b731004a5e605c8c6.tar.xz
glibc-8082d91e1c449e0cb137468b731004a5e605c8c6.zip
Factor out shared definitions from bits/signum.h.
Many of the things defined by bits/signum.h are invariant across all
supported operating systems.  This patch factors out all of them to a
new header bits/signum-generic.h, which each bits/signum.h will include
and then override whichever things need adjustment.  Normally that will
mean, at most, adding or changing a few signal numbers.

A user-visible side effect is that the obsolete signal constant SIGUNUSED
(which is an alias for SIGSYS on all platforms that define it) is no
longer exposed by any version of bits/signum.h.

A side effect only relevant to glibc hackers is that _NSIG is now defined
in terms of __SIGRTMAX, instead of the other way around.  This is because
__SIGRTMAX varies from platform to platform, but _NSIG==__SIGRTMAX+1 is
true universally.  If your platform doesn't support realtime signals,
leave __SIGRTMAX equal to __SIGRTMIN.

I also added a Linux-specific test to make sure that our signal constants
match the ones in <asm/signal.h>, since we can't use that header (it's
not even vaguely namespace-clean).

	* bits/signum-generic.h: Renamed from bits/signum.h.
	Add proper multiple include guard and misuse check.
	Define __SIGRTMIN = __SIGRTMAX = 32, and define _NSIG = __SIGRTMAX+1.
	Move definition of SIGIO to "archaic names for compatibility" section.
	* bits/signum.h: New file which just includes bits/signum-generic.h.
	* sysdeps/unix/bsd/bits/signum.h
	* sysdeps/unix/sysv/linux/bits/signum.h
	* sysdeps/unix/sysv/linux/alpha/bits/signum.h
	* sysdeps/unix/sysv/linux/hppa/bits/signum.h
	* sysdeps/unix/sysv/linux/mips/bits/signum.h
	* sysdeps/unix/sysv/linux/sparc/bits/signum.h
	Just include <bits/signum-generic.h> and then add or adjust
	signal constants.  Do not define SIGUNUSED, SIGRTMIN, or SIGRTMAX.

	* signal/Makefile: Install bits/signum-generic.h.
	* signal/signal.h: Define SIGRTMIN and SIGRTMAX here.

	* sysdeps/generic/siglist.h: SIGSYS and SIGWINCH are
	universal.  Prefer SIGPOLL to SIGIO. Simplify #ifdeffage.

	* sysdeps/unix/sysv/linux/tst-signal-numbers.sh: New test.
	* sysdeps/unix/sysv/linux/Makefile: Run it.
Diffstat (limited to 'sysdeps/unix/sysv/linux/hppa')
-rw-r--r--sysdeps/unix/sysv/linux/hppa/bits/signum.h110
1 files changed, 48 insertions, 62 deletions
diff --git a/sysdeps/unix/sysv/linux/hppa/bits/signum.h b/sysdeps/unix/sysv/linux/hppa/bits/signum.h
index 20c0b60c9f..5f54d1c893 100644
--- a/sysdeps/unix/sysv/linux/hppa/bits/signum.h
+++ b/sysdeps/unix/sysv/linux/hppa/bits/signum.h
@@ -16,74 +16,60 @@
    License along with the GNU C Library.  If not, see
    <http://www.gnu.org/licenses/>.  */
 
-#ifdef	_SIGNAL_H
+#ifndef _BITS_SIGNUM_H
+#define _BITS_SIGNUM_H 1
 
-/* Fake signal functions.  */
-#define SIG_ERR	((__sighandler_t) -1)		/* Error return.  */
-#define SIG_DFL	((__sighandler_t) 0)		/* Default action.  */
-#define SIG_IGN	((__sighandler_t) 1)		/* Ignore signal.  */
-
-#ifdef __USE_XOPEN
-# define SIG_HOLD	((__sighandler_t) 2)	/* Add signal to hold mask.  */
+#ifndef _SIGNAL_H
+#error "Never include <bits/signum.h> directly; use <signal.h> instead."
 #endif
 
+#include <bits/signum-generic.h>
 
-/* Signals.  */
-#define	SIGHUP		1	/* Hangup (POSIX).  */
-#define	SIGINT		2	/* Interrupt (ANSI).  */
-#define	SIGQUIT		3	/* Quit (POSIX).  */
-#define	SIGILL		4	/* Illegal instruction (ANSI).  */
-#define	SIGTRAP		5	/* Trace trap (POSIX).  */
-#define	SIGABRT		6	/* Abort (ANSI).  */
-#define	SIGIOT		6	/* IOT trap (4.2 BSD).  */
-#define	SIGSTKFLT	7	/* Stack fault.  */
-#define	SIGFPE		8	/* Floating-point exception (ANSI).  */
-#define	SIGKILL		9	/* Kill, unblockable (POSIX).  */
-#define	SIGBUS		10	/* BUS error (4.2 BSD).  */
-#define	SIGSEGV		11	/* Segmentation violation (ANSI).  */
-#define	SIGXCPU		12	/* CPU limit exceeded (4.2 BSD).  */
-#define	SIGPIPE		13	/* Broken pipe (POSIX).  */
-#define	SIGALRM		14	/* Alarm clock (POSIX).  */
-#define	SIGTERM		15	/* Termination (ANSI).  */
-#define	SIGUSR1		16	/* User-defined signal 1 (POSIX).  */
-#define SIGUSR2		17	/* User-defined signal 2 (POSIX).  */
-#define	SIGCLD		SIGCHLD	/* Same as SIGCHLD (System V).  */
-#define	SIGCHLD		18	/* Child status has changed (POSIX).  */
-#define	SIGPWR		19	/* Power failure restart (System V).  */
-#define	SIGVTALRM	20	/* Virtual alarm clock (4.2 BSD).  */
-#define	SIGPROF		21	/* Profiling alarm clock (4.2 BSD).  */
-#define	SIGPOLL		SIGIO	/* Pollable event occurred (System V).  */
-#define	SIGIO		22	/* I/O now possible (4.2 BSD).  */
-#define	SIGWINCH	23	/* Window size change (4.3 BSD, Sun).  */
-#define	SIGSTOP		24	/* Stop, unblockable (POSIX).  */
-#define	SIGTSTP		25	/* Keyboard stop (POSIX).  */
-#define	SIGCONT		26	/* Continue (POSIX).  */
-#define	SIGTTIN		27	/* Background read from tty (POSIX).  */
-#define	SIGTTOU		28	/* Background write to tty (POSIX).  */
-#define	SIGURG		29	/* Urgent condition on socket (4.2 BSD).  */
-#define	SIGXFSZ		30	/* File size limit exceeded (4.2 BSD).  */
-#define SIGSYS		31	/* Bad system call.  */
-#define SIGUNUSED	31
+/* Adjustments and additions to the signal number constants for
+   Linux/HPPA.  These values were originally chosen for HP/UX
+   compatibility, but were renumbered as of kernel 3.17 and glibc 2.21
+   to accommodate software (notably systemd) that assumed at least 29
+   real-time signal numbers would be available.  SIGEMT and SIGLOST
+   were removed, and the values of SIGSTKFLT, SIGXCPU, XIGXFSZ, and
+   SIGSYS were changed, enabling __SIGRTMIN to be 32.  */
 
-#define	_NSIG		65	/* Biggest signal number + 1
-				   (including real-time signals).  */
+#define	SIGSTKFLT	 7	/* Stack fault (obsolete).  */
+#define	SIGPWR		19	/* Power failure imminent.  */
 
-#define SIGRTMIN        (__libc_current_sigrtmin ())
-#define SIGRTMAX        (__libc_current_sigrtmax ())
+#undef	SIGXCPU
+#define	SIGXCPU		12
+#undef	SIGUSR1
+#define	SIGUSR1		16
+#undef	SIGUSR2
+#define SIGUSR2		17
+#undef	SIGCHLD
+#define	SIGCHLD		18
+#undef	SIGVTALRM
+#define	SIGVTALRM	20
+#undef	SIGPROF
+#define	SIGPROF		21
+#undef	SIGPOLL
+#define	SIGPOLL		22
+#undef	SIGWINCH
+#define	SIGWINCH	23
+#undef	SIGSTOP
+#define	SIGSTOP		24
+#undef	SIGTSTP
+#define	SIGTSTP		25
+#undef	SIGCONT
+#define	SIGCONT		26
+#undef	SIGTTIN
+#define	SIGTTIN		27
+#undef	SIGTTOU
+#define	SIGTTOU		28
+#undef	SIGURG
+#define	SIGURG		29
+#undef	SIGXFSZ
+#define	SIGXFSZ		30
+#undef	SIGSYS
+#define SIGSYS		31
 
-/* These are the hard limits of the kernel.  These values should not be
-   used directly at user level.  */
-/* In the Linux kernel version 3.17, and glibc 2.21, the signal numbers
-   were rearranged in order to make hppa like every other arch. Previously
-   we started __SIGRTMIN at 37, and that meant several pieces of important
-   software, including systemd, would fail to build. To support systemd we
-   removed SIGEMT and SIGLOST, and rearranged the others according to
-   expected values. This is technically an ABI incompatible change, but
-   because zero applications use SIGSTKFLT, SIGXCPU, SIGXFSZ and SIGSYS
-   nothing broke.  Nothing uses SIGEMT and SIGLOST, and they were present
-   for HPUX compatibility which is no longer supported.  Thus because
-   nothing breaks we don't do any compatibility work here.  */
-#define __SIGRTMIN	32	/* Kernel > 3.17.  */
-#define __SIGRTMAX	(_NSIG - 1)
+#undef	__SIGRTMAX
+#define __SIGRTMAX	64
 
 #endif	/* <signal.h> included.  */