From: Aditya Vidyadhar Kamath <akamath996@gmail.com>
To: ulrich.weigand@de.ibm.com, simon.marchi@polymtl.ca, tom@tromey.com
Cc: gdb-patches@sourceware.org, Aditya.Kamath1@ibm.com,
sangamesh.swamy@in.ibm.com,
Aditya Vidyadhar Kamath <aditya.kamath1@ibm.com>
Subject: [PATCH] Accept ksh88 exit status for SIGINT in shell.exp
Date: Thu, 15 Oct 2026 19:16:05 +0530 [thread overview]
Message-ID: <20261015134604.81658-2-akamath996@gmail.com> (raw)
From: Aditya Vidyadhar Kamath <aditya.kamath1@ibm.com>
This patch is in continuation to Simon's patch [1].
gdb.base/shell.exp runs "kill -2 $$" under the shell, through both
"shell" ("!") and "pipe" ("|"), and expects $_shell_exitsignal to be 2
and $_shell_exitcode to be void, that is, a shell that dies from the
signal.
On AIX, /bin/sh and /usr/bin/ksh are ksh88. ksh88 catches SIGINT and
calls exit (130) (128 + SIGINT) instead of dying from the signal. GDB
therefore sees a normal exit, sets $_shell_exitcode to 130 and leaves
$_shell_exitsignal void. This is correct reporting by GDB; the test
assumes a shell that is killed by the signal. The raw wait status of
the shells on AIX 7.3 is:
/usr/bin/ksh exited, code 130
/usr/bin/ksh93 killed by signal 2
/usr/bin/bash killed by signal 2
As a result these four tests failed on AIX:
shell interrupt exitcode
shell interrupt exitsignal
pipe interrupt exitcode
pipe interrupt exitsignal
Add check_shell_interrupt_status, which replaces the duplicated checks.
On AIX it also accepts $_shell_exitcode = 130 together with
$_shell_exitsignal = void.
Tested on AIX 7.3 with a 64-bit GDB: gdb.base/shell.exp now gives
125 passes and no failures. The four tests above failed before.
[1] https://sourceware.org/git/?p=binutils-gdb.git;a=commitdiff;h=bf842a2e8d6e9eb7429444904b1b31c8b85d5fb2
---
gdb/testsuite/gdb.base/shell.exp | 49 +++++++++++++++++++++++++++++---
1 file changed, 45 insertions(+), 4 deletions(-)
diff --git a/gdb/testsuite/gdb.base/shell.exp b/gdb/testsuite/gdb.base/shell.exp
index 2e6c63585eb..e0f9b9fb1f2 100644
--- a/gdb/testsuite/gdb.base/shell.exp
+++ b/gdb/testsuite/gdb.base/shell.exp
@@ -17,6 +17,49 @@
load_lib completion-support.exp
+# Check the convenience variables after a shell command that ran
+# "kill -2 $$". PREFIX is "shell" or "pipe", and is used to name the
+# tests.
+#
+# Usually the shell dies from SIGINT, so $_shell_exitcode is void and
+# $_shell_exitsignal is 2.
+#
+# On AIX, /bin/sh and /usr/bin/ksh are ksh88. ksh88 catches SIGINT and
+# calls exit (130) (128 + SIGINT) instead of dying from the signal. GDB
+# then sees a normal exit and correctly sets $_shell_exitcode to 130 and
+# leaves $_shell_exitsignal void. Accept that outcome on AIX. Shells
+# that do die from the signal (e.g. ksh93 or bash) still give the usual
+# result, and are accepted as well.
+
+proc check_shell_interrupt_status { prefix } {
+ global gdb_prompt
+
+ set signaled 1
+
+ if { [istarget "*-*-aix*"] } {
+ set test "$prefix interrupt exitcode"
+ gdb_test_multiple "p \$_shell_exitcode" $test {
+ -re " = void\r\n$gdb_prompt $" {
+ pass $test
+ }
+ -re " = 130\r\n$gdb_prompt $" {
+ # Expected for ksh88, see the comment above.
+ set signaled 0
+ pass $test
+ }
+ }
+ } else {
+ gdb_test "p \$_shell_exitcode" " = void" "$prefix interrupt exitcode"
+ }
+
+ if { $signaled } {
+ gdb_test "p \$_shell_exitsignal" " = 2" "$prefix interrupt exitsignal"
+ } else {
+ gdb_test "p \$_shell_exitsignal" " = void" \
+ "$prefix interrupt exitsignal"
+ }
+}
+
gdb_exit
gdb_start
@@ -37,8 +80,7 @@ gdb_test "p \$_shell_exitsignal" " = void" "shell fail exitsignal"
# This test will not work when the shell is CMD.EXE.
if { ! [ishost *-*-mingw*] } {
gdb_test_no_output "! kill -2 $$"
- gdb_test "p \$_shell_exitcode" " = void" "shell interrupt exitcode"
- gdb_test "p \$_shell_exitsignal" " = 2" "shell interrupt exitsignal"
+ check_shell_interrupt_status "shell"
}
# Test the $_shell convenience function.
@@ -130,8 +172,7 @@ gdb_test "p \$_shell_exitsignal" " = void" "pipe fail exitsignal"
# This test will not work when the shell is CMD.EXE.
if { ! [ishost *-*-mingw*] } {
gdb_test "|p 123| kill -2 $$" ""
- gdb_test "p \$_shell_exitcode" " = void" "pipe interrupt exitcode"
- gdb_test "p \$_shell_exitsignal" " = 2" "pipe interrupt exitsignal"
+ check_shell_interrupt_status "pipe"
}
# Error handling verifications.
--
2.51.2
next reply other threads:[~2026-10-15 13:47 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-15 13:46 Aditya Vidyadhar Kamath [this message]
2026-10-20 19:45 ` Simon Marchi
2026-10-21 9:08 ` Aditya Kamath
2026-10-21 16:33 ` Tom Tromey
2026-10-21 16:42 ` Simon Marchi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261015134604.81658-2-akamath996@gmail.com \
--to=akamath996@gmail.com \
--cc=Aditya.Kamath1@ibm.com \
--cc=gdb-patches@sourceware.org \
--cc=sangamesh.swamy@in.ibm.com \
--cc=simon.marchi@polymtl.ca \
--cc=tom@tromey.com \
--cc=ulrich.weigand@de.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox