[libc-commits] [libc] [libc][sys/wait][linux] add missing and clean up existing macros (PR #125572)
Nick Desaulniers via libc-commits
libc-commits at lists.llvm.org
Mon Feb 3 12:26:13 PST 2025
https://github.com/nickdesaulniers created https://github.com/llvm/llvm-project/pull/125572
This patch does a few things:
- replace macro definitions with an inclusion of the linux/wait.h kernel
header.
- WNOHANG
- WUNTRACED
- WEXITED
- WCONTINUED
- WSTOPPED
- P_ALL
- P_PID
- P_PGID
- P_PIDFD
- Add missing macro definitions mandated by POSIX. Some are needed to build
LLVM.
- WCOREDUMP
- WIFCONTINUED
- WIFSIGNALELD
- WIFSTOPPED
- WSTOPSIG
- Remove glibc style __W* macros. Users should stick with the POSIX macros. We
can re-add them if necessary.
- __WEXITSTATUS
- __WTERMSIG
- __WIFEXITED
- __WIFSIGNALED
- __WIFSTOPPED
- __WIFCONTINUED
- __WCOREDUMP
- __W_EXITCODE
- __W_STOPCODE
- __W_CONTINUED
- __WCOREFLAG
Fixes: #124944
>From 02de82e7cc707b786c52fd5d41c1d3eabab453c8 Mon Sep 17 00:00:00 2001
From: Nick Desaulniers <ndesaulniers at google.com>
Date: Mon, 3 Feb 2025 09:11:30 -0800
Subject: [PATCH 1/4] [libc][sys/wait][linux] add missing and clean up existing
macros
This patch does a few things:
- replace macro definitions with an inclusion of the linux/wait.h kernel
header.
- WNOHANG
- WUNTRACED
- WEXITED
- WCONTINUED
- WSTOPPED
- P_ALL
- P_PID
- P_PGID
- P_PIDFD
- Add missing macro definitions mandated by POSIX. Some are needed to build
LLVM.
- WCOREDUMP
- WIFCONTINUED
- WIFSIGNALELD
- WIFSTOPPED
- WSTOPSIG
- Remove glibc style __W* macros. Users should stick with the POSIX macros. We
can re-add them if necessary.
- __WEXITSTATUS
- __WTERMSIG
- __WIFEXITED
- __WIFSIGNALED
- __WIFSTOPPED
- __WIFCONTINUED
- __WCOREDUMP
- __W_EXITCODE
- __W_STOPCODE
- __W_CONTINUED
- __WCOREFLAG
Fixes: #124944
>From c52b9ec2a12f514a99109c58a2875b51b4889a65 Mon Sep 17 00:00:00 2001
From: Nick Desaulniers <ndesaulniers at google.com>
Date: Mon, 3 Feb 2025 09:13:57 -0800
Subject: [PATCH 2/4] Replace macros defined by linux/wait.h. Just include that
kernel header.
---
.../llvm-libc-macros/linux/sys-wait-macros.h | 13 +------------
1 file changed, 1 insertion(+), 12 deletions(-)
diff --git a/libc/include/llvm-libc-macros/linux/sys-wait-macros.h b/libc/include/llvm-libc-macros/linux/sys-wait-macros.h
index c101638fdae3409..3808ecb5e6d88b1 100644
--- a/libc/include/llvm-libc-macros/linux/sys-wait-macros.h
+++ b/libc/include/llvm-libc-macros/linux/sys-wait-macros.h
@@ -9,12 +9,7 @@
#ifndef LLVM_LIBC_MACROS_LINUX_SYS_WAIT_MACROS_H
#define LLVM_LIBC_MACROS_LINUX_SYS_WAIT_MACROS_H
-// Wait flags
-#define WNOHANG 1 // Do not block
-#define WUNTRACED 2 // Report is a child has stopped even if untraced
-#define WEXITED 4 // Report dead child
-#define WCONTINUED 8 // Report if a stopped child has been resumed by SIGCONT
-#define WSTOPPED WUNTRACED
+#include <linux/wait.h>
// Wait status info macros
#define __WEXITSTATUS(status) (((status)&0xff00) >> 8)
@@ -35,10 +30,4 @@
#define W_EXITCODE(ret, sig) __W_EXITCODE(ret, sig)
#define W_STOPCODE(sig) __W_STOPCODE(sig)
-// First argument to waitid:
-#define P_ALL 0
-#define P_PID 1
-#define P_PGID 2
-#define P_PIDFD 3
-
#endif // LLVM_LIBC_MACROS_LINUX_SYS_WAIT_MACROS_H
>From bda908fcca7b9eb2feaf7e5a709f92428f9bab06 Mon Sep 17 00:00:00 2001
From: Nick Desaulniers <ndesaulniers at google.com>
Date: Mon, 3 Feb 2025 09:15:50 -0800
Subject: [PATCH 3/4] add missing POSIX mandated macros
---
.../llvm-libc-macros/linux/sys-wait-macros.h | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/libc/include/llvm-libc-macros/linux/sys-wait-macros.h b/libc/include/llvm-libc-macros/linux/sys-wait-macros.h
index 3808ecb5e6d88b1..ec0baa40c98cfde 100644
--- a/libc/include/llvm-libc-macros/linux/sys-wait-macros.h
+++ b/libc/include/llvm-libc-macros/linux/sys-wait-macros.h
@@ -12,9 +12,13 @@
#include <linux/wait.h>
// Wait status info macros
-#define __WEXITSTATUS(status) (((status)&0xff00) >> 8)
-#define __WTERMSIG(status) ((status)&0x7f)
+#define __WEXITSTATUS(status) (((status) & 0xff00) >> 8)
+#define __WTERMSIG(status) ((status) & 0x7f)
#define __WIFEXITED(status) (__WTERMSIG(status) == 0)
+#define __WIFSIGNALED(status) ((__WTERMSIG(status) + 1) >= 2)
+#define __WIFSTOPPED(status) (__WTERMSIG(status) == 0x7f)
+#define __WIFCONTINUED(status) ((status) == __W_CONTINUED)
+#define __WCOREDUMP(status) ((status) & __WCOREFLAG)
// Macros for constructing status values.
#define __W_EXITCODE(ret, sig) ((ret) << 8 | (sig))
@@ -22,9 +26,14 @@
#define __W_CONTINUED 0xffff
#define __WCOREFLAG 0x80
+#define WCOREDUMP(status) ((status) & __WCOREFLAG)
#define WEXITSTATUS(status) __WEXITSTATUS(status)
-#define WTERMSIG(status) __WTERMSIG(status)
+#define WIFCONTINUED(status) __WIFCONTINUED(status)
#define WIFEXITED(status) __WIFEXITED(status)
+#define WIFSIGNALED(status) __WIFSIGNALED(status)
+#define WIFSTOPPED(status) __WIFSTOPPED(status)
+#define WSTOPSIG(status) WEXITSTATUS(status)
+#define WTERMSIG(status) __WTERMSIG(status)
#define WCOREFLAG __WCOREFLAG
#define W_EXITCODE(ret, sig) __W_EXITCODE(ret, sig)
>From 8b2a96172843130cfd7848da9045b4fcdfa78361 Mon Sep 17 00:00:00 2001
From: Nick Desaulniers <ndesaulniers at google.com>
Date: Mon, 3 Feb 2025 09:24:40 -0800
Subject: [PATCH 4/4] git rid of glibc style __W* macros; users should not use
those
---
.../llvm-libc-macros/linux/sys-wait-macros.h | 35 ++++++-------------
1 file changed, 10 insertions(+), 25 deletions(-)
diff --git a/libc/include/llvm-libc-macros/linux/sys-wait-macros.h b/libc/include/llvm-libc-macros/linux/sys-wait-macros.h
index ec0baa40c98cfde..d01cfa71ba39066 100644
--- a/libc/include/llvm-libc-macros/linux/sys-wait-macros.h
+++ b/libc/include/llvm-libc-macros/linux/sys-wait-macros.h
@@ -11,32 +11,17 @@
#include <linux/wait.h>
-// Wait status info macros
-#define __WEXITSTATUS(status) (((status) & 0xff00) >> 8)
-#define __WTERMSIG(status) ((status) & 0x7f)
-#define __WIFEXITED(status) (__WTERMSIG(status) == 0)
-#define __WIFSIGNALED(status) ((__WTERMSIG(status) + 1) >= 2)
-#define __WIFSTOPPED(status) (__WTERMSIG(status) == 0x7f)
-#define __WIFCONTINUED(status) ((status) == __W_CONTINUED)
-#define __WCOREDUMP(status) ((status) & __WCOREFLAG)
-
-// Macros for constructing status values.
-#define __W_EXITCODE(ret, sig) ((ret) << 8 | (sig))
-#define __W_STOPCODE(sig) ((sig) << 8 | 0x7f)
-#define __W_CONTINUED 0xffff
-#define __WCOREFLAG 0x80
-
-#define WCOREDUMP(status) ((status) & __WCOREFLAG)
-#define WEXITSTATUS(status) __WEXITSTATUS(status)
-#define WIFCONTINUED(status) __WIFCONTINUED(status)
-#define WIFEXITED(status) __WIFEXITED(status)
-#define WIFSIGNALED(status) __WIFSIGNALED(status)
-#define WIFSTOPPED(status) __WIFSTOPPED(status)
+#define WCOREDUMP(status) ((status) & WCOREFLAG)
+#define WEXITSTATUS(status) (((status) & 0xff00) >> 8)
+#define WIFCONTINUED(status) ((status) == 0xffff)
+#define WIFEXITED(status) (WTERMSIG(status) == 0)
+#define WIFSIGNALED(status) ((WTERMSIG(status) + 1) >= 2)
+#define WIFSTOPPED(status) (WTERMSIG(status) == 0x7f)
#define WSTOPSIG(status) WEXITSTATUS(status)
-#define WTERMSIG(status) __WTERMSIG(status)
+#define WTERMSIG(status) ((status) & 0x7f)
-#define WCOREFLAG __WCOREFLAG
-#define W_EXITCODE(ret, sig) __W_EXITCODE(ret, sig)
-#define W_STOPCODE(sig) __W_STOPCODE(sig)
+#define WCOREFLAG 0x80
+#define W_EXITCODE(ret, sig) ((ret) << 8 | (sig))
+#define W_STOPCODE(sig) ((sig) << 8 | 0x7f)
#endif // LLVM_LIBC_MACROS_LINUX_SYS_WAIT_MACROS_H
More information about the libc-commits
mailing list