Annotation of src/lib/libkvm/kvm_vax.c, Revision 1.20
1.20 ! dsl 1: /* $NetBSD: kvm_vax.c,v 1.19 2014/01/27 21:00:01 matt Exp $ */
1.3 thorpej 2:
1.1 ragge 3: /*-
4: * Copyright (c) 1992, 1993
5: * The Regents of the University of California. All rights reserved.
6: *
7: * This code is derived from software developed by the Computer Systems
8: * Engineering group at Lawrence Berkeley Laboratory under DARPA contract
9: * BG 91-66 and contributed to Berkeley.
10: *
11: * Redistribution and use in source and binary forms, with or without
12: * modification, are permitted provided that the following conditions
13: * are met:
14: * 1. Redistributions of source code must retain the above copyright
15: * notice, this list of conditions and the following disclaimer.
16: * 2. Redistributions in binary form must reproduce the above copyright
17: * notice, this list of conditions and the following disclaimer in the
18: * documentation and/or other materials provided with the distribution.
1.16 agc 19: * 3. Neither the name of the University nor the names of its contributors
1.1 ragge 20: * may be used to endorse or promote products derived from this software
21: * without specific prior written permission.
22: *
23: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33: * SUCH DAMAGE.
34: */
35:
36: /*
37: * VAX machine dependent routines for kvm. Hopefully, the forthcoming
38: * vm code will one day obsolete this module. Furthermore, I hope it
39: * gets here soon, because this basically is an error stub! (sorry)
40: * This code may not work anyway.
41: */
42:
43: #include <sys/param.h>
44: #include <sys/proc.h>
45: #include <sys/stat.h>
1.18 jym 46: #include <sys/types.h>
47:
1.1 ragge 48: #include <unistd.h>
49: #include <nlist.h>
1.6 ragge 50: #include <stdlib.h>
1.1 ragge 51: #include <kvm.h>
52:
1.10 mrg 53: #include <uvm/uvm_extern.h>
1.1 ragge 54:
1.13 chuck 55: #include <machine/vmparam.h>
56:
1.1 ragge 57: #include <limits.h>
58: #include <db.h>
59:
60: #include "kvm_private.h"
1.13 chuck 61:
1.20 ! dsl 62: __RCSID("$NetBSD: kvm_vax.c,v 1.19 2014/01/27 21:00:01 matt Exp $");
1.1 ragge 63:
64: struct vmstate {
65: u_long end;
66: };
67:
68: void
1.17 jym 69: _kvm_freevtop(kvm_t *kd)
1.1 ragge 70: {
71: if (kd->vmst != 0)
72: free(kd->vmst);
73: }
74:
75: int
1.17 jym 76: _kvm_initvtop(kvm_t *kd)
1.1 ragge 77: {
1.7 perry 78: struct vmstate *vm;
1.1 ragge 79: struct stat st;
1.14 thorpej 80: struct nlist nl[2];
1.1 ragge 81:
82: vm = (struct vmstate *)_kvm_malloc(kd, sizeof(*vm));
83: if (vm == 0)
84: return (-1);
85:
86: kd->vmst = vm;
87:
88: if (fstat(kd->pmfd, &st) < 0)
89: return (-1);
90:
91: /* Get end of kernel address */
1.14 thorpej 92: nl[0].n_name = "_end";
93: nl[1].n_name = 0;
94: if (kvm_nlist(kd, nl) != 0) {
1.1 ragge 95: _kvm_err(kd, kd->program, "pmap_stod: no such symbol");
96: return (-1);
97: }
1.14 thorpej 98: vm->end = (u_long)nl[0].n_value;
1.1 ragge 99:
100: return (0);
101: }
102:
103: #define VA_OFF(va) (va & (NBPG - 1))
104:
105: /*
106: * Translate a kernel virtual address to a physical address using the
107: * mapping information in kd->vm. Returns the result in pa, and returns
1.8 simonb 108: * the number of bytes that are contiguously available from this
1.15 wiz 109: * physical address. This routine is used only for crash dumps.
1.1 ragge 110: */
111: int
1.18 jym 112: _kvm_kvatop(kvm_t *kd, vaddr_t va, paddr_t *pa)
1.1 ragge 113: {
1.12 matt 114: u_long end;
1.1 ragge 115:
1.12 matt 116: if (va < (u_long) KERNBASE) {
1.18 jym 117: _kvm_err(kd, 0, "invalid address (%#"PRIxVADDR"<%lx)", va,
118: (u_long)KERNBASE);
1.1 ragge 119: return (0);
120: }
121:
122: end = kd->vmst->end;
123: if (va >= end) {
1.18 jym 124: _kvm_err(kd, 0, "invalid address (%#"PRIxVADDR"<%lx)", va,
125: end);
1.1 ragge 126: return (0);
127: }
128:
1.12 matt 129: *pa = (va - (u_long) KERNBASE);
1.1 ragge 130: return (end - va);
131: }
1.4 ragge 132:
1.8 simonb 133: /*
1.15 wiz 134: * Translate a physical address to a file-offset in the crash dump.
135: * XXX - crash dump doesn't work anyway.
1.4 ragge 136: */
137: off_t
1.18 jym 138: _kvm_pa2off(kvm_t *kd, paddr_t pa)
1.4 ragge 139: {
140: return(kd->dump_off + pa);
141: }
142:
1.5 gwr 143:
144: /*
145: * Machine-dependent initialization for ALL open kvm descriptors,
146: * not just those for a kernel crash dump. Some architectures
147: * have to deal with these NOT being constants! (i.e. m68k)
148: */
149: int
1.17 jym 150: _kvm_mdopen(kvm_t *kd)
1.5 gwr 151: {
152:
153: kd->usrstack = USRSTACK;
154: kd->min_uva = VM_MIN_ADDRESS;
155: kd->max_uva = VM_MAXUSER_ADDRESS;
156:
157: return (0);
158: }
CVSweb <webmaster@jp.NetBSD.org>