* [PATCH 1/3] signal: Add signum-{generic,arch}.h
@ 2020-04-23 19:26 Adhemerval Zanella
2020-04-23 19:26 ` [PATCH 2/3] mips: Fix SIGRTMAX definition Adhemerval Zanella
2020-04-23 19:26 ` [PATCH 3/3] linux: Fix __NSIG_WORDS and add __NSIG_BYTES Adhemerval Zanella
0 siblings, 2 replies; 5+ messages in thread
From: Adhemerval Zanella @ 2020-04-23 19:26 UTC (permalink / raw)
To: libc-alpha
It refactor how signals are defined by each architecture. Instead of
include a generic header (bits/signum-generic.h) and undef non-default
values in an arch specific header (bits/signum.h) the new scheme uses a
common definition (bits/signum-generic.h) and each architectures add
its specific definitions on a new header (bits/signum-arch.h).
For Linux it requires copy some system default definitions to alpha,
hppa, and sparc. They are historical ones and newer ports uses
the generic Linux signum-arch.h.
For Hurd the BSD signum is removed and moved to a new header (it is
used currently only on Hurd).
Checked on a build against all affected ABIs.
---
bits/signum-arch.h | 59 ++++++++++++++++
bits/signum-generic.h | 29 ++------
bits/signum.h | 32 ---------
signal/Makefile | 2 +-
signal/signal.h | 2 +-
sysdeps/mach/hurd/bits/signum-arch.h | 65 +++++++++++++++++
sysdeps/unix/bsd/bits/signum.h | 35 ----------
.../unix/sysv/linux/alpha/bits/signum-arch.h | 67 ++++++++++++++++++
sysdeps/unix/sysv/linux/alpha/bits/signum.h | 40 -----------
sysdeps/unix/sysv/linux/bits/signum-arch.h | 64 +++++++++++++++++
sysdeps/unix/sysv/linux/bits/signum.h | 58 ---------------
.../hppa/bits/{signum.h => signum-arch.h} | 70 +++++++++----------
.../unix/sysv/linux/mips/bits/signum-arch.h | 65 +++++++++++++++++
sysdeps/unix/sysv/linux/mips/bits/signum.h | 68 ------------------
.../unix/sysv/linux/sparc/bits/signum-arch.h | 66 +++++++++++++++++
sysdeps/unix/sysv/linux/sparc/bits/signum.h | 39 -----------
16 files changed, 424 insertions(+), 337 deletions(-)
create mode 100644 bits/signum-arch.h
delete mode 100644 bits/signum.h
create mode 100644 sysdeps/mach/hurd/bits/signum-arch.h
delete mode 100644 sysdeps/unix/bsd/bits/signum.h
create mode 100644 sysdeps/unix/sysv/linux/alpha/bits/signum-arch.h
delete mode 100644 sysdeps/unix/sysv/linux/alpha/bits/signum.h
create mode 100644 sysdeps/unix/sysv/linux/bits/signum-arch.h
delete mode 100644 sysdeps/unix/sysv/linux/bits/signum.h
rename sysdeps/unix/sysv/linux/hppa/bits/{signum.h => signum-arch.h} (50%)
create mode 100644 sysdeps/unix/sysv/linux/mips/bits/signum-arch.h
delete mode 100644 sysdeps/unix/sysv/linux/mips/bits/signum.h
create mode 100644 sysdeps/unix/sysv/linux/sparc/bits/signum-arch.h
delete mode 100644 sysdeps/unix/sysv/linux/sparc/bits/signum.h
diff --git a/bits/signum-arch.h b/bits/signum-arch.h
new file mode 100644
index 0000000000..df96e92c01
--- /dev/null
+++ b/bits/signum-arch.h
@@ -0,0 +1,59 @@
+/* Signal number constants. Specific architecture definitions.
+ Copyright (C) 2020 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#ifndef _BITS_SIGNUM_ARCH_H
+#define _BITS_SIGNUM_ARCH_H 1
+
+#ifndef _SIGNAL_H
+#error "Never include <bits/signum-generic.h> directly; use <signal.h> instead."
+#endif
+
+/* Historical signals specified by POSIX. */
+#define SIGBUS 10 /* Bus error. */
+#define SIGSYS 12 /* Bad system call. */
+
+/* New(er) POSIX signals (1003.1-2008, 1003.1-2013). */
+#define SIGURG 16 /* Urgent data is available at a socket. */
+#define SIGSTOP 17 /* Stop, unblockable. */
+#define SIGTSTP 18 /* Keyboard stop. */
+#define SIGCONT 19 /* Continue. */
+#define SIGCHLD 20 /* Child terminated or stopped. */
+#define SIGTTIN 21 /* Background read from control terminal. */
+#define SIGTTOU 22 /* Background write to control terminal. */
+#define SIGPOLL 23 /* Pollable event occurred (System V). */
+#define SIGXCPU 24 /* CPU time limit exceeded. */
+#define SIGVTALRM 26 /* Virtual timer expired. */
+#define SIGPROF 27 /* Profiling timer expired. */
+#define SIGXFSZ 25 /* File size limit exceeded. */
+#define SIGUSR1 30 /* User-defined signal 1. */
+#define SIGUSR2 31 /* User-defined signal 2. */
+
+/* Nonstandard signals found in all modern POSIX systems
+ (including both BSD and Linux). */
+#define SIGWINCH 28 /* Window size change (4.3 BSD, Sun). */
+
+/* Archaic names for compatibility. */
+#define SIGIO SIGPOLL /* I/O now possible (4.2 BSD). */
+#define SIGIOT SIGABRT /* IOT instruction, abort() on a PDP-11. */
+#define SIGCLD SIGCHLD /* Old System V name */
+
+/* By default no real-time signals are supported. */
+#define __SIGRTMIN 32
+#define __SIGRTMAX __SIGRTMIN
+
+#endif
diff --git a/bits/signum-generic.h b/bits/signum-generic.h
index 504e5fb8c8..9b0992b5d5 100644
--- a/bits/signum-generic.h
+++ b/bits/signum-generic.h
@@ -57,35 +57,13 @@
#define SIGQUIT 3 /* Quit. */
#define SIGTRAP 5 /* Trace/breakpoint trap. */
#define SIGKILL 9 /* Killed. */
-#define SIGBUS 10 /* Bus error. */
-#define SIGSYS 12 /* Bad system call. */
#define SIGPIPE 13 /* Broken pipe. */
#define SIGALRM 14 /* Alarm clock. */
-/* New(er) POSIX signals (1003.1-2008, 1003.1-2013). */
-#define SIGURG 16 /* Urgent data is available at a socket. */
-#define SIGSTOP 17 /* Stop, unblockable. */
-#define SIGTSTP 18 /* Keyboard stop. */
-#define SIGCONT 19 /* Continue. */
-#define SIGCHLD 20 /* Child terminated or stopped. */
-#define SIGTTIN 21 /* Background read from control terminal. */
-#define SIGTTOU 22 /* Background write to control terminal. */
-#define SIGPOLL 23 /* Pollable event occurred (System V). */
-#define SIGXCPU 24 /* CPU time limit exceeded. */
-#define SIGXFSZ 25 /* File size limit exceeded. */
-#define SIGVTALRM 26 /* Virtual timer expired. */
-#define SIGPROF 27 /* Profiling timer expired. */
-#define SIGUSR1 30 /* User-defined signal 1. */
-#define SIGUSR2 31 /* User-defined signal 2. */
-
-/* Nonstandard signals found in all modern POSIX systems
- (including both BSD and Linux). */
-#define SIGWINCH 28 /* Window size change (4.3 BSD, Sun). */
-
/* Archaic names for compatibility. */
#define SIGIO SIGPOLL /* I/O now possible (4.2 BSD). */
#define SIGIOT SIGABRT /* IOT instruction, abort() on a PDP-11. */
-#define SIGCLD SIGCHLD /* Old System V name */
+#define SIGCLD SIGCHLD /* Old System V name */
/* Not all systems support real-time signals. bits/signum.h indicates
that they are supported by overriding __SIGRTMAX to a value greater
@@ -93,8 +71,9 @@
but some real-time signals may be used internally by glibc. Do not
use these constants in application code; use SIGRTMIN and SIGRTMAX
(defined in signal.h) instead. */
-#define __SIGRTMIN 32
-#define __SIGRTMAX __SIGRTMIN
+
+/* Include system specific bits. */
+#include <bits/signum-arch.h>
/* Biggest signal number + 1 (including real-time signals). */
#define _NSIG (__SIGRTMAX + 1)
diff --git a/bits/signum.h b/bits/signum.h
deleted file mode 100644
index 183e3c0545..0000000000
--- a/bits/signum.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Signal number constants. Generic version.
- Copyright (C) 2017-2020 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <https://www.gnu.org/licenses/>. */
-
-#ifndef _BITS_SIGNUM_H
-#define _BITS_SIGNUM_H 1
-
-#ifndef _SIGNAL_H
-#error "Never include <bits/signum.h> directly; use <signal.h> instead."
-#endif
-
-#include <bits/signum-generic.h>
-
-/* This operating system does not need to override any of the generic
- signal number assignments in bits/signum-generic.h, nor to add any
- additional signal constants. */
-
-#endif /* bits/signum.h. */
diff --git a/signal/Makefile b/signal/Makefile
index f3c19e2992..2ec3ddd74f 100644
--- a/signal/Makefile
+++ b/signal/Makefile
@@ -23,7 +23,7 @@ subdir := signal
include ../Makeconfig
headers := signal.h sys/signal.h \
- bits/signum.h bits/signum-generic.h \
+ bits/signum-generic.h bits/signum-arch.h \
bits/sigcontext.h bits/sigaction.h \
bits/sigevent-consts.h bits/siginfo-consts.h \
bits/sigstack.h bits/sigthread.h bits/ss_flags.h \
diff --git a/signal/signal.h b/signal/signal.h
index 40825e95ec..fa8de963f8 100644
--- a/signal/signal.h
+++ b/signal/signal.h
@@ -27,7 +27,7 @@
__BEGIN_DECLS
#include <bits/types.h>
-#include <bits/signum.h>
+#include <bits/signum-generic.h>
#include <bits/types/sig_atomic_t.h>
diff --git a/sysdeps/mach/hurd/bits/signum-arch.h b/sysdeps/mach/hurd/bits/signum-arch.h
new file mode 100644
index 0000000000..a267358227
--- /dev/null
+++ b/sysdeps/mach/hurd/bits/signum-arch.h
@@ -0,0 +1,65 @@
+/* Signal number constants. Specific architecture definitions.
+ Copyright (C) 2020 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#ifndef _BITS_SIGNUM_ARCH_H
+#define _BITS_SIGNUM_ARCH_H 1
+
+#ifndef _SIGNAL_H
+#error "Never include <bits/signum-arch.h> directly; use <signal.h> instead."
+#endif
+
+/* Historical signals specified by POSIX. */
+#define SIGBUS 10 /* Bus error. */
+#define SIGSYS 12 /* Bad system call. */
+
+/* Adjustments and additions to the signal number constants for
+ 4.2 or 4.3 BSD-derived Unix systems. */
+#define SIGEMT 7 /* Emulator trap (4.2 BSD). */
+#define SIGINFO 29 /* Information request (4.4 BSD). */
+#define SIGLOST 32 /* Resource lost (Sun); server died (GNU). */
+
+/* New(er) POSIX signals (1003.1-2008, 1003.1-2013). */
+#define SIGURG 16 /* Urgent data is available at a socket. */
+#define SIGSTOP 17 /* Stop, unblockable. */
+#define SIGTSTP 18 /* Keyboard stop. */
+#define SIGCONT 19 /* Continue. */
+#define SIGCHLD 20 /* Child terminated or stopped. */
+#define SIGTTIN 21 /* Background read from control terminal. */
+#define SIGTTOU 22 /* Background write to control terminal. */
+#define SIGPOLL 23 /* Pollable event occurred (System V). */
+#define SIGXCPU 24 /* CPU time limit exceeded. */
+#define SIGVTALRM 26 /* Virtual timer expired. */
+#define SIGPROF 27 /* Profiling timer expired. */
+#define SIGXFSZ 25 /* File size limit exceeded. */
+#define SIGUSR1 30 /* User-defined signal 1. */
+#define SIGUSR2 31 /* User-defined signal 2. */
+
+/* Nonstandard signals found in all modern POSIX systems
+ (including both BSD and Linux). */
+#define SIGWINCH 28 /* Window size change (4.3 BSD, Sun). */
+
+/* Archaic names for compatibility. */
+#define SIGIO SIGPOLL /* I/O now possible (4.2 BSD). */
+#define SIGIOT SIGABRT /* IOT instruction, abort() on a PDP-11. */
+#define SIGCLD SIGCHLD /* Old System V name */
+
+/* No real-time signals are supported. */
+#define __SIGRTMIN 32
+#define __SIGRTMAX __SIGRTMIN
+
+#endif
diff --git a/sysdeps/unix/bsd/bits/signum.h b/sysdeps/unix/bsd/bits/signum.h
deleted file mode 100644
index a8d47af038..0000000000
--- a/sysdeps/unix/bsd/bits/signum.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Signal number definitions. BSD version.
- Copyright (C) 1991-2020 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <https://www.gnu.org/licenses/>. */
-
-#ifndef _BITS_SIGNUM_H
-#define _BITS_SIGNUM_H 1
-
-#ifndef _SIGNAL_H
-#error "Never include <bits/signum.h> directly; use <signal.h> instead."
-#endif
-
-#include <bits/signum-generic.h>
-
-/* Adjustments and additions to the signal number constants for
- 4.2 or 4.3 BSD-derived Unix systems. */
-
-#define SIGEMT 7 /* Emulator trap (4.2 BSD). */
-#define SIGINFO 29 /* Information request (4.4 BSD). */
-#define SIGLOST 32 /* Resource lost (Sun); server died (GNU). */
-
-#endif /* bits/signum.h. */
diff --git a/sysdeps/unix/sysv/linux/alpha/bits/signum-arch.h b/sysdeps/unix/sysv/linux/alpha/bits/signum-arch.h
new file mode 100644
index 0000000000..a28f181916
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/alpha/bits/signum-arch.h
@@ -0,0 +1,67 @@
+/* Signal number definitions. Linux/Alpha version.
+ Copyright (C) 1996-2020 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library. If not, see
+ <https://www.gnu.org/licenses/>. */
+
+#ifndef _BITS_SIGNUM_ARHC_H
+#define _BITS_SIGNUM_ARCH_H 1
+
+#ifndef _SIGNAL_H
+#error "Never include <bits/signum-arch.h> directly; use <signal.h> instead."
+#endif
+
+/* Adjustments and additions to the signal number constants for
+ Linux/Alpha. Signal values on this platform were chosen for OSF/1
+ binary compatibility, and are therefore almost identical to the
+ BSD-derived defaults. */
+
+#define SIGEMT 7 /* Emulator trap (4.2 BSD). */
+#define SIGINFO 29 /* Information request (BSD). */
+#define SIGPWR SIGINFO /* Power failure imminent (System V). */
+
+/* Historical signals specified by POSIX. */
+#define SIGBUS 10 /* Bus error. */
+#define SIGSYS 12 /* Bad system call. */
+
+/* New(er) POSIX signals (1003.1-2008, 1003.1-2013). */
+#define SIGURG 16 /* Urgent data is available at a socket. */
+#define SIGSTOP 17 /* Stop, unblockable. */
+#define SIGTSTP 18 /* Keyboard stop. */
+#define SIGCONT 19 /* Continue. */
+#define SIGCHLD 20 /* Child terminated or stopped. */
+#define SIGTTIN 21 /* Background read from control terminal. */
+#define SIGTTOU 22 /* Background write to control terminal. */
+#define SIGPOLL 23 /* Pollable event occurred (System V). */
+#define SIGXCPU 24 /* CPU time limit exceeded. */
+#define SIGVTALRM 26 /* Virtual timer expired. */
+#define SIGPROF 27 /* Profiling timer expired. */
+#define SIGXFSZ 25 /* File size limit exceeded. */
+#define SIGUSR1 30 /* User-defined signal 1. */
+#define SIGUSR2 31 /* User-defined signal 2. */
+
+/* Nonstandard signals found in all modern POSIX systems
+ (including both BSD and Linux). */
+#define SIGWINCH 28
+
+/* Archaic names for compatibility. */
+#define SIGIO SIGPOLL /* I/O now possible (4.2 BSD). */
+#define SIGIOT SIGABRT /* IOT instruction, abort() on a PDP-11. */
+#define SIGCLD SIGCHLD /* Old System V name */
+
+#define __SIGRTMIN 32
+#define __SIGRTMAX 64
+
+#endif /* <signal.h> included. */
diff --git a/sysdeps/unix/sysv/linux/alpha/bits/signum.h b/sysdeps/unix/sysv/linux/alpha/bits/signum.h
deleted file mode 100644
index 63add0e3db..0000000000
--- a/sysdeps/unix/sysv/linux/alpha/bits/signum.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Signal number definitions. Linux/Alpha version.
- Copyright (C) 1996-2020 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <https://www.gnu.org/licenses/>. */
-
-#ifndef _BITS_SIGNUM_H
-#define _BITS_SIGNUM_H 1
-
-#ifndef _SIGNAL_H
-#error "Never include <bits/signum.h> directly; use <signal.h> instead."
-#endif
-
-#include <bits/signum-generic.h>
-
-/* Adjustments and additions to the signal number constants for
- Linux/Alpha. Signal values on this platform were chosen for OSF/1
- binary compatibility, and are therefore almost identical to the
- BSD-derived defaults. */
-
-#define SIGEMT 7 /* Emulator trap (4.2 BSD). */
-#define SIGINFO 29 /* Information request (BSD). */
-#define SIGPWR SIGINFO /* Power failure imminent (System V). */
-
-#undef __SIGRTMAX
-#define __SIGRTMAX 64
-
-#endif /* <signal.h> included. */
diff --git a/sysdeps/unix/sysv/linux/bits/signum-arch.h b/sysdeps/unix/sysv/linux/bits/signum-arch.h
new file mode 100644
index 0000000000..0dfe3d954d
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/bits/signum-arch.h
@@ -0,0 +1,64 @@
+/* Signal number definitions. Linux version.
+ Copyright (C) 1995-2020 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#ifndef _BITS_SIGNUM_ARHC_H
+#define _BITS_SIGNUM_ARCH_H 1
+
+#ifndef _SIGNAL_H
+#error "Never include <bits/signum-arch.h> directly; use <signal.h> instead."
+#endif
+
+/* Adjustments and additions to the signal number constants for
+ most Linux systems. */
+
+#define SIGSTKFLT 16 /* Stack fault (obsolete). */
+#define SIGPWR 30 /* Power failure imminent. */
+
+/* Historical signals specified by POSIX. */
+#define SIGBUS 7 /* Bus error. */
+#define SIGSYS 31 /* Bad system call. */
+
+/* New(er) POSIX signals (1003.1-2008, 1003.1-2013). */
+#define SIGURG 23 /* Urgent data is available at a socket. */
+#define SIGSTOP 19 /* Stop, unblockable. */
+#define SIGTSTP 20 /* Keyboard stop. */
+#define SIGCONT 18 /* Continue. */
+#define SIGCHLD 17 /* Child terminated or stopped. */
+#define SIGTTIN 21 /* Background read from control terminal. */
+#define SIGTTOU 22 /* Background write to control terminal. */
+#define SIGPOLL 29 /* Pollable event occurred (System V). */
+#define SIGXFSZ 25 /* File size limit exceeded. */
+#define SIGXCPU 24 /* CPU time limit exceeded. */
+#define SIGVTALRM 26 /* Virtual timer expired. */
+#define SIGPROF 27 /* Profiling timer expired. */
+#define SIGUSR1 10 /* User-defined signal 1. */
+#define SIGUSR2 12 /* User-defined signal 2. */
+
+/* Nonstandard signals found in all modern POSIX systems
+ (including both BSD and Linux). */
+#define SIGWINCH 28 /* Window size change (4.3 BSD, Sun). */
+
+/* Archaic names for compatibility. */
+#define SIGIO SIGPOLL /* I/O now possible (4.2 BSD). */
+#define SIGIOT SIGABRT /* IOT instruction, abort() on a PDP-11. */
+#define SIGCLD SIGCHLD /* Old System V name */
+
+#define __SIGRTMIN 32
+#define __SIGRTMAX 64
+
+#endif /* <signal.h> included. */
diff --git a/sysdeps/unix/sysv/linux/bits/signum.h b/sysdeps/unix/sysv/linux/bits/signum.h
deleted file mode 100644
index 423fd8be70..0000000000
--- a/sysdeps/unix/sysv/linux/bits/signum.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* Signal number definitions. Linux version.
- Copyright (C) 1995-2020 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <https://www.gnu.org/licenses/>. */
-
-#ifndef _BITS_SIGNUM_H
-#define _BITS_SIGNUM_H 1
-
-#ifndef _SIGNAL_H
-#error "Never include <bits/signum.h> directly; use <signal.h> instead."
-#endif
-
-#include <bits/signum-generic.h>
-
-/* Adjustments and additions to the signal number constants for
- most Linux systems. */
-
-#define SIGSTKFLT 16 /* Stack fault (obsolete). */
-#define SIGPWR 30 /* Power failure imminent. */
-
-#undef SIGBUS
-#define SIGBUS 7
-#undef SIGUSR1
-#define SIGUSR1 10
-#undef SIGUSR2
-#define SIGUSR2 12
-#undef SIGCHLD
-#define SIGCHLD 17
-#undef SIGCONT
-#define SIGCONT 18
-#undef SIGSTOP
-#define SIGSTOP 19
-#undef SIGTSTP
-#define SIGTSTP 20
-#undef SIGURG
-#define SIGURG 23
-#undef SIGPOLL
-#define SIGPOLL 29
-#undef SIGSYS
-#define SIGSYS 31
-
-#undef __SIGRTMAX
-#define __SIGRTMAX 64
-
-#endif /* <signal.h> included. */
diff --git a/sysdeps/unix/sysv/linux/hppa/bits/signum.h b/sysdeps/unix/sysv/linux/hppa/bits/signum-arch.h
similarity index 50%
rename from sysdeps/unix/sysv/linux/hppa/bits/signum.h
rename to sysdeps/unix/sysv/linux/hppa/bits/signum-arch.h
index 2210304e37..20975b9c94 100644
--- a/sysdeps/unix/sysv/linux/hppa/bits/signum.h
+++ b/sysdeps/unix/sysv/linux/hppa/bits/signum-arch.h
@@ -16,15 +16,13 @@
License along with the GNU C Library. If not, see
<https://www.gnu.org/licenses/>. */
-#ifndef _BITS_SIGNUM_H
-#define _BITS_SIGNUM_H 1
+#ifndef _BITS_SIGNUM_ARCH_H
+#define _BITS_SIGNUM_ARCH_H 1
#ifndef _SIGNAL_H
-#error "Never include <bits/signum.h> directly; use <signal.h> instead."
+#error "Never include <bits/signum-arch.h> directly; use <signal.h> instead."
#endif
-#include <bits/signum-generic.h>
-
/* 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
@@ -36,40 +34,36 @@
#define SIGSTKFLT 7 /* Stack fault (obsolete). */
#define SIGPWR 19 /* Power failure imminent. */
-#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
+/* Historical signals specified by POSIX. */
+#define SIGBUS 10 /* Bus error. */
+#define SIGSYS 31 /* Bad system call. */
+
+/* New(er) POSIX signals (1003.1-2008, 1003.1-2013). */
+#define SIGURG 29 /* Urgent data is available at a socket. */
+#define SIGSTOP 24 /* Stop, unblockable. */
+#define SIGTSTP 25 /* Keyboard stop. */
+#define SIGCONT 26 /* Continue. */
+#define SIGCHLD 18 /* Child terminated or stopped. */
+#define SIGTTIN 27 /* Background read from control terminal. */
+#define SIGTTOU 28 /* Background write to control terminal. */
+#define SIGPOLL 22 /* Pollable event occurred (System V). */
+#define SIGXCPU 12 /* CPU time limit exceeded. */
+#define SIGVTALRM 20 /* Virtual timer expired. */
+#define SIGPROF 21 /* Profiling timer expired. */
+#define SIGXFSZ 30 /* File size limit exceeded. */
+#define SIGUSR1 16 /* User-defined signal 1. */
+#define SIGUSR2 17 /* User-defined signal 2. */
+
+/* Nonstandard signals found in all modern POSIX systems
+ (including both BSD and Linux). */
+#define SIGWINCH 23 /* Window size change (4.3 BSD, Sun). */
+
+/* Archaic names for compatibility. */
+#define SIGIO SIGPOLL /* I/O now possible (4.2 BSD). */
+#define SIGIOT SIGABRT /* IOT instruction, abort() on a PDP-11. */
+#define SIGCLD SIGCHLD /* Old System V name */
-#undef __SIGRTMAX
+#define __SIGRTMIN 32
#define __SIGRTMAX 64
#endif /* <signal.h> included. */
diff --git a/sysdeps/unix/sysv/linux/mips/bits/signum-arch.h b/sysdeps/unix/sysv/linux/mips/bits/signum-arch.h
new file mode 100644
index 0000000000..36b1d62e35
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/mips/bits/signum-arch.h
@@ -0,0 +1,65 @@
+/* Signal number definitions. Linux/MIPS version.
+ Copyright (C) 1995-2020 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library. If not, see
+ <https://www.gnu.org/licenses/>. */
+
+#ifndef _BITS_SIGNUM_H
+#define _BITS_SIGNUM_H 1
+
+#ifndef _SIGNAL_H
+#error "Never include <bits/signum.h> directly; use <signal.h> instead."
+#endif
+
+/* Adjustments and additions to the signal number constants for
+ Linux/MIPS. */
+
+#define SIGEMT 7 /* Emulator trap. */
+#define SIGPWR 19 /* Power failure imminent. */
+
+/* Historical signals specified by POSIX. */
+#define SIGBUS 10 /* Bus error. */
+#define SIGSYS 12 /* Bad system call. */
+
+/* New(er) POSIX signals (1003.1-2008, 1003.1-2013). */
+#define SIGURG 21 /* Urgent data is available at a socket. */
+#define SIGSTOP 23 /* Stop, unblockable. */
+#define SIGTSTP 24 /* Keyboard stop. */
+#define SIGCONT 25 /* Continue. */
+#define SIGCHLD 18 /* Child terminated or stopped. */
+#define SIGTTIN 26 /* Background read from control terminal. */
+#define SIGTTOU 27 /* Background write to control terminal. */
+#define SIGPOLL 22 /* Pollable event occurred (System V). */
+#define SIGXCPU 30 /* CPU time limit exceeded. */
+#define SIGVTALRM 28 /* Virtual timer expired. */
+#define SIGPROF 29 /* Profiling timer expired. */
+#define SIGXFSZ 31 /* File size limit exceeded. */
+#define SIGUSR1 16 /* User-defined signal 1. */
+#define SIGUSR2 17 /* User-defined signal 2. */
+
+/* Nonstandard signals found in all modern POSIX systems
+ (including both BSD and Linux). */
+#define SIGWINCH 20 /* Window size change (4.3 BSD, Sun). */
+
+/* Archaic names for compatibility. */
+#define SIGIO SIGPOLL /* I/O now possible (4.2 BSD). */
+#define SIGIOT SIGABRT /* IOT instruction, abort() on a PDP-11. */
+#define SIGCLD SIGCHLD /* Old System V name */
+
+/* By default no real-time signals are supported. */
+#define __SIGRTMIN 32
+#define __SIGRTMAX 127
+
+#endif /* <signal.h> included. */
diff --git a/sysdeps/unix/sysv/linux/mips/bits/signum.h b/sysdeps/unix/sysv/linux/mips/bits/signum.h
deleted file mode 100644
index f5a5e7b4cd..0000000000
--- a/sysdeps/unix/sysv/linux/mips/bits/signum.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/* Signal number definitions. Linux/MIPS version.
- Copyright (C) 1995-2020 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library. If not, see
- <https://www.gnu.org/licenses/>. */
-
-#ifndef _BITS_SIGNUM_H
-#define _BITS_SIGNUM_H 1
-
-#ifndef _SIGNAL_H
-#error "Never include <bits/signum.h> directly; use <signal.h> instead."
-#endif
-
-#include <bits/signum-generic.h>
-
-/* Adjustments and additions to the signal number constants for
- Linux/MIPS. */
-
-#define SIGEMT 7 /* Emulator trap. */
-#define SIGPWR 19 /* Power failure imminent. */
-
-#undef SIGUSR1
-#define SIGUSR1 16
-#undef SIGUSR2
-#define SIGUSR2 17
-#undef SIGCHLD
-#define SIGCHLD 18
-#undef SIGWINCH
-#define SIGWINCH 20
-#undef SIGURG
-#define SIGURG 21
-#undef SIGPOLL
-#define SIGPOLL 22
-#undef SIGSTOP
-#define SIGSTOP 23
-#undef SIGTSTP
-#define SIGTSTP 24
-#undef SIGCONT
-#define SIGCONT 25
-#undef SIGTTIN
-#define SIGTTIN 26
-#undef SIGTTOU
-#define SIGTTOU 27
-#undef SIGVTALRM
-#define SIGVTALRM 28
-#undef SIGPROF
-#define SIGPROF 29
-#undef SIGXCPU
-#define SIGXCPU 30
-#undef SIGXFSZ
-#define SIGXFSZ 31
-
-#undef __SIGRTMAX
-#define __SIGRTMAX 127
-
-#endif /* <signal.h> included. */
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/signum-arch.h b/sysdeps/unix/sysv/linux/sparc/bits/signum-arch.h
new file mode 100644
index 0000000000..a8b643ce34
--- /dev/null
+++ b/sysdeps/unix/sysv/linux/sparc/bits/signum-arch.h
@@ -0,0 +1,66 @@
+/* Signal number definitions. Linux/SPARC version.
+ Copyright (C) 1996-2020 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#ifndef _BITS_SIGNUM_ARHC_H
+#define _BITS_SIGNUM_ARCH_H 1
+
+#ifndef _SIGNAL_H
+#error "Never include <bits/signum-arch.h> directly; use <signal.h> instead."
+#endif
+
+/* Adjustments and additions to the signal number constants for
+ Linux/SPARC systems. Signal values on this platform were chosen
+ for SunOS binary compatibility. */
+
+#define SIGEMT 7 /* Emulator trap. */
+#define SIGLOST 29 /* Resource lost (Sun); server died (GNU). */
+#define SIGPWR SIGLOST /* Power failure imminent (SysV). */
+
+/* Historical signals specified by POSIX. */
+#define SIGBUS 10 /* Bus error. */
+#define SIGSYS 12 /* Bad system call. */
+
+/* New(er) POSIX signals (1003.1-2008, 1003.1-2013). */
+#define SIGURG 16 /* Urgent data is available at a socket. */
+#define SIGSTOP 17 /* Stop, unblockable. */
+#define SIGTSTP 18 /* Keyboard stop. */
+#define SIGCONT 19 /* Continue. */
+#define SIGCHLD 20 /* Child terminated or stopped. */
+#define SIGTTIN 21 /* Background read from control terminal. */
+#define SIGTTOU 22 /* Background write to control terminal. */
+#define SIGPOLL 23 /* Pollable event occurred (System V). */
+#define SIGXCPU 24 /* CPU time limit exceeded. */
+#define SIGVTALRM 26 /* Virtual timer expired. */
+#define SIGPROF 27 /* Profiling timer expired. */
+#define SIGXFSZ 25 /* File size limit exceeded. */
+#define SIGUSR1 30 /* User-defined signal 1. */
+#define SIGUSR2 31 /* User-defined signal 2. */
+
+/* Nonstandard signals found in all modern POSIX systems
+ (including both BSD and Linux). */
+#define SIGWINCH 28 /* Window size change (4.3 BSD, Sun). */
+
+/* Archaic names for compatibility. */
+#define SIGIO SIGPOLL /* I/O now possible (4.2 BSD). */
+#define SIGIOT SIGABRT /* IOT instruction, abort() on a PDP-11. */
+#define SIGCLD SIGCHLD /* Old System V name */
+
+#define __SIGRTMIN 32
+#define __SIGRTMAX 64
+
+#endif /* <signal.h> included. */
diff --git a/sysdeps/unix/sysv/linux/sparc/bits/signum.h b/sysdeps/unix/sysv/linux/sparc/bits/signum.h
deleted file mode 100644
index 40fb39a435..0000000000
--- a/sysdeps/unix/sysv/linux/sparc/bits/signum.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* Signal number definitions. Linux/SPARC version.
- Copyright (C) 1996-2020 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, see
- <https://www.gnu.org/licenses/>. */
-
-#ifndef _BITS_SIGNUM_H
-#define _BITS_SIGNUM_H 1
-
-#ifndef _SIGNAL_H
-#error "Never include <bits/signum.h> directly; use <signal.h> instead."
-#endif
-
-#include <bits/signum-generic.h>
-
-/* Adjustments and additions to the signal number constants for
- Linux/SPARC systems. Signal values on this platform were chosen
- for SunOS binary compatibility. */
-
-#define SIGEMT 7 /* Emulator trap. */
-#define SIGLOST 29 /* Resource lost (Sun); server died (GNU). */
-#define SIGPWR SIGLOST /* Power failure imminent (SysV). */
-
-#undef __SIGRTMAX
-#define __SIGRTMAX 64
-
-#endif /* <signal.h> included. */
--
2.17.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 2/3] mips: Fix SIGRTMAX definition
2020-04-23 19:26 [PATCH 1/3] signal: Add signum-{generic,arch}.h Adhemerval Zanella
@ 2020-04-23 19:26 ` Adhemerval Zanella
2020-04-23 20:41 ` Joseph Myers
2020-04-23 19:26 ` [PATCH 3/3] linux: Fix __NSIG_WORDS and add __NSIG_BYTES Adhemerval Zanella
1 sibling, 1 reply; 5+ messages in thread
From: Adhemerval Zanella @ 2020-04-23 19:26 UTC (permalink / raw)
To: libc-alpha
MIPS support up to 96 real time signal, instead of current 95. This
increases the NSIG value, however it does not incur in a compat
issue for older programs (which won't access the new element).
The sys_siglist is automatically expanded as well.
Checked with a mips*-linux-gnu build.
---
sysdeps/unix/sysv/linux/mips/bits/signum-arch.h | 2 +-
sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist | 6 +++---
sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist | 6 +++---
sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist | 6 +++---
4 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/sysdeps/unix/sysv/linux/mips/bits/signum-arch.h b/sysdeps/unix/sysv/linux/mips/bits/signum-arch.h
index 36b1d62e35..a9d5f41e66 100644
--- a/sysdeps/unix/sysv/linux/mips/bits/signum-arch.h
+++ b/sysdeps/unix/sysv/linux/mips/bits/signum-arch.h
@@ -60,6 +60,6 @@
/* By default no real-time signals are supported. */
#define __SIGRTMIN 32
-#define __SIGRTMAX 127
+#define __SIGRTMAX 128
#endif /* <signal.h> included. */
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
index a6f99a7369..e0568438b6 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
@@ -2077,7 +2077,7 @@ GLIBC_2.3.2 pthread_cond_signal F
GLIBC_2.3.2 pthread_cond_timedwait F
GLIBC_2.3.2 pthread_cond_wait F
GLIBC_2.3.2 strptime_l F
-GLIBC_2.3.3 _sys_siglist D 0x200
+GLIBC_2.3.3 _sys_siglist D 0x204
GLIBC_2.3.3 gnu_dev_major F
GLIBC_2.3.3 gnu_dev_makedev F
GLIBC_2.3.3 gnu_dev_minor F
@@ -2095,8 +2095,8 @@ GLIBC_2.3.3 remap_file_pages F
GLIBC_2.3.3 sched_getaffinity F
GLIBC_2.3.3 sched_setaffinity F
GLIBC_2.3.3 semtimedop F
-GLIBC_2.3.3 sys_sigabbrev D 0x200
-GLIBC_2.3.3 sys_siglist D 0x200
+GLIBC_2.3.3 sys_sigabbrev D 0x204
+GLIBC_2.3.3 sys_siglist D 0x204
GLIBC_2.3.4 __chk_fail F
GLIBC_2.3.4 __fprintf_chk F
GLIBC_2.3.4 __gets_chk F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
index 99965cfb0f..70e2e9a8c5 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
@@ -2083,7 +2083,7 @@ GLIBC_2.3.2 pthread_cond_signal F
GLIBC_2.3.2 pthread_cond_timedwait F
GLIBC_2.3.2 pthread_cond_wait F
GLIBC_2.3.2 strptime_l F
-GLIBC_2.3.3 _sys_siglist D 0x200
+GLIBC_2.3.3 _sys_siglist D 0x204
GLIBC_2.3.3 gnu_dev_major F
GLIBC_2.3.3 gnu_dev_makedev F
GLIBC_2.3.3 gnu_dev_minor F
@@ -2101,8 +2101,8 @@ GLIBC_2.3.3 remap_file_pages F
GLIBC_2.3.3 sched_getaffinity F
GLIBC_2.3.3 sched_setaffinity F
GLIBC_2.3.3 semtimedop F
-GLIBC_2.3.3 sys_sigabbrev D 0x200
-GLIBC_2.3.3 sys_siglist D 0x200
+GLIBC_2.3.3 sys_sigabbrev D 0x204
+GLIBC_2.3.3 sys_siglist D 0x204
GLIBC_2.3.4 __chk_fail F
GLIBC_2.3.4 __fprintf_chk F
GLIBC_2.3.4 __gets_chk F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
index 2c8bafc669..4e0f236115 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/n64/libc.abilist
@@ -2076,7 +2076,7 @@ GLIBC_2.3.2 pthread_cond_signal F
GLIBC_2.3.2 pthread_cond_timedwait F
GLIBC_2.3.2 pthread_cond_wait F
GLIBC_2.3.2 strptime_l F
-GLIBC_2.3.3 _sys_siglist D 0x400
+GLIBC_2.3.3 _sys_siglist D 0x408
GLIBC_2.3.3 gnu_dev_major F
GLIBC_2.3.3 gnu_dev_makedev F
GLIBC_2.3.3 gnu_dev_minor F
@@ -2095,8 +2095,8 @@ GLIBC_2.3.3 sched_setaffinity F
GLIBC_2.3.3 semtimedop F
GLIBC_2.3.3 strtoll_l F
GLIBC_2.3.3 strtoull_l F
-GLIBC_2.3.3 sys_sigabbrev D 0x400
-GLIBC_2.3.3 sys_siglist D 0x400
+GLIBC_2.3.3 sys_sigabbrev D 0x408
+GLIBC_2.3.3 sys_siglist D 0x408
GLIBC_2.3.4 __chk_fail F
GLIBC_2.3.4 __fprintf_chk F
GLIBC_2.3.4 __gets_chk F
--
2.17.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 3/3] linux: Fix __NSIG_WORDS and add __NSIG_BYTES
2020-04-23 19:26 [PATCH 1/3] signal: Add signum-{generic,arch}.h Adhemerval Zanella
2020-04-23 19:26 ` [PATCH 2/3] mips: Fix SIGRTMAX definition Adhemerval Zanella
@ 2020-04-23 19:26 ` Adhemerval Zanella
1 sibling, 0 replies; 5+ messages in thread
From: Adhemerval Zanella @ 2020-04-23 19:26 UTC (permalink / raw)
To: libc-alpha
The __NSIG_WORDS value is based on minimum number of words to hold
the maximum number of signal supported by the architecture. Maximum
number of signals non multiple of word is rounded up.
This patch also adds __NSIG_BYTES, which is the number of bytes
required to represent the support number of signals. It is used on
syscall which takes a sigset_t.
Checked on x86_64-linux-gnu and i686-linux-gnu.
---
include/signal.h | 2 ++
nptl/nptl-init.c | 2 +-
nptl/pthread_create.c | 2 +-
nptl/pthread_sigmask.c | 2 +-
sysdeps/unix/sysv/linux/aio_misc.h | 9 ++++++---
sysdeps/unix/sysv/linux/epoll_pwait.c | 2 +-
sysdeps/unix/sysv/linux/internal-signals.h | 10 +++++-----
sysdeps/unix/sysv/linux/ppoll.c | 7 ++++---
sysdeps/unix/sysv/linux/pselect.c | 2 +-
sysdeps/unix/sysv/linux/sigaction.c | 3 ++-
sysdeps/unix/sysv/linux/signalfd.c | 2 +-
sysdeps/unix/sysv/linux/sigpending.c | 2 +-
sysdeps/unix/sysv/linux/sigsetops.h | 18 +++++++++++++-----
sysdeps/unix/sysv/linux/sigsuspend.c | 2 +-
sysdeps/unix/sysv/linux/sigtimedwait.c | 3 ++-
sysdeps/unix/sysv/linux/x86/setjmpP.h | 5 ++---
16 files changed, 44 insertions(+), 29 deletions(-)
diff --git a/include/signal.h b/include/signal.h
index 293258ad65..229b1eb352 100644
--- a/include/signal.h
+++ b/include/signal.h
@@ -2,6 +2,8 @@
# include <signal/signal.h>
# ifndef _ISOMAC
+# include <sigsetops.h>
+
libc_hidden_proto (sigemptyset)
libc_hidden_proto (sigfillset)
libc_hidden_proto (sigaddset)
diff --git a/nptl/nptl-init.c b/nptl/nptl-init.c
index 96b1444a01..ed450a09fd 100644
--- a/nptl/nptl-init.c
+++ b/nptl/nptl-init.c
@@ -281,7 +281,7 @@ __pthread_initialize_minimal_internal (void)
__sigaddset (&sa.sa_mask, SIGCANCEL);
__sigaddset (&sa.sa_mask, SIGSETXID);
INTERNAL_SYSCALL_CALL (rt_sigprocmask, SIG_UNBLOCK, &sa.sa_mask,
- NULL, _NSIG / 8);
+ NULL, __NSIG_BYTES);
/* Get the size of the static and alignment requirements for the TLS
block. */
diff --git a/nptl/pthread_create.c b/nptl/pthread_create.c
index 7c752d0f99..479675e6a1 100644
--- a/nptl/pthread_create.c
+++ b/nptl/pthread_create.c
@@ -408,7 +408,7 @@ START_THREAD_DEFN
__sigemptyset (&mask);
__sigaddset (&mask, SIGCANCEL);
INTERNAL_SYSCALL_CALL (rt_sigprocmask, SIG_UNBLOCK, &mask,
- NULL, _NSIG / 8);
+ NULL, __NSIG_BYTES);
}
/* This is where the try/finally block should be created. For
diff --git a/nptl/pthread_sigmask.c b/nptl/pthread_sigmask.c
index d266d296c5..7b65ae1f27 100644
--- a/nptl/pthread_sigmask.c
+++ b/nptl/pthread_sigmask.c
@@ -39,7 +39,7 @@ __pthread_sigmask (int how, const sigset_t *newmask, sigset_t *oldmask)
/* We know that realtime signals are available if NPTL is used. */
int result = INTERNAL_SYSCALL_CALL (rt_sigprocmask, how, newmask,
- oldmask, _NSIG / 8);
+ oldmask, __NSIG_BYTES);
return (INTERNAL_SYSCALL_ERROR_P (result)
? INTERNAL_SYSCALL_ERRNO (result)
diff --git a/sysdeps/unix/sysv/linux/aio_misc.h b/sysdeps/unix/sysv/linux/aio_misc.h
index 30c3cd778e..e31ca8edbe 100644
--- a/sysdeps/unix/sysv/linux/aio_misc.h
+++ b/sysdeps/unix/sysv/linux/aio_misc.h
@@ -31,7 +31,8 @@ __aio_start_notify_thread (void)
{
sigset_t ss;
sigemptyset (&ss);
- INTERNAL_SYSCALL_CALL (rt_sigprocmask, SIG_SETMASK, &ss, NULL, _NSIG / 8);
+ INTERNAL_SYSCALL_CALL (rt_sigprocmask, SIG_SETMASK, &ss, NULL,
+ __NSIG_BYTES);
}
extern inline int
@@ -52,12 +53,14 @@ __aio_create_helper_thread (pthread_t *threadp, void *(*tf) (void *),
sigset_t ss;
sigset_t oss;
sigfillset (&ss);
- INTERNAL_SYSCALL_CALL (rt_sigprocmask, SIG_SETMASK, &ss, &oss, _NSIG / 8);
+ INTERNAL_SYSCALL_CALL (rt_sigprocmask, SIG_SETMASK, &ss, &oss,
+ __NSIG_BYTES);
int ret = pthread_create (threadp, &attr, tf, arg);
/* Restore the signal mask. */
- INTERNAL_SYSCALL_CALL (rt_sigprocmask, SIG_SETMASK, &oss, NULL, _NSIG / 8);
+ INTERNAL_SYSCALL_CALL (rt_sigprocmask, SIG_SETMASK, &oss, NULL,
+ __NSIG_BYTES);
(void) pthread_attr_destroy (&attr);
return ret;
diff --git a/sysdeps/unix/sysv/linux/epoll_pwait.c b/sysdeps/unix/sysv/linux/epoll_pwait.c
index 66f04482c7..af6d0fd713 100644
--- a/sysdeps/unix/sysv/linux/epoll_pwait.c
+++ b/sysdeps/unix/sysv/linux/epoll_pwait.c
@@ -38,6 +38,6 @@ int epoll_pwait (int epfd, struct epoll_event *events,
const sigset_t *set)
{
return SYSCALL_CANCEL (epoll_pwait, epfd, events, maxevents,
- timeout, set, _NSIG / 8);
+ timeout, set, __NSIG_BYTES);
}
libc_hidden_def (epoll_pwait)
diff --git a/sysdeps/unix/sysv/linux/internal-signals.h b/sysdeps/unix/sysv/linux/internal-signals.h
index 3fbd4807d1..35f2de04c5 100644
--- a/sysdeps/unix/sysv/linux/internal-signals.h
+++ b/sysdeps/unix/sysv/linux/internal-signals.h
@@ -68,7 +68,7 @@ static inline void
__libc_signal_block_all (sigset_t *set)
{
INTERNAL_SYSCALL_CALL (rt_sigprocmask, SIG_BLOCK, &sigall_set, set,
- _NSIG / 8);
+ __NSIG_BYTES);
}
/* Block all application signals (excluding internal glibc ones). */
@@ -78,7 +78,7 @@ __libc_signal_block_app (sigset_t *set)
sigset_t allset = sigall_set;
__clear_internal_signals (&allset);
INTERNAL_SYSCALL_CALL (rt_sigprocmask, SIG_BLOCK, &allset, set,
- _NSIG / 8);
+ __NSIG_BYTES);
}
/* Block only SIGTIMER and return the previous set on SET. */
@@ -86,7 +86,7 @@ static inline void
__libc_signal_block_sigtimer (sigset_t *set)
{
INTERNAL_SYSCALL_CALL (rt_sigprocmask, SIG_BLOCK, &sigtimer_set, set,
- _NSIG / 8);
+ __NSIG_BYTES);
}
/* Unblock only SIGTIMER and return the previous set on SET. */
@@ -94,7 +94,7 @@ static inline void
__libc_signal_unblock_sigtimer (sigset_t *set)
{
INTERNAL_SYSCALL_CALL (rt_sigprocmask, SIG_UNBLOCK, &sigtimer_set, set,
- _NSIG / 8);
+ __NSIG_BYTES);
}
/* Restore current process signal mask. */
@@ -102,7 +102,7 @@ static inline void
__libc_signal_restore_set (const sigset_t *set)
{
INTERNAL_SYSCALL_CALL (rt_sigprocmask, SIG_SETMASK, set, NULL,
- _NSIG / 8);
+ __NSIG_BYTES);
}
/* Used to communicate with signal handler. */
diff --git a/sysdeps/unix/sysv/linux/ppoll.c b/sysdeps/unix/sysv/linux/ppoll.c
index 4ffb23710e..0f15636cce 100644
--- a/sysdeps/unix/sysv/linux/ppoll.c
+++ b/sysdeps/unix/sysv/linux/ppoll.c
@@ -41,11 +41,12 @@ __ppoll64 (struct pollfd *fds, nfds_t nfds, const struct __timespec64 *timeout,
# ifndef __NR_ppoll_time64
# define __NR_ppoll_time64 __NR_ppoll
# endif
- return SYSCALL_CANCEL (ppoll_time64, fds, nfds, timeout, sigmask, _NSIG / 8);
+ return SYSCALL_CANCEL (ppoll_time64, fds, nfds, timeout, sigmask,
+ __NSIG_BYTES);
#else
# ifdef __NR_ppoll_time64
int ret = SYSCALL_CANCEL (ppoll_time64, fds, nfds, timeout, sigmask,
- _NSIG / 8);
+ __NSIG_BYTES);
if (ret >= 0 || errno != ENOSYS)
return ret;
# endif
@@ -62,7 +63,7 @@ __ppoll64 (struct pollfd *fds, nfds_t nfds, const struct __timespec64 *timeout,
}
return SYSCALL_CANCEL (ppoll, fds, nfds, timeout ? &ts32 : NULL, sigmask,
- _NSIG / 8);
+ __NSIG_BYTES);
#endif
}
diff --git a/sysdeps/unix/sysv/linux/pselect.c b/sysdeps/unix/sysv/linux/pselect.c
index d7c6ff8fdb..304db03338 100644
--- a/sysdeps/unix/sysv/linux/pselect.c
+++ b/sysdeps/unix/sysv/linux/pselect.c
@@ -43,7 +43,7 @@ __pselect (int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
} data;
data.ss = (__syscall_ulong_t) (uintptr_t) sigmask;
- data.ss_len = _NSIG / 8;
+ data.ss_len = __NSIG_BYTES;
return SYSCALL_CANCEL (pselect6, nfds, readfds, writefds, exceptfds,
timeout, &data);
diff --git a/sysdeps/unix/sysv/linux/sigaction.c b/sysdeps/unix/sysv/linux/sigaction.c
index 4e6d11a6ae..f27349d552 100644
--- a/sysdeps/unix/sysv/linux/sigaction.c
+++ b/sysdeps/unix/sysv/linux/sigaction.c
@@ -57,7 +57,8 @@ __libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact)
real size of the user-level sigset_t. */
result = INLINE_SYSCALL_CALL (rt_sigaction, sig,
act ? &kact : NULL,
- oact ? &koact : NULL, STUB (act, _NSIG / 8));
+ oact ? &koact : NULL, STUB (act,
+ __NSIG_BYTES));
if (oact && result >= 0)
{
diff --git a/sysdeps/unix/sysv/linux/signalfd.c b/sysdeps/unix/sysv/linux/signalfd.c
index 64d7bccba9..71d91fdde5 100644
--- a/sysdeps/unix/sysv/linux/signalfd.c
+++ b/sysdeps/unix/sysv/linux/signalfd.c
@@ -24,5 +24,5 @@
int
signalfd (int fd, const sigset_t *mask, int flags)
{
- return INLINE_SYSCALL (signalfd4, 4, fd, mask, _NSIG / 8, flags);
+ return INLINE_SYSCALL (signalfd4, 4, fd, mask, __NSIG_BYTES, flags);
}
diff --git a/sysdeps/unix/sysv/linux/sigpending.c b/sysdeps/unix/sysv/linux/sigpending.c
index 458a3cf99e..8898fe8b34 100644
--- a/sysdeps/unix/sysv/linux/sigpending.c
+++ b/sysdeps/unix/sysv/linux/sigpending.c
@@ -24,5 +24,5 @@
int
sigpending (sigset_t *set)
{
- return INLINE_SYSCALL (rt_sigpending, 2, set, _NSIG / 8);
+ return INLINE_SYSCALL_CALL (rt_sigpending, set, __NSIG_BYTES);
}
diff --git a/sysdeps/unix/sysv/linux/sigsetops.h b/sysdeps/unix/sysv/linux/sigsetops.h
index db8f378cf0..3f29ead009 100644
--- a/sysdeps/unix/sysv/linux/sigsetops.h
+++ b/sysdeps/unix/sysv/linux/sigsetops.h
@@ -20,23 +20,31 @@
#define _SIGSETOPS_H 1
#include <signal.h>
+#include <limits.h>
+#include <libc-pointer-arith.h>
/* Return a mask that includes the bit for SIG only. */
-# define __sigmask(sig) \
- (((unsigned long int) 1) << (((sig) - 1) % (8 * sizeof (unsigned long int))))
+#define __sigmask(sig) \
+ (1UL << (((sig) - 1) % ULONG_WIDTH))
/* Return the word index for SIG. */
static inline unsigned long int
__sigword (int sig)
{
- return (sig - 1) / (8 * sizeof (unsigned long int));
+ return (sig - 1) / ULONG_WIDTH;
}
/* Linux sig* functions only handle up to __NSIG_WORDS words instead of
full _SIGSET_NWORDS sigset size. The signal numbers are 1-based, and
bit 0 of a signal mask is for signal 1. */
-
-# define __NSIG_WORDS (_NSIG / (8 * sizeof (unsigned long int )))
+#define __NSIG_WORDS (ALIGN_UP ((_NSIG - 1), ULONG_WIDTH) / ULONG_WIDTH)
+_Static_assert (__NSIG_WORDS <= _SIGSET_NWORDS,
+ "__NSIG_WORDS > _SIGSET_WORDS");
+
+/* This macro is used on syscall that takes a sigset_t to specify the expected
+ size in bytes. As for glibc, kernel sigset is implemented as an array of
+ unsigned long. */
+#define __NSIG_BYTES (__NSIG_WORDS * (ULONG_WIDTH / UCHAR_WIDTH))
static inline void
__sigemptyset (sigset_t *set)
diff --git a/sysdeps/unix/sysv/linux/sigsuspend.c b/sysdeps/unix/sysv/linux/sigsuspend.c
index dd5df5af25..b4bf2ec4bc 100644
--- a/sysdeps/unix/sysv/linux/sigsuspend.c
+++ b/sysdeps/unix/sysv/linux/sigsuspend.c
@@ -23,7 +23,7 @@
int
__sigsuspend (const sigset_t *set)
{
- return SYSCALL_CANCEL (rt_sigsuspend, set, _NSIG / 8);
+ return SYSCALL_CANCEL (rt_sigsuspend, set, __NSIG_BYTES);
}
libc_hidden_def (__sigsuspend)
weak_alias (__sigsuspend, sigsuspend)
diff --git a/sysdeps/unix/sysv/linux/sigtimedwait.c b/sysdeps/unix/sysv/linux/sigtimedwait.c
index 6b3d8f705f..f2ef3aad45 100644
--- a/sysdeps/unix/sysv/linux/sigtimedwait.c
+++ b/sysdeps/unix/sysv/linux/sigtimedwait.c
@@ -26,7 +26,8 @@ __sigtimedwait (const sigset_t *set, siginfo_t *info,
{
/* XXX The size argument hopefully will have to be changed to the
real size of the user-level sigset_t. */
- int result = SYSCALL_CANCEL (rt_sigtimedwait, set, info, timeout, _NSIG / 8);
+ int result = SYSCALL_CANCEL (rt_sigtimedwait, set, info, timeout,
+ __NSIG_BYTES);
/* The kernel generates a SI_TKILL code in si_code in case tkill is
used. tkill is transparently used in raise(). Since having
diff --git a/sysdeps/unix/sysv/linux/x86/setjmpP.h b/sysdeps/unix/sysv/linux/x86/setjmpP.h
index 1783b8eb78..a5de31bfd6 100644
--- a/sysdeps/unix/sysv/linux/x86/setjmpP.h
+++ b/sysdeps/unix/sysv/linux/x86/setjmpP.h
@@ -21,6 +21,7 @@
#include <bits/types/__sigset_t.h>
#include <libc-pointer-arith.h>
+#include <sigsetops.h>
/* <setjmp/setjmp.h> has
@@ -113,11 +114,9 @@ typedef union
#include <signal.h>
-#define _SIGPROCMASK_NSIG_WORDS (_NSIG / (8 * sizeof (unsigned long int)))
-
typedef struct
{
- unsigned long int __val[_SIGPROCMASK_NSIG_WORDS];
+ unsigned long int __val[__NSIG_WORDS];
} __sigprocmask_sigset_t;
extern jmp_buf ___buf;
--
2.17.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2/3] mips: Fix SIGRTMAX definition
2020-04-23 19:26 ` [PATCH 2/3] mips: Fix SIGRTMAX definition Adhemerval Zanella
@ 2020-04-23 20:41 ` Joseph Myers
2020-04-23 21:47 ` Adhemerval Zanella
0 siblings, 1 reply; 5+ messages in thread
From: Joseph Myers @ 2020-04-23 20:41 UTC (permalink / raw)
To: Adhemerval Zanella; +Cc: libc-alpha
On Thu, 23 Apr 2020, Adhemerval Zanella via Libc-alpha wrote:
> MIPS support up to 96 real time signal, instead of current 95. This
> increases the NSIG value, however it does not incur in a compat
> issue for older programs (which won't access the new element).
> The sys_siglist is automatically expanded as well.
The fact that you're changing ABI test baselines for existing symbol
versions demonstrates that this is not a safe change (you can't change the
size of exported data symbols without adding a new symbol version because
of issues with copy relocations - this is what the "Symbol `%s' has
different size in shared object, consider re-linking" message from the
dynamic linker is about).
We have the #errlist-compat mechanism in Versions files for having
different symbol versions for differently-sized versions of sys_errlist.
It looks like sys_siglist has a simpler system involving OLD_SIGLIST_SIZE,
OLD2_SIGLIST_SIZE and hardcoded version conditionals in
sysdeps/gnu/siglist.c. To make this change, you'll need to add some kind
of support for having three compat versions for these symbols (so four
versions for them in total), with different sizes, so that existing
versions keep their existing sizes.
It will also be necessary to update
sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist for such a new
version in addition to the three ABI baselines changed in this patch.
--
Joseph S. Myers
joseph@codesourcery.com
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2/3] mips: Fix SIGRTMAX definition
2020-04-23 20:41 ` Joseph Myers
@ 2020-04-23 21:47 ` Adhemerval Zanella
0 siblings, 0 replies; 5+ messages in thread
From: Adhemerval Zanella @ 2020-04-23 21:47 UTC (permalink / raw)
To: Joseph Myers; +Cc: libc-alpha
On 23/04/2020 17:41, Joseph Myers wrote:
> On Thu, 23 Apr 2020, Adhemerval Zanella via Libc-alpha wrote:
>
>> MIPS support up to 96 real time signal, instead of current 95. This
>> increases the NSIG value, however it does not incur in a compat
>> issue for older programs (which won't access the new element).
>> The sys_siglist is automatically expanded as well.
>
> The fact that you're changing ABI test baselines for existing symbol
> versions demonstrates that this is not a safe change (you can't change the
> size of exported data symbols without adding a new symbol version because
> of issues with copy relocations - this is what the "Symbol `%s' has
> different size in shared object, consider re-linking" message from the
> dynamic linker is about).
Indeed, I forgot about copy relocations and that it is possible to link
new applications against sys_errlist.
>
> We have the #errlist-compat mechanism in Versions files for having
> different symbol versions for differently-sized versions of sys_errlist.
> It looks like sys_siglist has a simpler system involving OLD_SIGLIST_SIZE,
> OLD2_SIGLIST_SIZE and hardcoded version conditionals in
> sysdeps/gnu/siglist.c. To make this change, you'll need to add some kind
> of support for having three compat versions for these symbols (so four
> versions for them in total), with different sizes, so that existing
> versions keep their existing sizes.
Ack, I will update the patch.
>
> It will also be necessary to update
> sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist for such a new
> version in addition to the three ABI baselines changed in this patch.
>
Ack.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2020-04-23 21:47 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-23 19:26 [PATCH 1/3] signal: Add signum-{generic,arch}.h Adhemerval Zanella
2020-04-23 19:26 ` [PATCH 2/3] mips: Fix SIGRTMAX definition Adhemerval Zanella
2020-04-23 20:41 ` Joseph Myers
2020-04-23 21:47 ` Adhemerval Zanella
2020-04-23 19:26 ` [PATCH 3/3] linux: Fix __NSIG_WORDS and add __NSIG_BYTES Adhemerval Zanella
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).