* SIGABRT/SIGIOT confusion under Linux
@ 2023-03-25 20:40 Nate Eldredge
2023-03-26 8:28 ` PATCH: Handle SIGIOT as an alias to SIGABRT if they are the same signal number Mikael Magnusson
0 siblings, 1 reply; 2+ messages in thread
From: Nate Eldredge @ 2023-03-25 20:40 UTC (permalink / raw)
To: zsh-workers
On Linux, the obscure SIGIOT signal, which hasn't really been meaningful
on any machine since the PDP-11, is an alias for the common SIGABRT
(signal 6). The system strsignal() function maps signal 6 to the expected
description "Aborted". However, since zsh does its own translation, and
since the SIGABRT precedes SIGIOT in Linux's <signal.h>, the latter
overwrites the former in zsh's signal string tables. See
Src/signames2.awk.
This has (at least) two unfortunate results:
1. When a command aborts by calling `abort()`, which raises SIGABRT, zsh
emits the message "zsh: IOT instruction (core dumped)" which will surely
mystify most users.
2. The `kill` builtin doesn't accept `-ABRT`. If you wanted to send the
abort signal to a process, you would have to know to do `kill -IOT pid`
instead, or `kill -6 pid` if you have the numbers memorized.
Tested with zsh 5.9 as distributed with Ubuntu 22.10 on x86-64, but the
latest zsh source in git seems to not have changed.
--
Nate Eldredge
nate@thatsmathematics.com
^ permalink raw reply [flat|nested] 2+ messages in thread
* PATCH: Handle SIGIOT as an alias to SIGABRT if they are the same signal number
2023-03-25 20:40 SIGABRT/SIGIOT confusion under Linux Nate Eldredge
@ 2023-03-26 8:28 ` Mikael Magnusson
0 siblings, 0 replies; 2+ messages in thread
From: Mikael Magnusson @ 2023-03-26 8:28 UTC (permalink / raw)
To: zsh-workers
There is already similar handling for SIGCLD/SIGCHLD and SIGIO/SIGPOLL
(see 20566 and 20572), so extend this to handle SIGIOT and SIGABRT the
same way.
---
Src/jobs.c | 5 +++++
Src/signames2.awk | 9 +++++----
2 files changed, 10 insertions(+), 4 deletions(-)
diff --git a/Src/jobs.c b/Src/jobs.c
index 2dfcefb33a..429ee2a326 100644
--- a/Src/jobs.c
+++ b/Src/jobs.c
@@ -2645,6 +2645,11 @@ static const struct {
{ "IO", SIGIO },
#endif
#endif
+#if defined(SIGABRT) && defined(SIGIOT)
+#if SIGABRT == SIGIOT
+ { "IOT", SIGIOT },
+#endif
+#endif
#if !defined(SIGERR)
/*
* If SIGERR is not defined by the operating system, use it
diff --git a/Src/signames2.awk b/Src/signames2.awk
index 4d15681d58..4d1557cd8d 100644
--- a/Src/signames2.awk
+++ b/Src/signames2.awk
@@ -13,7 +13,8 @@
signam = substr(tmp[1], 4, 20)
signum = tmp[2]
if (signam == "CHLD" && sig[signum] == "CLD") sig[signum] = ""
- if (signam == "POLL" && sig[signum] == "IO") sig[signum] = ""
+ if (signam == "POLL" && sig[signum] == "IO") sig[signum] = ""
+ if (signam == "ABRT" && sig[signum] == "IOT") sig[signum] = ""
if (sig[signum] == "") {
sig[signum] = signam
if (0 + max < 0 + signum && signum < 60)
@@ -33,9 +34,9 @@
if (signam == "IO") { msg[signum] = "i/o ready" }
if (signam == "IOT") { msg[signum] = "IOT instruction" }
if (signam == "KILL") { msg[signum] = "killed" }
- if (signam == "LOST") { msg[signum] = "resource lost" }
+ if (signam == "LOST") { msg[signum] = "resource lost" }
if (signam == "PIPE") { msg[signum] = "broken pipe" }
- if (signam == "POLL") { msg[signum] = "pollable event occurred" }
+ if (signam == "POLL") { msg[signum] = "pollable event occurred" }
if (signam == "PROF") { msg[signum] = "profile signal" }
if (signam == "PWR") { msg[signum] = "power fail" }
if (signam == "QUIT") { msg[signum] = "quit" }
@@ -43,7 +44,7 @@
if (signam == "SYS") { msg[signum] = "invalid system call" }
if (signam == "TERM") { msg[signum] = "terminated" }
if (signam == "TRAP") { msg[signum] = "trace trap" }
- if (signam == "URG") { msg[signum] = "urgent condition" }
+ if (signam == "URG") { msg[signum] = "urgent condition" }
if (signam == "USR1") { msg[signum] = "user-defined signal 1" }
if (signam == "USR2") { msg[signum] = "user-defined signal 2" }
if (signam == "VTALRM") { msg[signum] = "virtual time alarm" }
--
2.38.1
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2023-03-26 8:29 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-25 20:40 SIGABRT/SIGIOT confusion under Linux Nate Eldredge
2023-03-26 8:28 ` PATCH: Handle SIGIOT as an alias to SIGABRT if they are the same signal number Mikael Magnusson
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/zsh/
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 NNTP newsgroup(s).