aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2026-02-15 15:23:03 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2026-02-16 17:57:53 +0000
commit793e891f4ad1ef450f562a241fb0bd3b21d72251 (patch)
tree86ee35d442c9e285d9842fa1a3b485e111bc70ff
parentf90ee665d035a5e4aea0bcaa18793e683ea253ed (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.c29
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());
}