Lines Matching refs:kd

87 kvm_geterr(kvm_t *kd)  in kvm_geterr()  argument
89 return (kd->errbuf); in kvm_geterr()
93 kvm_getkernelname(kvm_t *kd) in kvm_getkernelname() argument
95 return kd->kernelname; in kvm_getkernelname()
105 _kvm_err(kvm_t *kd, const char *program, const char *fmt, ...) in _kvm_err() argument
115 (void)vsnprintf(kd->errbuf, in _kvm_err()
116 sizeof(kd->errbuf), fmt, ap); in _kvm_err()
122 _kvm_syserr(kvm_t *kd, const char *program, const char *fmt, ...) in _kvm_syserr() argument
133 char *cp = kd->errbuf; in _kvm_syserr()
135 (void)vsnprintf(cp, sizeof(kd->errbuf), fmt, ap); in _kvm_syserr()
137 (void)snprintf(&cp[n], sizeof(kd->errbuf) - n, ": %s", in _kvm_syserr()
144 _kvm_malloc(kvm_t *kd, size_t n) in _kvm_malloc() argument
149 _kvm_err(kd, kd->program, "%s", strerror(errno)); in _kvm_malloc()
158 Lseek(kvm_t *kd, int fd, off_t offset, int whence) in Lseek() argument
165 _kvm_syserr(kd, kd->program, "Lseek"); in Lseek()
172 _kvm_pread(kvm_t *kd, int fd, void *buf, size_t size, off_t off) in _kvm_pread() argument
180 if (kd->dump_mem != MAP_FAILED) { in _kvm_pread()
181 if (size + off > kd->dump_size) { in _kvm_pread()
185 memcpy(buf, (char *)kd->dump_mem + (size_t)off, size); in _kvm_pread()
190 if (((off % kd->fdalign) | (size % kd->fdalign)) == 0) { in _kvm_pread()
198 moff = (ptrdiff_t)off % kd->fdalign; in _kvm_pread()
200 dsize = moff + size + kd->fdalign - 1; in _kvm_pread()
201 dsize -= dsize % kd->fdalign; in _kvm_pread()
202 if (kd->iobufsz < dsize) { in _kvm_pread()
203 newbuf = realloc(kd->iobuf, dsize); in _kvm_pread()
205 _kvm_syserr(kd, 0, "cannot allocate I/O buffer"); in _kvm_pread()
208 kd->iobuf = newbuf; in _kvm_pread()
209 kd->iobufsz = dsize; in _kvm_pread()
211 rv = pread(fd, kd->iobuf, dsize, doff); in _kvm_pread()
214 memcpy(buf, kd->iobuf + moff, size); in _kvm_pread()
219 _kvm_pwrite(kvm_t *kd, const void *buf, size_t size, off_t off) in _kvm_pwrite() argument
221 char *mem = kd->dump_mem; in _kvm_pwrite()
223 if (size + off > kd->dump_size) { in _kvm_pwrite()
236 Pread(kvm_t *kd, int fd, void *buf, size_t nbytes, off_t offset) in Pread() argument
242 if ((rv = _kvm_pread(kd, fd, buf, nbytes, offset)) != nbytes && in Pread()
244 _kvm_syserr(kd, kd->program, "Pread"); in Pread()
249 _kvm_open(kvm_t *kd, const char *uf, const char *mf, const char *sf, int flag, in _kvm_open() argument
255 kd->pmfd = -1; in _kvm_open()
256 kd->vmfd = -1; in _kvm_open()
257 kd->swfd = -1; in _kvm_open()
258 kd->nlfd = -1; in _kvm_open()
259 kd->alive = KVM_ALIVE_DEAD; in _kvm_open()
260 kd->procbase = NULL; in _kvm_open()
261 kd->procbase_len = 0; in _kvm_open()
262 kd->procbase2 = NULL; in _kvm_open()
263 kd->procbase2_len = 0; in _kvm_open()
264 kd->lwpbase = NULL; in _kvm_open()
265 kd->lwpbase_len = 0; in _kvm_open()
266 kd->nbpg = getpagesize(); in _kvm_open()
267 kd->swapspc = NULL; in _kvm_open()
268 kd->argspc = NULL; in _kvm_open()
269 kd->argspc_len = 0; in _kvm_open()
270 kd->argbuf = NULL; in _kvm_open()
271 kd->argv = NULL; in _kvm_open()
272 kd->vmst = NULL; in _kvm_open()
273 kd->vm_page_buckets = NULL; in _kvm_open()
274 kd->kcore_hdr = NULL; in _kvm_open()
275 kd->cpu_dsize = 0; in _kvm_open()
276 kd->cpu_data = NULL; in _kvm_open()
277 kd->dump_off = 0; in _kvm_open()
278 kd->fdalign = 1; in _kvm_open()
279 kd->iobuf = NULL; in _kvm_open()
280 kd->iobufsz = 0; in _kvm_open()
281 kd->errbuf[0] = '\0'; in _kvm_open()
282 kd->dump_mem = MAP_FAILED; in _kvm_open()
283 kd->dump_size = 0; in _kvm_open()
286 kd->alive = KVM_ALIVE_SYSCTL; in _kvm_open()
287 return(kd); in _kvm_open()
294 if (_kvm_mdopen(kd)) { in _kvm_open()
295 _kvm_err(kd, kd->program, "md init failed"); in _kvm_open()
325 _kvm_err(kd, kd->program, "exec file name too long"); in _kvm_open()
329 _kvm_err(kd, kd->program, "bad flags arg"); in _kvm_open()
342 kd->nlfd = open(_PATH_KSYMS, O_RDONLY | O_CLOEXEC, 0); in _kvm_open()
343 if (kd->nlfd < 0) { in _kvm_open()
344 if ((kd->nlfd = open(uf, O_RDONLY | O_CLOEXEC, 0)) < 0) { in _kvm_open()
345 _kvm_syserr(kd, kd->program, "%s", uf); in _kvm_open()
348 strlcpy(kd->kernelname, uf, sizeof(kd->kernelname)); in _kvm_open()
350 strlcpy(kd->kernelname, _PATH_KSYMS, sizeof(kd->kernelname)); in _kvm_open()
353 if ((kd->pmfd = open(mf, flag | O_CLOEXEC, 0)) < 0) { in _kvm_open()
354 _kvm_syserr(kd, kd->program, "%s", mf); in _kvm_open()
357 if (fstat(kd->pmfd, &st) < 0) { in _kvm_open()
358 _kvm_syserr(kd, kd->program, "%s", mf); in _kvm_open()
367 if ((kd->vmfd = open(_PATH_KMEM, flag | O_CLOEXEC, 0)) < 0) { in _kvm_open()
368 _kvm_syserr(kd, kd->program, "%s", _PATH_KMEM); in _kvm_open()
371 kd->alive = KVM_ALIVE_FILES; in _kvm_open()
372 if ((kd->swfd = open(sf, flag | O_CLOEXEC, 0)) < 0) { in _kvm_open()
374 _kvm_syserr(kd, kd->program, "%s", sf); in _kvm_open()
381 kd->fdalign = DEV_BSIZE; in _kvm_open()
383 kd->fdalign = 1; in _kvm_open()
395 if (_kvm_get_header(kd) == 0) { in _kvm_open()
396 if (_kvm_initvtop(kd) < 0) in _kvm_open()
399 kd->dump_size = (size_t)st.st_size; in _kvm_open()
400 kd->dump_mem = mmap(NULL, kd->dump_size, PROT_READ|PROT_WRITE, in _kvm_open()
401 MAP_FILE|MAP_PRIVATE, kd->pmfd, 0); in _kvm_open()
403 return (kd); in _kvm_open()
409 (void)strlcpy(errout, kd->errbuf, _POSIX2_LINE_MAX); in _kvm_open()
410 (void)kvm_close(kd); in _kvm_open()
426 _kvm_get_header(kvm_t *kd) in _kvm_get_header() argument
437 sz = Pread(kd, kd->pmfd, &kcore_hdr, sizeof(kcore_hdr), (off_t)0); in _kvm_get_header()
460 kd->kcore_hdr = _kvm_malloc(kd, sizeof(kcore_hdr)); in _kvm_get_header()
461 memcpy(kd->kcore_hdr, &kcore_hdr, sizeof(kcore_hdr)); in _kvm_get_header()
467 sz = Pread(kd, kd->pmfd, &cpu_hdr, sizeof(cpu_hdr), (off_t)offset); in _kvm_get_header()
478 kd->cpu_dsize = cpu_hdr.c_size; in _kvm_get_header()
479 kd->cpu_data = _kvm_malloc(kd, cpu_hdr.c_size); in _kvm_get_header()
480 if (kd->cpu_data == NULL) in _kvm_get_header()
482 sz = Pread(kd, kd->pmfd, kd->cpu_data, cpu_hdr.c_size, (off_t)offset); in _kvm_get_header()
490 sz = Pread(kd, kd->pmfd, &mem_hdr, sizeof(mem_hdr), (off_t)offset); in _kvm_get_header()
499 kd->dump_off = offset; in _kvm_get_header()
503 if (kd->kcore_hdr != NULL) { in _kvm_get_header()
504 free(kd->kcore_hdr); in _kvm_get_header()
505 kd->kcore_hdr = NULL; in _kvm_get_header()
507 if (kd->cpu_data != NULL) { in _kvm_get_header()
508 free(kd->cpu_data); in _kvm_get_header()
509 kd->cpu_data = NULL; in _kvm_get_header()
510 kd->cpu_dsize = 0; in _kvm_get_header()
523 kvm_dump_mkheader(kvm_t *kd, off_t dump_off) in kvm_dump_mkheader() argument
529 if (kd->kcore_hdr != NULL) { in kvm_dump_mkheader()
530 _kvm_err(kd, kd->program, "already has a dump header"); in kvm_dump_mkheader()
533 if (ISALIVE(kd)) { in kvm_dump_mkheader()
534 _kvm_err(kd, kd->program, "don't use on live kernel"); in kvm_dump_mkheader()
541 sz = Pread(kd, kd->pmfd, &cpu_hdr, sizeof(cpu_hdr), dump_off); in kvm_dump_mkheader()
544 _kvm_err(kd, 0, "read %zx bytes at offset %"PRIx64 in kvm_dump_mkheader()
548 _kvm_err(kd, 0, "read %zx bytes at offset %"PRIx64 in kvm_dump_mkheader()
555 _kvm_err(kd, 0, "invalid magic in cpu_hdr"); in kvm_dump_mkheader()
563 kd->cpu_dsize = cpu_hdr.c_size; in kvm_dump_mkheader()
564 kd->cpu_data = _kvm_malloc(kd, kd->cpu_dsize); in kvm_dump_mkheader()
565 if (kd->cpu_data == NULL) { in kvm_dump_mkheader()
566 _kvm_err(kd, kd->program, "no cpu_data"); in kvm_dump_mkheader()
569 sz = Pread(kd, kd->pmfd, kd->cpu_data, cpu_hdr.c_size, in kvm_dump_mkheader()
572 _kvm_err(kd, kd->program, "size %zu != cpu_hdr.csize %"PRIu32, in kvm_dump_mkheader()
576 hdr_size += kd->cpu_dsize; in kvm_dump_mkheader()
581 kd->dump_off = dump_off + hdr_size; in kvm_dump_mkheader()
582 if (Lseek(kd, kd->pmfd, kd->dump_off, SEEK_SET) == -1) { in kvm_dump_mkheader()
583 _kvm_err(kd, kd->program, "failed to seek to %" PRId64, in kvm_dump_mkheader()
584 (int64_t)kd->dump_off); in kvm_dump_mkheader()
591 kd->kcore_hdr = _kvm_malloc(kd, sizeof(kcore_hdr_t)); in kvm_dump_mkheader()
592 if (kd->kcore_hdr == NULL) { in kvm_dump_mkheader()
593 _kvm_err(kd, kd->program, "failed to allocate header"); in kvm_dump_mkheader()
597 kd->kcore_hdr->c_hdrsize = ALIGN(sizeof(kcore_hdr_t)); in kvm_dump_mkheader()
598 kd->kcore_hdr->c_seghdrsize = ALIGN(sizeof(kcore_seg_t)); in kvm_dump_mkheader()
599 kd->kcore_hdr->c_nseg = 2; in kvm_dump_mkheader()
600 CORE_SETMAGIC(*(kd->kcore_hdr), KCORE_MAGIC, MID_MACHINE,0); in kvm_dump_mkheader()
605 if (_kvm_initvtop(kd) == 0) in kvm_dump_mkheader()
610 if (kd->kcore_hdr != NULL) { in kvm_dump_mkheader()
611 free(kd->kcore_hdr); in kvm_dump_mkheader()
612 kd->kcore_hdr = NULL; in kvm_dump_mkheader()
614 if (kd->cpu_data != NULL) { in kvm_dump_mkheader()
615 free(kd->cpu_data); in kvm_dump_mkheader()
616 kd->cpu_data = NULL; in kvm_dump_mkheader()
617 kd->cpu_dsize = 0; in kvm_dump_mkheader()
623 clear_gap(kvm_t *kd, bool (*write_buf)(void *, const void *, size_t), in clear_gap() argument
634 _kvm_syserr(kd, kd->program, "clear_gap"); in clear_gap()
647 kvm_dump_header(kvm_t *kd, bool (*write_buf)(void *, const void *, size_t), in kvm_dump_header() argument
654 if (kd->kcore_hdr == NULL || kd->cpu_data == NULL) { in kvm_dump_header()
655 _kvm_err(kd, kd->program, "no valid dump header(s)"); in kvm_dump_header()
663 if (!(*write_buf)(cookie, kd->kcore_hdr, sizeof(kcore_hdr_t))) { in kvm_dump_header()
664 _kvm_syserr(kd, kd->program, "kvm_dump_header"); in kvm_dump_header()
667 offset += kd->kcore_hdr->c_hdrsize; in kvm_dump_header()
668 gap = kd->kcore_hdr->c_hdrsize - sizeof(kcore_hdr_t); in kvm_dump_header()
669 if (clear_gap(kd, write_buf, cookie, gap) == -1) in kvm_dump_header()
676 seghdr.c_size = ALIGN(kd->cpu_dsize); in kvm_dump_header()
678 _kvm_syserr(kd, kd->program, "kvm_dump_header"); in kvm_dump_header()
681 offset += kd->kcore_hdr->c_seghdrsize; in kvm_dump_header()
682 gap = kd->kcore_hdr->c_seghdrsize - sizeof(seghdr); in kvm_dump_header()
683 if (clear_gap(kd, write_buf, cookie, gap) == -1) in kvm_dump_header()
686 if (!(*write_buf)(cookie, kd->cpu_data, kd->cpu_dsize)) { in kvm_dump_header()
687 _kvm_syserr(kd, kd->program, "kvm_dump_header"); in kvm_dump_header()
691 gap = seghdr.c_size - kd->cpu_dsize; in kvm_dump_header()
692 if (clear_gap(kd, write_buf, cookie, gap) == -1) in kvm_dump_header()
701 _kvm_syserr(kd, kd->program, "kvm_dump_header"); in kvm_dump_header()
704 offset += kd->kcore_hdr->c_seghdrsize; in kvm_dump_header()
705 gap = kd->kcore_hdr->c_seghdrsize - sizeof(seghdr); in kvm_dump_header()
706 if (clear_gap(kd, write_buf, cookie, gap) == -1) in kvm_dump_header()
719 kvm_dump_wrtheader(kvm_t *kd, FILE *fp, int dumpsize) in kvm_dump_wrtheader() argument
721 return kvm_dump_header(kd, kvm_dump_header_stdio, fp, dumpsize); in kvm_dump_wrtheader()
728 kvm_t *kd; in kvm_openfiles() local
730 if ((kd = malloc(sizeof(*kd))) == NULL) { in kvm_openfiles()
734 kd->program = 0; in kvm_openfiles()
735 return (_kvm_open(kd, uf, mf, sf, flag, errout)); in kvm_openfiles()
742 kvm_t *kd; in kvm_open() local
744 if ((kd = malloc(sizeof(*kd))) == NULL) { in kvm_open()
749 kd->program = program; in kvm_open()
750 return (_kvm_open(kd, uf, mf, sf, flag, NULL)); in kvm_open()
754 kvm_close(kvm_t *kd) in kvm_close() argument
758 if (kd->pmfd >= 0) in kvm_close()
759 error |= close(kd->pmfd); in kvm_close()
760 if (kd->vmfd >= 0) in kvm_close()
761 error |= close(kd->vmfd); in kvm_close()
762 if (kd->nlfd >= 0) in kvm_close()
763 error |= close(kd->nlfd); in kvm_close()
764 if (kd->swfd >= 0) in kvm_close()
765 error |= close(kd->swfd); in kvm_close()
766 if (kd->vmst) in kvm_close()
767 _kvm_freevtop(kd); in kvm_close()
768 kd->cpu_dsize = 0; in kvm_close()
769 if (kd->cpu_data != NULL) in kvm_close()
770 free(kd->cpu_data); in kvm_close()
771 if (kd->kcore_hdr != NULL) in kvm_close()
772 free(kd->kcore_hdr); in kvm_close()
773 if (kd->procbase != 0) in kvm_close()
774 free(kd->procbase); in kvm_close()
775 if (kd->procbase2 != 0) in kvm_close()
776 free(kd->procbase2); in kvm_close()
777 if (kd->lwpbase != 0) in kvm_close()
778 free(kd->lwpbase); in kvm_close()
779 if (kd->swapspc != 0) in kvm_close()
780 free(kd->swapspc); in kvm_close()
781 if (kd->argspc != 0) in kvm_close()
782 free(kd->argspc); in kvm_close()
783 if (kd->argbuf != 0) in kvm_close()
784 free(kd->argbuf); in kvm_close()
785 if (kd->argv != 0) in kvm_close()
786 free(kd->argv); in kvm_close()
787 if (kd->iobuf != 0) in kvm_close()
788 free(kd->iobuf); in kvm_close()
789 if (kd->dump_mem != MAP_FAILED) in kvm_close()
790 munmap(kd->dump_mem, kd->dump_size); in kvm_close()
791 free(kd); in kvm_close()
797 kvm_nlist(kvm_t *kd, struct nlist *nl) in kvm_nlist() argument
804 rv = __fdnlist(kd->nlfd, nl); in kvm_nlist()
807 _kvm_err(kd, 0, "bad namelist"); in kvm_nlist()
813 kvm_dump_inval(kvm_t *kd) in kvm_dump_inval() argument
821 if (ISALIVE(kd)) { in kvm_dump_inval()
822 _kvm_err(kd, kd->program, "clearing dump on live kernel"); in kvm_dump_inval()
828 if (kvm_nlist(kd, nl) == -1) { in kvm_dump_inval()
829 _kvm_err(kd, 0, "bad namelist"); in kvm_dump_inval()
832 if (_kvm_kvatop(kd, (vaddr_t)nl[0].n_value, &pa) == 0) in kvm_dump_inval()
836 dsize = MAX(kd->fdalign, sizeof(u_long)); in kvm_dump_inval()
837 if (kd->iobufsz < dsize) { in kvm_dump_inval()
838 newbuf = realloc(kd->iobuf, dsize); in kvm_dump_inval()
840 _kvm_syserr(kd, 0, "cannot allocate I/O buffer"); in kvm_dump_inval()
843 kd->iobuf = newbuf; in kvm_dump_inval()
844 kd->iobufsz = dsize; in kvm_dump_inval()
846 memset(kd->iobuf, 0, dsize); in kvm_dump_inval()
847 doff = _kvm_pa2off(kd, pa); in kvm_dump_inval()
848 doff -= doff % kd->fdalign; in kvm_dump_inval()
849 if (pwrite(kd->pmfd, kd->iobuf, dsize, doff) == -1) { in kvm_dump_inval()
850 _kvm_syserr(kd, 0, "cannot invalidate dump - pwrite"); in kvm_dump_inval()
857 kvm_read(kvm_t *kd, u_long kva, void *buf, size_t len) in kvm_read() argument
862 if (ISKMEM(kd)) { in kvm_read()
868 cc = _kvm_pread(kd, kd->vmfd, buf, len, (off_t)kva); in kvm_read()
870 _kvm_syserr(kd, 0, "kvm_read"); in kvm_read()
873 _kvm_err(kd, kd->program, "short read"); in kvm_read()
875 } else if (ISSYSCTL(kd)) { in kvm_read()
876 _kvm_err(kd, kd->program, "kvm_open called with KVM_NO_FILES, " in kvm_read()
880 if ((kd->kcore_hdr == NULL) || (kd->cpu_data == NULL)) { in kvm_read()
881 _kvm_err(kd, kd->program, "no valid dump header"); in kvm_read()
889 cc = _kvm_kvatop(kd, (vaddr_t)kva, &pa); in kvm_read()
891 _kvm_err(kd, kd->program, "_kvm_kvatop(%lx)", kva); in kvm_read()
896 foff = _kvm_pa2off(kd, pa); in kvm_read()
898 cc = _kvm_pread(kd, kd->pmfd, cp, (size_t)cc, foff); in kvm_read()
900 _kvm_syserr(kd, kd->program, "kvm_read"); in kvm_read()
921 kvm_write(kvm_t *kd, u_long kva, const void *buf, size_t len) in kvm_write() argument
926 if (ISKMEM(kd)) { in kvm_write()
931 cc = pwrite(kd->vmfd, buf, len, (off_t)kva); in kvm_write()
933 _kvm_syserr(kd, 0, "kvm_write"); in kvm_write()
936 _kvm_err(kd, kd->program, "short write"); in kvm_write()
938 } else if (ISSYSCTL(kd)) { in kvm_write()
939 _kvm_err(kd, kd->program, "kvm_open called with KVM_NO_FILES, " in kvm_write()
943 if (kd->dump_mem == MAP_FAILED) { in kvm_write()
944 _kvm_err(kd, kd->program, in kvm_write()
953 cc = _kvm_kvatop(kd, (vaddr_t)kva, &pa); in kvm_write()
955 _kvm_err(kd, kd->program, "_kvm_kvatop(%lx)", kva); in kvm_write()
960 foff = _kvm_pa2off(kd, pa); in kvm_write()
962 cc = _kvm_pwrite(kd, cp, (size_t)cc, foff); in kvm_write()
964 _kvm_syserr(kd, kd->program, "kvm_pwrite"); in kvm_write()