aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Belousov <kib@FreeBSD.org>2026-04-21 06:13:04 +0000
committerKonstantin Belousov <kib@FreeBSD.org>2026-04-21 22:57:24 +0000
commit5c89d661a023c83a2001cf5b354b09c7d3ac91d8 (patch)
treea79ac011c3a9786b7055b95a46ef5c178582ef97
parent2434fcfd0dd07847a8518351b4525ec488f4d0bd (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/Makefile1
-rw-r--r--usr.bin/kdump/kdump.c23
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