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
This commit is contained in:
Konstantin Belousov
2026-04-21 09:13:04 +03:00
parent 2434fcfd0d
commit 5c89d661a0
2 changed files with 21 additions and 3 deletions
+1
View File
@@ -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"
+20 -3
View File
@@ -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 @@ ktrstructarray(struct ktr_struct_array *ksa, size_t buflen)
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