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
This commit is contained in:
Stephen J. Kiernan
2026-04-30 01:19:09 -04:00
parent e7f4269dbf
commit b683fd0b32
4 changed files with 32 additions and 6 deletions
+20
View File
@@ -28,6 +28,9 @@
* SUCH DAMAGE. * SUCH DAMAGE.
*/ */
#include <sys/cdefs.h>
#include "opt_ddb.h"
#include <sys/param.h> #include <sys/param.h>
#include <sys/systm.h> #include <sys/systm.h>
#include <sys/linker.h> #include <sys/linker.h>
@@ -39,6 +42,10 @@
#include <vm/vm.h> #include <vm/vm.h>
#include <vm/vm_extern.h> #include <vm/vm_extern.h>
#ifdef DDB
#include <ddb/ddb.h>
#endif
/* /*
* Preloaded module support * Preloaded module support
*/ */
@@ -607,3 +614,16 @@ SYSCTL_PROC(_debug, OID_AUTO, dump_modinfo,
CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE,
NULL, 0, sysctl_preload_dump, "A", NULL, 0, sysctl_preload_dump, "A",
"pretty-print the bootloader metadata"); "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
+9
View File
@@ -1358,3 +1358,12 @@ sbuf_printf_drain(void *arg, const char *data, int len)
return (r); 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
-6
View File
@@ -3121,12 +3121,6 @@ sysctl_debug_witness_badstacks(SYSCTL_HANDLER_ARGS)
} }
#ifdef DDB #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) DB_SHOW_COMMAND_FLAGS(badstacks, db_witness_badstacks, DB_CMD_MEMSAFE)
{ {
struct sbuf sb; struct sbuf sb;
+3
View File
@@ -114,6 +114,9 @@ struct uio;
struct sbuf *sbuf_uionew(struct sbuf *, struct uio *, int *); struct sbuf *sbuf_uionew(struct sbuf *, struct uio *, int *);
int sbuf_bcopyin(struct sbuf *, const void *, size_t); int sbuf_bcopyin(struct sbuf *, const void *, size_t);
int sbuf_copyin(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 #endif
__END_DECLS __END_DECLS