diff options
| author | Konstantin Belousov <kib@FreeBSD.org> | 2026-04-21 06:13:04 +0000 |
|---|---|---|
| committer | Konstantin Belousov <kib@FreeBSD.org> | 2026-04-21 22:57:24 +0000 |
| commit | 5c89d661a023c83a2001cf5b354b09c7d3ac91d8 (patch) | |
| tree | a79ac011c3a9786b7055b95a46ef5c178582ef97 | |
| parent | 2434fcfd0dd07847a8518351b4525ec488f4d0bd (diff) | |
kdump: tweaks for the extended errors decoding
Format the message.
Convert category to the source name if known.
Still print the raw value for the category, and the values of the
EXTERROR() optional arguments.
Requested and reviewed by: mckusick
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Differential revision: https://reviews.freebsd.org/D56542
| -rw-r--r-- | usr.bin/kdump/Makefile | 1 | ||||
| -rw-r--r-- | usr.bin/kdump/kdump.c | 23 |
2 files changed, 21 insertions, 3 deletions
diff --git a/usr.bin/kdump/Makefile b/usr.bin/kdump/Makefile index 2c5c456a6de5..cef87f665b46 100644 --- a/usr.bin/kdump/Makefile +++ b/usr.bin/kdump/Makefile @@ -5,6 +5,7 @@ PROG= kdump SRCS= kdump.c subr.c CFLAGS+= -I${SRCTOP}/usr.bin/ktrace +CFLAGS+= -I${SRCTOP}/lib/libc/gen LIBADD= sysdecode .if ${MK_CASPER} != "no" diff --git a/usr.bin/kdump/kdump.c b/usr.bin/kdump/kdump.c index d3f2ac882e61..9ebd18646474 100644 --- a/usr.bin/kdump/kdump.c +++ b/usr.bin/kdump/kdump.c @@ -40,6 +40,7 @@ #include <sys/_bitset.h> #include <sys/bitset.h> #include <sys/errno.h> +#include <sys/exterr_cat.h> #include <sys/time.h> #include <sys/uio.h> #include <sys/event.h> @@ -2442,15 +2443,31 @@ bad_size: return; } +static const char * const cat_to_filenames[] = { +#include <exterr_cat_filenames.h> +}; + +static const char * +cat_to_filename(int category) +{ + if (category < 0 || (unsigned)category >= nitems(cat_to_filenames) || + cat_to_filenames[category] == NULL) + return ("unknown"); + return (cat_to_filenames[category]); +} + static void ktrexterr(struct ktr_exterr *ke) { + char *msg; struct uexterror *ue; ue = &ke->ue; - printf("{ errno %d category %u (src line %u) p1 %#jx p2 %#jx %s }\n", - ue->error, ue->cat, ue->src_line, - (uintmax_t)ue->p1, (uintmax_t)ue->p2, ue->msg); + asprintf(&msg, ue->msg, (uintmax_t)ue->p1, (uintmax_t)ue->p2); + printf("{ errno %d %s:%u \"%s\" (category %u p1 %#jx p2 %#jx) }\n", + ue->error, cat_to_filename(ue->cat), ue->src_line, msg, + ue->cat, (uintmax_t)ue->p1, (uintmax_t)ue->p2); + free(msg); } static void |
