Lines Matching refs:kd
78 _kvm_err(kvm_t *kd, const char *program, const char *fmt, ...) in _kvm_err() argument
88 (void)vsnprintf(kd->errbuf, in _kvm_err()
89 sizeof(kd->errbuf), fmt, ap); in _kvm_err()
95 _kvm_syserr(kvm_t *kd, const char *program, const char *fmt, ...) in _kvm_syserr() argument
106 char *cp = kd->errbuf; in _kvm_syserr()
108 (void)vsnprintf(cp, sizeof(kd->errbuf), fmt, ap); in _kvm_syserr()
110 (void)snprintf(&cp[n], sizeof(kd->errbuf) - n, ": %s", in _kvm_syserr()
117 _kvm_malloc(kvm_t *kd, size_t n) in _kvm_malloc() argument
122 _kvm_err(kd, kd->program, "can't allocate %zu bytes: %s", in _kvm_malloc()
128 _kvm_probe_elf_kernel(kvm_t *kd, int class, int machine) in _kvm_probe_elf_kernel() argument
131 return (kd->nlehdr.e_ident[EI_CLASS] == class && in _kvm_probe_elf_kernel()
133 kd->nlehdr.e_type == ET_DYN : kd->nlehdr.e_type == ET_EXEC) && in _kvm_probe_elf_kernel()
134 kd->nlehdr.e_machine == machine); in _kvm_probe_elf_kernel()
138 _kvm_is_minidump(kvm_t *kd) in _kvm_is_minidump() argument
142 if (kd->rawdump) in _kvm_is_minidump()
144 if (pread(kd->pmfd, &minihdr, 8, 0) == 8 && in _kvm_is_minidump()
159 _kvm_read_core_phdrs(kvm_t *kd, size_t *phnump, GElf_Phdr **phdrp) in _kvm_read_core_phdrs() argument
166 elf = elf_begin(kd->pmfd, ELF_C_READ, NULL); in _kvm_read_core_phdrs()
168 _kvm_err(kd, kd->program, "%s", elf_errmsg(0)); in _kvm_read_core_phdrs()
172 _kvm_err(kd, kd->program, "invalid core"); in _kvm_read_core_phdrs()
175 if (gelf_getclass(elf) != kd->nlehdr.e_ident[EI_CLASS]) { in _kvm_read_core_phdrs()
176 _kvm_err(kd, kd->program, "invalid core"); in _kvm_read_core_phdrs()
180 _kvm_err(kd, kd->program, "%s", elf_errmsg(0)); in _kvm_read_core_phdrs()
184 _kvm_err(kd, kd->program, "invalid core"); in _kvm_read_core_phdrs()
187 if (ehdr.e_machine != kd->nlehdr.e_machine) { in _kvm_read_core_phdrs()
188 _kvm_err(kd, kd->program, "invalid core"); in _kvm_read_core_phdrs()
193 _kvm_err(kd, kd->program, "%s", elf_errmsg(0)); in _kvm_read_core_phdrs()
199 _kvm_err(kd, kd->program, "failed to allocate phdrs"); in _kvm_read_core_phdrs()
206 _kvm_err(kd, kd->program, "%s", elf_errmsg(0)); in _kvm_read_core_phdrs()
264 _kvm_pmap_get(kvm_t *kd, u_long idx, size_t len) in _kvm_pmap_get() argument
268 if ((off_t)off >= kd->pt_sparse_off) in _kvm_pmap_get()
270 return (void *)((uintptr_t)kd->page_map + off); in _kvm_pmap_get()
274 _kvm_map_get(kvm_t *kd, u_long pa, unsigned int page_size) in _kvm_map_get() argument
279 off = _kvm_pt_find(kd, pa, page_size); in _kvm_map_get()
283 addr = (uintptr_t)kd->page_map + off; in _kvm_map_get()
284 if (off >= kd->pt_sparse_off) in _kvm_map_get()
285 addr = (uintptr_t)kd->sparse_map + (off - kd->pt_sparse_off); in _kvm_map_get()
290 _kvm_pt_init(kvm_t *kd, size_t dump_avail_size, off_t dump_avail_off, in _kvm_pt_init() argument
299 kd->dump_avail_size = dump_avail_size; in _kvm_pt_init()
301 kd->dump_avail = mmap(NULL, kd->dump_avail_size, PROT_READ, in _kvm_pt_init()
302 MAP_PRIVATE, kd->pmfd, dump_avail_off); in _kvm_pt_init()
310 kd->dump_avail = calloc(4, sizeof(uint64_t)); in _kvm_pt_init()
311 kd->dump_avail[1] = _kvm64toh(kd, map_len * 8 * page_size); in _kvm_pt_init()
317 kd->pt_map = _kvm_malloc(kd, map_len); in _kvm_pt_init()
318 if (kd->pt_map == NULL) { in _kvm_pt_init()
319 _kvm_err(kd, kd->program, "cannot allocate %zu bytes for bitmap", in _kvm_pt_init()
323 rd = pread(kd->pmfd, kd->pt_map, map_len, map_off); in _kvm_pt_init()
325 _kvm_err(kd, kd->program, "cannot read %zu bytes for bitmap", in _kvm_pt_init()
329 kd->pt_map_size = map_len; in _kvm_pt_init()
342 addr = kd->pt_map; in _kvm_pt_init()
345 kd->pt_popcounts = calloc(pc_bins, sizeof(uint32_t)); in _kvm_pt_init()
346 if (kd->pt_popcounts == NULL) { in _kvm_pt_init()
347 _kvm_err(kd, kd->program, "cannot allocate popcount bins"); in _kvm_pt_init()
351 for (popcount_bin = &kd->pt_popcounts[1]; res > 0; in _kvm_pt_init()
363 ((uintptr_t)popcount_bin - (uintptr_t)kd->pt_popcounts)); in _kvm_pt_init()
365 kd->pt_sparse_off = sparse_off; in _kvm_pt_init()
366 kd->pt_sparse_size = (uint64_t)*popcount_bin * page_size; in _kvm_pt_init()
367 kd->pt_page_size = page_size; in _kvm_pt_init()
375 kd->sparse_map = mmap(NULL, kd->pt_sparse_size, PROT_READ, in _kvm_pt_init()
376 MAP_PRIVATE, kd->pmfd, kd->pt_sparse_off); in _kvm_pt_init()
377 if (kd->sparse_map == MAP_FAILED) { in _kvm_pt_init()
378 _kvm_err(kd, kd->program, "cannot map %" PRIu64 in _kvm_pt_init()
380 kd->pt_sparse_size, kd->pmfd, in _kvm_pt_init()
381 (intmax_t)kd->pt_sparse_off, strerror(errno)); in _kvm_pt_init()
388 _kvm_pmap_init(kvm_t *kd, uint32_t pmap_size, off_t pmap_off) in _kvm_pmap_init() argument
392 kd->page_map_size = pmap_size; in _kvm_pmap_init()
393 kd->page_map_off = pmap_off; in _kvm_pmap_init()
394 kd->page_map = _kvm_malloc(kd, pmap_size); in _kvm_pmap_init()
395 if (kd->page_map == NULL) { in _kvm_pmap_init()
396 _kvm_err(kd, kd->program, "cannot allocate %u bytes " in _kvm_pmap_init()
400 if (pread(kd->pmfd, kd->page_map, pmap_size, pmap_off) != exp_len) { in _kvm_pmap_init()
401 _kvm_err(kd, kd->program, "cannot read %d bytes from " in _kvm_pmap_init()
409 dump_avail_n(kvm_t *kd, long i) in dump_avail_n() argument
411 return (_kvm64toh(kd, kd->dump_avail[i])); in dump_avail_n()
415 _kvm_pa_bit_id(kvm_t *kd, uint64_t pa, unsigned int page_size) in _kvm_pa_bit_id() argument
421 for (i = 0; dump_avail_n(kd, i + 1) != 0; i += 2) { in _kvm_pa_bit_id()
422 if (pa >= dump_avail_n(kd, i + 1)) { in _kvm_pa_bit_id()
423 adj += howmany(dump_avail_n(kd, i + 1), page_size) - in _kvm_pa_bit_id()
424 dump_avail_n(kd, i) / page_size; in _kvm_pa_bit_id()
427 dump_avail_n(kd, i) / page_size + adj); in _kvm_pa_bit_id()
434 _kvm_bit_id_pa(kvm_t *kd, uint64_t bit_id, unsigned int page_size) in _kvm_bit_id_pa() argument
439 for (i = 0; dump_avail_n(kd, i + 1) != 0; i += 2) { in _kvm_bit_id_pa()
440 sz = howmany(dump_avail_n(kd, i + 1), page_size) - in _kvm_bit_id_pa()
441 dump_avail_n(kd, i) / page_size; in _kvm_bit_id_pa()
443 return (rounddown2(dump_avail_n(kd, i), page_size) + in _kvm_bit_id_pa()
466 _kvm_pt_find(kvm_t *kd, uint64_t pa, unsigned int page_size) in _kvm_pt_find() argument
468 uint64_t *bitmap = kd->pt_map; in _kvm_pt_find()
469 uint64_t pte_bit_id = _kvm_pa_bit_id(kd, pa, page_size); in _kvm_pt_find()
478 pte_bit_id >= (kd->pt_map_size * NBBY) || in _kvm_pt_find()
489 count = kd->pt_popcounts[popcount_id] + popcount_bytes( in _kvm_pt_find()
501 kd->pt_map_size * BITS_IN(uint8_t)); in _kvm_pt_find()
502 count = kd->pt_popcounts[popcount_id] - popcount_bytes( in _kvm_pt_find()
511 if (count >= (kd->pt_sparse_size / page_size)) in _kvm_pt_find()
514 return (kd->pt_sparse_off + (uint64_t)count * page_size); in _kvm_pt_find()
518 kvm_fdnlist(kvm_t *kd, struct kvm_nlist *list) in kvm_fdnlist() argument
523 if (kd->resolve_symbol == NULL) { in kvm_fdnlist()
533 nfail = __fdnlist(kd->nlfd, nl); in kvm_fdnlist()
544 error = kd->resolve_symbol(list->n_name, &addr); in kvm_fdnlist()
563 kvm_fdnlist_prefix(kvm_t *kd, struct kvm_nlist *nl, int missing, in kvm_fdnlist_prefix() argument
621 unresolved = kvm_fdnlist(kd, np); in kvm_fdnlist_prefix()
644 p->n_value = (*validate_fn)(kd, np->n_value); in kvm_fdnlist_prefix()
661 _kvm_nlist(kvm_t *kd, struct kvm_nlist *nl, int initialize) in _kvm_nlist() argument
675 if (!ISALIVE(kd)) { in _kvm_nlist()
676 error = kvm_fdnlist(kd, nl); in _kvm_nlist()
680 if (_kvm_vnet_initialized(kd, initialize)) in _kvm_nlist()
681 error = kvm_fdnlist_prefix(kd, nl, error, in _kvm_nlist()
684 if (error > 0 && _kvm_dpcpu_initialized(kd, initialize)) in _kvm_nlist()
685 error = kvm_fdnlist_prefix(kd, nl, error, in _kvm_nlist()
718 if (_kvm_vnet_initialized(kd, initialize) && in _kvm_nlist()
721 _kvm_vnet_validaddr(kd, lookup.symvalue); in _kvm_nlist()
722 else if (_kvm_dpcpu_initialized(kd, initialize) && in _kvm_nlist()
725 _kvm_dpcpu_validaddr(kd, lookup.symvalue); in _kvm_nlist()
738 if (error && _kvm_vnet_initialized(kd, initialize) && !tried_vnet) { in _kvm_nlist()
743 if (error && _kvm_dpcpu_initialized(kd, initialize) && !tried_dpcpu) { in _kvm_nlist()
755 _kvm_syserr(kd, kd->program, "kvm_nlist"); in _kvm_nlist()
808 _kvm_visit_cb(kvm_t *kd, kvm_walk_pages_cb_t *cb, void *arg, u_long pa, in _kvm_visit_cb() argument
819 .kp_offset = _kvm_pt_find(kd, pa, pgsz), in _kvm_visit_cb()