void kt_deactivate(mdb_tgt_t *t) { kt_data_t *kt = t->t_data; const mdb_tgt_regdesc_t *rdp; const mdb_dcmd_t *dcp; for (rdp = kt->k_rds; rdp->rd_name != NULL; rdp++) { mdb_var_t *v; if (!(rdp->rd_flags & MDB_TGT_R_EXPORT)) continue; /* Didn't export register as a variable */ if ((v = mdb_nv_lookup(&mdb.m_nv, rdp->rd_name)) != NULL) { v->v_flags &= ~MDB_NV_PERSIST; mdb_nv_remove(&mdb.m_nv, v); } } for (dcp = &kt_dcmds[0]; dcp->dc_name != NULL; dcp++) { if (mdb_module_remove_dcmd(t->t_module, dcp->dc_name) == -1) warn("failed to remove dcmd %s", dcp->dc_name); } mdb_prop_postmortem = FALSE; mdb_prop_kernel = FALSE; mdb_prop_datamodel = MDB_TGT_MODEL_UNKNOWN; }
static void kp_deactivate(mdb_tgt_t *t) { const mdb_dcmd_t *dcp; for (dcp = &kp_dcmds[0]; dcp->dc_name != NULL; dcp++) { if (mdb_module_remove_dcmd(t->t_module, dcp->dc_name) == -1) warn("failed to remove dcmd %s", dcp->dc_name); } mdb_prop_postmortem = FALSE; mdb_prop_kernel = FALSE; mdb_prop_datamodel = MDB_TGT_MODEL_UNKNOWN; }
void mdb_destroy(void) { const mdb_dcmd_t *dcp; mdb_var_t *v; int unload_mode = MDB_MOD_SILENT; #ifdef _KMDB unload_mode |= MDB_MOD_DEFER; #endif mdb_intr_disable(); mdb_macalias_destroy(); /* * Some targets use modules during ->t_destroy, so do it first. */ if (mdb.m_target != NULL) (void) mdb_tgt_destroy(mdb.m_target); /* * Unload modules _before_ destroying the disassemblers since a * module that installs a disassembler should try to clean up after * itself. */ mdb_module_unload_all(unload_mode); mdb_nv_rewind(&mdb.m_disasms); while ((v = mdb_nv_advance(&mdb.m_disasms)) != NULL) mdb_dis_destroy(mdb_nv_get_cookie(v)); mdb_callb_remove_all(); if (mdb.m_defdisasm != NULL) strfree(mdb.m_defdisasm); if (mdb.m_prsym != NULL) mdb_gelf_symtab_destroy(mdb.m_prsym); for (dcp = &mdb_dcmd_builtins[0]; dcp->dc_name != NULL; dcp++) (void) mdb_module_remove_dcmd(&mdb.m_rmod, dcp->dc_name); mdb_nv_destroy(&mdb.m_nv); mdb_nv_destroy(&mdb.m_walkers); mdb_nv_destroy(&mdb.m_dcmds); mdb_nv_destroy(&mdb.m_modules); mdb_nv_destroy(&mdb.m_disasms); mdb_free(mdb.m_ipathstr, MAXPATHLEN); mdb_free(mdb.m_lpathstr, MAXPATHLEN); if (mdb.m_ipath != NULL) mdb_path_free(mdb.m_ipath, mdb.m_ipathlen); if (mdb.m_lpath != NULL) mdb_path_free(mdb.m_lpath, mdb.m_lpathlen); if (mdb.m_in != NULL) mdb_iob_destroy(mdb.m_in); mdb_iob_destroy(mdb.m_out); mdb.m_out = NULL; mdb_iob_destroy(mdb.m_err); mdb.m_err = NULL; if (mdb.m_log != NULL) mdb_io_rele(mdb.m_log); mdb_lex_state_destroy(&frame0); }