int kp_vtop(mdb_tgt_t *t, mdb_tgt_as_t as, uintptr_t va, physaddr_t *pap) { kp_data_t *kp = t->t_data; physaddr_t pa; if (as != MDB_TGT_AS_VIRT) return (set_errno(EINVAL)); if ((pa = kvm_physaddr(kp->kp_cookie, kp->kp_as, va)) != -1ULL) { *pap = pa; return (0); } return (set_errno(EMDB_NOMAP)); }
int kt_vtop(mdb_tgt_t *t, mdb_tgt_as_t as, uintptr_t va, physaddr_t *pap) { kt_data_t *kt = t->t_data; struct as *asp; physaddr_t pa; mdb_module_t *mod; mdb_var_t *v; int (*fptr)(uintptr_t, struct as *, physaddr_t *); switch ((uintptr_t)as) { case (uintptr_t)MDB_TGT_AS_PHYS: case (uintptr_t)MDB_TGT_AS_FILE: case (uintptr_t)MDB_TGT_AS_IO: return (set_errno(EINVAL)); case (uintptr_t)MDB_TGT_AS_VIRT: asp = kt->k_as; break; default: asp = (struct as *)as; } if ((pa = kvm_physaddr(kt->k_cookie, asp, va)) != -1ULL) { *pap = pa; return (0); } if ((v = mdb_nv_lookup(&mdb.m_modules, "unix")) != NULL && (mod = mdb_nv_get_cookie(v)) != NULL) { fptr = (int (*)(uintptr_t, struct as *, physaddr_t *)) dlsym(mod->mod_hdl, "platform_vtop"); if ((fptr != NULL) && ((*fptr)(va, asp, pap) == 0)) return (0); } return (set_errno(EMDB_NOMAP)); }