Index: lib/libthr/tests/Makefile =================================================================== --- lib/libthr/tests/Makefile +++ lib/libthr/tests/Makefile @@ -4,6 +4,8 @@ TESTSRC= ${SRCTOP}/contrib/netbsd-tests/lib/libpthread +ATF_TESTS_C= stack_test + # TODO: t_name (missing pthread_getname_np support in FreeBSD) NETBSD_ATF_TESTS_C= barrier_test NETBSD_ATF_TESTS_C+= cond_test Index: lib/libthr/tests/stack_test.c =================================================================== --- /dev/null +++ lib/libthr/tests/stack_test.c @@ -0,0 +1,70 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2019 The FreeBSD Foundation + * + * This software was developed by Mark Johnston under sponsorship from + * the FreeBSD Foundation. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include + +#include + +static void * +emptyfn(void *arg __unused) +{ + + return (NULL); +} + +/* + * Make sure that a thread can start and exit when using the minimum stack size. + */ +ATF_TC_WITHOUT_HEAD(stack__min_stack_size); +ATF_TC_BODY(stack__min_stack_size, tc) +{ + pthread_t t; + pthread_attr_t attr; + int error; + + error = pthread_attr_init(&attr); + ATF_REQUIRE(error == 0); + error = pthread_attr_setstacksize(&attr, PTHREAD_STACK_MIN); + ATF_REQUIRE(error == 0); + error = pthread_create(&t, &attr, emptyfn, NULL); + ATF_REQUIRE(error == 0); + error = pthread_join(t, NULL); + ATF_REQUIRE(error == 0); +} + +ATF_TP_ADD_TCS(tp) +{ + + ATF_TP_ADD_TC(tp, stack__min_stack_size); +} Index: sys/x86/include/_limits.h =================================================================== --- sys/x86/include/_limits.h +++ sys/x86/include/_limits.h @@ -98,6 +98,10 @@ #define __WORD_BIT 32 /* Minimum signal stack size. */ +#ifdef __LP64__ +#define __MINSIGSTKSZ (1024 * 4) +#else #define __MINSIGSTKSZ (512 * 4) +#endif #endif /* !_MACHINE__LIMITS_H_ */