void kmdb_dpi_process_work_queue(void) { work_results_t res; (void) mdb_nv_create(&res.res_loads, UM_SLEEP); (void) mdb_nv_create(&res.res_unloads, UM_SLEEP); mdb_dprintf(MDB_DBG_DPI, "processing work queue\n"); (void) kmdb_wr_debugger_process(kmdb_dbgnotify_cb, &res); if (mdb_nv_size(&res.res_loads)) { mdb_printf("Loaded modules: ["); print_modules(&res.res_loads); mdb_printf(" ]\n"); } if (mdb_nv_size(&res.res_unloads)) { mdb_printf("Unloaded modules: ["); print_modules(&res.res_unloads); mdb_printf(" ]\n"); } mdb_nv_destroy(&res.res_loads); mdb_nv_destroy(&res.res_unloads); }
mdb_tab_cookie_t * mdb_tab_init(void) { mdb_tab_cookie_t *mcp; mcp = mdb_zalloc(sizeof (mdb_tab_cookie_t), UM_SLEEP | UM_GC); (void) mdb_nv_create(&mcp->mtc_nv, UM_SLEEP | UM_GC); return (mcp); }
void mdb_create(const char *execname, const char *arg0) { static const mdb_nv_disc_t psym_disc = { psym_disc_set, psym_disc_get }; static const mdb_nv_disc_t roff_disc = { roff_disc_set, roff_disc_get }; static const mdb_nv_disc_t thr_disc = { NULL, thr_disc_get }; static char rootdir[MAXPATHLEN]; const mdb_dcmd_t *dcp; int i; bzero(&mdb, sizeof (mdb_t)); mdb.m_flags = MDB_FL_PSYM | MDB_FL_PAGER | MDB_FL_BPTNOSYMSTOP | MDB_FL_READBACK; mdb.m_radix = MDB_DEF_RADIX; mdb.m_nargs = MDB_DEF_NARGS; mdb.m_histlen = MDB_DEF_HISTLEN; mdb.m_armemlim = MDB_DEF_ARRMEM; mdb.m_arstrlim = MDB_DEF_ARRSTR; mdb.m_pname = strbasename(arg0); if (strcmp(mdb.m_pname, "adb") == 0) { mdb.m_flags |= MDB_FL_NOMODS | MDB_FL_ADB | MDB_FL_REPLAST; mdb.m_flags &= ~MDB_FL_PAGER; } mdb.m_ipathstr = mdb_zalloc(MAXPATHLEN, UM_SLEEP); mdb.m_lpathstr = mdb_zalloc(MAXPATHLEN, UM_SLEEP); (void) strncpy(rootdir, execname, sizeof (rootdir)); rootdir[sizeof (rootdir) - 1] = '\0'; (void) strdirname(rootdir); if (strcmp(strbasename(rootdir), "sparcv9") == 0 || strcmp(strbasename(rootdir), "sparcv7") == 0 || strcmp(strbasename(rootdir), "amd64") == 0 || strcmp(strbasename(rootdir), "i86") == 0) (void) strdirname(rootdir); if (strcmp(strbasename(rootdir), "bin") == 0) { (void) strdirname(rootdir); if (strcmp(strbasename(rootdir), "usr") == 0) (void) strdirname(rootdir); } else (void) strcpy(rootdir, "/"); mdb.m_root = rootdir; mdb.m_rminfo.mi_dvers = MDB_API_VERSION; mdb.m_rminfo.mi_dcmds = mdb_dcmd_builtins; mdb.m_rminfo.mi_walkers = NULL; (void) mdb_nv_create(&mdb.m_rmod.mod_walkers, UM_SLEEP); (void) mdb_nv_create(&mdb.m_rmod.mod_dcmds, UM_SLEEP); mdb.m_rmod.mod_name = mdb.m_pname; mdb.m_rmod.mod_info = &mdb.m_rminfo; (void) mdb_nv_create(&mdb.m_disasms, UM_SLEEP); (void) mdb_nv_create(&mdb.m_modules, UM_SLEEP); (void) mdb_nv_create(&mdb.m_dcmds, UM_SLEEP); (void) mdb_nv_create(&mdb.m_walkers, UM_SLEEP); (void) mdb_nv_create(&mdb.m_nv, UM_SLEEP); mdb.m_dot = mdb_nv_insert(&mdb.m_nv, ".", NULL, 0, MDB_NV_PERSIST); mdb.m_rvalue = mdb_nv_insert(&mdb.m_nv, "0", NULL, 0, MDB_NV_PERSIST); mdb.m_roffset = mdb_nv_insert(&mdb.m_nv, "1", &roff_disc, 0, MDB_NV_PERSIST); mdb.m_proffset = mdb_nv_insert(&mdb.m_nv, "2", NULL, 0, MDB_NV_PERSIST); mdb.m_rcount = mdb_nv_insert(&mdb.m_nv, "9", NULL, 0, MDB_NV_PERSIST); (void) mdb_nv_insert(&mdb.m_nv, "b", NULL, 0, MDB_NV_PERSIST); (void) mdb_nv_insert(&mdb.m_nv, "d", NULL, 0, MDB_NV_PERSIST); (void) mdb_nv_insert(&mdb.m_nv, "e", NULL, 0, MDB_NV_PERSIST); (void) mdb_nv_insert(&mdb.m_nv, "m", NULL, 0, MDB_NV_PERSIST); (void) mdb_nv_insert(&mdb.m_nv, "t", NULL, 0, MDB_NV_PERSIST); (void) mdb_nv_insert(&mdb.m_nv, "_", &psym_disc, 0, MDB_NV_PERSIST); (void) mdb_nv_insert(&mdb.m_nv, "hits", NULL, 0, MDB_NV_PERSIST); (void) mdb_nv_insert(&mdb.m_nv, "thread", &thr_disc, 0, MDB_NV_PERSIST | MDB_NV_RDONLY); mdb.m_prsym = mdb_gelf_symtab_create_mutable(); (void) mdb_nv_insert(&mdb.m_modules, mdb.m_pname, NULL, (uintptr_t)&mdb.m_rmod, MDB_NV_RDONLY); for (dcp = &mdb_dcmd_builtins[0]; dcp->dc_name != NULL; dcp++) (void) mdb_module_add_dcmd(&mdb.m_rmod, dcp, 0); for (i = 0; mdb_dis_builtins[i] != NULL; i++) (void) mdb_dis_create(mdb_dis_builtins[i]); mdb_macalias_create(); mdb_create_builtin_tgts(); (void) mdb_callb_add(NULL, MDB_CALLB_PROMPT, (mdb_callb_f)prompt_update, NULL); #ifdef _KMDB (void) mdb_nv_create(&mdb.m_dmodctl, UM_SLEEP); #endif mdb_lex_state_create(&frame0); mdb_list_append(&mdb.m_flist, &frame0); mdb.m_frame = &frame0; }