[PATCH 2/2] selftests/nolibc: add tests for the wait status macros
From: Danish Khateeb
Date: Wed Sep 23 2026 - 16:56:47 EST
Until the previous commit, WIFSIGNALED() was true for status 0, which is
what waitpid() reports for a child that exits with 0. nolibc-test did not
notice, because its only use of WIFSIGNALED(), in the abort test, also
checks WTERMSIG().
Add tests for WEXITSTATUS(), WIFEXITED(), WIFSIGNALED() and WTERMSIG(),
on the statuses the kernel reports for an exit with 0 or 0x12, a kill by
SIGKILL, a SIGSEGV with the core dump flag, and a stop by SIGSTOP.
Assisted-by: LLM
Signed-off-by: Danish Khateeb <danishkhateeb03@xxxxxxxxx>
---
tools/testing/selftests/nolibc/nolibc-test.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/tools/testing/selftests/nolibc/nolibc-test.c b/tools/testing/selftests/nolibc/nolibc-test.c
index f62183a46205..8985aa1ba96a 100644
--- a/tools/testing/selftests/nolibc/nolibc-test.c
+++ b/tools/testing/selftests/nolibc/nolibc-test.c
@@ -2038,6 +2038,14 @@ int run_stdlib(int min, int max)
CASE_TEST(htole32); EXPECT_EQ(1, htole32(is_le ? 0x01234567 : 0x67452301), 0x01234567); break;
CASE_TEST(htobe64); EXPECT_EQ(1, htobe64(is_le ? 0x0123456789000000 : 0x8967452301), 0x8967452301); break;
CASE_TEST(htole64); EXPECT_EQ(1, htole64(is_le ? 0x0123456789 : 0x8967452301000000), 0x0123456789); break;
+ CASE_TEST(wexitstatus); EXPECT_EQ(1, WEXITSTATUS(0x1200), 0x12); break;
+ CASE_TEST(wifexited_exit0); EXPECT_NZ(1, WIFEXITED(0)); break;
+ CASE_TEST(wifexited_signal); EXPECT_ZR(1, WIFEXITED(SIGKILL)); break;
+ CASE_TEST(wifsignaled_exit0); EXPECT_ZR(1, WIFSIGNALED(0)); break;
+ CASE_TEST(wifsignaled_exit); EXPECT_ZR(1, WIFSIGNALED(0x1200)); break;
+ CASE_TEST(wifsignaled_signal); EXPECT_NZ(1, WIFSIGNALED(SIGKILL)); break;
+ CASE_TEST(wifsignaled_stopped); EXPECT_ZR(1, WIFSIGNALED((SIGSTOP << 8) | 0x7f)); break;
+ CASE_TEST(wtermsig_core); EXPECT_EQ(1, WTERMSIG(0x80 | SIGSEGV), SIGSEGV); break;
case __LINE__:
return ret; /* must be last */
--
2.55.0