CVS commit: src/lib/libkvm
Module Name:src Committed By: christos Date: Mon Jul 19 10:30:36 UTC 2021 Modified Files: src/lib/libkvm: kvm_proc.c Log Message: Match the declaration in To generate a diff of this commit: cvs rdiff -u -r1.94 -r1.95 src/lib/libkvm/kvm_proc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_proc.c diff -u src/lib/libkvm/kvm_proc.c:1.94 src/lib/libkvm/kvm_proc.c:1.95 --- src/lib/libkvm/kvm_proc.c:1.94 Wed Dec 11 15:19:27 2019 +++ src/lib/libkvm/kvm_proc.c Mon Jul 19 06:30:36 2021 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_proc.c,v 1.94 2019/12/11 20:19:27 ad Exp $ */ +/* $NetBSD: kvm_proc.c,v 1.95 2021/07/19 10:30:36 christos Exp $ */ /*- * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #if 0 static char sccsid[] = "@(#)kvm_proc.c 8.3 (Berkeley) 9/23/93"; #else -__RCSID("$NetBSD: kvm_proc.c,v 1.94 2019/12/11 20:19:27 ad Exp $"); +__RCSID("$NetBSD: kvm_proc.c,v 1.95 2021/07/19 10:30:36 christos Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -159,7 +159,9 @@ struct miniproc { */ struct kvm_kauth_cred { u_int cr_refcnt; /* reference count */ - uint8_t cr_pad[CACHE_LINE_SIZE - sizeof(u_int)]; +#if COHERENCY_UNIT > 4 + uint8_t cr_pad[COHERENCY_UNIT - 4]; +#endif uid_t cr_uid; /* user id */ uid_t cr_euid; /* effective user id */ uid_t cr_svuid; /* saved effective user id */
CVS commit: src/lib/libkvm
Module Name:src Committed By: skrll Date: Tue Nov 10 19:14:11 UTC 2020 Modified Files: src/lib/libkvm: kvm_aarch64.c Log Message: Catch up with aa64 is not mips change To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/lib/libkvm/kvm_aarch64.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_aarch64.c diff -u src/lib/libkvm/kvm_aarch64.c:1.9 src/lib/libkvm/kvm_aarch64.c:1.10 --- src/lib/libkvm/kvm_aarch64.c:1.9 Thu Sep 12 10:18:50 2019 +++ src/lib/libkvm/kvm_aarch64.c Tue Nov 10 19:14:11 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_aarch64.c,v 1.9 2019/09/12 10:18:50 mlelstv Exp $ */ +/* $NetBSD: kvm_aarch64.c,v 1.10 2020/11/10 19:14:11 skrll Exp $ */ /*- * Copyright (c) 2014, 2018 The NetBSD Foundation, Inc. @@ -49,7 +49,7 @@ #include "kvm_private.h" -__RCSID("$NetBSD: kvm_aarch64.c,v 1.9 2019/09/12 10:18:50 mlelstv Exp $"); +__RCSID("$NetBSD: kvm_aarch64.c,v 1.10 2020/11/10 19:14:11 skrll Exp $"); /*ARGSUSED*/ void @@ -73,7 +73,7 @@ _kvm_kvatop(kvm_t *kd, vaddr_t va, paddr return(0); } - if ((va & AARCH64_KSEG_MASK) != AARCH64_KSEG_START) { + if ((va & AARCH64_DIRECTMAP_MASK) != AARCH64_DIRECTMAP_START) { /* * Bogus address (not in KV space): punt. */
CVS commit: src/lib/libkvm
Module Name:src Committed By: christos Date: Sat May 2 14:31:13 UTC 2020 Modified Files: src/lib/libkvm: kvm.c Log Message: Cast off_t to size_t to appease lint: warning: conversion from 'long long' to 'int' may lose accuracy To generate a diff of this commit: cvs rdiff -u -r1.108 -r1.109 src/lib/libkvm/kvm.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm.c diff -u src/lib/libkvm/kvm.c:1.108 src/lib/libkvm/kvm.c:1.109 --- src/lib/libkvm/kvm.c:1.108 Tue Apr 28 10:27:41 2020 +++ src/lib/libkvm/kvm.c Sat May 2 10:31:13 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm.c,v 1.108 2020/04/28 14:27:41 christos Exp $ */ +/* $NetBSD: kvm.c,v 1.109 2020/05/02 14:31:13 christos Exp $ */ /*- * Copyright (c) 1989, 1992, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)kvm.c 8.2 (Berkeley) 2/13/94"; #else -__RCSID("$NetBSD: kvm.c,v 1.108 2020/04/28 14:27:41 christos Exp $"); +__RCSID("$NetBSD: kvm.c,v 1.109 2020/05/02 14:31:13 christos Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -182,7 +182,7 @@ _kvm_pread(kvm_t *kd, int fd, void *buf, errno = EINVAL; return -1; } - memcpy(buf, (char *)kd->dump_mem + off, size); + memcpy(buf, (char *)kd->dump_mem + (size_t)off, size); return size; } @@ -224,7 +224,7 @@ _kvm_pwrite(kvm_t *kd, const void *buf, errno = EINVAL; return -1; } - memcpy(mem + off, buf, size); + memcpy(mem + (size_t)off, buf, size); return size; }
CVS commit: src/lib/libkvm
Module Name:src Committed By: christos Date: Tue Apr 28 14:27:41 UTC 2020 Modified Files: src/lib/libkvm: kvm.c Log Message: Don't treat failure to map the file as fatal. To generate a diff of this commit: cvs rdiff -u -r1.107 -r1.108 src/lib/libkvm/kvm.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm.c diff -u src/lib/libkvm/kvm.c:1.107 src/lib/libkvm/kvm.c:1.108 --- src/lib/libkvm/kvm.c:1.107 Mon Apr 27 20:19:23 2020 +++ src/lib/libkvm/kvm.c Tue Apr 28 10:27:41 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm.c,v 1.107 2020/04/28 00:19:23 christos Exp $ */ +/* $NetBSD: kvm.c,v 1.108 2020/04/28 14:27:41 christos Exp $ */ /*- * Copyright (c) 1989, 1992, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)kvm.c 8.2 (Berkeley) 2/13/94"; #else -__RCSID("$NetBSD: kvm.c,v 1.107 2020/04/28 00:19:23 christos Exp $"); +__RCSID("$NetBSD: kvm.c,v 1.108 2020/04/28 14:27:41 christos Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -399,8 +399,6 @@ _kvm_open(kvm_t *kd, const char *uf, con kd->dump_size = (size_t)st.st_size; kd->dump_mem = mmap(NULL, kd->dump_size, PROT_READ|PROT_WRITE, MAP_FILE|MAP_PRIVATE, kd->pmfd, 0); - if (kd->dump_mem == MAP_FAILED) - goto failed; } return (kd); failed:
CVS commit: src/lib/libkvm
Module Name:src Committed By: christos Date: Tue Apr 28 00:19:23 UTC 2020 Modified Files: src/lib/libkvm: kvm.c Log Message: make kvm_pread use the mapped buffer if it is available. To generate a diff of this commit: cvs rdiff -u -r1.106 -r1.107 src/lib/libkvm/kvm.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm.c diff -u src/lib/libkvm/kvm.c:1.106 src/lib/libkvm/kvm.c:1.107 --- src/lib/libkvm/kvm.c:1.106 Mon Apr 27 20:12:01 2020 +++ src/lib/libkvm/kvm.c Mon Apr 27 20:19:23 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm.c,v 1.106 2020/04/28 00:12:01 christos Exp $ */ +/* $NetBSD: kvm.c,v 1.107 2020/04/28 00:19:23 christos Exp $ */ /*- * Copyright (c) 1989, 1992, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)kvm.c 8.2 (Berkeley) 2/13/94"; #else -__RCSID("$NetBSD: kvm.c,v 1.106 2020/04/28 00:12:01 christos Exp $"); +__RCSID("$NetBSD: kvm.c,v 1.107 2020/04/28 00:19:23 christos Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -177,6 +177,15 @@ _kvm_pread(kvm_t *kd, int fd, void *buf, ssize_t rv; off_t doff; + if (kd->dump_mem != MAP_FAILED) { + if (size + off > kd->dump_size) { + errno = EINVAL; + return -1; + } + memcpy(buf, (char *)kd->dump_mem + off, size); + return size; + } + /* If aligned nothing to do. */ if (((off % kd->fdalign) | (size % kd->fdalign)) == 0) { return pread(fd, buf, size, off);
CVS commit: src/lib/libkvm
Module Name:src Committed By: christos Date: Tue Apr 28 00:12:01 UTC 2020 Modified Files: src/lib/libkvm: kvm.c kvm_private.h Log Message: Implement kvm_write() for dump files. We map the file privately so that changes don't get propagated back, and then write to the private buffer. This is not useful yes, but it is simple enough to make pread use the buffer if it is available. To generate a diff of this commit: cvs rdiff -u -r1.105 -r1.106 src/lib/libkvm/kvm.c cvs rdiff -u -r1.20 -r1.21 src/lib/libkvm/kvm_private.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm.c diff -u src/lib/libkvm/kvm.c:1.105 src/lib/libkvm/kvm.c:1.106 --- src/lib/libkvm/kvm.c:1.105 Sat Mar 7 19:06:42 2020 +++ src/lib/libkvm/kvm.c Mon Apr 27 20:12:01 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm.c,v 1.105 2020/03/08 00:06:42 chs Exp $ */ +/* $NetBSD: kvm.c,v 1.106 2020/04/28 00:12:01 christos Exp $ */ /*- * Copyright (c) 1989, 1992, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)kvm.c 8.2 (Berkeley) 2/13/94"; #else -__RCSID("$NetBSD: kvm.c,v 1.105 2020/03/08 00:06:42 chs Exp $"); +__RCSID("$NetBSD: kvm.c,v 1.106 2020/04/28 00:12:01 christos Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -48,6 +48,7 @@ __RCSID("$NetBSD: kvm.c,v 1.105 2020/03/ #include #include #include +#include #include #include @@ -205,6 +206,19 @@ _kvm_pread(kvm_t *kd, int fd, void *buf, return size; } +static ssize_t +_kvm_pwrite(kvm_t *kd, const void *buf, size_t size, off_t off) +{ + char *mem = kd->dump_mem; + + if (size + off > kd->dump_size) { + errno = EINVAL; + return -1; + } + memcpy(mem + off, buf, size); + return size; +} + /* * Wrapper around the pread(2) system call; calls _kvm_syserr() for us * in the event of emergency. @@ -256,6 +270,8 @@ _kvm_open(kvm_t *kd, const char *uf, con kd->iobuf = NULL; kd->iobufsz = 0; kd->errbuf[0] = '\0'; + kd->dump_mem = MAP_FAILED; + kd->dump_size = 0; if (flag & KVM_NO_FILES) { kd->alive = KVM_ALIVE_SYSCTL; @@ -371,6 +387,11 @@ _kvm_open(kvm_t *kd, const char *uf, con if (_kvm_initvtop(kd) < 0) goto failed; } + kd->dump_size = (size_t)st.st_size; + kd->dump_mem = mmap(NULL, kd->dump_size, PROT_READ|PROT_WRITE, + MAP_FILE|MAP_PRIVATE, kd->pmfd, 0); + if (kd->dump_mem == MAP_FAILED) + goto failed; } return (kd); failed: @@ -758,6 +779,8 @@ kvm_close(kvm_t *kd) free(kd->argv); if (kd->iobuf != 0) free(kd->iobuf); + if (kd->dump_mem != MAP_FAILED) + munmap(kd->dump_mem, kd->dump_size); free(kd); return (error); @@ -891,6 +914,7 @@ ssize_t kvm_write(kvm_t *kd, u_long kva, const void *buf, size_t len) { int cc; + const void *cp; if (ISKMEM(kd)) { /* @@ -909,9 +933,43 @@ kvm_write(kvm_t *kd, u_long kva, const v "can't use kvm_write"); return (-1); } else { - _kvm_err(kd, kd->program, - "kvm_write not implemented for dead kernels"); - return (-1); + if (kd->dump_mem == MAP_FAILED) { + _kvm_err(kd, kd->program, + "kvm_write not implemented for dead kernels"); + return (-1); + } + cp = buf; + while (len > 0) { + paddr_t pa; + off_t foff; + + cc = _kvm_kvatop(kd, (vaddr_t)kva, &pa); + if (cc == 0) { +_kvm_err(kd, kd->program, "_kvm_kvatop(%lx)", kva); +return (-1); + } + if (cc > len) +cc = len; + foff = _kvm_pa2off(kd, pa); + errno = 0; + cc = _kvm_pwrite(kd, cp, (size_t)cc, foff); + if (cc < 0) { +_kvm_syserr(kd, kd->program, "kvm_pwrite"); +break; + } + /* + * If kvm_kvatop returns a bogus value or our core + * file is truncated, we might wind up seeking beyond + * the end of the core file in which case the read will + * return 0 (EOF). + */ + if (cc == 0) +break; + cp = (const char *)cp + cc; + kva += cc; + len -= cc; + } + return ((const char *)cp - (const char *)buf); } /* NOTREACHED */ } Index: src/lib/libkvm/kvm_private.h diff -u src/lib/libkvm/kvm_private.h:1.20 src/lib/libkvm/kvm_private.h:1.21 --- src/lib/libkvm/kvm_private.h:1.20 Mon Sep 12 17:11:32 2011 +++ src/lib/libkvm/kvm_private.h Mon Apr 27 20:12:01 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_private.h,v 1.20 2011/09/12 21:11:32 christos Exp $ */ +/* $NetBSD: kvm_private.h,v 1.21 2020/04/28 00:12:01 christos Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -72,6 +72,8 @@ struct __kvm { size_t cpu_dsize; void *cpu_data; off_t dump_off; /* Where the actual dump starts */ + void *dump_mem; + size_t dump_size; /* * Kernel virtual address translation state. This only gets filled
CVS commit: src/lib/libkvm
Module Name:src Committed By: chs Date: Sun Mar 8 00:14:18 UTC 2020 Modified Files: src/lib/libkvm: kvm_x86_64.c Log Message: use a binary search in _kvm_pa2off(). this helps a lot for sparse dumps, which can have millions of memory segments. To generate a diff of this commit: cvs rdiff -u -r1.10 -r1.11 src/lib/libkvm/kvm_x86_64.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_x86_64.c diff -u src/lib/libkvm/kvm_x86_64.c:1.10 src/lib/libkvm/kvm_x86_64.c:1.11 --- src/lib/libkvm/kvm_x86_64.c:1.10 Wed Feb 19 20:21:22 2014 +++ src/lib/libkvm/kvm_x86_64.c Sun Mar 8 00:14:18 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_x86_64.c,v 1.10 2014/02/19 20:21:22 dsl Exp $ */ +/* $NetBSD: kvm_x86_64.c,v 1.11 2020/03/08 00:14:18 chs Exp $ */ /*- * Copyright (c) 1989, 1992, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)kvm_hp300.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: kvm_x86_64.c,v 1.10 2014/02/19 20:21:22 dsl Exp $"); +__RCSID("$NetBSD: kvm_x86_64.c,v 1.11 2020/03/08 00:14:18 chs Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -186,6 +186,36 @@ _kvm_kvatop(kvm_t *kd, vaddr_t va, paddr return (0); } +struct p2o { + paddr_t pa; + psize_t sz; + off_t off; +}; + +static int +cmp_p2o(const void *a, const void *b) +{ + const struct p2o *p1 = a; + const struct p2o *p2 = b; + + /* If one range contains the start of the other, it's a match. */ + if (p1->pa >= p2->pa && p1->pa < p2->pa + p2->sz) { + return 0; + } + if (p2->pa >= p1->pa && p2->pa < p1->pa + p1->sz) { + return 0; + } + + /* Otherwise sort by pa. */ + if (p1->pa < p2->pa) + return -1; + else if (p1->pa > p2->pa) + return 1; + else + return 0; +} + + /* * Translate a physical address to a file-offset in the crash dump. */ @@ -197,19 +227,36 @@ _kvm_pa2off(kvm_t *kd, paddr_t pa) off_t off; int i; + static struct p2o *map; + struct p2o key, *val; + cpu_kh = kd->cpu_data; ramsegs = (void *)((char *)(void *)cpu_kh + ALIGN(sizeof *cpu_kh)); - off = 0; - for (i = 0; i < cpu_kh->nmemsegs; i++) { - if (pa >= ramsegs[i].start && - (pa - ramsegs[i].start) < ramsegs[i].size) { - off += (pa - ramsegs[i].start); - break; + if (map == NULL) { + map = calloc(sizeof *map, cpu_kh->nmemsegs); + off = 0; + for (i = 0; i < cpu_kh->nmemsegs; i++) { + map[i].pa = ramsegs[i].start; + map[i].sz = ramsegs[i].size; + map[i].off = off; + off += ramsegs[i].size; } - off += ramsegs[i].size; +#if 0 + /* The array appears to be sorted already */ + qsort(map, cpu_kh->nmemsegs, sizeof(*map), cmp_p2o); +#endif } + key.pa = pa; + key.sz = 1; + key.off = -1; + val = bsearch(&key, map, cpu_kh->nmemsegs, sizeof (key), cmp_p2o); + if (val) + off = val->off + pa - val->pa; + else + off = 0; + return (kd->dump_off + off); }
CVS commit: src/lib/libkvm
Module Name:src Committed By: chs Date: Sun Mar 8 00:06:42 UTC 2020 Modified Files: src/lib/libkvm: kvm.c Log Message: only do bounce buffering for character devices. To generate a diff of this commit: cvs rdiff -u -r1.104 -r1.105 src/lib/libkvm/kvm.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm.c diff -u src/lib/libkvm/kvm.c:1.104 src/lib/libkvm/kvm.c:1.105 --- src/lib/libkvm/kvm.c:1.104 Mon Nov 5 00:43:30 2018 +++ src/lib/libkvm/kvm.c Sun Mar 8 00:06:42 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm.c,v 1.104 2018/11/05 00:43:30 mrg Exp $ */ +/* $NetBSD: kvm.c,v 1.105 2020/03/08 00:06:42 chs Exp $ */ /*- * Copyright (c) 1989, 1992, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)kvm.c 8.2 (Berkeley) 2/13/94"; #else -__RCSID("$NetBSD: kvm.c,v 1.104 2018/11/05 00:43:30 mrg Exp $"); +__RCSID("$NetBSD: kvm.c,v 1.105 2020/03/08 00:06:42 chs Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -352,7 +352,12 @@ _kvm_open(kvm_t *kd, const char *uf, con /* swap is not configured? not fatal */ } } else { - kd->fdalign = DEV_BSIZE; /* XXX */ + if (S_ISCHR(st.st_mode)) { + kd->fdalign = DEV_BSIZE; + } else { + kd->fdalign = 1; + } + /* * This is a crash dump. * Initialize the virtual address translation machinery.
CVS commit: src/lib/libkvm
Module Name:src Committed By: ad Date: Wed Dec 11 20:19:27 UTC 2019 Modified Files: src/lib/libkvm: kvm_proc.c Log Message: Redo previous more conventionally. Requested by kre@. To generate a diff of this commit: cvs rdiff -u -r1.93 -r1.94 src/lib/libkvm/kvm_proc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_proc.c diff -u src/lib/libkvm/kvm_proc.c:1.93 src/lib/libkvm/kvm_proc.c:1.94 --- src/lib/libkvm/kvm_proc.c:1.93 Tue Dec 10 18:13:07 2019 +++ src/lib/libkvm/kvm_proc.c Wed Dec 11 20:19:27 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_proc.c,v 1.93 2019/12/10 18:13:07 ad Exp $ */ +/* $NetBSD: kvm_proc.c,v 1.94 2019/12/11 20:19:27 ad Exp $ */ /*- * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #if 0 static char sccsid[] = "@(#)kvm_proc.c 8.3 (Berkeley) 9/23/93"; #else -__RCSID("$NetBSD: kvm_proc.c,v 1.93 2019/12/10 18:13:07 ad Exp $"); +__RCSID("$NetBSD: kvm_proc.c,v 1.94 2019/12/11 20:19:27 ad Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -260,7 +260,7 @@ _kvm_ureadm(kvm_t *kd, const struct mini return (NULL); if (_kvm_pread(kd, kd->pmfd, kd->swapspc, (size_t)kd->nbpg, - (off_t)pg.phys_addr & -kd->nbpg) != kd->nbpg) + (off_t)pg.phys_addr & ~(kd->nbpg - 1)) != kd->nbpg) return (NULL); } else { if (kd->swfd < 0 ||
CVS commit: src/lib/libkvm
Module Name:src Committed By: ad Date: Tue Dec 10 18:13:07 UTC 2019 Modified Files: src/lib/libkvm: kvm_proc.c Log Message: Mask out always zero bits off pg->phys_addr. To generate a diff of this commit: cvs rdiff -u -r1.92 -r1.93 src/lib/libkvm/kvm_proc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_proc.c diff -u src/lib/libkvm/kvm_proc.c:1.92 src/lib/libkvm/kvm_proc.c:1.93 --- src/lib/libkvm/kvm_proc.c:1.92 Mon Apr 4 22:14:38 2016 +++ src/lib/libkvm/kvm_proc.c Tue Dec 10 18:13:07 2019 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_proc.c,v 1.92 2016/04/04 22:14:38 christos Exp $ */ +/* $NetBSD: kvm_proc.c,v 1.93 2019/12/10 18:13:07 ad Exp $ */ /*- * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #if 0 static char sccsid[] = "@(#)kvm_proc.c 8.3 (Berkeley) 9/23/93"; #else -__RCSID("$NetBSD: kvm_proc.c,v 1.92 2016/04/04 22:14:38 christos Exp $"); +__RCSID("$NetBSD: kvm_proc.c,v 1.93 2019/12/10 18:13:07 ad Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -260,7 +260,7 @@ _kvm_ureadm(kvm_t *kd, const struct mini return (NULL); if (_kvm_pread(kd, kd->pmfd, kd->swapspc, (size_t)kd->nbpg, - (off_t)pg.phys_addr) != kd->nbpg) + (off_t)pg.phys_addr & -kd->nbpg) != kd->nbpg) return (NULL); } else { if (kd->swfd < 0 ||
CVS commit: src/lib/libkvm
Module Name:src Committed By: mrg Date: Wed Dec 19 11:02:21 UTC 2018 Modified Files: src/lib/libkvm: kvm_aarch64.c Log Message: be consistent about uint64_t and bit masks. To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/lib/libkvm/kvm_aarch64.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_aarch64.c diff -u src/lib/libkvm/kvm_aarch64.c:1.7 src/lib/libkvm/kvm_aarch64.c:1.8 --- src/lib/libkvm/kvm_aarch64.c:1.7 Wed Dec 19 11:00:09 2018 +++ src/lib/libkvm/kvm_aarch64.c Wed Dec 19 11:02:21 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_aarch64.c,v 1.7 2018/12/19 11:00:09 mrg Exp $ */ +/* $NetBSD: kvm_aarch64.c,v 1.8 2018/12/19 11:02:21 mrg Exp $ */ /*- * Copyright (c) 2014, 2018 The NetBSD Foundation, Inc. @@ -48,7 +48,7 @@ #include "kvm_private.h" -__RCSID("$NetBSD: kvm_aarch64.c,v 1.7 2018/12/19 11:00:09 mrg Exp $"); +__RCSID("$NetBSD: kvm_aarch64.c,v 1.8 2018/12/19 11:02:21 mrg Exp $"); /*ARGSUSED*/ void @@ -146,7 +146,7 @@ lose: if ((pte & LX_TYPE) == LX_TYPE_BLK) { const size_t blk_size = 1 << addr_shift; - const paddr_t blk_mask = __BITS(addr_shift - 1, 0); + const uint64_t blk_mask = __BITS(addr_shift - 1, 0); *pa = (pte & page_addr & ~blk_mask) | (va & blk_mask); return blk_size - (va & blk_mask);
CVS commit: src/lib/libkvm
Module Name:src Committed By: mrg Date: Wed Dec 19 11:00:09 UTC 2018 Modified Files: src/lib/libkvm: kvm_aarch64.c Log Message: use uint64_t for idx_mask. fixes lookups for some PAs. from skrll. bump copyright. we updated this a lot of this in 2018. To generate a diff of this commit: cvs rdiff -u -r1.6 -r1.7 src/lib/libkvm/kvm_aarch64.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_aarch64.c diff -u src/lib/libkvm/kvm_aarch64.c:1.6 src/lib/libkvm/kvm_aarch64.c:1.7 --- src/lib/libkvm/kvm_aarch64.c:1.6 Tue Dec 18 16:25:47 2018 +++ src/lib/libkvm/kvm_aarch64.c Wed Dec 19 11:00:09 2018 @@ -1,7 +1,7 @@ -/* $NetBSD: kvm_aarch64.c,v 1.6 2018/12/18 16:25:47 skrll Exp $ */ +/* $NetBSD: kvm_aarch64.c,v 1.7 2018/12/19 11:00:09 mrg Exp $ */ /*- - * Copyright (c) 2014 The NetBSD Foundation, Inc. + * Copyright (c) 2014, 2018 The NetBSD Foundation, Inc. * All rights reserved. * * This code is derived from software contributed to The NetBSD Foundation @@ -48,7 +48,7 @@ #include "kvm_private.h" -__RCSID("$NetBSD: kvm_aarch64.c,v 1.6 2018/12/18 16:25:47 skrll Exp $"); +__RCSID("$NetBSD: kvm_aarch64.c,v 1.7 2018/12/19 11:00:09 mrg Exp $"); /*ARGSUSED*/ void @@ -127,7 +127,8 @@ lose: pt_entry_t pte; /* now index into the pte table */ - const u_int idx_mask = __BITS(addr_shift + pte_shift - 1, addr_shift); + const uint64_t idx_mask = __BITS(addr_shift + pte_shift - 1, + addr_shift); pte_addr += 8 * __SHIFTOUT(va, idx_mask); /* Find and read the PTE. */
CVS commit: src/lib/libkvm
Module Name:src Committed By: skrll Date: Tue Dec 18 16:25:47 UTC 2018 Modified Files: src/lib/libkvm: kvm_aarch64.c Log Message: Fix _kvm_kvatop so that it now works. To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/lib/libkvm/kvm_aarch64.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_aarch64.c diff -u src/lib/libkvm/kvm_aarch64.c:1.5 src/lib/libkvm/kvm_aarch64.c:1.6 --- src/lib/libkvm/kvm_aarch64.c:1.5 Fri Nov 9 04:06:40 2018 +++ src/lib/libkvm/kvm_aarch64.c Tue Dec 18 16:25:47 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_aarch64.c,v 1.5 2018/11/09 04:06:40 mrg Exp $ */ +/* $NetBSD: kvm_aarch64.c,v 1.6 2018/12/18 16:25:47 skrll Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -48,7 +48,7 @@ #include "kvm_private.h" -__RCSID("$NetBSD: kvm_aarch64.c,v 1.5 2018/11/09 04:06:40 mrg Exp $"); +__RCSID("$NetBSD: kvm_aarch64.c,v 1.6 2018/12/18 16:25:47 skrll Exp $"); /*ARGSUSED*/ void @@ -83,27 +83,24 @@ lose: } const cpu_kcore_hdr_t * const cpu_kh = kd->cpu_data; - const uint64_t tg1 = cpu_kh->kh_tcr1 & TCR_TG1; + const uint64_t tg1 = cpu_kh->kh_tcr1 & TCR_TG1; const u_int t1siz = __SHIFTOUT(cpu_kh->kh_tcr1, TCR_T1SZ); + const u_int inputsz = 64 - t1siz; /* * Real kernel virtual address: do the translation. */ - u_int va_bits; u_int page_shift; switch (tg1) { case TCR_TG1_4KB: - va_bits = t1siz + 36; page_shift = 12; break; case TCR_TG1_16KB: - va_bits = 48; page_shift = 14; break; case TCR_TG1_64KB: - va_bits = t1siz + 38; page_shift = 16; break; default: @@ -111,28 +108,27 @@ lose: } const size_t page_size = 1 << page_shift; - const uint64_t page_mask = (page_size - 1); - const uint64_t page_addr = __BITS(47, 0) & ~page_mask; - const uint64_t pte_mask = page_mask >> 3; + const uint64_t page_mask = __BITS(page_shift - 1, 0); + const uint64_t page_addr = __BITS(47, page_shift); const u_int pte_shift = page_shift - 3; - /* how many level of page tables do we have? */ - u_int level = (48 + page_shift - 1) / page_shift; + /* how many levels of page tables do we have? */ + u_int levels = howmany(inputsz - page_shift, pte_shift); /* restrict va to the valid VA bits */ - va &= (1LL << va_bits) - 1; + va &= __BITS(inputsz - 1, 0); - u_int addr_shift = page_shift + (level - 1) * pte_shift; + u_int addr_shift = page_shift + (levels - 1) * pte_shift; /* clear out the unused low bits of the table address */ - paddr_t pte_addr = (cpu_kh->kh_ttbr1 & TTBR_BADDR); - pte_addr &= ~((8L << (va_bits - addr_shift)) - 1); + paddr_t pte_addr = cpu_kh->kh_ttbr1 & TTBR_BADDR; for (;;) { pt_entry_t pte; /* now index into the pte table */ - pte_addr += 8 * ((va >> addr_shift) & pte_mask); + const u_int idx_mask = __BITS(addr_shift + pte_shift - 1, addr_shift); + pte_addr += 8 * __SHIFTOUT(va, idx_mask); /* Find and read the PTE. */ if (_kvm_pread(kd, kd->pmfd, &pte, sizeof(pte), @@ -148,15 +144,15 @@ lose: } if ((pte & LX_TYPE) == LX_TYPE_BLK) { - const paddr_t blk_mask = ((1L << addr_shift) - 1); + const size_t blk_size = 1 << addr_shift; + const paddr_t blk_mask = __BITS(addr_shift - 1, 0); *pa = (pte & page_addr & ~blk_mask) | (va & blk_mask); - return 0; + return blk_size - (va & blk_mask); } - - if (level == page_shift) { + if (--levels == 0) { *pa = (pte & page_addr) | (va & page_mask); - return 0; + return page_size - (va & page_mask); } /*
CVS commit: src/lib/libkvm
Module Name:src Committed By: sevan Date: Tue Dec 11 23:02:19 UTC 2018 Modified Files: src/lib/libkvm: kvm_getloadavg.3 Log Message: Reword post mortem description. It tries to get the tree averages if it can. To generate a diff of this commit: cvs rdiff -u -r1.12 -r1.13 src/lib/libkvm/kvm_getloadavg.3 Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_getloadavg.3 diff -u src/lib/libkvm/kvm_getloadavg.3:1.12 src/lib/libkvm/kvm_getloadavg.3:1.13 --- src/lib/libkvm/kvm_getloadavg.3:1.12 Tue Dec 11 02:29:11 2018 +++ src/lib/libkvm/kvm_getloadavg.3 Tue Dec 11 23:02:19 2018 @@ -1,4 +1,4 @@ -.\" $NetBSD: kvm_getloadavg.3,v 1.12 2018/12/11 02:29:11 sevan Exp $ +.\" $NetBSD: kvm_getloadavg.3,v 1.13 2018/12/11 23:02:19 sevan Exp $ .\" .\" Copyright (c) 1992, 1993 .\" The Regents of the University of California. All rights reserved. @@ -58,8 +58,8 @@ On a live system, the load average is ob .Xr getloadavg 3 . If performing post mortem on a kernel core file, .Nm -obtains the system load average at the time of death from the core file -directly. +is able to extract the system load averages at the time of death from the core +file directly. .Sh RETURN VALUES If the load average was unobtainable, \-1 is returned; otherwise, the number of samples actually retrieved is returned.
CVS commit: src/lib/libkvm
Module Name:src Committed By: sevan Date: Tue Dec 11 02:29:11 UTC 2018 Modified Files: src/lib/libkvm: kvm_getloadavg.3 Log Message: Clarify the difference to getloadavg(3). To generate a diff of this commit: cvs rdiff -u -r1.11 -r1.12 src/lib/libkvm/kvm_getloadavg.3 Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_getloadavg.3 diff -u src/lib/libkvm/kvm_getloadavg.3:1.11 src/lib/libkvm/kvm_getloadavg.3:1.12 --- src/lib/libkvm/kvm_getloadavg.3:1.11 Tue Mar 10 23:49:07 2009 +++ src/lib/libkvm/kvm_getloadavg.3 Tue Dec 11 02:29:11 2018 @@ -1,4 +1,4 @@ -.\" $NetBSD: kvm_getloadavg.3,v 1.11 2009/03/10 23:49:07 joerg Exp $ +.\" $NetBSD: kvm_getloadavg.3,v 1.12 2018/12/11 02:29:11 sevan Exp $ .\" .\" Copyright (c) 1992, 1993 .\" The Regents of the University of California. All rights reserved. @@ -29,12 +29,12 @@ .\" .\" @(#)kvm_getloadavg.3 8.1 (Berkeley) 6/4/93 .\" -.Dd August 18, 2002 +.Dd December 11, 2018 .Dt KVM_GETLOADAVG 3 .Os .Sh NAME .Nm kvm_getloadavg -.Nd get system load averages +.Nd get system load averages, from live or dead kernels .Sh LIBRARY .Lb libkvm .Sh SYNOPSIS @@ -46,15 +46,20 @@ The .Fn kvm_getloadavg function returns the number of processes in the system run queue -of the kernel indicated by -.Fa kd , -averaged over various periods of time. +of the kernel or core file, indicated by +.Fa kd . Up to .Fa nelem samples are retrieved and assigned to successive elements of .Fa loadavg Ns Bq . The system imposes a maximum of 3 samples, representing averages over the last 1, 5, and 15 minutes, respectively. +On a live system, the load average is obtained by calling +.Xr getloadavg 3 . +If performing post mortem on a kernel core file, +.Nm +obtains the system load average at the time of death from the core file +directly. .Sh RETURN VALUES If the load average was unobtainable, \-1 is returned; otherwise, the number of samples actually retrieved is returned.
CVS commit: src/lib/libkvm
Module Name:src Committed By: mrg Date: Fri Nov 9 04:06:40 UTC 2018 Modified Files: src/lib/libkvm: kvm_aarch64.c Log Message: tg1 is a 64 bit value, store it in a 64 bit variable. To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/lib/libkvm/kvm_aarch64.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_aarch64.c diff -u src/lib/libkvm/kvm_aarch64.c:1.4 src/lib/libkvm/kvm_aarch64.c:1.5 --- src/lib/libkvm/kvm_aarch64.c:1.4 Thu Nov 1 05:37:11 2018 +++ src/lib/libkvm/kvm_aarch64.c Fri Nov 9 04:06:40 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_aarch64.c,v 1.4 2018/11/01 05:37:11 mrg Exp $ */ +/* $NetBSD: kvm_aarch64.c,v 1.5 2018/11/09 04:06:40 mrg Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -48,7 +48,7 @@ #include "kvm_private.h" -__RCSID("$NetBSD: kvm_aarch64.c,v 1.4 2018/11/01 05:37:11 mrg Exp $"); +__RCSID("$NetBSD: kvm_aarch64.c,v 1.5 2018/11/09 04:06:40 mrg Exp $"); /*ARGSUSED*/ void @@ -83,7 +83,7 @@ lose: } const cpu_kcore_hdr_t * const cpu_kh = kd->cpu_data; - const u_int tg1 = cpu_kh->kh_tcr1 & TCR_TG1; + const uint64_t tg1 = cpu_kh->kh_tcr1 & TCR_TG1; const u_int t1siz = __SHIFTOUT(cpu_kh->kh_tcr1, TCR_T1SZ); /*
CVS commit: src/lib/libkvm
Module Name:src Committed By: mrg Date: Mon Nov 5 00:43:30 UTC 2018 Modified Files: src/lib/libkvm: kvm.c Log Message: initialise the kvm errbuf so that if an error occurs, but the internal _kvm_*err() functions aren't called, stack garbage is not reported as an error string. call _kvm_err() if _kvm_kvatop() fails. now the above is not triggered anymore :-) To generate a diff of this commit: cvs rdiff -u -r1.103 -r1.104 src/lib/libkvm/kvm.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm.c diff -u src/lib/libkvm/kvm.c:1.103 src/lib/libkvm/kvm.c:1.104 --- src/lib/libkvm/kvm.c:1.103 Wed Feb 7 14:03:18 2018 +++ src/lib/libkvm/kvm.c Mon Nov 5 00:43:30 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm.c,v 1.103 2018/02/07 14:03:18 maxv Exp $ */ +/* $NetBSD: kvm.c,v 1.104 2018/11/05 00:43:30 mrg Exp $ */ /*- * Copyright (c) 1989, 1992, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)kvm.c 8.2 (Berkeley) 2/13/94"; #else -__RCSID("$NetBSD: kvm.c,v 1.103 2018/02/07 14:03:18 maxv Exp $"); +__RCSID("$NetBSD: kvm.c,v 1.104 2018/11/05 00:43:30 mrg Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -255,6 +255,7 @@ _kvm_open(kvm_t *kd, const char *uf, con kd->fdalign = 1; kd->iobuf = NULL; kd->iobufsz = 0; + kd->errbuf[0] = '\0'; if (flag & KVM_NO_FILES) { kd->alive = KVM_ALIVE_SYSCTL; @@ -851,8 +852,10 @@ kvm_read(kvm_t *kd, u_long kva, void *bu off_t foff; cc = _kvm_kvatop(kd, (vaddr_t)kva, &pa); - if (cc == 0) + if (cc == 0) { +_kvm_err(kd, kd->program, "_kvm_kvatop(%lx)", kva); return (-1); + } if (cc > len) cc = len; foff = _kvm_pa2off(kd, pa);
CVS commit: src/lib/libkvm
Module Name:src Committed By: mrg Date: Thu Nov 1 05:37:12 UTC 2018 Modified Files: src/lib/libkvm: kvm_aarch64.c Log Message: compare matching TG1 bits. aarch64 crash dump kvtop now less broken, but still not stable. To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/lib/libkvm/kvm_aarch64.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_aarch64.c diff -u src/lib/libkvm/kvm_aarch64.c:1.3 src/lib/libkvm/kvm_aarch64.c:1.4 --- src/lib/libkvm/kvm_aarch64.c:1.3 Sun Apr 1 04:35:02 2018 +++ src/lib/libkvm/kvm_aarch64.c Thu Nov 1 05:37:11 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_aarch64.c,v 1.3 2018/04/01 04:35:02 ryo Exp $ */ +/* $NetBSD: kvm_aarch64.c,v 1.4 2018/11/01 05:37:11 mrg Exp $ */ /*- * Copyright (c) 2014 The NetBSD Foundation, Inc. @@ -48,7 +48,7 @@ #include "kvm_private.h" -__RCSID("$NetBSD: kvm_aarch64.c,v 1.3 2018/04/01 04:35:02 ryo Exp $"); +__RCSID("$NetBSD: kvm_aarch64.c,v 1.4 2018/11/01 05:37:11 mrg Exp $"); /*ARGSUSED*/ void @@ -83,7 +83,7 @@ lose: } const cpu_kcore_hdr_t * const cpu_kh = kd->cpu_data; - const u_int tg1 =__SHIFTOUT(cpu_kh->kh_tcr1, TCR_TG1); + const u_int tg1 = cpu_kh->kh_tcr1 & TCR_TG1; const u_int t1siz = __SHIFTOUT(cpu_kh->kh_tcr1, TCR_T1SZ); /*
CVS commit: src/lib/libkvm
Module Name:src Committed By: maxv Date: Wed Feb 7 14:03:18 UTC 2018 Modified Files: src/lib/libkvm: kvm.c Log Message: Keep /dev/ksyms open in _kvm_open(). This way /dev/ksyms can be put into $g_kmem without breaking the tools that need kmem+ksyms. Discussed on tech-kern@ three weeks ago. The original issue was reported by maya@, the patch was written by Tom Ivar Helbekkmo, ok christos@. To generate a diff of this commit: cvs rdiff -u -r1.102 -r1.103 src/lib/libkvm/kvm.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm.c diff -u src/lib/libkvm/kvm.c:1.102 src/lib/libkvm/kvm.c:1.103 --- src/lib/libkvm/kvm.c:1.102 Tue Mar 29 06:51:40 2016 +++ src/lib/libkvm/kvm.c Wed Feb 7 14:03:18 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm.c,v 1.102 2016/03/29 06:51:40 mrg Exp $ */ +/* $NetBSD: kvm.c,v 1.103 2018/02/07 14:03:18 maxv Exp $ */ /*- * Copyright (c) 1989, 1992, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)kvm.c 8.2 (Berkeley) 2/13/94"; #else -__RCSID("$NetBSD: kvm.c,v 1.102 2016/03/29 06:51:40 mrg Exp $"); +__RCSID("$NetBSD: kvm.c,v 1.103 2018/02/07 14:03:18 maxv Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -322,15 +322,6 @@ _kvm_open(kvm_t *kd, const char *uf, con strlcpy(kd->kernelname, uf, sizeof(kd->kernelname)); } else { strlcpy(kd->kernelname, _PATH_KSYMS, sizeof(kd->kernelname)); - /* - * We're here because /dev/ksyms was opened - * successfully. However, we don't want to keep it - * open, so we close it now. Later, we will open - * it again, since it will be the only case where - * kd->nlfd is negative. - */ - close(kd->nlfd); - kd->nlfd = -1; } if ((kd->pmfd = open(mf, flag | O_CLOEXEC, 0)) < 0) { @@ -769,33 +760,16 @@ kvm_close(kvm_t *kd) int kvm_nlist(kvm_t *kd, struct nlist *nl) { - int rv, nlfd; - - /* - * kd->nlfd might be negative when we get here, and in that - * case that means that we're using /dev/ksyms. - * So open it again, just for the time we retrieve the list. - */ - if (kd->nlfd < 0) { - nlfd = open(_PATH_KSYMS, O_RDONLY | O_CLOEXEC, 0); - if (nlfd < 0) { - _kvm_err(kd, 0, "failed to open %s", _PATH_KSYMS); - return (nlfd); - } - } else - nlfd = kd->nlfd; + int rv; /* * Call the nlist(3) routines to retrieve the given namelist. */ - rv = __fdnlist(nlfd, nl); + rv = __fdnlist(kd->nlfd, nl); if (rv == -1) _kvm_err(kd, 0, "bad namelist"); - if (kd->nlfd < 0) - close(nlfd); - return (rv); }
CVS commit: src/lib/libkvm
Module Name:src Committed By: kamil Date: Tue Jan 9 21:17:46 UTC 2018 Modified Files: src/lib/libkvm: kvm_getprocs.3 Log Message: Correct the signature of kvm_getproc2(3) in the man-page. The elemsize argument is of type "size_t", not "int". Sponsored by To generate a diff of this commit: cvs rdiff -u -r1.16 -r1.17 src/lib/libkvm/kvm_getprocs.3 Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_getprocs.3 diff -u src/lib/libkvm/kvm_getprocs.3:1.16 src/lib/libkvm/kvm_getprocs.3:1.17 --- src/lib/libkvm/kvm_getprocs.3:1.16 Sun Oct 22 14:25:33 2017 +++ src/lib/libkvm/kvm_getprocs.3 Tue Jan 9 21:17:45 2018 @@ -1,4 +1,4 @@ -.\" $NetBSD: kvm_getprocs.3,v 1.16 2017/10/22 14:25:33 abhinav Exp $ +.\" $NetBSD: kvm_getprocs.3,v 1.17 2018/01/09 21:17:45 kamil Exp $ .\" .\" Copyright (c) 1992, 1993 .\" The Regents of the University of California. All rights reserved. @@ -33,7 +33,7 @@ .\" .\" @(#)kvm_getprocs.3 8.1 (Berkeley) 6/4/93 .\" -.Dd February 10, 2004 +.Dd January 9, 2018 .Dt KVM_GETPROCS 3 .Os .Sh NAME @@ -58,7 +58,7 @@ .Ft char ** .Fn kvm_getenvv "kvm_t *kd" "const struct kinfo_proc *p" "int nchr" .Ft struct kinfo_proc2 * -.Fn kvm_getproc2 "kvm_t *kd" "int op" "int arg" "int elemsize" "int *cnt" +.Fn kvm_getproc2 "kvm_t *kd" "int op" "int arg" "size_t elemsize" "int *cnt" .Ft char ** .Fn kvm_getargv2 "kvm_t *kd" "const struct kinfo_proc2 *p" "int nchr" .Ft char **
CVS commit: src/lib/libkvm
Module Name:src Committed By: kamil Date: Tue Jan 9 21:13:59 UTC 2018 Modified Files: src/lib/libkvm: kvm_getlwps.3 Log Message: Correct the signature of kvm_getlwps(3) in the man-page. The elemsize argument is of type "size_t", not "int *". Sponsored by To generate a diff of this commit: cvs rdiff -u -r1.7 -r1.8 src/lib/libkvm/kvm_getlwps.3 Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_getlwps.3 diff -u src/lib/libkvm/kvm_getlwps.3:1.7 src/lib/libkvm/kvm_getlwps.3:1.8 --- src/lib/libkvm/kvm_getlwps.3:1.7 Sat Jan 23 00:43:43 2016 +++ src/lib/libkvm/kvm_getlwps.3 Tue Jan 9 21:13:59 2018 @@ -1,4 +1,4 @@ -.\" $NetBSD: kvm_getlwps.3,v 1.7 2016/01/23 00:43:43 dholland Exp $ +.\" $NetBSD: kvm_getlwps.3,v 1.8 2018/01/09 21:13:59 kamil Exp $ .\" .\"Copyright (c) 2002 The NetBSD Foundation, Inc. .\"All rights reserved. @@ -27,7 +27,7 @@ .\"ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE .\"POSSIBILITY OF SUCH DAMAGE. .\" -.Dd February 10, 2004 +.Dd January 9, 2018 .Dt KVM_GETLWPS 3 .Os .Sh NAME @@ -41,7 +41,7 @@ .In sys/sysctl.h .\" .Fa kvm_t *kd .Ft struct kinfo_lwp * -.Fn kvm_getlwps "kvm_t *kd" "int pid" "unsigned long procaddr" "int *elemsize" "int *cnt" +.Fn kvm_getlwps "kvm_t *kd" "int pid" "unsigned long procaddr" "size_t elemsize" "int *cnt" .Sh DESCRIPTION .Fn kvm_getlwps returns the set of LWPs belonging to the process specified by
CVS commit: src/lib/libkvm
Module Name:src Committed By: abhinav Date: Sun Oct 22 14:25:33 UTC 2017 Modified Files: src/lib/libkvm: kvm_getprocs.3 Log Message: Add rest of the functions from the SYNOPSIS to the NAME section To generate a diff of this commit: cvs rdiff -u -r1.15 -r1.16 src/lib/libkvm/kvm_getprocs.3 Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_getprocs.3 diff -u src/lib/libkvm/kvm_getprocs.3:1.15 src/lib/libkvm/kvm_getprocs.3:1.16 --- src/lib/libkvm/kvm_getprocs.3:1.15 Tue Mar 10 23:49:07 2009 +++ src/lib/libkvm/kvm_getprocs.3 Sun Oct 22 14:25:33 2017 @@ -1,4 +1,4 @@ -.\" $NetBSD: kvm_getprocs.3,v 1.15 2009/03/10 23:49:07 joerg Exp $ +.\" $NetBSD: kvm_getprocs.3,v 1.16 2017/10/22 14:25:33 abhinav Exp $ .\" .\" Copyright (c) 1992, 1993 .\" The Regents of the University of California. All rights reserved. @@ -39,7 +39,10 @@ .Sh NAME .Nm kvm_getprocs , .Nm kvm_getargv , -.Nm kvm_getenvv +.Nm kvm_getenvv , +.Nm kvm_getproc2 , +.Nm kvm_getargv2 , +.Nm kvm_getenvv2 .Nd access user process state .Sh LIBRARY .Lb libkvm
CVS commit: src/lib/libkvm
Module Name:src Committed By: christos Date: Mon Apr 4 22:14:38 UTC 2016 Modified Files: src/lib/libkvm: kvm_proc.c Log Message: some ports need To generate a diff of this commit: cvs rdiff -u -r1.91 -r1.92 src/lib/libkvm/kvm_proc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_proc.c diff -u src/lib/libkvm/kvm_proc.c:1.91 src/lib/libkvm/kvm_proc.c:1.92 --- src/lib/libkvm/kvm_proc.c:1.91 Mon Apr 4 17:08:44 2016 +++ src/lib/libkvm/kvm_proc.c Mon Apr 4 18:14:38 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_proc.c,v 1.91 2016/04/04 21:08:44 christos Exp $ */ +/* $NetBSD: kvm_proc.c,v 1.92 2016/04/04 22:14:38 christos Exp $ */ /*- * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #if 0 static char sccsid[] = "@(#)kvm_proc.c 8.3 (Berkeley) 9/23/93"; #else -__RCSID("$NetBSD: kvm_proc.c,v 1.91 2016/04/04 21:08:44 christos Exp $"); +__RCSID("$NetBSD: kvm_proc.c,v 1.92 2016/04/04 22:14:38 christos Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -80,6 +80,7 @@ __RCSID("$NetBSD: kvm_proc.c,v 1.91 2016 #include #include +#include #include #include #include
CVS commit: src/lib/libkvm
Module Name:src Committed By: christos Date: Mon Apr 4 21:08:44 UTC 2016 Modified Files: src/lib/libkvm: kvm_proc.c Log Message: catch up with p_xstat split. To generate a diff of this commit: cvs rdiff -u -r1.90 -r1.91 src/lib/libkvm/kvm_proc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_proc.c diff -u src/lib/libkvm/kvm_proc.c:1.90 src/lib/libkvm/kvm_proc.c:1.91 --- src/lib/libkvm/kvm_proc.c:1.90 Wed Feb 19 15:21:22 2014 +++ src/lib/libkvm/kvm_proc.c Mon Apr 4 17:08:44 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_proc.c,v 1.90 2014/02/19 20:21:22 dsl Exp $ */ +/* $NetBSD: kvm_proc.c,v 1.91 2016/04/04 21:08:44 christos Exp $ */ /*- * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #if 0 static char sccsid[] = "@(#)kvm_proc.c 8.3 (Berkeley) 9/23/93"; #else -__RCSID("$NetBSD: kvm_proc.c,v 1.90 2014/02/19 20:21:22 dsl Exp $"); +__RCSID("$NetBSD: kvm_proc.c,v 1.91 2016/04/04 21:08:44 christos Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -638,7 +638,7 @@ again: kp2p->p_usrpri = kl[0].l_priority; kp2p->p_nice = kp->kp_proc.p_nice; - kp2p->p_xstat = kp->kp_proc.p_xstat; + kp2p->p_xstat = P_WAITSTATUS(&kp->kp_proc); kp2p->p_acflag = kp->kp_proc.p_acflag; /*CONSTCOND*/
CVS commit: src/lib/libkvm
Module Name:src Committed By: mrg Date: Tue Mar 29 06:51:40 UTC 2016 Modified Files: src/lib/libkvm: kvm.c Log Message: distinguish between partial and failed read, so that "read 0x bytes failed" is not output.. To generate a diff of this commit: cvs rdiff -u -r1.101 -r1.102 src/lib/libkvm/kvm.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm.c diff -u src/lib/libkvm/kvm.c:1.101 src/lib/libkvm/kvm.c:1.102 --- src/lib/libkvm/kvm.c:1.101 Wed Feb 19 20:21:22 2014 +++ src/lib/libkvm/kvm.c Tue Mar 29 06:51:40 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm.c,v 1.101 2014/02/19 20:21:22 dsl Exp $ */ +/* $NetBSD: kvm.c,v 1.102 2016/03/29 06:51:40 mrg Exp $ */ /*- * Copyright (c) 1989, 1992, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)kvm.c 8.2 (Berkeley) 2/13/94"; #else -__RCSID("$NetBSD: kvm.c,v 1.101 2014/02/19 20:21:22 dsl Exp $"); +__RCSID("$NetBSD: kvm.c,v 1.102 2016/03/29 06:51:40 mrg Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -515,9 +515,14 @@ kvm_dump_mkheader(kvm_t *kd, off_t dump_ */ sz = Pread(kd, kd->pmfd, &cpu_hdr, sizeof(cpu_hdr), dump_off); if (sz != sizeof(cpu_hdr)) { - _kvm_err(kd, 0, "read %zx bytes at offset %"PRIx64 - " for cpu_hdr instead of requested %zu", - sz, dump_off, sizeof(cpu_hdr)); + if (sz == -1) + _kvm_err(kd, 0, "read %zx bytes at offset %"PRIx64 + " for cpu_hdr failed: %s", sizeof(cpu_hdr), + dump_off, strerror(errno)); + else + _kvm_err(kd, 0, "read %zx bytes at offset %"PRIx64 + " for cpu_hdr instead of requested %zu", + sz, dump_off, sizeof(cpu_hdr)); return (-1); } if ((CORE_GETMAGIC(cpu_hdr) != KCORE_MAGIC)
CVS commit: src/lib/libkvm
Module Name:src Committed By: christos Date: Sun Jan 24 16:07:48 UTC 2016 Modified Files: src/lib/libkvm: Makefile Log Message: mips needs _KMEMUSER for label_t in pcb.h To generate a diff of this commit: cvs rdiff -u -r1.50 -r1.51 src/lib/libkvm/Makefile Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/Makefile diff -u src/lib/libkvm/Makefile:1.50 src/lib/libkvm/Makefile:1.51 --- src/lib/libkvm/Makefile:1.50 Sun Aug 10 19:39:08 2014 +++ src/lib/libkvm/Makefile Sun Jan 24 11:07:48 2016 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.50 2014/08/10 23:39:08 matt Exp $ +# $NetBSD: Makefile,v 1.51 2016/01/24 16:07:48 christos Exp $ # from: @(#)Makefile 8.1 (Berkeley) 6/4/93 WARNS= 3 @@ -70,5 +70,9 @@ CLEANFILES+= machine sparc CPPFLAGS+= -I. .endif # } +.if (${MACHINE_ARCH} == "mips") +CPPFLAGS+= -D_KMEMUSER +.endif + .include
CVS commit: src/lib/libkvm
Module Name:src Committed By: nakayama Date: Sat Oct 31 02:40:44 UTC 2015 Modified Files: src/lib/libkvm: kvm_sparc.c Log Message: Use PRIxPADDR instead of type casting. To generate a diff of this commit: cvs rdiff -u -r1.34 -r1.35 src/lib/libkvm/kvm_sparc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_sparc.c diff -u src/lib/libkvm/kvm_sparc.c:1.34 src/lib/libkvm/kvm_sparc.c:1.35 --- src/lib/libkvm/kvm_sparc.c:1.34 Wed Oct 7 11:56:41 2015 +++ src/lib/libkvm/kvm_sparc.c Sat Oct 31 02:40:44 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_sparc.c,v 1.34 2015/10/07 11:56:41 martin Exp $ */ +/* $NetBSD: kvm_sparc.c,v 1.35 2015/10/31 02:40:44 nakayama Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)kvm_sparc.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: kvm_sparc.c,v 1.34 2015/10/07 11:56:41 martin Exp $"); +__RCSID("$NetBSD: kvm_sparc.c,v 1.35 2015/10/31 02:40:44 nakayama Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -363,7 +363,7 @@ _kvm_pa2off(kvm_t *kd, paddr_t pa) off += mp->size; } if (nmem < 0) { - _kvm_err(kd, 0, "invalid address (%lx)", (unsigned long)pa); + _kvm_err(kd, 0, "invalid address (%#"PRIxPADDR")", pa); return (-1); }
CVS commit: src/lib/libkvm
Module Name:src Committed By: martin Date: Wed Oct 7 11:56:41 UTC 2015 Modified Files: src/lib/libkvm: kvm_sparc.c Log Message: Fix the -m32 compat build for sparc64 after recent sparc/include/types.h changes. XXX I suspect this variant has not been tested in real life. To generate a diff of this commit: cvs rdiff -u -r1.33 -r1.34 src/lib/libkvm/kvm_sparc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_sparc.c diff -u src/lib/libkvm/kvm_sparc.c:1.33 src/lib/libkvm/kvm_sparc.c:1.34 --- src/lib/libkvm/kvm_sparc.c:1.33 Wed Feb 19 20:21:22 2014 +++ src/lib/libkvm/kvm_sparc.c Wed Oct 7 11:56:41 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_sparc.c,v 1.33 2014/02/19 20:21:22 dsl Exp $ */ +/* $NetBSD: kvm_sparc.c,v 1.34 2015/10/07 11:56:41 martin Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)kvm_sparc.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: kvm_sparc.c,v 1.33 2014/02/19 20:21:22 dsl Exp $"); +__RCSID("$NetBSD: kvm_sparc.c,v 1.34 2015/10/07 11:56:41 martin Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -325,8 +325,8 @@ _kvm_kvatop4u(kvm_t *kd, vaddr_t va, pad * segmap[cpup->nsegmap]; */ segmaps = (int64_t **)((long)kd->cpu_data + cpup->segmapoffset); - ptes = (int64_t *)(int)_kvm_pa2off(kd, - (paddr_t)segmaps[sparc64_va_to_seg(va)]); + ptes = (int64_t *)(intptr_t)_kvm_pa2off(kd, + (paddr_t)(intptr_t)segmaps[sparc64_va_to_seg(va)]); pte = ptes[sparc64_va_to_pte(va)]; if ((pte & SPARC64_TLB_V) != 0) return ((pte & SPARC64_TLB_PA_MASK) | (va & (kd->nbpg - 1))); @@ -363,7 +363,7 @@ _kvm_pa2off(kvm_t *kd, paddr_t pa) off += mp->size; } if (nmem < 0) { - _kvm_err(kd, 0, "invalid address (%lx)", pa); + _kvm_err(kd, 0, "invalid address (%lx)", (unsigned long)pa); return (-1); }
CVS commit: src/lib/libkvm
Module Name:src Committed By: martin Date: Fri Apr 17 13:16:01 UTC 2015 Added Files: src/lib/libkvm: kvm_ia64.c Log Message: Dummy support for ia64 To generate a diff of this commit: cvs rdiff -u -r0 -r1.1 src/lib/libkvm/kvm_ia64.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Added files:
CVS commit: src/lib/libkvm
Module Name:src Committed By: matt Date: Sat Aug 23 02:25:23 UTC 2014 Modified Files: src/lib/libkvm: kvm_powerpc64.c Log Message: #if 0 some code not in use yet To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/lib/libkvm/kvm_powerpc64.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_powerpc64.c diff -u src/lib/libkvm/kvm_powerpc64.c:1.5 src/lib/libkvm/kvm_powerpc64.c:1.6 --- src/lib/libkvm/kvm_powerpc64.c:1.5 Mon Jan 27 21:00:01 2014 +++ src/lib/libkvm/kvm_powerpc64.c Sat Aug 23 02:25:23 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_powerpc64.c,v 1.5 2014/01/27 21:00:01 matt Exp $ */ +/* $NetBSD: kvm_powerpc64.c,v 1.6 2014/08/23 02:25:23 matt Exp $ */ /* * Copyright (c) 2005 Wasabi Systems, Inc. @@ -90,7 +90,7 @@ #include #include -__RCSID("$NetBSD: kvm_powerpc64.c,v 1.5 2014/01/27 21:00:01 matt Exp $"); +__RCSID("$NetBSD: kvm_powerpc64.c,v 1.6 2014/08/23 02:25:23 matt Exp $"); void _kvm_freevtop(kvm_t *kd) @@ -117,17 +117,16 @@ _kvm_initvtop(kvm_t *kd) int _kvm_kvatop(kvm_t *kd, vaddr_t va, paddr_t *pa) { - cpu_kcore_hdr_t *cpu_kh; - uint32_t pvr; if (ISALIVE(kd)) { _kvm_err(kd, 0, "vatop called in live kernel!"); return 0; } - cpu_kh = kd->cpu_data; - - pvr = (cpu_kh->pvr >> 16); +#if 0 + cpu_kcore_hdr_t *cpu_kh = kd->cpu_data; + uint32_t pvr = (cpu_kh->pvr >> 16); +#endif /* No hit -- no translation */
CVS commit: src/lib/libkvm
Module Name:src Committed By: matt Date: Tue Mar 4 06:38:08 UTC 2014 Modified Files: src/lib/libkvm: kvm_m68k_cmn.c Log Message: #include To generate a diff of this commit: cvs rdiff -u -r1.17 -r1.18 src/lib/libkvm/kvm_m68k_cmn.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_m68k_cmn.c diff -u src/lib/libkvm/kvm_m68k_cmn.c:1.17 src/lib/libkvm/kvm_m68k_cmn.c:1.18 --- src/lib/libkvm/kvm_m68k_cmn.c:1.17 Tue Sep 13 19:11:09 2011 +++ src/lib/libkvm/kvm_m68k_cmn.c Tue Mar 4 06:38:08 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_m68k_cmn.c,v 1.17 2011/09/13 19:11:09 christos Exp $ */ +/* $NetBSD: kvm_m68k_cmn.c,v 1.18 2014/03/04 06:38:08 matt Exp $ */ /*- * Copyright (c) 1989, 1992, 1993 @@ -74,7 +74,7 @@ #if 0 static char sccsid[] = "@(#)kvm_hp300.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: kvm_m68k_cmn.c,v 1.17 2011/09/13 19:11:09 christos Exp $"); +__RCSID("$NetBSD: kvm_m68k_cmn.c,v 1.18 2014/03/04 06:38:08 matt Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -97,6 +97,7 @@ __RCSID("$NetBSD: kvm_m68k_cmn.c,v 1.17 #include #include +#include #include "kvm_private.h" #include "kvm_m68k.h"
CVS commit: src/lib/libkvm
Module Name:src Committed By: dsl Date: Wed Feb 19 20:21:22 UTC 2014 Modified Files: src/lib/libkvm: kvm.c kvm_alpha.c kvm_file.c kvm_hppa.c kvm_i386.c kvm_i386pae.c kvm_mips.c kvm_proc.c kvm_sh3.c kvm_sparc.c kvm_sparc64.c kvm_vax.c kvm_x86_64.c Log Message: Remove the #include from all of libkvm. sys/user.h is a stub that just #includes sys/pcb.h. There are no 'struct pcb' anywhere in here, so I'm extremely doubtful any of the builds will fail. OTOH it might be relying on a header that pcb.h includes. In any case i386 and amd64 build. To generate a diff of this commit: cvs rdiff -u -r1.100 -r1.101 src/lib/libkvm/kvm.c cvs rdiff -u -r1.26 -r1.27 src/lib/libkvm/kvm_alpha.c cvs rdiff -u -r1.28 -r1.29 src/lib/libkvm/kvm_file.c cvs rdiff -u -r1.6 -r1.7 src/lib/libkvm/kvm_hppa.c cvs rdiff -u -r1.29 -r1.30 src/lib/libkvm/kvm_i386.c cvs rdiff -u -r1.1 -r1.2 src/lib/libkvm/kvm_i386pae.c cvs rdiff -u -r1.21 -r1.22 src/lib/libkvm/kvm_mips.c cvs rdiff -u -r1.89 -r1.90 src/lib/libkvm/kvm_proc.c cvs rdiff -u -r1.8 -r1.9 src/lib/libkvm/kvm_sh3.c cvs rdiff -u -r1.32 -r1.33 src/lib/libkvm/kvm_sparc.c cvs rdiff -u -r1.15 -r1.16 src/lib/libkvm/kvm_sparc64.c cvs rdiff -u -r1.19 -r1.20 src/lib/libkvm/kvm_vax.c cvs rdiff -u -r1.9 -r1.10 src/lib/libkvm/kvm_x86_64.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm.c diff -u src/lib/libkvm/kvm.c:1.100 src/lib/libkvm/kvm.c:1.101 --- src/lib/libkvm/kvm.c:1.100 Sun Aug 26 23:09:42 2012 +++ src/lib/libkvm/kvm.c Wed Feb 19 20:21:22 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm.c,v 1.100 2012/08/26 23:09:42 martin Exp $ */ +/* $NetBSD: kvm.c,v 1.101 2014/02/19 20:21:22 dsl Exp $ */ /*- * Copyright (c) 1989, 1992, 1993 @@ -38,12 +38,11 @@ #if 0 static char sccsid[] = "@(#)kvm.c 8.2 (Berkeley) 2/13/94"; #else -__RCSID("$NetBSD: kvm.c,v 1.100 2012/08/26 23:09:42 martin Exp $"); +__RCSID("$NetBSD: kvm.c,v 1.101 2014/02/19 20:21:22 dsl Exp $"); #endif #endif /* LIBC_SCCS and not lint */ #include -#include #include #include #include Index: src/lib/libkvm/kvm_alpha.c diff -u src/lib/libkvm/kvm_alpha.c:1.26 src/lib/libkvm/kvm_alpha.c:1.27 --- src/lib/libkvm/kvm_alpha.c:1.26 Mon Jan 27 21:00:01 2014 +++ src/lib/libkvm/kvm_alpha.c Wed Feb 19 20:21:22 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_alpha.c,v 1.26 2014/01/27 21:00:01 matt Exp $ */ +/* $NetBSD: kvm_alpha.c,v 1.27 2014/02/19 20:21:22 dsl Exp $ */ /* * Copyright (c) 1994, 1995 Carnegie-Mellon University. @@ -30,7 +30,6 @@ #define __KVM_ALPHA_PRIVATE /* see */ #include -#include #include #include #include @@ -51,7 +50,7 @@ #include "kvm_private.h" -__RCSID("$NetBSD: kvm_alpha.c,v 1.26 2014/01/27 21:00:01 matt Exp $"); +__RCSID("$NetBSD: kvm_alpha.c,v 1.27 2014/02/19 20:21:22 dsl Exp $"); /*ARGSUSED*/ void Index: src/lib/libkvm/kvm_file.c diff -u src/lib/libkvm/kvm_file.c:1.28 src/lib/libkvm/kvm_file.c:1.29 --- src/lib/libkvm/kvm_file.c:1.28 Sun Sep 26 22:28:05 2010 +++ src/lib/libkvm/kvm_file.c Wed Feb 19 20:21:22 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_file.c,v 1.28 2010/09/26 22:28:05 jym Exp $ */ +/* $NetBSD: kvm_file.c,v 1.29 2014/02/19 20:21:22 dsl Exp $ */ /*- * Copyright (c) 1989, 1992, 1993 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)kvm_file.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: kvm_file.c,v 1.28 2010/09/26 22:28:05 jym Exp $"); +__RCSID("$NetBSD: kvm_file.c,v 1.29 2014/02/19 20:21:22 dsl Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -49,7 +49,6 @@ __RCSID("$NetBSD: kvm_file.c,v 1.28 2010 #include #undef _KERNEL #include -#include #include #include #include Index: src/lib/libkvm/kvm_hppa.c diff -u src/lib/libkvm/kvm_hppa.c:1.6 src/lib/libkvm/kvm_hppa.c:1.7 --- src/lib/libkvm/kvm_hppa.c:1.6 Mon Sep 20 23:23:16 2010 +++ src/lib/libkvm/kvm_hppa.c Wed Feb 19 20:21:22 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_hppa.c,v 1.6 2010/09/20 23:23:16 jym Exp $ */ +/* $NetBSD: kvm_hppa.c,v 1.7 2014/02/19 20:21:22 dsl Exp $ */ /*- * Copyright (c) 1989, 1992, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)kvm_hp300.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: kvm_hppa.c,v 1.6 2010/09/20 23:23:16 jym Exp $"); +__RCSID("$NetBSD: kvm_hppa.c,v 1.7 2014/02/19 20:21:22 dsl Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -49,7 +49,6 @@ __RCSID("$NetBSD: kvm_hppa.c,v 1.6 2010/ */ #include -#include #include #include #include Index: src/lib/libkvm/kvm_i386.c diff -u src/lib/libkvm/kvm_i386.c:1.29 src/lib/libkvm/kvm_i386.c:1.30 --- src/lib/libkvm/kvm_i386.c:1.29 Tue Oct 5 23:48:16 2010 +++ src/lib/libkvm/kvm_i386.c Wed Feb 19 20:21:22 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_i386.c,v 1.29 2010/10/05 23:48:16 jym Exp $ */ +/* $NetBSD: kvm_i386.c,v 1.30 2014/02/19 20:21:22 dsl Exp $ */ /*- * Copyright (c) 1989, 1992, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsi
CVS commit: src/lib/libkvm
Module Name:src Committed By: matt Date: Mon Jan 27 21:00:01 UTC 2014 Modified Files: src/lib/libkvm: kvm_alpha.c kvm_m68k.c kvm_powerpc.c kvm_powerpc64.c kvm_vax.c Log Message: Add missing __RCSID("$NetBSD$"); To generate a diff of this commit: cvs rdiff -u -r1.25 -r1.26 src/lib/libkvm/kvm_alpha.c cvs rdiff -u -r1.18 -r1.19 src/lib/libkvm/kvm_m68k.c src/lib/libkvm/kvm_vax.c cvs rdiff -u -r1.12 -r1.13 src/lib/libkvm/kvm_powerpc.c cvs rdiff -u -r1.4 -r1.5 src/lib/libkvm/kvm_powerpc64.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_alpha.c diff -u src/lib/libkvm/kvm_alpha.c:1.25 src/lib/libkvm/kvm_alpha.c:1.26 --- src/lib/libkvm/kvm_alpha.c:1.25 Mon Sep 20 23:23:16 2010 +++ src/lib/libkvm/kvm_alpha.c Mon Jan 27 21:00:01 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_alpha.c,v 1.25 2010/09/20 23:23:16 jym Exp $ */ +/* $NetBSD: kvm_alpha.c,v 1.26 2014/01/27 21:00:01 matt Exp $ */ /* * Copyright (c) 1994, 1995 Carnegie-Mellon University. @@ -51,6 +51,8 @@ #include "kvm_private.h" +__RCSID("$NetBSD: kvm_alpha.c,v 1.26 2014/01/27 21:00:01 matt Exp $"); + /*ARGSUSED*/ void _kvm_freevtop(kvm_t *kd) Index: src/lib/libkvm/kvm_m68k.c diff -u src/lib/libkvm/kvm_m68k.c:1.18 src/lib/libkvm/kvm_m68k.c:1.19 --- src/lib/libkvm/kvm_m68k.c:1.18 Mon Sep 20 23:23:16 2010 +++ src/lib/libkvm/kvm_m68k.c Mon Jan 27 21:00:01 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_m68k.c,v 1.18 2010/09/20 23:23:16 jym Exp $ */ +/* $NetBSD: kvm_m68k.c,v 1.19 2014/01/27 21:00:01 matt Exp $ */ /*- * Copyright (c) 1997 The NetBSD Foundation, Inc. @@ -59,6 +59,8 @@ #include "kvm_private.h" #include "kvm_m68k.h" +__RCSID("$NetBSD: kvm_m68k.c,v 1.19 2014/01/27 21:00:01 matt Exp $"); + struct name_ops { const char *name; struct kvm_ops *ops; Index: src/lib/libkvm/kvm_vax.c diff -u src/lib/libkvm/kvm_vax.c:1.18 src/lib/libkvm/kvm_vax.c:1.19 --- src/lib/libkvm/kvm_vax.c:1.18 Mon Sep 20 23:23:16 2010 +++ src/lib/libkvm/kvm_vax.c Mon Jan 27 21:00:01 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_vax.c,v 1.18 2010/09/20 23:23:16 jym Exp $ */ +/* $NetBSD: kvm_vax.c,v 1.19 2014/01/27 21:00:01 matt Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -60,6 +60,7 @@ #include "kvm_private.h" +__RCSID("$NetBSD: kvm_vax.c,v 1.19 2014/01/27 21:00:01 matt Exp $"); struct vmstate { u_long end; Index: src/lib/libkvm/kvm_powerpc.c diff -u src/lib/libkvm/kvm_powerpc.c:1.12 src/lib/libkvm/kvm_powerpc.c:1.13 --- src/lib/libkvm/kvm_powerpc.c:1.12 Mon Sep 20 23:23:16 2010 +++ src/lib/libkvm/kvm_powerpc.c Mon Jan 27 21:00:01 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_powerpc.c,v 1.12 2010/09/20 23:23:16 jym Exp $ */ +/* $NetBSD: kvm_powerpc.c,v 1.13 2014/01/27 21:00:01 matt Exp $ */ /* * Copyright (c) 2005 Wasabi Systems, Inc. @@ -91,6 +91,8 @@ #include #include +__RCSID("$NetBSD: kvm_powerpc.c,v 1.13 2014/01/27 21:00:01 matt Exp $"); + static int _kvm_match_601bat(kvm_t *, vaddr_t, paddr_t *, int *); static int _kvm_match_bat(kvm_t *, vaddr_t, paddr_t *, int *); static int _kvm_match_sr(kvm_t *, vaddr_t, paddr_t *, int *); Index: src/lib/libkvm/kvm_powerpc64.c diff -u src/lib/libkvm/kvm_powerpc64.c:1.4 src/lib/libkvm/kvm_powerpc64.c:1.5 --- src/lib/libkvm/kvm_powerpc64.c:1.4 Mon Sep 20 23:23:16 2010 +++ src/lib/libkvm/kvm_powerpc64.c Mon Jan 27 21:00:01 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_powerpc64.c,v 1.4 2010/09/20 23:23:16 jym Exp $ */ +/* $NetBSD: kvm_powerpc64.c,v 1.5 2014/01/27 21:00:01 matt Exp $ */ /* * Copyright (c) 2005 Wasabi Systems, Inc. @@ -90,6 +90,8 @@ #include #include +__RCSID("$NetBSD: kvm_powerpc64.c,v 1.5 2014/01/27 21:00:01 matt Exp $"); + void _kvm_freevtop(kvm_t *kd) {
CVS commit: src/lib/libkvm
Module Name:src Committed By: martin Date: Sun Aug 26 23:09:42 UTC 2012 Modified Files: src/lib/libkvm: kvm.c Log Message: Do not fail kvm_dump_mkheader without setting an error message To generate a diff of this commit: cvs rdiff -u -r1.99 -r1.100 src/lib/libkvm/kvm.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm.c diff -u src/lib/libkvm/kvm.c:1.99 src/lib/libkvm/kvm.c:1.100 --- src/lib/libkvm/kvm.c:1.99 Sat Oct 15 21:08:53 2011 +++ src/lib/libkvm/kvm.c Sun Aug 26 23:09:42 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm.c,v 1.99 2011/10/15 21:08:53 christos Exp $ */ +/* $NetBSD: kvm.c,v 1.100 2012/08/26 23:09:42 martin Exp $ */ /*- * Copyright (c) 1989, 1992, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)kvm.c 8.2 (Berkeley) 2/13/94"; #else -__RCSID("$NetBSD: kvm.c,v 1.99 2011/10/15 21:08:53 christos Exp $"); +__RCSID("$NetBSD: kvm.c,v 1.100 2012/08/26 23:09:42 martin Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -515,8 +515,12 @@ kvm_dump_mkheader(kvm_t *kd, off_t dump_ * Validate new format crash dump */ sz = Pread(kd, kd->pmfd, &cpu_hdr, sizeof(cpu_hdr), dump_off); - if (sz != sizeof(cpu_hdr)) + if (sz != sizeof(cpu_hdr)) { + _kvm_err(kd, 0, "read %zx bytes at offset %"PRIx64 + " for cpu_hdr instead of requested %zu", + sz, dump_off, sizeof(cpu_hdr)); return (-1); + } if ((CORE_GETMAGIC(cpu_hdr) != KCORE_MAGIC) || (CORE_GETMID(cpu_hdr) != MID_MACHINE)) { _kvm_err(kd, 0, "invalid magic in cpu_hdr"); @@ -529,27 +533,37 @@ kvm_dump_mkheader(kvm_t *kd, off_t dump_ */ kd->cpu_dsize = cpu_hdr.c_size; kd->cpu_data = _kvm_malloc(kd, kd->cpu_dsize); - if (kd->cpu_data == NULL) + if (kd->cpu_data == NULL) { + _kvm_err(kd, kd->program, "no cpu_data"); goto fail; + } sz = Pread(kd, kd->pmfd, kd->cpu_data, cpu_hdr.c_size, dump_off + hdr_size); - if (sz != cpu_hdr.c_size) + if (sz != cpu_hdr.c_size) { + _kvm_err(kd, kd->program, "size %zu != cpu_hdr.csize %"PRIu32, + sz, cpu_hdr.c_size); goto fail; + } hdr_size += kd->cpu_dsize; /* * Leave phys mem pointer at beginning of memory data */ kd->dump_off = dump_off + hdr_size; - if (Lseek(kd, kd->pmfd, kd->dump_off, SEEK_SET) == -1) + if (Lseek(kd, kd->pmfd, kd->dump_off, SEEK_SET) == -1) { + _kvm_err(kd, kd->program, "failed to seek to %" PRId64, + (int64_t)kd->dump_off); goto fail; + } /* * Create a kcore_hdr. */ kd->kcore_hdr = _kvm_malloc(kd, sizeof(kcore_hdr_t)); - if (kd->kcore_hdr == NULL) + if (kd->kcore_hdr == NULL) { + _kvm_err(kd, kd->program, "failed to allocate header"); goto fail; + } kd->kcore_hdr->c_hdrsize= ALIGN(sizeof(kcore_hdr_t)); kd->kcore_hdr->c_seghdrsize = ALIGN(sizeof(kcore_seg_t));
CVS commit: src/lib/libkvm
Module Name:src Committed By: chs Date: Tue Jan 10 16:01:16 UTC 2012 Modified Files: src/lib/libkvm: kvm_x86_64.c Log Message: fix handling of large pages. To generate a diff of this commit: cvs rdiff -u -r1.8 -r1.9 src/lib/libkvm/kvm_x86_64.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_x86_64.c diff -u src/lib/libkvm/kvm_x86_64.c:1.8 src/lib/libkvm/kvm_x86_64.c:1.9 --- src/lib/libkvm/kvm_x86_64.c:1.8 Mon Sep 20 23:23:16 2010 +++ src/lib/libkvm/kvm_x86_64.c Tue Jan 10 16:01:16 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_x86_64.c,v 1.8 2010/09/20 23:23:16 jym Exp $ */ +/* $NetBSD: kvm_x86_64.c,v 1.9 2012/01/10 16:01:16 chs Exp $ */ /*- * Copyright (c) 1989, 1992, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)kvm_hp300.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: kvm_x86_64.c,v 1.8 2010/09/20 23:23:16 jym Exp $"); +__RCSID("$NetBSD: kvm_x86_64.c,v 1.9 2012/01/10 16:01:16 chs Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -105,7 +105,6 @@ _kvm_kvatop(kvm_t *kd, vaddr_t va, paddr } cpu_kh = kd->cpu_data; - page_off = va & PGOFSET; /* * Find and read all entries to get to the pa. @@ -138,6 +137,11 @@ _kvm_kvatop(kvm_t *kd, vaddr_t va, paddr _kvm_err(kd, 0, "invalid translation (invalid level 3 PDE)"); goto lose; } + if (pde & PG_PS) { + page_off = va & (NBPD_L3 - 1); + *pa = (pde & PG_1GFRAME) + page_off; + return (int)(NBPD_L3 - page_off); + } /* * Level 2. @@ -152,7 +156,11 @@ _kvm_kvatop(kvm_t *kd, vaddr_t va, paddr _kvm_err(kd, 0, "invalid translation (invalid level 2 PDE)"); goto lose; } - + if (pde & PG_PS) { + page_off = va & (NBPD_L2 - 1); + *pa = (pde & PG_2MFRAME) + page_off; + return (int)(NBPD_L2 - page_off); + } /* * Level 1. @@ -170,6 +178,7 @@ _kvm_kvatop(kvm_t *kd, vaddr_t va, paddr _kvm_err(kd, 0, "invalid translation (invalid PTE)"); goto lose; } + page_off = va & PGOFSET; *pa = (pte & PG_FRAME) + page_off; return (int)(NBPG - page_off);
CVS commit: src/lib/libkvm
Module Name:src Committed By: christos Date: Sat Oct 15 21:08:53 UTC 2011 Modified Files: src/lib/libkvm: kvm.c Log Message: kill open_cloexec() To generate a diff of this commit: cvs rdiff -u -r1.98 -r1.99 src/lib/libkvm/kvm.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm.c diff -u src/lib/libkvm/kvm.c:1.98 src/lib/libkvm/kvm.c:1.99 --- src/lib/libkvm/kvm.c:1.98 Mon Sep 12 17:11:32 2011 +++ src/lib/libkvm/kvm.c Sat Oct 15 17:08:53 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm.c,v 1.98 2011/09/12 21:11:32 christos Exp $ */ +/* $NetBSD: kvm.c,v 1.99 2011/10/15 21:08:53 christos Exp $ */ /*- * Copyright (c) 1989, 1992, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)kvm.c 8.2 (Berkeley) 2/13/94"; #else -__RCSID("$NetBSD: kvm.c,v 1.98 2011/09/12 21:11:32 christos Exp $"); +__RCSID("$NetBSD: kvm.c,v 1.99 2011/10/15 21:08:53 christos Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -80,7 +80,6 @@ static kvm_t *_kvm_open(kvm_t *, const c const char *, int, char *); static int clear_gap(kvm_t *, bool (*)(void *, const void *, size_t), void *, size_t); -static int open_cloexec(const char *, int, int); static off_t Lseek(kvm_t *, int, off_t, int); static ssize_t Pread(kvm_t *, int, void *, size_t, off_t); @@ -152,27 +151,6 @@ _kvm_malloc(kvm_t *kd, size_t n) } /* - * Open a file setting the close on exec bit. - */ -static int -open_cloexec(const char *fname, int flags, int mode) -{ - int fd; - - if ((fd = open(fname, flags, mode)) == -1) - return fd; - if (fcntl(fd, F_SETFD, FD_CLOEXEC) == -1) - goto error; - - return fd; -error: - flags = errno; - (void)close(fd); - errno = flags; - return -1; -} - -/* * Wrapper around the lseek(2) system call; calls _kvm_syserr() for us * in the event of emergency. */ @@ -336,9 +314,9 @@ _kvm_open(kvm_t *kd, const char *uf, con * exist, open the current kernel. */ if (ufgiven == 0) - kd->nlfd = open_cloexec(_PATH_KSYMS, O_RDONLY, 0); + kd->nlfd = open(_PATH_KSYMS, O_RDONLY | O_CLOEXEC, 0); if (kd->nlfd < 0) { - if ((kd->nlfd = open_cloexec(uf, O_RDONLY, 0)) < 0) { + if ((kd->nlfd = open(uf, O_RDONLY | O_CLOEXEC, 0)) < 0) { _kvm_syserr(kd, kd->program, "%s", uf); goto failed; } @@ -356,7 +334,7 @@ _kvm_open(kvm_t *kd, const char *uf, con kd->nlfd = -1; } - if ((kd->pmfd = open_cloexec(mf, flag, 0)) < 0) { + if ((kd->pmfd = open(mf, flag | O_CLOEXEC, 0)) < 0) { _kvm_syserr(kd, kd->program, "%s", mf); goto failed; } @@ -370,12 +348,12 @@ _kvm_open(kvm_t *kd, const char *uf, con * make it work for either /dev/mem or /dev/kmem -- in either * case you're working with a live kernel.) */ - if ((kd->vmfd = open_cloexec(_PATH_KMEM, flag, 0)) < 0) { + if ((kd->vmfd = open(_PATH_KMEM, flag | O_CLOEXEC, 0)) < 0) { _kvm_syserr(kd, kd->program, "%s", _PATH_KMEM); goto failed; } kd->alive = KVM_ALIVE_FILES; - if ((kd->swfd = open_cloexec(sf, flag, 0)) < 0) { + if ((kd->swfd = open(sf, flag | O_CLOEXEC, 0)) < 0) { if (errno != ENXIO) { _kvm_syserr(kd, kd->program, "%s", sf); goto failed; @@ -781,7 +759,7 @@ kvm_nlist(kvm_t *kd, struct nlist *nl) * So open it again, just for the time we retrieve the list. */ if (kd->nlfd < 0) { - nlfd = open_cloexec(_PATH_KSYMS, O_RDONLY, 0); + nlfd = open(_PATH_KSYMS, O_RDONLY | O_CLOEXEC, 0); if (nlfd < 0) { _kvm_err(kd, 0, "failed to open %s", _PATH_KSYMS); return (nlfd);
CVS commit: src/lib/libkvm
Module Name:src Committed By: christos Date: Wed Sep 14 12:37:56 UTC 2011 Modified Files: src/lib/libkvm: kvm_sun2.c kvm_sun3.c kvm_sun3x.c Log Message: more sys/param.h additions To generate a diff of this commit: cvs rdiff -u -r1.5 -r1.6 src/lib/libkvm/kvm_sun2.c cvs rdiff -u -r1.14 -r1.15 src/lib/libkvm/kvm_sun3.c cvs rdiff -u -r1.11 -r1.12 src/lib/libkvm/kvm_sun3x.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_sun2.c diff -u src/lib/libkvm/kvm_sun2.c:1.5 src/lib/libkvm/kvm_sun2.c:1.6 --- src/lib/libkvm/kvm_sun2.c:1.5 Mon Sep 20 19:23:16 2010 +++ src/lib/libkvm/kvm_sun2.c Wed Sep 14 08:37:55 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_sun2.c,v 1.5 2010/09/20 23:23:16 jym Exp $ */ +/* $NetBSD: kvm_sun2.c,v 1.6 2011/09/14 12:37:55 christos Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)kvm_sparc.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: kvm_sun2.c,v 1.5 2010/09/20 23:23:16 jym Exp $"); +__RCSID("$NetBSD: kvm_sun2.c,v 1.6 2011/09/14 12:37:55 christos Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -48,7 +48,7 @@ * Note: This file has to build on ALL m68000 machines, * so do NOT include any files here. */ - +#include #include #include Index: src/lib/libkvm/kvm_sun3.c diff -u src/lib/libkvm/kvm_sun3.c:1.14 src/lib/libkvm/kvm_sun3.c:1.15 --- src/lib/libkvm/kvm_sun3.c:1.14 Mon Sep 20 19:23:16 2010 +++ src/lib/libkvm/kvm_sun3.c Wed Sep 14 08:37:55 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_sun3.c,v 1.14 2010/09/20 23:23:16 jym Exp $ */ +/* $NetBSD: kvm_sun3.c,v 1.15 2011/09/14 12:37:55 christos Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)kvm_sparc.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: kvm_sun3.c,v 1.14 2010/09/20 23:23:16 jym Exp $"); +__RCSID("$NetBSD: kvm_sun3.c,v 1.15 2011/09/14 12:37:55 christos Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -48,7 +48,7 @@ * Note: This file has to build on ALL m68k machines, * so do NOT include any files here. */ - +#include #include #include Index: src/lib/libkvm/kvm_sun3x.c diff -u src/lib/libkvm/kvm_sun3x.c:1.11 src/lib/libkvm/kvm_sun3x.c:1.12 --- src/lib/libkvm/kvm_sun3x.c:1.11 Mon Sep 20 19:23:16 2010 +++ src/lib/libkvm/kvm_sun3x.c Wed Sep 14 08:37:55 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_sun3x.c,v 1.11 2010/09/20 23:23:16 jym Exp $ */ +/* $NetBSD: kvm_sun3x.c,v 1.12 2011/09/14 12:37:55 christos Exp $ */ /*- * Copyright (c) 1997 The NetBSD Foundation, Inc. @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)kvm_sparc.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: kvm_sun3x.c,v 1.11 2010/09/20 23:23:16 jym Exp $"); +__RCSID("$NetBSD: kvm_sun3x.c,v 1.12 2011/09/14 12:37:55 christos Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -44,7 +44,7 @@ * Note: This file has to build on ALL m68k machines, * so do NOT include any files here. */ - +#include #include #include
CVS commit: src/lib/libkvm
Module Name:src Committed By: christos Date: Tue Sep 13 19:11:09 UTC 2011 Modified Files: src/lib/libkvm: kvm_m68k_cmn.c Log Message: Include for MAXPATHLEN To generate a diff of this commit: cvs rdiff -u -r1.16 -r1.17 src/lib/libkvm/kvm_m68k_cmn.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_m68k_cmn.c diff -u src/lib/libkvm/kvm_m68k_cmn.c:1.16 src/lib/libkvm/kvm_m68k_cmn.c:1.17 --- src/lib/libkvm/kvm_m68k_cmn.c:1.16 Sun Sep 26 18:28:05 2010 +++ src/lib/libkvm/kvm_m68k_cmn.c Tue Sep 13 15:11:09 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_m68k_cmn.c,v 1.16 2010/09/26 22:28:05 jym Exp $ */ +/* $NetBSD: kvm_m68k_cmn.c,v 1.17 2011/09/13 19:11:09 christos Exp $ */ /*- * Copyright (c) 1989, 1992, 1993 @@ -74,7 +74,7 @@ #if 0 static char sccsid[] = "@(#)kvm_hp300.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: kvm_m68k_cmn.c,v 1.16 2010/09/26 22:28:05 jym Exp $"); +__RCSID("$NetBSD: kvm_m68k_cmn.c,v 1.17 2011/09/13 19:11:09 christos Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -85,6 +85,7 @@ * so do NOT include any files here. */ +#include #include #include
CVS commit: src/lib/libkvm
Module Name:src Committed By: wiz Date: Tue Sep 13 08:53:15 UTC 2011 Modified Files: src/lib/libkvm: kvm.3 Log Message: Sort sections. To generate a diff of this commit: cvs rdiff -u -r1.12 -r1.13 src/lib/libkvm/kvm.3 Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm.3 diff -u src/lib/libkvm/kvm.3:1.12 src/lib/libkvm/kvm.3:1.13 --- src/lib/libkvm/kvm.3:1.12 Mon Sep 12 21:11:32 2011 +++ src/lib/libkvm/kvm.3 Tue Sep 13 08:53:15 2011 @@ -1,4 +1,4 @@ -.\" $NetBSD: kvm.3,v 1.12 2011/09/12 21:11:32 christos Exp $ +.\" $NetBSD: kvm.3,v 1.13 2011/09/13 08:53:15 wiz Exp $ .\" .\" Copyright (c) 1992, 1993 .\" The Regents of the University of California. All rights reserved. @@ -57,6 +57,11 @@ .Pp .Fn kvm_open is first called to obtain a descriptor for all subsequent calls. +.Sh FILES +.Bl -tag -width /dev/mem -compact +.It Pa /dev/mem +interface to physical memory +.El .Sh COMPATIBILITY The kvm interface was first introduced in SunOS. A considerable number of programs have been developed that use this @@ -89,11 +94,6 @@ .Xr kvm_geterr 3 , to return (not print out) the error message corresponding to the most recent error condition on the given descriptor. -.Sh FILES -.Bl -tag -width /dev/mem -compact -.It Pa /dev/mem -interface to physical memory -.El .Sh SEE ALSO .Xr kvm_close 3 , .Xr kvm_getargv 3 ,
CVS commit: src/lib/libkvm
Module Name:src Committed By: wiz Date: Tue Sep 13 08:53:10 UTC 2011 Modified Files: src/lib/libkvm: kvm_getkernelname.3 Log Message: Fix Xr. To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/lib/libkvm/kvm_getkernelname.3 Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_getkernelname.3 diff -u src/lib/libkvm/kvm_getkernelname.3:1.1 src/lib/libkvm/kvm_getkernelname.3:1.2 --- src/lib/libkvm/kvm_getkernelname.3:1.1 Mon Sep 12 21:11:53 2011 +++ src/lib/libkvm/kvm_getkernelname.3 Tue Sep 13 08:53:10 2011 @@ -1,4 +1,4 @@ -.\" $NetBSD: kvm_getkernelname.3,v 1.1 2011/09/12 21:11:53 christos Exp $ +.\" $NetBSD: kvm_getkernelname.3,v 1.2 2011/09/13 08:53:10 wiz Exp $ .\" .\" .\" Copyright (c) 2011 The NetBSD Foundation, Inc. @@ -50,9 +50,9 @@ .Sh DESCRIPTION This function returns a string containing the kernel name used from the kvm descriptor obtained by a previous -.Xr kvm_open +.Xr kvm_open 3 or -.Xr kvm_openfiles +.Xr kvm_openfiles 3 call. .Sh SEE ALSO .Xr kvm 3 ,
CVS commit: src/lib/libkvm
Module Name:src Committed By: christos Date: Mon Sep 12 21:11:54 UTC 2011 Added Files: src/lib/libkvm: kvm_getkernelname.3 Log Message: doc for kvm_getkernelname To generate a diff of this commit: cvs rdiff -u -r0 -r1.1 src/lib/libkvm/kvm_getkernelname.3 Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Added files: Index: src/lib/libkvm/kvm_getkernelname.3 diff -u /dev/null src/lib/libkvm/kvm_getkernelname.3:1.1 --- /dev/null Mon Sep 12 17:11:54 2011 +++ src/lib/libkvm/kvm_getkernelname.3 Mon Sep 12 17:11:53 2011 @@ -0,0 +1,67 @@ +.\" $NetBSD: kvm_getkernelname.3,v 1.1 2011/09/12 21:11:53 christos Exp $ +.\" +.\" +.\" Copyright (c) 2011 The NetBSD Foundation, Inc. +.\" All rights reserved. +.\" +.\" This code is derived from software contributed to The NetBSD Foundation +.\" by Christos Zoulas. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\"notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\"notice, this list of conditions and the following disclaimer in the +.\"documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\"must display the following acknowledgement: +.\"This product includes software developed by the NetBSD +.\"Foundation, Inc. and its contributors. +.\" 4. Neither the name of The NetBSD Foundation nor the names of its +.\"contributors may be used to endorse or promote products derived +.\"from this software without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS +.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +.\" POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd September 14, 2011 +.Dt KVM_GETKERNELNAME 3 +.Os +.Sh NAME +.Nm kvm_getkernelname +.Nd get kernel name of opened kvm descriptor +.Sh LIBRARY +.Lb libkvm +.Sh SYNOPSIS +.In kvm.h +.Ft const char * +.Fn kvm_getkernelname "kvm_t *kd" +.Sh DESCRIPTION +This function returns a string containing the kernel name used from the kvm +descriptor obtained by a previous +.Xr kvm_open +or +.Xr kvm_openfiles +call. +.Sh SEE ALSO +.Xr kvm 3 , +.Xr kvm_close 3 , +.Xr kvm_getargv 3 , +.Xr kvm_getenvv 3 , +.Xr kvm_getprocs 3 , +.Xr kvm_nlist 3 , +.Xr kvm_open 3 , +.Xr kvm_openfiles 3 , +.Xr kvm_read 3 , +.Xr kvm_write 3
CVS commit: src/lib/libkvm
Module Name:src Committed By: christos Date: Mon Sep 12 21:11:32 UTC 2011 Modified Files: src/lib/libkvm: Makefile kvm.3 kvm.c kvm_open.3 kvm_private.h Log Message: add a function to report the name of the file kvm_open{,.files} is using. To generate a diff of this commit: cvs rdiff -u -r1.47 -r1.48 src/lib/libkvm/Makefile cvs rdiff -u -r1.11 -r1.12 src/lib/libkvm/kvm.3 cvs rdiff -u -r1.97 -r1.98 src/lib/libkvm/kvm.c cvs rdiff -u -r1.17 -r1.18 src/lib/libkvm/kvm_open.3 cvs rdiff -u -r1.19 -r1.20 src/lib/libkvm/kvm_private.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/Makefile diff -u src/lib/libkvm/Makefile:1.47 src/lib/libkvm/Makefile:1.48 --- src/lib/libkvm/Makefile:1.47 Mon Feb 14 13:27:24 2011 +++ src/lib/libkvm/Makefile Mon Sep 12 17:11:31 2011 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.47 2011/02/14 18:27:24 matt Exp $ +# $NetBSD: Makefile,v 1.48 2011/09/12 21:11:31 christos Exp $ # from: @(#)Makefile 8.1 (Berkeley) 6/4/93 USE_FORT?= yes # used primarily by setgid programs @@ -39,6 +39,7 @@ .endif MAN= kvm.3 kvm_dump.3 kvm_geterr.3 kvm_getfiles.3 kvm_getloadavg.3 \ + kvm_getkernelname.3 \ kvm_getprocs.3 kvm_nlist.3 kvm_open.3 kvm_read.3 kvm_getlwps.3 MLINKS+=kvm_getprocs.3 kvm_getargv.3 kvm_getprocs.3 kvm_getenvv.3 Index: src/lib/libkvm/kvm.3 diff -u src/lib/libkvm/kvm.3:1.11 src/lib/libkvm/kvm.3:1.12 --- src/lib/libkvm/kvm.3:1.11 Thu Aug 7 12:44:35 2003 +++ src/lib/libkvm/kvm.3 Mon Sep 12 17:11:32 2011 @@ -1,4 +1,4 @@ -.\" $NetBSD: kvm.3,v 1.11 2003/08/07 16:44:35 agc Exp $ +.\" $NetBSD: kvm.3,v 1.12 2011/09/12 21:11:32 christos Exp $ .\" .\" Copyright (c) 1992, 1993 .\" The Regents of the University of California. All rights reserved. @@ -33,7 +33,7 @@ .\" .\" @(#)kvm.3 8.1 (Berkeley) 6/4/93 .\" -.Dd August 18, 2002 +.Dd September 14, 2011 .Dt KVM 3 .Os .Sh NAME @@ -99,6 +99,7 @@ .Xr kvm_getargv 3 , .Xr kvm_getenvv 3 , .Xr kvm_geterr 3 , +.Xr kvm_getkernelname 3 , .Xr kvm_getloadavg 3 , .Xr kvm_getlwps 3 , .Xr kvm_getprocs 3 , Index: src/lib/libkvm/kvm.c diff -u src/lib/libkvm/kvm.c:1.97 src/lib/libkvm/kvm.c:1.98 --- src/lib/libkvm/kvm.c:1.97 Fri Nov 26 17:01:53 2010 +++ src/lib/libkvm/kvm.c Mon Sep 12 17:11:32 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm.c,v 1.97 2010/11/26 22:01:53 dholland Exp $ */ +/* $NetBSD: kvm.c,v 1.98 2011/09/12 21:11:32 christos Exp $ */ /*- * Copyright (c) 1989, 1992, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)kvm.c 8.2 (Berkeley) 2/13/94"; #else -__RCSID("$NetBSD: kvm.c,v 1.97 2010/11/26 22:01:53 dholland Exp $"); +__RCSID("$NetBSD: kvm.c,v 1.98 2011/09/12 21:11:32 christos Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -90,6 +90,12 @@ return (kd->errbuf); } +const char * +kvm_getkernelname(kvm_t *kd) +{ + return kd->kernelname; +} + /* * Report an error using printf style arguments. "program" is kd->program * on hard errors, and 0 on soft errors, so that under sun error emulation, @@ -336,7 +342,9 @@ _kvm_syserr(kd, kd->program, "%s", uf); goto failed; } + strlcpy(kd->kernelname, uf, sizeof(kd->kernelname)); } else { + strlcpy(kd->kernelname, _PATH_KSYMS, sizeof(kd->kernelname)); /* * We're here because /dev/ksyms was opened * successfully. However, we don't want to keep it Index: src/lib/libkvm/kvm_open.3 diff -u src/lib/libkvm/kvm_open.3:1.17 src/lib/libkvm/kvm_open.3:1.18 --- src/lib/libkvm/kvm_open.3:1.17 Mon Mar 22 17:55:06 2010 +++ src/lib/libkvm/kvm_open.3 Mon Sep 12 17:11:32 2011 @@ -1,4 +1,4 @@ -.\" $NetBSD: kvm_open.3,v 1.17 2010/03/22 21:55:06 joerg Exp $ +.\" $NetBSD: kvm_open.3,v 1.18 2011/09/12 21:11:32 christos Exp $ .\" .\" Copyright (c) 1992, 1993 .\" The Regents of the University of California. All rights reserved. @@ -33,7 +33,7 @@ .\" .\" @(#)kvm_open.3 8.3 (Berkeley) 4/19/94 .\" -.Dd September 14, 2009 +.Dd September 14, 2011 .Dt KVM_OPEN 3 .Os .Sh NAME @@ -224,6 +224,7 @@ .Xr kvm_getargv 3 , .Xr kvm_getenvv 3 , .Xr kvm_geterr 3 , +.Xr kvm_getkernelname 3 , .Xr kvm_getprocs 3 , .Xr kvm_nlist 3 , .Xr kvm_read 3 , Index: src/lib/libkvm/kvm_private.h diff -u src/lib/libkvm/kvm_private.h:1.19 src/lib/libkvm/kvm_private.h:1.20 --- src/lib/libkvm/kvm_private.h:1.19 Sun Sep 26 18:28:05 2010 +++ src/lib/libkvm/kvm_private.h Mon Sep 12 17:11:32 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_private.h,v 1.19 2010/09/26 22:28:05 jym Exp $ */ +/* $NetBSD: kvm_private.h,v 1.20 2011/09/12 21:11:32 christos Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -90,6 +90,7 @@ size_t fdalign; uint8_t *iobuf; size_t iobufsz; + char kernelname[MAXPATHLEN]; }; /* Levels of aliveness */
CVS commit: src/lib/libkvm
Module Name:src Committed By: matt Date: Mon Feb 14 18:27:24 UTC 2011 Modified Files: src/lib/libkvm: Makefile Log Message: Add -D_KMEMUSER to CPPFLAGS To generate a diff of this commit: cvs rdiff -u -r1.46 -r1.47 src/lib/libkvm/Makefile Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/Makefile diff -u src/lib/libkvm/Makefile:1.46 src/lib/libkvm/Makefile:1.47 --- src/lib/libkvm/Makefile:1.46 Tue Oct 5 23:48:16 2010 +++ src/lib/libkvm/Makefile Mon Feb 14 18:27:24 2011 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.46 2010/10/05 23:48:16 jym Exp $ +# $NetBSD: Makefile,v 1.47 2011/02/14 18:27:24 matt Exp $ # from: @(#)Makefile 8.1 (Berkeley) 6/4/93 USE_FORT?= yes # used primarily by setgid programs @@ -6,7 +6,7 @@ USE_SHLIBDIR= yes LIB= kvm -CPPFLAGS+=-DLIBC_SCCS -I${NETBSDSRCDIR}/sys +CPPFLAGS+=-DLIBC_SCCS -I${NETBSDSRCDIR}/sys -D_KMEMUSER SRCS= kvm.c kvm_file.c kvm_getloadavg.c kvm_proc.c
CVS commit: src/lib/libkvm
Module Name:src Committed By: matt Date: Sun Jan 23 06:28:53 UTC 2011 Modified Files: src/lib/libkvm: kvm_mips.c Log Message: Teach libkvm how kernel virtual memory is laided on 64-bit MIPS kernels. To generate a diff of this commit: cvs rdiff -u -r1.20 -r1.21 src/lib/libkvm/kvm_mips.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_mips.c diff -u src/lib/libkvm/kvm_mips.c:1.20 src/lib/libkvm/kvm_mips.c:1.21 --- src/lib/libkvm/kvm_mips.c:1.20 Mon Sep 20 23:23:16 2010 +++ src/lib/libkvm/kvm_mips.c Sun Jan 23 06:28:52 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_mips.c,v 1.20 2010/09/20 23:23:16 jym Exp $ */ +/* $NetBSD: kvm_mips.c,v 1.21 2011/01/23 06:28:52 matt Exp $ */ /* * Copyright (c) 1994, 1995 Carnegie-Mellon University. @@ -34,7 +34,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: kvm_mips.c,v 1.20 2010/09/20 23:23:16 jym Exp $"); +__RCSID("$NetBSD: kvm_mips.c,v 1.21 2011/01/23 06:28:52 matt Exp $"); #endif /* LIBC_SCCS and not lint */ /* @@ -100,6 +100,23 @@ cpu_kh = kd->cpu_data; page_off = va & PGOFSET; +#ifdef _LP64 + if (MIPS_XKPHYS_P(va)) { + /* + * Direct-mapped cached address: just convert it. + */ + *pa = MIPS_XKPHYS_TO_PHYS(va); + return (NBPG - page_off); + } + + if (va < MIPS_XKPHYS_START) { + /* + * XUSEG (user virtual address space) - invalid. + */ + _kvm_err(kd, 0, "invalid kernel virtual address"); + goto lose; + } +#else if (va < MIPS_KSEG0_START) { /* * KUSEG (user virtual address space) - invalid. @@ -107,8 +124,9 @@ _kvm_err(kd, 0, "invalid kernel virtual address"); goto lose; } +#endif - if (va >= MIPS_KSEG0_START && va < MIPS_KSEG1_START) { + if (MIPS_KSEG0_P(va)) { /* * Direct-mapped cached address: just convert it. */ @@ -116,7 +134,7 @@ return (NBPG - page_off); } - if (va >= MIPS_KSEG1_START && va < MIPS_KSEG2_START) { + if (MIPS_KSEG1_P(va)) { /* * Direct-mapped uncached address: just convert it. */ @@ -124,6 +142,16 @@ return (NBPG - page_off); } +#ifdef _LP64 + if (va >= MIPS_KSEG2_START) { + /* + * KUSEG (user virtual address space) - invalid. + */ + _kvm_err(kd, 0, "invalid kernel virtual address"); + goto lose; + } +#endif + /* * We now know that we're a KSEG2 (kernel virtually mapped) * address. Translate the address using the pmap's kernel @@ -134,10 +162,17 @@ * Step 1: Make sure the kernel page table has a translation * for the address. */ +#ifdef _LP64 + if (va >= (MIPS_XKSEG_START + (cpu_kh->sysmapsize * NBPG))) { + _kvm_err(kd, 0, "invalid XKSEG address"); + goto lose; + } +#else if (va >= (MIPS_KSEG2_START + (cpu_kh->sysmapsize * NBPG))) { _kvm_err(kd, 0, "invalid KSEG2 address"); goto lose; } +#endif /* * Step 2: Locate and read the PTE.
CVS commit: src/lib/libkvm
Module Name:src Committed By: dholland Date: Fri Nov 26 22:01:53 UTC 2010 Modified Files: src/lib/libkvm: kvm.c Log Message: Return error on failure instead of hiding it and always returning zero. >From Henning Petersen in PR 44152. To generate a diff of this commit: cvs rdiff -u -r1.96 -r1.97 src/lib/libkvm/kvm.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm.c diff -u src/lib/libkvm/kvm.c:1.96 src/lib/libkvm/kvm.c:1.97 --- src/lib/libkvm/kvm.c:1.96 Sat Oct 23 14:34:12 2010 +++ src/lib/libkvm/kvm.c Fri Nov 26 22:01:53 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm.c,v 1.96 2010/10/23 14:34:12 stacktic Exp $ */ +/* $NetBSD: kvm.c,v 1.97 2010/11/26 22:01:53 dholland Exp $ */ /*- * Copyright (c) 1989, 1992, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)kvm.c 8.2 (Berkeley) 2/13/94"; #else -__RCSID("$NetBSD: kvm.c,v 1.96 2010/10/23 14:34:12 stacktic Exp $"); +__RCSID("$NetBSD: kvm.c,v 1.97 2010/11/26 22:01:53 dholland Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -759,7 +759,7 @@ free(kd->iobuf); free(kd); - return (0); + return (error); } int
CVS commit: src/lib/libkvm
Module Name:src Committed By: uebayasi Date: Fri Nov 12 04:52:09 UTC 2010 Modified Files: src/lib/libkvm: kvm_proc.c Log Message: Fix build. To generate a diff of this commit: cvs rdiff -u -r1.87 -r1.88 src/lib/libkvm/kvm_proc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_proc.c diff -u src/lib/libkvm/kvm_proc.c:1.87 src/lib/libkvm/kvm_proc.c:1.88 --- src/lib/libkvm/kvm_proc.c:1.87 Sun Sep 26 22:28:05 2010 +++ src/lib/libkvm/kvm_proc.c Fri Nov 12 04:52:08 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_proc.c,v 1.87 2010/09/26 22:28:05 jym Exp $ */ +/* $NetBSD: kvm_proc.c,v 1.88 2010/11/12 04:52:08 uebayasi Exp $ */ /*- * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #if 0 static char sccsid[] = "@(#)kvm_proc.c 8.3 (Berkeley) 9/23/93"; #else -__RCSID("$NetBSD: kvm_proc.c,v 1.87 2010/09/26 22:28:05 jym Exp $"); +__RCSID("$NetBSD: kvm_proc.c,v 1.88 2010/11/12 04:52:08 uebayasi Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -102,6 +102,7 @@ #include #include #include +#include #include
CVS commit: src/lib/libkvm
Module Name:src Committed By: stacktic Date: Sat Oct 23 14:34:12 UTC 2010 Modified Files: src/lib/libkvm: kvm.c Log Message: Do not return -1 on _kvm_read when all the requested data could be read (fix bin/38648) To generate a diff of this commit: cvs rdiff -u -r1.95 -r1.96 src/lib/libkvm/kvm.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm.c diff -u src/lib/libkvm/kvm.c:1.95 src/lib/libkvm/kvm.c:1.96 --- src/lib/libkvm/kvm.c:1.95 Mon Sep 20 23:23:16 2010 +++ src/lib/libkvm/kvm.c Sat Oct 23 14:34:12 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm.c,v 1.95 2010/09/20 23:23:16 jym Exp $ */ +/* $NetBSD: kvm.c,v 1.96 2010/10/23 14:34:12 stacktic Exp $ */ /*- * Copyright (c) 1989, 1992, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)kvm.c 8.2 (Berkeley) 2/13/94"; #else -__RCSID("$NetBSD: kvm.c,v 1.95 2010/09/20 23:23:16 jym Exp $"); +__RCSID("$NetBSD: kvm.c,v 1.96 2010/10/23 14:34:12 stacktic Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -216,7 +216,7 @@ kd->iobufsz = dsize; } rv = pread(fd, kd->iobuf, dsize, doff); - if (rv < dsize) + if (rv < size + moff) return -1; memcpy(buf, kd->iobuf + moff, size); return size;
CVS commit: src/lib/libkvm
Module Name:src Committed By: jym Date: Sun Sep 26 22:28:05 UTC 2010 Modified Files: src/lib/libkvm: kvm_file.c kvm_getloadavg.c kvm_m68k_cmn.c kvm_private.h kvm_proc.c Log Message: Define KREAD() inside kvm_private.h, for reusability. To generate a diff of this commit: cvs rdiff -u -r1.27 -r1.28 src/lib/libkvm/kvm_file.c cvs rdiff -u -r1.9 -r1.10 src/lib/libkvm/kvm_getloadavg.c cvs rdiff -u -r1.15 -r1.16 src/lib/libkvm/kvm_m68k_cmn.c cvs rdiff -u -r1.18 -r1.19 src/lib/libkvm/kvm_private.h cvs rdiff -u -r1.86 -r1.87 src/lib/libkvm/kvm_proc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_file.c diff -u src/lib/libkvm/kvm_file.c:1.27 src/lib/libkvm/kvm_file.c:1.28 --- src/lib/libkvm/kvm_file.c:1.27 Sun Sep 19 02:07:00 2010 +++ src/lib/libkvm/kvm_file.c Sun Sep 26 22:28:05 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_file.c,v 1.27 2010/09/19 02:07:00 jym Exp $ */ +/* $NetBSD: kvm_file.c,v 1.28 2010/09/26 22:28:05 jym Exp $ */ /*- * Copyright (c) 1989, 1992, 1993 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)kvm_file.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: kvm_file.c,v 1.27 2010/09/19 02:07:00 jym Exp $"); +__RCSID("$NetBSD: kvm_file.c,v 1.28 2010/09/26 22:28:05 jym Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -72,9 +72,6 @@ #include "kvm_private.h" -#define KREAD(kd, addr, obj) \ - (kvm_read(kd, (u_long) addr, obj, sizeof(*obj)) != sizeof(*obj)) - static int kvm_deadfiles(kvm_t *, int, int, long, int); @@ -94,7 +91,7 @@ * first copyout filehead */ if (buflen < sizeof(fhead) || - KREAD(kd, ofhead, &fhead)) { + KREAD(kd, (u_long)ofhead, &fhead)) { _kvm_err(kd, kd->program, "can't read filehead"); return (0); } @@ -107,7 +104,8 @@ */ for (fp = fhead.lh_first; fp != 0; fp = fp->f_list.le_next) { if (buflen > sizeof(struct file)) { - if (KREAD(kd, (long)fp, ((struct file *)(void *)where))) { + if (KREAD(kd, (u_long)fp, + ((struct file *)(void *)where))) { _kvm_err(kd, kd->program, "can't read kfp"); return (0); } Index: src/lib/libkvm/kvm_getloadavg.c diff -u src/lib/libkvm/kvm_getloadavg.c:1.9 src/lib/libkvm/kvm_getloadavg.c:1.10 --- src/lib/libkvm/kvm_getloadavg.c:1.9 Sun Sep 19 02:07:00 2010 +++ src/lib/libkvm/kvm_getloadavg.c Sun Sep 26 22:28:05 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_getloadavg.c,v 1.9 2010/09/19 02:07:00 jym Exp $ */ +/* $NetBSD: kvm_getloadavg.c,v 1.10 2010/09/26 22:28:05 jym Exp $ */ /*- * Copyright (c) 1993 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)kvm_getloadavg.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: kvm_getloadavg.c,v 1.9 2010/09/19 02:07:00 jym Exp $"); +__RCSID("$NetBSD: kvm_getloadavg.c,v 1.10 2010/09/26 22:28:05 jym Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -86,8 +86,6 @@ return (-1); } -#define KREAD(kd, addr, obj) \ - (kvm_read(kd, addr, (void *)(obj), sizeof(*obj)) != sizeof(*obj)) if (KREAD(kd, nl[X_AVERUNNABLE].n_value, &loadinfo)) { _kvm_err(kd, kd->program, "can't read averunnable"); return (-1); Index: src/lib/libkvm/kvm_m68k_cmn.c diff -u src/lib/libkvm/kvm_m68k_cmn.c:1.15 src/lib/libkvm/kvm_m68k_cmn.c:1.16 --- src/lib/libkvm/kvm_m68k_cmn.c:1.15 Mon Sep 20 23:23:16 2010 +++ src/lib/libkvm/kvm_m68k_cmn.c Sun Sep 26 22:28:05 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_m68k_cmn.c,v 1.15 2010/09/20 23:23:16 jym Exp $ */ +/* $NetBSD: kvm_m68k_cmn.c,v 1.16 2010/09/26 22:28:05 jym Exp $ */ /*- * Copyright (c) 1989, 1992, 1993 @@ -74,7 +74,7 @@ #if 0 static char sccsid[] = "@(#)kvm_hp300.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: kvm_m68k_cmn.c,v 1.15 2010/09/20 23:23:16 jym Exp $"); +__RCSID("$NetBSD: kvm_m68k_cmn.c,v 1.16 2010/09/26 22:28:05 jym Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -116,9 +116,6 @@ #define _kvm_btop(v, a) (((unsigned)(a)) >> (v)->pgshift) -#define KREAD(kd, addr, p)\ - (kvm_read(kd, addr, (char *)(p), sizeof(*(p))) != sizeof(*(p))) - void _kvm_cmn_freevtop(kvm_t *kd) { Index: src/lib/libkvm/kvm_private.h diff -u src/lib/libkvm/kvm_private.h:1.18 src/lib/libkvm/kvm_private.h:1.19 --- src/lib/libkvm/kvm_private.h:1.18 Mon Sep 20 23:23:16 2010 +++ src/lib/libkvm/kvm_private.h Sun Sep 26 22:28:05 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_private.h,v 1.18 2010/09/20 23:23:16 jym Exp $ */ +/* $NetBSD: kvm_private.h,v 1.19 2010/09/26 22:28:05 jym Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -119,6 +119,9 @@ __attribute__((__format__(__printf__, 3, 4))); ssize_t _kvm_pread(kvm_t *, int, void *, size_t, off_t); +#define KREAD(kd, addr, obj) \ + (kvm_read(kd, addr, (obj), sizeof(*obj)) != sizeof(*obj)) + #define KVM_ALLOC(kd, member, size) \ do { \ if (kd->member == NULL) \ Index: src/lib/libkvm/kvm_proc.c diff -u src/lib/libkvm/kvm_proc.c:1.86 src/lib/libkvm/kvm_proc.c:1.87 --- src/lib/libkvm/kvm_proc.c:1.86 Mon
CVS commit: src/lib/libkvm
Module Name:src Committed By: jym Date: Mon Sep 20 23:23:16 UTC 2010 Modified Files: src/lib/libkvm: kvm.c kvm_alpha.c kvm_arm.c kvm_hppa.c kvm_i386.c kvm_m68k.c kvm_m68k.h kvm_m68k_cmn.c kvm_mips.c kvm_powerpc.c kvm_powerpc64.c kvm_private.h kvm_proc.c kvm_sh3.c kvm_sparc.c kvm_sparc64.c kvm_sun2.c kvm_sun3.c kvm_sun3x.c kvm_vax.c kvm_x86_64.c Log Message: Change kvm_pa2off() and kvm_kvatop() prototypes (private to kvm(3)): -int _kvm_kvatop(kvm_t *, u_long, u_long *); -off_t _kvm_pa2off(kvm_t *, u_long); +int _kvm_kvatop(kvm_t *, vaddr_t, paddr_t *); +off_t _kvm_pa2off(kvm_t *, paddr_t); Basically, use vaddr_t for VA and paddr_t for PA. In addition, for variables representing addresses, use paddr_t or vaddr_t, depending on the context. For most arches, vaddr_t and paddr_t are equivalent to unsigned long. However, the change was needed for exotic situations, like i386 PAE, were unsigned long is not suitable for PA which are 64 bits long. As this required a complete change of the function prototypes, all arches had to be adapted accordingly. Core files from before this commit should still work with the new code; I did not see any direct dependency between core's structure and kvatop/pa2off. The change was compile tested for all arches, as it impacts all of them. See also: http://mail-index.netbsd.org/current-users/2010/09/07/msg014249.html To generate a diff of this commit: cvs rdiff -u -r1.94 -r1.95 src/lib/libkvm/kvm.c cvs rdiff -u -r1.24 -r1.25 src/lib/libkvm/kvm_alpha.c cvs rdiff -u -r1.5 -r1.6 src/lib/libkvm/kvm_arm.c src/lib/libkvm/kvm_hppa.c \ src/lib/libkvm/kvm_m68k.h cvs rdiff -u -r1.27 -r1.28 src/lib/libkvm/kvm_i386.c cvs rdiff -u -r1.17 -r1.18 src/lib/libkvm/kvm_m68k.c \ src/lib/libkvm/kvm_private.h src/lib/libkvm/kvm_vax.c cvs rdiff -u -r1.14 -r1.15 src/lib/libkvm/kvm_m68k_cmn.c \ src/lib/libkvm/kvm_sparc64.c cvs rdiff -u -r1.19 -r1.20 src/lib/libkvm/kvm_mips.c cvs rdiff -u -r1.11 -r1.12 src/lib/libkvm/kvm_powerpc.c cvs rdiff -u -r1.3 -r1.4 src/lib/libkvm/kvm_powerpc64.c cvs rdiff -u -r1.85 -r1.86 src/lib/libkvm/kvm_proc.c cvs rdiff -u -r1.7 -r1.8 src/lib/libkvm/kvm_sh3.c src/lib/libkvm/kvm_x86_64.c cvs rdiff -u -r1.31 -r1.32 src/lib/libkvm/kvm_sparc.c cvs rdiff -u -r1.4 -r1.5 src/lib/libkvm/kvm_sun2.c cvs rdiff -u -r1.13 -r1.14 src/lib/libkvm/kvm_sun3.c cvs rdiff -u -r1.10 -r1.11 src/lib/libkvm/kvm_sun3x.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm.c diff -u src/lib/libkvm/kvm.c:1.94 src/lib/libkvm/kvm.c:1.95 --- src/lib/libkvm/kvm.c:1.94 Mon Sep 14 19:29:20 2009 +++ src/lib/libkvm/kvm.c Mon Sep 20 23:23:16 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm.c,v 1.94 2009/09/14 19:29:20 apb Exp $ */ +/* $NetBSD: kvm.c,v 1.95 2010/09/20 23:23:16 jym Exp $ */ /*- * Copyright (c) 1989, 1992, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)kvm.c 8.2 (Berkeley) 2/13/94"; #else -__RCSID("$NetBSD: kvm.c,v 1.94 2009/09/14 19:29:20 apb Exp $"); +__RCSID("$NetBSD: kvm.c,v 1.95 2010/09/20 23:23:16 jym Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -54,6 +54,7 @@ #include #include #include +#include #include @@ -798,7 +799,7 @@ kvm_dump_inval(kvm_t *kd) { struct nlist nl[2]; - u_long pa; + paddr_t pa; size_t dsize; off_t doff; void *newbuf; @@ -814,7 +815,7 @@ _kvm_err(kd, 0, "bad namelist"); return (-1); } - if (_kvm_kvatop(kd, (u_long)nl[0].n_value, &pa) == 0) + if (_kvm_kvatop(kd, (vaddr_t)nl[0].n_value, &pa) == 0) return (-1); errno = 0; @@ -868,10 +869,10 @@ } cp = buf; while (len > 0) { - u_long pa; + paddr_t pa; off_t foff; - cc = _kvm_kvatop(kd, kva, &pa); + cc = _kvm_kvatop(kd, (vaddr_t)kva, &pa); if (cc == 0) return (-1); if (cc > len) Index: src/lib/libkvm/kvm_alpha.c diff -u src/lib/libkvm/kvm_alpha.c:1.24 src/lib/libkvm/kvm_alpha.c:1.25 --- src/lib/libkvm/kvm_alpha.c:1.24 Sun Sep 19 02:07:00 2010 +++ src/lib/libkvm/kvm_alpha.c Mon Sep 20 23:23:16 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_alpha.c,v 1.24 2010/09/19 02:07:00 jym Exp $ */ +/* $NetBSD: kvm_alpha.c,v 1.25 2010/09/20 23:23:16 jym Exp $ */ /* * Copyright (c) 1994, 1995 Carnegie-Mellon University. @@ -34,12 +34,14 @@ #include #include #include -#include +#include #include #include #include #include + +#include #include #include @@ -64,7 +66,7 @@ } int -_kvm_kvatop(kvm_t *kd, u_long va, u_long *pa) +_kvm_kvatop(kvm_t *kd, vaddr_t va, paddr_t *pa) { cpu_kcore_hdr_t *cpu_kh; alpha_pt_entry_t pte; @@ -151,7 +153,7 @@ * Translate a physical address to a file-offset in the crash dump. */ off_t -_kvm_pa2off(kvm_t *kd, u_long pa) +_kvm_pa2off(kvm_t *kd, paddr_t pa) { cpu_kcore_hdr_t *cpu_kh; phys_ram_seg_t *ramsegs; Index: src/lib/libkvm/kvm_arm.c diff -u src/lib/libkvm/kvm_arm.c:1.5 src/l
CVS commit: src/lib/libkvm
Module Name:src Committed By: jym Date: Sun Sep 19 11:37:40 UTC 2010 Modified Files: src/lib/libkvm: kvm_powerpc.c Log Message: KNF To generate a diff of this commit: cvs rdiff -u -r1.10 -r1.11 src/lib/libkvm/kvm_powerpc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_powerpc.c diff -u src/lib/libkvm/kvm_powerpc.c:1.10 src/lib/libkvm/kvm_powerpc.c:1.11 --- src/lib/libkvm/kvm_powerpc.c:1.10 Sun Sep 19 02:07:00 2010 +++ src/lib/libkvm/kvm_powerpc.c Sun Sep 19 11:37:40 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_powerpc.c,v 1.10 2010/09/19 02:07:00 jym Exp $ */ +/* $NetBSD: kvm_powerpc.c,v 1.11 2010/09/19 11:37:40 jym Exp $ */ /* * Copyright (c) 2005 Wasabi Systems, Inc. @@ -90,11 +90,10 @@ #include #include -static int _kvm_match_601bat(kvm_t *kd, u_long va, u_long *pa, int *off); -static int _kvm_match_bat(kvm_t *kd, u_long va, u_long *pa, int *off); -static int _kvm_match_sr(kvm_t *kd, u_long va, u_long *pa, int *off); -static struct pte *_kvm_scan_pteg(struct pteg *pteg, uint32_t vsid, - uint32_t api, int secondary); +static int _kvm_match_601bat(kvm_t *, u_long, u_long *, int *); +static int _kvm_match_bat(kvm_t *, u_long, u_long *, int *); +static int _kvm_match_sr(kvm_t *, u_long, u_long *, int *); +static struct pte *_kvm_scan_pteg(struct pteg *, uint32_t, uint32_t, int); void _kvm_freevtop(kvm_t *kd)
CVS commit: src/lib/libkvm
Module Name:src Committed By: jym Date: Sun Sep 19 02:07:01 UTC 2010 Modified Files: src/lib/libkvm: kvm_alpha.c kvm_arm.c kvm_file.c kvm_getloadavg.c kvm_i386.c kvm_m68k.c kvm_m68k.h kvm_m68k_cmn.c kvm_mips.c kvm_powerpc.c kvm_powerpc64.c kvm_private.h kvm_proc.c kvm_sh3.c kvm_sparc.c kvm_sparc64.c kvm_sun2.c kvm_sun3.c kvm_sun3x.c kvm_vax.c kvm_x86_64.c Log Message: Ansify and KNF all functions within kvm(3). No objection on current-us...@. Used as ground for u_long => vaddr_t/paddr_t replacements in kvm(3) private functions. Compile tested for all arches. See also: http://mail-index.netbsd.org/current-users/2010/09/07/msg014249.html To generate a diff of this commit: cvs rdiff -u -r1.23 -r1.24 src/lib/libkvm/kvm_alpha.c cvs rdiff -u -r1.4 -r1.5 src/lib/libkvm/kvm_arm.c src/lib/libkvm/kvm_m68k.h cvs rdiff -u -r1.26 -r1.27 src/lib/libkvm/kvm_file.c \ src/lib/libkvm/kvm_i386.c cvs rdiff -u -r1.8 -r1.9 src/lib/libkvm/kvm_getloadavg.c cvs rdiff -u -r1.16 -r1.17 src/lib/libkvm/kvm_m68k.c \ src/lib/libkvm/kvm_private.h src/lib/libkvm/kvm_vax.c cvs rdiff -u -r1.13 -r1.14 src/lib/libkvm/kvm_m68k_cmn.c \ src/lib/libkvm/kvm_sparc64.c cvs rdiff -u -r1.18 -r1.19 src/lib/libkvm/kvm_mips.c cvs rdiff -u -r1.9 -r1.10 src/lib/libkvm/kvm_powerpc.c \ src/lib/libkvm/kvm_sun3x.c cvs rdiff -u -r1.2 -r1.3 src/lib/libkvm/kvm_powerpc64.c cvs rdiff -u -r1.84 -r1.85 src/lib/libkvm/kvm_proc.c cvs rdiff -u -r1.6 -r1.7 src/lib/libkvm/kvm_sh3.c src/lib/libkvm/kvm_x86_64.c cvs rdiff -u -r1.30 -r1.31 src/lib/libkvm/kvm_sparc.c cvs rdiff -u -r1.3 -r1.4 src/lib/libkvm/kvm_sun2.c cvs rdiff -u -r1.12 -r1.13 src/lib/libkvm/kvm_sun3.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_alpha.c diff -u src/lib/libkvm/kvm_alpha.c:1.23 src/lib/libkvm/kvm_alpha.c:1.24 --- src/lib/libkvm/kvm_alpha.c:1.23 Tue Jan 15 13:57:41 2008 +++ src/lib/libkvm/kvm_alpha.c Sun Sep 19 02:07:00 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_alpha.c,v 1.23 2008/01/15 13:57:41 ad Exp $ */ +/* $NetBSD: kvm_alpha.c,v 1.24 2010/09/19 02:07:00 jym Exp $ */ /* * Copyright (c) 1994, 1995 Carnegie-Mellon University. @@ -51,25 +51,20 @@ /*ARGSUSED*/ void -_kvm_freevtop(kd) - kvm_t *kd; +_kvm_freevtop(kvm_t *kd) { return; } /*ARGSUSED*/ int -_kvm_initvtop(kd) - kvm_t *kd; +_kvm_initvtop(kvm_t *kd) { return (0); } int -_kvm_kvatop(kd, va, pa) - kvm_t *kd; - u_long va; - u_long *pa; +_kvm_kvatop(kvm_t *kd, u_long va, u_long *pa) { cpu_kcore_hdr_t *cpu_kh; alpha_pt_entry_t pte; @@ -156,9 +151,7 @@ * Translate a physical address to a file-offset in the crash dump. */ off_t -_kvm_pa2off(kd, pa) - kvm_t *kd; - u_long pa; +_kvm_pa2off(kvm_t *kd, u_long pa) { cpu_kcore_hdr_t *cpu_kh; phys_ram_seg_t *ramsegs; @@ -187,8 +180,7 @@ * have to deal with these NOT being constants! (i.e. m68k) */ int -_kvm_mdopen(kd) - kvm_t *kd; +_kvm_mdopen(kvm_t *kd) { kd->usrstack = USRSTACK; Index: src/lib/libkvm/kvm_arm.c diff -u src/lib/libkvm/kvm_arm.c:1.4 src/lib/libkvm/kvm_arm.c:1.5 --- src/lib/libkvm/kvm_arm.c:1.4 Tue Jan 15 13:57:42 2008 +++ src/lib/libkvm/kvm_arm.c Sun Sep 19 02:07:00 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_arm.c,v 1.4 2008/01/15 13:57:42 ad Exp $ */ +/* $NetBSD: kvm_arm.c,v 1.5 2010/09/19 02:07:00 jym Exp $ */ /*- * Copyright (C) 1996 Wolfgang Solfrank. @@ -39,7 +39,7 @@ #include #if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: kvm_arm.c,v 1.4 2008/01/15 13:57:42 ad Exp $"); +__RCSID("$NetBSD: kvm_arm.c,v 1.5 2010/09/19 02:07:00 jym Exp $"); #endif/* LIBC_SCCS and not lint */ #include @@ -71,7 +71,7 @@ } int -_kvm_kvatop(kvm_t * kd, u_long va, u_long * pa) +_kvm_kvatop(kvm_t * kd, u_long va, u_long *pa) { cpu_kcore_hdr_t *cpu_kh; pd_entry_t pde; Index: src/lib/libkvm/kvm_m68k.h diff -u src/lib/libkvm/kvm_m68k.h:1.4 src/lib/libkvm/kvm_m68k.h:1.5 --- src/lib/libkvm/kvm_m68k.h:1.4 Mon Apr 28 20:23:01 2008 +++ src/lib/libkvm/kvm_m68k.h Sun Sep 19 02:07:00 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_m68k.h,v 1.4 2008/04/28 20:23:01 martin Exp $ */ +/* $NetBSD: kvm_m68k.h,v 1.5 2010/09/19 02:07:00 jym Exp $ */ /*- * Copyright (c) 1997 The NetBSD Foundation, Inc. @@ -30,10 +30,10 @@ */ struct kvm_ops { - int (*initvtop) __P((kvm_t *)); - void (*freevtop) __P((kvm_t *)); - int (*kvatop) __P((kvm_t *, u_long, u_long *)); - off_t (*pa2off) __P((kvm_t *, u_long)); + int (*initvtop)(kvm_t *); + void (*freevtop)(kvm_t *); + int (*kvatop) (kvm_t *, u_long, u_long *); + off_t (*pa2off) (kvm_t *, u_long); }; struct vmstate { Index: src/lib/libkvm/kvm_file.c diff -u src/lib/libkvm/kvm_file.c:1.26 src/lib/libkvm/kvm_file.c:1.27 --- src/lib/libkvm/kvm_file.c:1.26 Wed Mar 12 05:57:28 2008 +++ src/lib/libkvm/kvm_file.c Sun Sep 19 02:07:00 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_file.c,v 1.26 20
CVS commit: src/lib/libkvm
Module Name:src Committed By: skrll Date: Thu Jun 24 20:46:11 UTC 2010 Modified Files: src/lib/libkvm: kvm_hppa.c Log Message: More KNF To generate a diff of this commit: cvs rdiff -u -r1.4 -r1.5 src/lib/libkvm/kvm_hppa.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_hppa.c diff -u src/lib/libkvm/kvm_hppa.c:1.4 src/lib/libkvm/kvm_hppa.c:1.5 --- src/lib/libkvm/kvm_hppa.c:1.4 Thu Jun 24 20:42:24 2010 +++ src/lib/libkvm/kvm_hppa.c Thu Jun 24 20:46:11 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_hppa.c,v 1.4 2010/06/24 20:42:24 skrll Exp $ */ +/* $NetBSD: kvm_hppa.c,v 1.5 2010/06/24 20:46:11 skrll Exp $ */ /*- * Copyright (c) 1989, 1992, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)kvm_hp300.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: kvm_hppa.c,v 1.4 2010/06/24 20:42:24 skrll Exp $"); +__RCSID("$NetBSD: kvm_hppa.c,v 1.5 2010/06/24 20:46:11 skrll Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -108,7 +108,7 @@ if (ISALIVE(kd)) { _kvm_err(kd, 0, "vatop called in live kernel!"); - return (0); + return 0; } _kvm_syserr(kd, 0, "could not read PTE");
CVS commit: src/lib/libkvm
Module Name:src Committed By: skrll Date: Thu Jun 24 20:42:24 UTC 2010 Modified Files: src/lib/libkvm: kvm_hppa.c Log Message: ANSIfy / KNF. To generate a diff of this commit: cvs rdiff -u -r1.3 -r1.4 src/lib/libkvm/kvm_hppa.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_hppa.c diff -u src/lib/libkvm/kvm_hppa.c:1.3 src/lib/libkvm/kvm_hppa.c:1.4 --- src/lib/libkvm/kvm_hppa.c:1.3 Tue Jan 15 13:57:42 2008 +++ src/lib/libkvm/kvm_hppa.c Thu Jun 24 20:42:24 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_hppa.c,v 1.3 2008/01/15 13:57:42 ad Exp $ */ +/* $NetBSD: kvm_hppa.c,v 1.4 2010/06/24 20:42:24 skrll Exp $ */ /*- * Copyright (c) 1989, 1992, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)kvm_hp300.c 8.1 (Berkeley) 6/4/93"; #else -__RCSID("$NetBSD: kvm_hppa.c,v 1.3 2008/01/15 13:57:42 ad Exp $"); +__RCSID("$NetBSD: kvm_hppa.c,v 1.4 2010/06/24 20:42:24 skrll Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -76,8 +76,7 @@ #endif void -_kvm_freevtop(kd) - kvm_t *kd; +_kvm_freevtop(kvm_t *kd) { /* Not actually used for anything right now, but safe. */ @@ -87,21 +86,17 @@ /*ARGSUSED*/ int -_kvm_initvtop(kd) - kvm_t *kd; +_kvm_initvtop(kvm_t *kd) { - return (0); + return 0; } /* * Translate a kernel virtual address to a physical address. */ int -_kvm_kvatop(kd, va, pa) - kvm_t *kd; - u_long va; - u_long *pa; +_kvm_kvatop(kvm_t *kd, u_long va, u_long *pa) { #if 0 cpu_kcore_hdr_t *cpu_kh; @@ -159,16 +154,14 @@ lose: #endif *pa = (u_long)~0L; - return (0); + return 0; } /* * Translate a physical address to a file-offset in the crash dump. */ off_t -_kvm_pa2off(kd, pa) - kvm_t *kd; - u_long pa; +_kvm_pa2off(kvm_t *kd, u_long pa) { #if 0 cpu_kcore_hdr_t *cpu_kh; @@ -189,7 +182,7 @@ off += ramsegs[i].size; } - return (kd->dump_off + off); + return kd->dump_off + off; #endif return 0; } @@ -200,13 +193,12 @@ * have to deal with these NOT being constants! (i.e. m68k) */ int -_kvm_mdopen(kd) - kvm_t *kd; +_kvm_mdopen(kvm_t *kd) { kd->usrstack = USRSTACK; kd->min_uva = VM_MIN_ADDRESS; kd->max_uva = VM_MAXUSER_ADDRESS; - return (0); + return 0; }
CVS commit: src/lib/libkvm
Module Name:src Committed By: joerg Date: Mon Mar 22 21:55:06 UTC 2010 Modified Files: src/lib/libkvm: kvm_open.3 Log Message: Use .In instead of .Ar Pa for headers. To generate a diff of this commit: cvs rdiff -u -r1.16 -r1.17 src/lib/libkvm/kvm_open.3 Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_open.3 diff -u src/lib/libkvm/kvm_open.3:1.16 src/lib/libkvm/kvm_open.3:1.17 --- src/lib/libkvm/kvm_open.3:1.16 Mon Sep 14 19:34:12 2009 +++ src/lib/libkvm/kvm_open.3 Mon Mar 22 21:55:06 2010 @@ -1,4 +1,4 @@ -.\" $NetBSD: kvm_open.3,v 1.16 2009/09/14 19:34:12 apb Exp $ +.\" $NetBSD: kvm_open.3,v 1.17 2010/03/22 21:55:06 joerg Exp $ .\" .\" Copyright (c) 1992, 1993 .\" The Regents of the University of California. All rights reserved. @@ -75,7 +75,7 @@ device indicated by .Dv _PATH_KSYMS in -.Aq Pa paths.h ; +.In paths.h ; if that fails, then they will use the file indicated by the .Xr sysctl 3 variable @@ -84,7 +84,7 @@ the default kernel path indicated by .Dv _PATH_UNIX in -.Aq Pa paths.h . +.In paths.h . .Pp .Fa corefile is the kernel memory device file. @@ -99,7 +99,7 @@ the default indicated by .Dv _PATH_MEM from -.Aq Pa paths.h +.In paths.h is used. .Pp .Fa swapfile @@ -108,7 +108,7 @@ .Dv NULL , .Dv _PATH_DRUM from -.Aq Pa paths.h +.In paths.h is used. .Pp The @@ -199,7 +199,7 @@ .Fa errbuf argument. This buffer should be _POSIX2_LINE_MAX characters large (from -.Aq Pa limits.h ) . +.In limits.h ) . .Sh RETURN VALUES The .Fn kvm_open
CVS commit: src/lib/libkvm
Module Name:src Committed By: apb Date: Mon Sep 14 19:34:13 UTC 2009 Modified Files: src/lib/libkvm: kvm_open.3 Log Message: Make the documentation match reality. If no explicit kernel name is provided, kvm_open() and kvm_openfiles() will try _PATH_KSYMS first, then either the path from sysctl machdep.booted_kernel (if that's available) or _PATH_UNIX (if the sysctl is not available). To generate a diff of this commit: cvs rdiff -u -r1.15 -r1.16 src/lib/libkvm/kvm_open.3 Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_open.3 diff -u src/lib/libkvm/kvm_open.3:1.15 src/lib/libkvm/kvm_open.3:1.16 --- src/lib/libkvm/kvm_open.3:1.15 Tue Mar 10 23:49:07 2009 +++ src/lib/libkvm/kvm_open.3 Mon Sep 14 19:34:12 2009 @@ -1,4 +1,4 @@ -.\" $NetBSD: kvm_open.3,v 1.15 2009/03/10 23:49:07 joerg Exp $ +.\" $NetBSD: kvm_open.3,v 1.16 2009/09/14 19:34:12 apb Exp $ .\" .\" Copyright (c) 1992, 1993 .\" The Regents of the University of California. All rights reserved. @@ -33,7 +33,7 @@ .\" .\" @(#)kvm_open.3 8.3 (Berkeley) 4/19/94 .\" -.Dd April 19, 1994 +.Dd September 14, 2009 .Dt KVM_OPEN 3 .Os .Sh NAME @@ -69,8 +69,19 @@ This file must contain a symbol table. If this argument is .Dv NULL , -the currently running system is assumed, -which is indicated by +the currently running system is assumed; in this case, the functions will +attempt to use the +.Xr ksyms 4 +device indicated by +.Dv _PATH_KSYMS +in +.Aq Pa paths.h ; +if that fails, then they will use the file indicated by the +.Xr sysctl 3 +variable +.Va machdep.booted_kernel , +or (if the sysctl information is not available) +the default kernel path indicated by .Dv _PATH_UNIX in .Aq Pa paths.h .
CVS commit: src/lib/libkvm
Module Name:src Committed By: apb Date: Mon Sep 14 19:29:20 UTC 2009 Modified Files: src/lib/libkvm: kvm.c Log Message: Move the code that tries to open _PATH_KSYMS first into a common path, so that it is used both for the /dev/mem case and the core dump case. Output from savecore(8) before: savecore - - - (null): kvm_openfiles: /netbsd: No such file or directory and after: savecore - - - no core dump To generate a diff of this commit: cvs rdiff -u -r1.93 -r1.94 src/lib/libkvm/kvm.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm.c diff -u src/lib/libkvm/kvm.c:1.93 src/lib/libkvm/kvm.c:1.94 --- src/lib/libkvm/kvm.c:1.93 Thu Aug 20 11:18:55 2009 +++ src/lib/libkvm/kvm.c Mon Sep 14 19:29:20 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm.c,v 1.93 2009/08/20 11:18:55 he Exp $ */ +/* $NetBSD: kvm.c,v 1.94 2009/09/14 19:29:20 apb Exp $ */ /*- * Copyright (c) 1989, 1992, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)kvm.c 8.2 (Berkeley) 2/13/94"; #else -__RCSID("$NetBSD: kvm.c,v 1.93 2009/08/20 11:18:55 he Exp $"); +__RCSID("$NetBSD: kvm.c,v 1.94 2009/09/14 19:29:20 apb Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -324,6 +324,29 @@ if (sf == 0) sf = _PATH_DRUM; + /* + * Open the kernel namelist. If /dev/ksyms doesn't + * exist, open the current kernel. + */ + if (ufgiven == 0) + kd->nlfd = open_cloexec(_PATH_KSYMS, O_RDONLY, 0); + if (kd->nlfd < 0) { + if ((kd->nlfd = open_cloexec(uf, O_RDONLY, 0)) < 0) { + _kvm_syserr(kd, kd->program, "%s", uf); + goto failed; + } + } else { + /* + * We're here because /dev/ksyms was opened + * successfully. However, we don't want to keep it + * open, so we close it now. Later, we will open + * it again, since it will be the only case where + * kd->nlfd is negative. + */ + close(kd->nlfd); + kd->nlfd = -1; + } + if ((kd->pmfd = open_cloexec(mf, flag, 0)) < 0) { _kvm_syserr(kd, kd->program, "%s", mf); goto failed; @@ -350,41 +373,12 @@ } /* swap is not configured? not fatal */ } - /* - * Open the kernel namelist. If /dev/ksyms doesn't - * exist, open the current kernel. - */ - if (ufgiven == 0) - kd->nlfd = open_cloexec(_PATH_KSYMS, O_RDONLY, 0); - if (kd->nlfd < 0) { - if ((kd->nlfd = open_cloexec(uf, O_RDONLY, 0)) < 0) { -_kvm_syserr(kd, kd->program, "%s", uf); -goto failed; - } - } else { - /* - * We're here because /dev/ksyms was opened - * successfully. However, we don't want to keep it - * open, so we close it now. Later, we will open - * it again, since it will be the only case where - * kd->nlfd is negative. - */ - close(kd->nlfd); - kd->nlfd = -1; - } } else { kd->fdalign = DEV_BSIZE; /* XXX */ /* * This is a crash dump. - * Initialize the virtual address translation machinery, - * but first setup the namelist fd. - */ - if ((kd->nlfd = open_cloexec(uf, O_RDONLY, 0)) < 0) { - _kvm_syserr(kd, kd->program, "%s", uf); - goto failed; - } - - /* + * Initialize the virtual address translation machinery. + * * If there is no valid core header, fail silently here. * The address translations however will fail without * header. Things can be made to run by calling
CVS commit: src/lib/libkvm
Module Name:src Committed By: he Date: Thu Aug 20 11:18:55 UTC 2009 Modified Files: src/lib/libkvm: kvm.c Log Message: Anoter instance of -> . To generate a diff of this commit: cvs rdiff -u -r1.92 -r1.93 src/lib/libkvm/kvm.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm.c diff -u src/lib/libkvm/kvm.c:1.92 src/lib/libkvm/kvm.c:1.93 --- src/lib/libkvm/kvm.c:1.92 Tue Jan 15 14:16:30 2008 +++ src/lib/libkvm/kvm.c Thu Aug 20 11:18:55 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm.c,v 1.92 2008/01/15 14:16:30 ad Exp $ */ +/* $NetBSD: kvm.c,v 1.93 2009/08/20 11:18:55 he Exp $ */ /*- * Copyright (c) 1989, 1992, 1993 @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)kvm.c 8.2 (Berkeley) 2/13/94"; #else -__RCSID("$NetBSD: kvm.c,v 1.92 2008/01/15 14:16:30 ad Exp $"); +__RCSID("$NetBSD: kvm.c,v 1.93 2009/08/20 11:18:55 he Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -51,7 +51,7 @@ #include #include -#include +#include #include #include
CVS commit: src/lib/libkvm
Module Name:src Committed By: yamt Date: Sat May 16 11:56:47 UTC 2009 Modified Files: src/lib/libkvm: kvm_proc.c Log Message: kvm_getprocs actually works with KVM_NO_FILES. To generate a diff of this commit: cvs rdiff -u -r1.82 -r1.83 src/lib/libkvm/kvm_proc.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files. Modified files: Index: src/lib/libkvm/kvm_proc.c diff -u src/lib/libkvm/kvm_proc.c:1.82 src/lib/libkvm/kvm_proc.c:1.83 --- src/lib/libkvm/kvm_proc.c:1.82 Sun Mar 29 01:02:49 2009 +++ src/lib/libkvm/kvm_proc.c Sat May 16 11:56:47 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: kvm_proc.c,v 1.82 2009/03/29 01:02:49 mrg Exp $ */ +/* $NetBSD: kvm_proc.c,v 1.83 2009/05/16 11:56:47 yamt Exp $ */ /*- * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ #if 0 static char sccsid[] = "@(#)kvm_proc.c 8.3 (Berkeley) 9/23/93"; #else -__RCSID("$NetBSD: kvm_proc.c,v 1.82 2009/03/29 01:02:49 mrg Exp $"); +__RCSID("$NetBSD: kvm_proc.c,v 1.83 2009/05/16 11:56:47 yamt Exp $"); #endif #endif /* LIBC_SCCS and not lint */ @@ -860,7 +860,7 @@ size_t size; int mib[4], st, nprocs; - if (ISKMEM(kd)) { + if (ISALIVE(kd)) { size = 0; mib[0] = CTL_KERN; mib[1] = KERN_PROC; @@ -884,10 +884,6 @@ return (NULL); } nprocs = (int) (size / sizeof(struct kinfo_proc)); - } else if (ISSYSCTL(kd)) { - _kvm_err(kd, kd->program, "kvm_open called with KVM_NO_FILES, " - "can't use kvm_getprocs"); - return (NULL); } else { struct nlist nl[4], *p;