]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
selftests/nolibc: use waitid() over waitpid()
authorThomas Weißschuh <linux@weissschuh.net>
Sat, 21 Dec 2024 14:44:29 +0000 (15:44 +0100)
committerThomas Weißschuh <linux@weissschuh.net>
Mon, 13 Jan 2025 21:21:34 +0000 (22:21 +0100)
Newer archs like riscv32 don't provide waitpid() anymore.
Switch to waitid() which is available everywhere.

Link: https://lore.kernel.org/r/20241221-nolibc-rv32-v1-2-d9ef6dab7c63@weissschuh.net
Signed-off-by: Thomas Weißschuh <linux@weissschuh.net>
tools/testing/selftests/nolibc/nolibc-test.c

index 6fba7025c5e3c002085862fdf6fa950da6000d6c..60c50968d3630e4909a5ecb2400770baaf7c2add 100644 (file)
@@ -1323,7 +1323,8 @@ static int run_protection(int min __attribute__((unused)),
                          int max __attribute__((unused)))
 {
        pid_t pid;
-       int llen = 0, status;
+       int llen = 0, ret;
+       siginfo_t siginfo = {};
        struct rlimit rlimit = { 0, 0 };
 
        llen += printf("0 -fstackprotector ");
@@ -1361,10 +1362,11 @@ static int run_protection(int min __attribute__((unused)),
                return 1;
 
        default:
-               pid = waitpid(pid, &status, 0);
+               ret = waitid(P_PID, pid, &siginfo, WEXITED);
 
-               if (pid == -1 || !WIFSIGNALED(status) || WTERMSIG(status) != SIGABRT) {
-                       llen += printf("waitpid()");
+               if (ret != 0 || siginfo.si_signo != SIGCHLD ||
+                   siginfo.si_code != CLD_KILLED || siginfo.si_status != SIGABRT) {
+                       llen += printf("waitid()");
                        result(llen, FAIL);
                        return 1;
                }