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 <[email protected]>
---
 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


Reply via email to