diff options
| author | Konstantin Belousov <kib@FreeBSD.org> | 2026-02-15 15:23:03 +0000 |
|---|---|---|
| committer | Konstantin Belousov <kib@FreeBSD.org> | 2026-02-16 17:57:53 +0000 |
| commit | 793e891f4ad1ef450f562a241fb0bd3b21d72251 (patch) | |
| tree | 86ee35d442c9e285d9842fa1a3b485e111bc70ff | |
| parent | f90ee665d035a5e4aea0bcaa18793e683ea253ed (diff) | |
pdrfork(2) tests: enable on x86
Use pfrfork_thread(3) instead of pdrfork(RFSPAWN) to make tests working
on x86.
Tested by: pho
Reviewed by: markj
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Differential revision: https://reviews.freebsd.org/D55306
| -rw-r--r-- | tests/sys/kern/pdrfork.c | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/tests/sys/kern/pdrfork.c b/tests/sys/kern/pdrfork.c index 8244a34b6577..30045e0a05a5 100644 --- a/tests/sys/kern/pdrfork.c +++ b/tests/sys/kern/pdrfork.c @@ -145,18 +145,31 @@ ATF_TC_BODY(rfprocdesc, tc) basic_usage(RFPROC | RFPROCDESC); } +static int +rfspawn_fn(void *arg) +{ + _exit(0); + return (0); +} + /* basic usage with RFSPAWN */ -/* - * Skip on i386 and x86_64 because RFSPAWN cannot be used from C code on those - * architectures. See lib/libc/gen/posix_spawn.c for details. - */ -#if !(defined(__i386__)) && !(defined(__amd64__)) ATF_TC_WITHOUT_HEAD(rfspawn); ATF_TC_BODY(rfspawn, tc) { - basic_usage(RFSPAWN); -} + char *stack = NULL; + int pd = -1; + pid_t pid; + +#if defined(__i386__) || defined(__amd64__) +#define STACK_SZ (PAGE_SIZE * 10) + stack = mmap(NULL, STACK_SZ, PROT_READ | PROT_WRITE, MAP_ANON, + -1, 0); + ATF_REQUIRE(stack != MAP_FAILED); + stack += STACK_SZ; #endif + pid = pdrfork_thread(&pd, 0, RFSPAWN, stack, rfspawn_fn, NULL); + basic_usage_tail(pd, pid); +} ATF_TP_ADD_TCS(tp) { @@ -164,9 +177,7 @@ ATF_TP_ADD_TCS(tp) ATF_TP_ADD_TC(tp, efault); ATF_TP_ADD_TC(tp, einval); ATF_TP_ADD_TC(tp, rfprocdesc); -#if !(defined(__i386__)) && !(defined(__amd64__)) ATF_TP_ADD_TC(tp, rfspawn); -#endif return (atf_no_error()); } |
