git: b683fd0b3206 - main - preload: add "show preload" DDB command
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 30 Apr 2026 05:20:51 UTC
The branch main has been updated by stevek:
URL: https://cgit.FreeBSD.org/src/commit/?id=b683fd0b3206b35214f7f87805246e5c74552942
commit b683fd0b3206b35214f7f87805246e5c74552942
Author: Stephen J. Kiernan <stevek@FreeBSD.org>
AuthorDate: 2026-04-30 05:19:09 +0000
Commit: Stephen J. Kiernan <stevek@FreeBSD.org>
CommitDate: 2026-04-30 05:20:12 +0000
preload: add "show preload" DDB command
This is the DDB equivalent of the debug.dump_modinfo sysctl which
outputs pretty-printed bootloader metadata.
Move sbuf_db_printf_drain to subr_prf.c and expose it for general use.
Reviewed By: jmg
Differential Revision: https://reviews.freebsd.org/D53763
---
sys/kern/subr_module.c | 20 ++++++++++++++++++++
sys/kern/subr_prf.c | 9 +++++++++
sys/kern/subr_witness.c | 6 ------
sys/sys/sbuf.h | 3 +++
4 files changed, 32 insertions(+), 6 deletions(-)
diff --git a/sys/kern/subr_module.c b/sys/kern/subr_module.c
index 92f22206f8cf..b2d723fef038 100644
--- a/sys/kern/subr_module.c
+++ b/sys/kern/subr_module.c
@@ -28,6 +28,9 @@
* SUCH DAMAGE.
*/
+#include <sys/cdefs.h>
+#include "opt_ddb.h"
+
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/linker.h>
@@ -39,6 +42,10 @@
#include <vm/vm.h>
#include <vm/vm_extern.h>
+#ifdef DDB
+#include <ddb/ddb.h>
+#endif
+
/*
* Preloaded module support
*/
@@ -607,3 +614,16 @@ SYSCTL_PROC(_debug, OID_AUTO, dump_modinfo,
CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE,
NULL, 0, sysctl_preload_dump, "A",
"pretty-print the bootloader metadata");
+
+#ifdef DDB
+DB_SHOW_COMMAND_FLAGS(preload, db_show_preload, DB_CMD_MEMSAFE)
+{
+ struct sbuf sb;
+ char buffer[128];
+
+ sbuf_new(&sb, buffer, sizeof(buffer), SBUF_FIXEDLEN);
+ sbuf_set_drain(&sb, sbuf_db_printf_drain, NULL);
+ preload_dump_internal(&sb);
+ sbuf_finish(&sb);
+}
+#endif
diff --git a/sys/kern/subr_prf.c b/sys/kern/subr_prf.c
index bbf81b7a4ffe..35b5ee8ccdc8 100644
--- a/sys/kern/subr_prf.c
+++ b/sys/kern/subr_prf.c
@@ -1358,3 +1358,12 @@ sbuf_printf_drain(void *arg, const char *data, int len)
return (r);
}
+
+#if defined(_KERNEL) && defined(DDB)
+int
+sbuf_db_printf_drain(void *arg __unused, const char *data, int len)
+{
+
+ return (db_printf("%.*s", len, data));
+}
+#endif
diff --git a/sys/kern/subr_witness.c b/sys/kern/subr_witness.c
index 85dc0c321797..3c192b2b0dce 100644
--- a/sys/kern/subr_witness.c
+++ b/sys/kern/subr_witness.c
@@ -3121,12 +3121,6 @@ sysctl_debug_witness_badstacks(SYSCTL_HANDLER_ARGS)
}
#ifdef DDB
-static int
-sbuf_db_printf_drain(void *arg __unused, const char *data, int len)
-{
- return (db_printf("%.*s", len, data));
-}
-
DB_SHOW_COMMAND_FLAGS(badstacks, db_witness_badstacks, DB_CMD_MEMSAFE)
{
struct sbuf sb;
diff --git a/sys/sys/sbuf.h b/sys/sys/sbuf.h
index 60dcda53a461..e9959d7b2a13 100644
--- a/sys/sys/sbuf.h
+++ b/sys/sys/sbuf.h
@@ -114,6 +114,9 @@ struct uio;
struct sbuf *sbuf_uionew(struct sbuf *, struct uio *, int *);
int sbuf_bcopyin(struct sbuf *, const void *, size_t);
int sbuf_copyin(struct sbuf *, const void *, size_t);
+#ifdef DDB
+int sbuf_db_printf_drain(void *arg, const char *data, int len);
+#endif
#endif
__END_DECLS