Module Name: src
Committed By: christos
Date: Wed Sep 25 19:24:15 UTC 2024
Modified Files:
src/tests/lib/libc/sys: t_clone.c
Log Message:
centralize stack allocation/freeing. The test that broke with the new jemalloc
had broken stack allocation.
To generate a diff of this commit:
cvs rdiff -u -r1.4 -r1.5 src/tests/lib/libc/sys/t_clone.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/tests/lib/libc/sys/t_clone.c
diff -u src/tests/lib/libc/sys/t_clone.c:1.4 src/tests/lib/libc/sys/t_clone.c:1.5
--- src/tests/lib/libc/sys/t_clone.c:1.4 Tue May 23 11:56:55 2017
+++ src/tests/lib/libc/sys/t_clone.c Wed Sep 25 15:24:15 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: t_clone.c,v 1.4 2017/05/23 15:56:55 christos Exp $ */
+/* $NetBSD: t_clone.c,v 1.5 2024/09/25 19:24:15 christos Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@@ -32,11 +32,12 @@
#include <sys/cdefs.h>
__COPYRIGHT("@(#) Copyright (c) 2008\
The NetBSD Foundation, inc. All rights reserved.");
-__RCSID("$NetBSD: t_clone.c,v 1.4 2017/05/23 15:56:55 christos Exp $");
+__RCSID("$NetBSD: t_clone.c,v 1.5 2024/09/25 19:24:15 christos Exp $");
+#include <sys/param.h>
+#include <sys/types.h>
#include <sys/mman.h>
#include <sys/resource.h>
-#include <sys/types.h>
#include <sys/wait.h>
#include <errno.h>
@@ -53,6 +54,27 @@ __RCSID("$NetBSD: t_clone.c,v 1.4 2017/0
#define FROBVAL 41973
#define CHILDEXIT 0xa5
+static void *
+getstack(void)
+{
+ void *stack = mmap(NULL, STACKSIZE, PROT_READ|PROT_WRITE,
+ MAP_PRIVATE|MAP_ANON, -1, (off_t) 0);
+ ATF_REQUIRE_ERRNO(errno, stack != MAP_FAILED);
+#ifndef __MACHINE_STACK_GROWS_UP
+ stack = (char *)stack + STACKSIZE;
+#endif
+ return stack;
+}
+
+static void
+putstack(void *stack)
+{
+#ifndef __MACHINE_STACK_GROWS_UP
+ stack = (char *)stack - STACKSIZE;
+#endif
+ ATF_REQUIRE_ERRNO(errno, munmap(stack, STACKSIZE) != -1);
+}
+
static int
dummy(void *arg)
{
@@ -94,21 +116,11 @@ ATF_TC_HEAD(clone_basic, tc)
ATF_TC_BODY(clone_basic, tc)
{
sigset_t mask;
- void *allocstack, *stack;
+ void *stack = getstack();
pid_t pid;
volatile long frobme[2];
int stat;
- allocstack = mmap(NULL, STACKSIZE, PROT_READ|PROT_WRITE,
- MAP_PRIVATE|MAP_ANON, -1, (off_t) 0);
-
- ATF_REQUIRE_ERRNO(errno, allocstack != MAP_FAILED);
-
- stack = allocstack;
-#ifndef __MACHINE_STACK_GROWS_UP
- stack = (char *)stack + STACKSIZE;
-#endif
-
printf("parent: stack = %p, frobme = %p\n", stack, frobme);
fflush(stdout);
@@ -158,7 +170,7 @@ ATF_TC_BODY(clone_basic, tc)
/*NOTREACHED*/
}
- ATF_REQUIRE_ERRNO(errno, munmap(allocstack, STACKSIZE) != -1);
+ putstack(stack);
}
ATF_TC(clone_null_stack);
@@ -190,16 +202,9 @@ ATF_TC_HEAD(clone_null_func, tc)
ATF_TC_BODY(clone_null_func, tc)
{
- void *allocstack, *stack;
+ void *stack = getstack();
int rv;
- allocstack = mmap(NULL, STACKSIZE, PROT_READ|PROT_WRITE,
- MAP_PRIVATE|MAP_ANON, -1, (off_t) 0);
- ATF_REQUIRE_ERRNO(errno, allocstack != MAP_FAILED);
- stack = allocstack;
-#ifndef __MACHINE_STACK_GROWS_UP
- stack = (char *)stack + STACKSIZE;
-#endif
errno = 0;
rv = __clone(0, stack,
@@ -208,7 +213,7 @@ ATF_TC_BODY(clone_null_func, tc)
ATF_REQUIRE_EQ(rv, -1);
ATF_REQUIRE_EQ(errno, EINVAL);
- ATF_REQUIRE_ERRNO(errno, munmap(allocstack, STACKSIZE) != -1);
+ putstack(stack);
}
ATF_TC(clone_out_of_proc);
@@ -222,6 +227,7 @@ ATF_TC_HEAD(clone_out_of_proc, tc)
ATF_TC_BODY(clone_out_of_proc, tc)
{
+ char *stack = getstack();
struct rlimit rl;
int rv;
@@ -233,11 +239,12 @@ ATF_TC_BODY(clone_out_of_proc, tc)
ATF_REQUIRE_ERRNO(errno, setrlimit(RLIMIT_NPROC, &rl) != -1);
errno = 0;
- rv = __clone(dummy, malloc(10240),
+ rv = __clone(dummy, stack,
CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|SIGCHLD, (void *)&rl);
ATF_REQUIRE_EQ(rv, -1);
ATF_REQUIRE_EQ(errno, EAGAIN);
+ putstack(stack);
}
ATF_TP_ADD_TCS(tp)