git: b9c8a07d4dd9 - main - C runtime: enable extended error reporting from kernel
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 31 May 2025 19:52:54 UTC
The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=b9c8a07d4dd932aaa43a4ed4c2fe07ac3d901544 commit b9c8a07d4dd932aaa43a4ed4c2fe07ac3d901544 Author: Konstantin Belousov <kib@FreeBSD.org> AuthorDate: 2025-05-23 05:02:41 +0000 Commit: Konstantin Belousov <kib@FreeBSD.org> CommitDate: 2025-05-31 19:52:42 +0000 C runtime: enable extended error reporting from kernel Reviewed by: brooks Sponsored by: The FreeBSD Foundation MFC after: 2 weeks Differential revision: https://reviews.freebsd.org/D50483 --- lib/libc/gen/Makefile.inc | 1 + lib/libc/gen/uexterr_gettext.c | 15 +++++++++++++++ lib/libthr/thread/thr_create.c | 4 ++++ lib/libthr/thread/thr_init.c | 3 +++ lib/libthr/thread/thr_private.h | 3 +++ 5 files changed, 26 insertions(+) diff --git a/lib/libc/gen/Makefile.inc b/lib/libc/gen/Makefile.inc index 9a223f2f69e8..6416effeb568 100644 --- a/lib/libc/gen/Makefile.inc +++ b/lib/libc/gen/Makefile.inc @@ -159,6 +159,7 @@ SRCS+= \ ttyname.c \ ttyslot.c \ ualarm.c \ + uexterr_gettext.c \ ulimit.c \ uname.c \ unvis-compat.c \ diff --git a/lib/libc/gen/uexterr_gettext.c b/lib/libc/gen/uexterr_gettext.c new file mode 100644 index 000000000000..1ee295556a4e --- /dev/null +++ b/lib/libc/gen/uexterr_gettext.c @@ -0,0 +1,15 @@ +#include <sys/types.h> +#include <sys/exterrvar.h> +#include <exterr.h> +#include <string.h> + +static struct uexterror uexterr = { + .ver = UEXTERROR_VER, +}; + +static void uexterr_ctr(void) __attribute__((constructor)); +static void +uexterr_ctr(void) +{ + exterrctl(EXTERRCTL_ENABLE, 0, &uexterr); +} diff --git a/lib/libthr/thread/thr_create.c b/lib/libthr/thread/thr_create.c index 84bbd36ed28d..ba2575d461e5 100644 --- a/lib/libthr/thread/thr_create.c +++ b/lib/libthr/thread/thr_create.c @@ -31,6 +31,7 @@ #include <sys/types.h> #include <sys/rtprio.h> #include <sys/signalvar.h> +#include <sys/exterrvar.h> #include <errno.h> #include <link.h> #include <stdlib.h> @@ -285,6 +286,9 @@ thread_start(struct pthread *curthread) curthread->attr.stacksize_attr; #endif + curthread->uexterr.ver = UEXTERROR_VER; + exterrctl(EXTERRCTL_ENABLE, 0, &curthread->uexterr); + /* Run the current thread's start routine with argument: */ _pthread_exit(curthread->start_routine(curthread->arg)); diff --git a/lib/libthr/thread/thr_init.c b/lib/libthr/thread/thr_init.c index 8855491b91cb..aef2281c5f22 100644 --- a/lib/libthr/thread/thr_init.c +++ b/lib/libthr/thread/thr_init.c @@ -433,6 +433,9 @@ init_main_thread(struct pthread *thread) thread->unwind_stackend = _usrstack; #endif + thread->uexterr.ver = UEXTERROR_VER; + exterrctl(EXTERRCTL_ENABLE, EXTERRCTLF_FORCE, &thread->uexterr); + /* Others cleared to zero by thr_alloc() */ } diff --git a/lib/libthr/thread/thr_private.h b/lib/libthr/thread/thr_private.h index dc5be08a0760..11afd74eea16 100644 --- a/lib/libthr/thread/thr_private.h +++ b/lib/libthr/thread/thr_private.h @@ -40,6 +40,7 @@ #include <sys/queue.h> #include <sys/param.h> #include <sys/cpuset.h> +#include <sys/exterrvar.h> #include <machine/atomic.h> #include <errno.h> #include <limits.h> @@ -576,6 +577,8 @@ struct pthread { /* pthread_set/get_name_np */ char *name; + + struct uexterror uexterr; }; #define THR_SHOULD_GC(thrd) \