aboutsummaryrefslogtreecommitdiff
path: root/lib/libpthread/weak
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libpthread/weak')
-rw-r--r--lib/libpthread/weak/Makefile25
-rw-r--r--lib/libpthread/weak/Makefile.inc1
-rw-r--r--lib/libpthread/weak/lib/Makefile21
-rw-r--r--lib/libpthread/weak/lib/h_pthread_weak.c83
-rw-r--r--lib/libpthread/weak/lib/h_pthread_weak.h36
-rw-r--r--lib/libpthread/weak/t_pthread_weak_nothread.c64
-rw-r--r--lib/libpthread/weak/t_pthread_weak_threaded.c64
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();
+}