kvm_private.h revision 1.14 1 1.14 agc /* $NetBSD: kvm_private.h,v 1.14 2003/08/07 16:44:39 agc Exp $ */
2 1.6 thorpej
3 1.1 cgd /*-
4 1.1 cgd * Copyright (c) 1992, 1993
5 1.1 cgd * The Regents of the University of California. All rights reserved.
6 1.1 cgd *
7 1.1 cgd * This code is derived from software developed by the Computer Systems
8 1.1 cgd * Engineering group at Lawrence Berkeley Laboratory under DARPA contract
9 1.1 cgd * BG 91-66 and contributed to Berkeley.
10 1.1 cgd *
11 1.1 cgd * Redistribution and use in source and binary forms, with or without
12 1.1 cgd * modification, are permitted provided that the following conditions
13 1.1 cgd * are met:
14 1.1 cgd * 1. Redistributions of source code must retain the above copyright
15 1.1 cgd * notice, this list of conditions and the following disclaimer.
16 1.1 cgd * 2. Redistributions in binary form must reproduce the above copyright
17 1.1 cgd * notice, this list of conditions and the following disclaimer in the
18 1.1 cgd * documentation and/or other materials provided with the distribution.
19 1.14 agc * 3. Neither the name of the University nor the names of its contributors
20 1.1 cgd * may be used to endorse or promote products derived from this software
21 1.1 cgd * without specific prior written permission.
22 1.1 cgd *
23 1.1 cgd * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24 1.1 cgd * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 1.1 cgd * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 1.1 cgd * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27 1.1 cgd * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 1.1 cgd * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 1.1 cgd * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 1.1 cgd * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 1.1 cgd * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 1.1 cgd * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 1.1 cgd * SUCH DAMAGE.
34 1.1 cgd *
35 1.1 cgd * @(#)kvm_private.h 8.1 (Berkeley) 6/4/93
36 1.1 cgd */
37 1.1 cgd
38 1.1 cgd struct __kvm {
39 1.1 cgd /*
40 1.1 cgd * a string to be prepended to error messages
41 1.1 cgd * provided for compatibility with sun's interface
42 1.1 cgd * if this value is null, errors are saved in errbuf[]
43 1.1 cgd */
44 1.1 cgd const char *program;
45 1.1 cgd char *errp; /* XXX this can probably go away */
46 1.1 cgd char errbuf[_POSIX2_LINE_MAX];
47 1.13 wiz int pmfd; /* physical memory file (or crash dump) */
48 1.13 wiz int vmfd; /* virtual memory file (-1 if crash dump) */
49 1.1 cgd int swfd; /* swap file (e.g., /dev/drum) */
50 1.1 cgd int nlfd; /* namelist file (e.g., /vmunix) */
51 1.9 simonb char alive; /* live kernel? */
52 1.1 cgd struct kinfo_proc *procbase;
53 1.9 simonb struct kinfo_proc2 *procbase2;
54 1.11 thorpej struct kinfo_lwp *lwpbase;
55 1.8 gwr u_long usrstack; /* address of end of user stack */
56 1.8 gwr u_long min_uva, max_uva; /* min/max user virtual address */
57 1.2 mycroft int nbpg; /* page size */
58 1.2 mycroft char *swapspc; /* (dynamic) storage for swapped pages */
59 1.4 mycroft char *argspc, *argbuf; /* (dynamic) storage for argv strings */
60 1.1 cgd int arglen; /* length of the above */
61 1.1 cgd char **argv; /* (dynamic) storage for argv pointers */
62 1.1 cgd int argc; /* length of above (not actual # present) */
63 1.5 leo
64 1.5 leo /*
65 1.5 leo * Header structures for kernel dumps. Only gets filled in for
66 1.5 leo * dead kernels.
67 1.5 leo */
68 1.5 leo struct kcore_hdr *kcore_hdr;
69 1.7 gwr size_t cpu_dsize;
70 1.7 gwr void *cpu_data;
71 1.5 leo off_t dump_off; /* Where the actual dump starts */
72 1.5 leo
73 1.1 cgd /*
74 1.1 cgd * Kernel virtual address translation state. This only gets filled
75 1.1 cgd * in for dead kernels; otherwise, the running kernel (i.e. kmem)
76 1.1 cgd * will do the translations for us. It could be big, so we
77 1.1 cgd * only allocate it if necessary.
78 1.1 cgd */
79 1.5 leo struct vmstate *vmst; /* XXX: should become obsoleted */
80 1.3 mycroft /*
81 1.3 mycroft * These kernel variables are used for looking up user addresses,
82 1.3 mycroft * and are cached for efficiency.
83 1.3 mycroft */
84 1.3 mycroft struct pglist *vm_page_buckets;
85 1.3 mycroft int vm_page_hash_mask;
86 1.1 cgd };
87 1.9 simonb
88 1.9 simonb /* Levels of aliveness */
89 1.9 simonb #define KVM_ALIVE_DEAD 0 /* dead, working from core file */
90 1.9 simonb #define KVM_ALIVE_FILES 1 /* alive, working from open kmem/drum */
91 1.9 simonb #define KVM_ALIVE_SYSCTL 2 /* alive, sysctl-type calls only */
92 1.9 simonb
93 1.9 simonb #define ISALIVE(kd) ((kd)->alive != KVM_ALIVE_DEAD)
94 1.9 simonb #define ISKMEM(kd) ((kd)->alive == KVM_ALIVE_FILES)
95 1.9 simonb #define ISSYSCTL(kd) ((kd)->alive == KVM_ALIVE_SYSCTL || ISKMEM(kd))
96 1.1 cgd
97 1.1 cgd /*
98 1.1 cgd * Functions used internally by kvm, but across kvm modules.
99 1.1 cgd */
100 1.10 sommerfe void _kvm_err __P((kvm_t *kd, const char *program, const char *fmt, ...))
101 1.10 sommerfe __attribute__((__format__(__printf__, 3, 4)));
102 1.5 leo int _kvm_dump_mkheader __P((kvm_t *kd_live, kvm_t *kd_dump));
103 1.1 cgd void _kvm_freeprocs __P((kvm_t *kd));
104 1.1 cgd void _kvm_freevtop __P((kvm_t *));
105 1.8 gwr int _kvm_mdopen __P((kvm_t *));
106 1.1 cgd int _kvm_initvtop __P((kvm_t *));
107 1.1 cgd int _kvm_kvatop __P((kvm_t *, u_long, u_long *));
108 1.1 cgd void *_kvm_malloc __P((kvm_t *kd, size_t));
109 1.5 leo off_t _kvm_pa2off __P((kvm_t *, u_long));
110 1.1 cgd void *_kvm_realloc __P((kvm_t *kd, void *, size_t));
111 1.1 cgd void _kvm_syserr
112 1.10 sommerfe __P((kvm_t *kd, const char *program, const char *fmt, ...))
113 1.10 sommerfe __attribute__((__format__(__printf__, 3, 4)));
114 1.10 sommerfe
115