aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2020-11-28 12:19:20 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2020-11-28 12:19:20 +0000
commit412ef5da8a75067e5a31fe626b776451e244fb43 (patch)
tree23cf35433d5df02bdc975393223515c0a95f9417 /lib
parentcd8537910406e68d4719136a5b0cf6d23bb1b23b (diff)
downloadsrc-412ef5da8a75067e5a31fe626b776451e244fb43.tar.gz
src-412ef5da8a75067e5a31fe626b776451e244fb43.zip
libc: Add pthread_attr_get_np(3) stub, reporting ESRCH.
This seems to be required by recent clang asan. I do not see other way than put the symbol under FBSD_1.0 version. PR: 251112 Reported by: Andrew Stitcher <astitcher@apache.org> Reviewed by: emaste Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D27389
Notes
Notes: svn path=/head/; revision=368125
Diffstat (limited to 'lib')
-rw-r--r--lib/libc/gen/Symbol.map1
-rw-r--r--lib/libc/gen/_pthread_stubs.c9
-rw-r--r--lib/libc/include/libc_private.h1
-rw-r--r--lib/libthr/thread/thr_init.c1
4 files changed, 12 insertions, 0 deletions
diff --git a/lib/libc/gen/Symbol.map b/lib/libc/gen/Symbol.map
index 718b95e6f82d..df9ac2227ace 100644
--- a/lib/libc/gen/Symbol.map
+++ b/lib/libc/gen/Symbol.map
@@ -6,6 +6,7 @@ FBSD_1.0 {
__xuname;
pthread_atfork;
pthread_attr_destroy;
+ pthread_attr_get_np;
pthread_attr_getdetachstate;
pthread_attr_getguardsize;
pthread_attr_getinheritsched;
diff --git a/lib/libc/gen/_pthread_stubs.c b/lib/libc/gen/_pthread_stubs.c
index bf133417585f..fe5d704c3bb9 100644
--- a/lib/libc/gen/_pthread_stubs.c
+++ b/lib/libc/gen/_pthread_stubs.c
@@ -59,6 +59,7 @@ static int stub_zero(void);
static int stub_fail(void);
static int stub_true(void);
static void stub_exit(void);
+static int stub_esrch(void);
#define PJT_DUAL_ENTRY(entry) \
(pthread_func_t)entry, (pthread_func_t)entry
@@ -131,6 +132,7 @@ pthread_func_entry_t __thr_jtable[PJT_MAX] = {
[PJT_MUTEXATTR_GETROBUST] = {PJT_DUAL_ENTRY(stub_zero)},
[PJT_MUTEXATTR_SETROBUST] = {PJT_DUAL_ENTRY(stub_zero)},
[PJT_GETTHREADID_NP] = {PJT_DUAL_ENTRY(stub_zero)},
+ [PJT_ATTR_GET_NP] = {PJT_DUAL_ENTRY(stub_esrch)},
};
/*
@@ -288,6 +290,7 @@ STUB_FUNC3(__pthread_cleanup_push_imp, PJT_CLEANUP_PUSH_IMP, void, void *,
void *, void *)
STUB_FUNC1(_pthread_cancel_enter, PJT_CANCEL_ENTER, void, int)
STUB_FUNC1(_pthread_cancel_leave, PJT_CANCEL_LEAVE, void, int)
+STUB_FUNC2(pthread_attr_get_np, PJT_ATTR_GET_NP, int, pthread_t, pthread_attr_t *)
static int
stub_zero(void)
@@ -330,3 +333,9 @@ stub_exit(void)
{
exit(0);
}
+
+static int
+stub_esrch(void)
+{
+ return (ESRCH);
+}
diff --git a/lib/libc/include/libc_private.h b/lib/libc/include/libc_private.h
index 2585855c5191..d3dfa30bb9cc 100644
--- a/lib/libc/include/libc_private.h
+++ b/lib/libc/include/libc_private.h
@@ -177,6 +177,7 @@ typedef enum {
PJT_MUTEXATTR_GETROBUST,
PJT_MUTEXATTR_SETROBUST,
PJT_GETTHREADID_NP,
+ PJT_ATTR_GET_NP,
PJT_MAX
} pjt_index_t;
diff --git a/lib/libthr/thread/thr_init.c b/lib/libthr/thread/thr_init.c
index 9c5d1ede2d30..82bde10a153e 100644
--- a/lib/libthr/thread/thr_init.c
+++ b/lib/libthr/thread/thr_init.c
@@ -271,6 +271,7 @@ static pthread_func_t jmp_table[][2] = {
[PJT_MUTEXATTR_GETROBUST] = {DUAL_ENTRY(_thr_mutexattr_getrobust)},
[PJT_MUTEXATTR_SETROBUST] = {DUAL_ENTRY(_thr_mutexattr_setrobust)},
[PJT_GETTHREADID_NP] = {DUAL_ENTRY(_thr_getthreadid_np)},
+ [PJT_ATTR_GET_NP] = {DUAL_ENTRY(_thr_attr_get_np)},
};
static int init_once = 0;