Annotation of src/lib/libkvm/kvm_vax.c, Revision 1.16
1.16 ! agc 1: /* $NetBSD: kvm_vax.c,v 1.15 2003/05/16 10:24:56 wiz 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/user.h>
45: #include <sys/proc.h>
46: #include <sys/stat.h>
47: #include <unistd.h>
48: #include <nlist.h>
1.6 ragge 49: #include <stdlib.h>
1.1 ragge 50: #include <kvm.h>
51:
1.10 mrg 52: #include <uvm/uvm_extern.h>
1.1 ragge 53:
1.13 chuck 54: #include <machine/vmparam.h>
55:
1.1 ragge 56: #include <limits.h>
57: #include <db.h>
58:
59: #include "kvm_private.h"
1.13 chuck 60:
1.1 ragge 61:
62: struct vmstate {
63: u_long end;
64: };
65:
66: void
67: _kvm_freevtop(kd)
68: kvm_t *kd;
69: {
70: if (kd->vmst != 0)
71: free(kd->vmst);
72: }
73:
74: int
75: _kvm_initvtop(kd)
76: kvm_t *kd;
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
112: _kvm_kvatop(kd, va, pa)
113: kvm_t *kd;
114: u_long va;
115: u_long *pa;
116: {
1.12 matt 117: u_long end;
1.1 ragge 118:
1.12 matt 119: if (va < (u_long) KERNBASE) {
120: _kvm_err(kd, 0, "invalid address (%lx<%lx)", va, (u_long) KERNBASE);
1.1 ragge 121: return (0);
122: }
123:
124: end = kd->vmst->end;
125: if (va >= end) {
1.12 matt 126: _kvm_err(kd, 0, "invalid address (%lx>=%lx)", va, end);
1.1 ragge 127: return (0);
128: }
129:
1.12 matt 130: *pa = (va - (u_long) KERNBASE);
1.1 ragge 131: return (end - va);
132: }
1.4 ragge 133:
1.8 simonb 134: /*
1.15 wiz 135: * Translate a physical address to a file-offset in the crash dump.
136: * XXX - crash dump doesn't work anyway.
1.4 ragge 137: */
138: off_t
139: _kvm_pa2off(kd, pa)
140: kvm_t *kd;
1.8 simonb 141: u_long pa;
1.4 ragge 142: {
143: return(kd->dump_off + pa);
144: }
145:
1.5 gwr 146:
147: /*
148: * Machine-dependent initialization for ALL open kvm descriptors,
149: * not just those for a kernel crash dump. Some architectures
150: * have to deal with these NOT being constants! (i.e. m68k)
151: */
152: int
153: _kvm_mdopen(kd)
154: kvm_t *kd;
155: {
156:
157: kd->usrstack = USRSTACK;
158: kd->min_uva = VM_MIN_ADDRESS;
159: kd->max_uva = VM_MAXUSER_ADDRESS;
160:
161: return (0);
162: }
CVSweb <webmaster@jp.NetBSD.org>