diff options
Diffstat (limited to 'usr/src/cmd/mdb/common/modules/genunix/refstr.c')
-rw-r--r-- | usr/src/cmd/mdb/common/modules/genunix/refstr.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/usr/src/cmd/mdb/common/modules/genunix/refstr.c b/usr/src/cmd/mdb/common/modules/genunix/refstr.c new file mode 100644 index 0000000000..5b5fcec14c --- /dev/null +++ b/usr/src/cmd/mdb/common/modules/genunix/refstr.c @@ -0,0 +1,43 @@ +/* + * This file and its contents are supplied under the terms of the + * Common Development and Distribution License ("CDDL"), version 1.0. + * You may only use this file in accordance with the terms of version + * 1.0 of the CDDL. + * + * A full copy of the text of the CDDL should have accompanied this + * source. A copy of the CDDL is also available via the Internet at + * http://www.illumos.org/license/CDDL. + */ + +/* + * Copyright 2019 Joyent, Inc. + */ + +#include <mdb/mdb_modapi.h> +#include <mdb/mdb_ks.h> +#include <sys/refstr.h> + +#define REFSTR_LEN (1024) + +int +cmd_refstr(uintptr_t addr, uint_t flags __unused, + int argc, const mdb_arg_t *argv) +{ + if (!(flags & DCMD_ADDRSPEC)) { + mdb_warn("address is required\n"); + return (DCMD_ERR); + } + + if (mdb_getopts(argc, argv, NULL) != argc) + return (DCMD_USAGE); + + char *buf = mdb_alloc(REFSTR_LEN, UM_SLEEP | UM_GC); + + if (mdb_read_refstr(addr, buf, REFSTR_LEN) < 0) { + mdb_warn("couldn't read refstr from %p", addr); + return (DCMD_ERR); + } + + mdb_printf("%s\n", buf); + return (DCMD_OK); +} |