Skip to content

[libc][sys/wait][linux] add missing and clean up existing macros #125572

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Feb 5, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 14 additions & 31 deletions libc/include/llvm-libc-macros/linux/sys-wait-macros.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,36 +9,19 @@
#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

// Wait status info macros
#define __WEXITSTATUS(status) (((status)&0xff00) >> 8)
#define __WTERMSIG(status) ((status)&0x7f)
#define __WIFEXITED(status) (__WTERMSIG(status) == 0)

// 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 WEXITSTATUS(status) __WEXITSTATUS(status)
#define WTERMSIG(status) __WTERMSIG(status)
#define WIFEXITED(status) __WIFEXITED(status)

#define WCOREFLAG __WCOREFLAG
#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
#include <linux/wait.h>

#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) ((status) & 0x7f)

#define WCOREFLAG 0x80
#define W_EXITCODE(ret, sig) ((ret) << 8 | (sig))
#define W_STOPCODE(sig) ((sig) << 8 | 0x7f)
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These three aren't specified by POSIX. Are they glibc extensions? Perhaps doesn't matter for this PR, but I did choose to retain them in case they're in widespread use.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

they're in BSD too.

the commit message on the change that added them to bionic was "Fixes for building gdbserver (and gdb) out of the box.".

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, thanks for the context. Maybe ACSRG can standardize them at some point. Will leave them for now.


#endif // LLVM_LIBC_MACROS_LINUX_SYS_WAIT_MACROS_H