#include <mdb/mdb_debug.h>
#include <mdb/mdb_nv.h>
#include <mdb/mdb.h>
typedef struct mdb_macalias {
const char *ma_name;
const char *ma_defn;
} mdb_macalias_t;
static const mdb_macalias_t mdb_macaliases[] = {
{ "bufctl", "::bufctl" },
{ "bufctl_audit", "::bufctl -v" },
{ "cpu", "::cpuinfo -v" },
{ "cpun", "::cpuinfo -v" },
{ "cpus", "::walk cpu |::cpuinfo -v" },
{ "devinfo", "::print struct dev_info" },
{ "devinfo.minor", "::minornodes" },
{ "devinfo.next", "::walk devi_next |::devinfo -s" },
{ "devinfo.parent", "::walk devinfo_parents |::devinfo -s" },
{ "devinfo.prop", "::devinfo" },
{ "devinfo.sibling", "::walk devinfo_siblings |::devinfo -s" },
{ "devinfo_brief", "::devinfo -s" },
{ "devinfo_major", "::devbindings -s" },
{ "devnames_major", "::devnames -m" },
{ "devt", "::devt" },
{ "devt2snode", "::dev2snode" },
{ "findthreads", "::walk thread |::thread" },
{ "major2snode", "::major2snode" },
{ "mblk", "::mblk -v" },
{ "modctl.brief", "::modctl" },
{ "modules", "::modinfo" },
{ "mount", "::fsinfo" },
{ "msgbuf", "::msgbuf" },
{ "mutex", "::mutex" },
{ "panicbuf", "::panicinfo" },
{ "pid2proc", "::pid2proc |::print proc_t" },
{ "proc2u", "::print proc_t p_user" },
{ "procargs", "::print proc_t p_user.u_psargs" },
{ "queue", "::queue -v" },
{ "sema", "::print sema_impl_t" },
{ "stackregs", "::stackregs" },
{ "stacktrace", "::stackregs" },
#if defined(__sparc)
{ "systemdump", "0>pc;0>npc;nopanicdebug/W 1;:c" },
#elif defined(__i386)
{ "systemdump", "0>eip;nopanicdebug/W 1;:c" },
#else
{ "systemdump", "0>rip;nopanicdebug/W 1;:c" },
#endif
{ "thread", "::print kthread_t" },
{ "threadlist", "::threadlist -v" },
{ "u", "::print user_t" },
{ "utsname", "utsname::print" },
{ NULL }
};
void
mdb_macalias_create(void)
{
int i;
(void) mdb_nv_create(&mdb.m_macaliases, UM_SLEEP);
for (i = 0; mdb_macaliases[i].ma_name != NULL; i++) {
const mdb_macalias_t *ma = &mdb_macaliases[i];
(void) mdb_nv_insert(&mdb.m_macaliases, ma->ma_name, NULL,
(uintptr_t)ma->ma_defn, MDB_NV_RDONLY | MDB_NV_EXTNAME |
MDB_NV_PERSIST);
}
}
const char *
mdb_macalias_lookup(const char *name)
{
mdb_var_t *v;
if ((v = mdb_nv_lookup(&mdb.m_macaliases, name)) == NULL)
return (NULL);
return (MDB_NV_COOKIE(v));
}
int
cmd_macalias_list(uintptr_t addr, uint_t flags, int argc, const mdb_arg_t *argv)
{
int i;
if (flags & DCMD_ADDRSPEC || argc != 0)
return (DCMD_USAGE);
mdb_printf("%<u>%-20s%</u> %<u>%-59s%</u>\n",
"MACRO", "NATIVE EQUIVALENT");
for (i = 0; mdb_macaliases[i].ma_name != NULL; i++) {
const mdb_macalias_t *ma = &mdb_macaliases[i];
mdb_printf("%-20s %s\n", ma->ma_name, ma->ma_defn);
}
return (DCMD_OK);
}
void
mdb_macalias_destroy(void)
{
mdb_nv_destroy(&mdb.m_macaliases);
}