From 793e891f4ad1ef450f562a241fb0bd3b21d72251 Mon Sep 17 00:00:00 2001 From: Konstantin Belousov Date: Sun, 15 Feb 2026 17:23:03 +0200 Subject: [PATCH] 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 --- tests/sys/kern/pdrfork.c | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/tests/sys/kern/pdrfork.c b/tests/sys/kern/pdrfork.c index 8244a34b657..30045e0a05a 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()); }