diff options
Diffstat (limited to 'lib/libpthread/weak')
| -rw-r--r-- | lib/libpthread/weak/Makefile | 25 | ||||
| -rw-r--r-- | lib/libpthread/weak/Makefile.inc | 1 | ||||
| -rw-r--r-- | lib/libpthread/weak/lib/Makefile | 21 | ||||
| -rw-r--r-- | lib/libpthread/weak/lib/h_pthread_weak.c | 83 | ||||
| -rw-r--r-- | lib/libpthread/weak/lib/h_pthread_weak.h | 36 | ||||
| -rw-r--r-- | lib/libpthread/weak/t_pthread_weak_nothread.c | 64 | ||||
| -rw-r--r-- | lib/libpthread/weak/t_pthread_weak_threaded.c | 64 |
7 files changed, 294 insertions, 0 deletions
diff --git a/lib/libpthread/weak/Makefile b/lib/libpthread/weak/Makefile new file mode 100644 index 000000000000..f7cdd75c2723 --- /dev/null +++ b/lib/libpthread/weak/Makefile @@ -0,0 +1,25 @@ +# $NetBSD: Makefile,v 1.2 2025/10/18 20:27:23 riastradh Exp $ +# + +TESTSDIR= ${TESTSBASE}/lib/libpthread/weak + +TESTS_C+= t_pthread_weak_nothread +TESTS_C+= t_pthread_weak_threaded + +CPPFLAGS+= -I${.CURDIR}/lib + +.include <bsd.own.mk> # PRINTOBJDIR + +.if !defined(H_PTHREAD_WEAK_OBJDIR) +H_PTHREAD_WEAK_OBJDIR!= cd ${.CURDIR}/lib && ${PRINTOBJDIR} +.MAKEOVERRIDES+= H_PTHREAD_WEAK_OBJDIR +.endif + +LDADD+= -L${H_PTHREAD_WEAK_OBJDIR} +LDADD+= -Wl,-rpath,${TESTSBASE}/lib/libpthread/weak +LDADD+= -lh_pthread_weak +LDADD.t_pthread_weak_threaded+= -lpthread + +SUBDIR+= lib + +.include <bsd.test.mk> diff --git a/lib/libpthread/weak/Makefile.inc b/lib/libpthread/weak/Makefile.inc new file mode 100644 index 000000000000..921a499b55ba --- /dev/null +++ b/lib/libpthread/weak/Makefile.inc @@ -0,0 +1 @@ +.include "${.PARSEDIR}/../../Makefile.inc" diff --git a/lib/libpthread/weak/lib/Makefile b/lib/libpthread/weak/lib/Makefile new file mode 100644 index 000000000000..0976a72efd27 --- /dev/null +++ b/lib/libpthread/weak/lib/Makefile @@ -0,0 +1,21 @@ +# $NetBSD: Makefile,v 1.2 2026/01/21 17:57:27 christos Exp $ +# + +MKPROFILE= no # XXX hack -- should be NOPROFILE +NOLINT= # defined +NOPICINSTALL= # defined +NOMAN= # defined +NOSTATICLIB= # defined + +LIB= h_pthread_weak +SRCS+= h_pthread_weak.c + +LDADD+= -latf-c + +LIBDIR= ${TESTSBASE}/lib/libpthread/weak +SHLIBDIR= ${TESTSBASE}/lib/libpthread/weak +SHLIB_MAJOR= 1 + +LIBISCXX= yes + +.include <bsd.lib.mk> diff --git a/lib/libpthread/weak/lib/h_pthread_weak.c b/lib/libpthread/weak/lib/h_pthread_weak.c new file mode 100644 index 000000000000..d8b9e624c07d --- /dev/null +++ b/lib/libpthread/weak/lib/h_pthread_weak.c @@ -0,0 +1,83 @@ +/* $NetBSD: h_pthread_weak.c,v 1.1 2025/10/06 13:16:44 riastradh Exp $ */ + +/*- + * Copyright (c) 2025 The NetBSD Foundation, Inc. + * All rights reserved. + * + * 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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 <sys/cdefs.h> +__RCSID("$NetBSD: h_pthread_weak.c,v 1.1 2025/10/06 13:16:44 riastradh Exp $"); + +#define _NETBSD_PTHREAD_CREATE_WEAK + +#include "h_pthread_weak.h" + +#include <atf-c.h> +#include <pthread.h> + +#include "h_macros.h" + +static void * +start(void *cookie) +{ + return cookie; +} + +void +test_mutex(void) +{ + pthread_mutex_t mtx; + + RZ(pthread_mutex_init(&mtx, NULL)); + RZ(pthread_mutex_lock(&mtx)); + RZ(pthread_mutex_unlock(&mtx)); + RZ(pthread_mutex_destroy(&mtx)); +} + +void +test_thread_creation(void) +{ + int cookie = 123; + pthread_attr_t attr; + pthread_t t; + void *result; + + RZ(pthread_attr_init(&attr)); + RZ(pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE)); + RZ(pthread_create(&t, NULL, &start, &cookie)); + RZ(pthread_attr_destroy(&attr)); + RZ(pthread_join(t, &result)); + ATF_CHECK_EQ(result, &cookie); +} + +void +test_thread_creation_failure(void) +{ + int cookie = 123; + pthread_t t; + int error; + + error = pthread_create(&t, NULL, &start, &cookie); + ATF_CHECK_MSG(error != 0, "pthread_create unexpectedly succeeded"); +} diff --git a/lib/libpthread/weak/lib/h_pthread_weak.h b/lib/libpthread/weak/lib/h_pthread_weak.h new file mode 100644 index 000000000000..b970d2b020c6 --- /dev/null +++ b/lib/libpthread/weak/lib/h_pthread_weak.h @@ -0,0 +1,36 @@ +/* $NetBSD: h_pthread_weak.h,v 1.1 2025/10/06 13:16:44 riastradh Exp $ */ + +/*- + * Copyright (c) 2025 The NetBSD Foundation, Inc. + * All rights reserved. + * + * 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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. + */ + +#ifndef H_PTHREAD_WEAK_H +#define H_PTHREAD_WEAK_H + +void test_mutex(void); +void test_thread_creation(void); +void test_thread_creation_failure(void); + +#endif /* H_PTHREAD_WEAK_H */ diff --git a/lib/libpthread/weak/t_pthread_weak_nothread.c b/lib/libpthread/weak/t_pthread_weak_nothread.c new file mode 100644 index 000000000000..a5447b695dbb --- /dev/null +++ b/lib/libpthread/weak/t_pthread_weak_nothread.c @@ -0,0 +1,64 @@ +/* $NetBSD: t_pthread_weak_nothread.c,v 1.1 2025/10/18 20:27:23 riastradh Exp $ */ + +/*- + * Copyright (c) 2025 The NetBSD Foundation, Inc. + * All rights reserved. + * + * 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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 <sys/cdefs.h> +__RCSID("$NetBSD: t_pthread_weak_nothread.c,v 1.1 2025/10/18 20:27:23 riastradh Exp $"); + +#include <atf-c.h> + +#include "h_pthread_weak.h" + +ATF_TC(mutex); +ATF_TC_HEAD(mutex, tc) +{ + atf_tc_set_md_var(tc, "descr", + "Test mutex usage in library with _NETBSD_PTHREAD_CREATE_WEAK"); +} +ATF_TC_BODY(mutex, tc) +{ + test_mutex(); +} + +ATF_TC(thread_creation_failure); +ATF_TC_HEAD(thread_creation_failure, tc) +{ + atf_tc_set_md_var(tc, "descr", + "Test pthread_create via library fails in no-thread application"); +} +ATF_TC_BODY(thread_creation_failure, tc) +{ + test_thread_creation_failure(); +} + +ATF_TP_ADD_TCS(tp) +{ + ATF_TP_ADD_TC(tp, mutex); + ATF_TP_ADD_TC(tp, thread_creation_failure); + + return atf_no_error(); +} diff --git a/lib/libpthread/weak/t_pthread_weak_threaded.c b/lib/libpthread/weak/t_pthread_weak_threaded.c new file mode 100644 index 000000000000..70c649ea13b6 --- /dev/null +++ b/lib/libpthread/weak/t_pthread_weak_threaded.c @@ -0,0 +1,64 @@ +/* $NetBSD: t_pthread_weak_threaded.c,v 1.1 2025/10/18 20:27:23 riastradh Exp $ */ + +/*- + * Copyright (c) 2025 The NetBSD Foundation, Inc. + * All rights reserved. + * + * 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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 <sys/cdefs.h> +__RCSID("$NetBSD: t_pthread_weak_threaded.c,v 1.1 2025/10/18 20:27:23 riastradh Exp $"); + +#include <atf-c.h> + +#include "h_pthread_weak.h" + +ATF_TC(mutex); +ATF_TC_HEAD(mutex, tc) +{ + atf_tc_set_md_var(tc, "descr", + "Test mutex usage in library with _NETBSD_PTHREAD_CREATE_WEAK"); +} +ATF_TC_BODY(mutex, tc) +{ + test_mutex(); +} + +ATF_TC(thread_creation); +ATF_TC_HEAD(thread_creation, tc) +{ + atf_tc_set_md_var(tc, "descr", + "Test pthread_create via library in threaded application"); +} +ATF_TC_BODY(thread_creation, tc) +{ + test_thread_creation(); +} + +ATF_TP_ADD_TCS(tp) +{ + ATF_TP_ADD_TC(tp, mutex); + ATF_TP_ADD_TC(tp, thread_creation); + + return atf_no_error(); +} |
