xref: /minix3/lib/libkvm/kvm_open.3 (revision 9da227510d14c35cccbd92c6a9e316b4079c4911)
1*9da22751SDavid van Moolenbroek.\"	$NetBSD: kvm_open.3,v 1.18 2011/09/12 21:11:32 christos Exp $
2*9da22751SDavid van Moolenbroek.\"
3*9da22751SDavid van Moolenbroek.\" Copyright (c) 1992, 1993
4*9da22751SDavid van Moolenbroek.\"	The Regents of the University of California.  All rights reserved.
5*9da22751SDavid van Moolenbroek.\"
6*9da22751SDavid van Moolenbroek.\" This code is derived from software developed by the Computer Systems
7*9da22751SDavid van Moolenbroek.\" Engineering group at Lawrence Berkeley Laboratory under DARPA contract
8*9da22751SDavid van Moolenbroek.\" BG 91-66 and contributed to Berkeley.
9*9da22751SDavid van Moolenbroek.\"
10*9da22751SDavid van Moolenbroek.\" Redistribution and use in source and binary forms, with or without
11*9da22751SDavid van Moolenbroek.\" modification, are permitted provided that the following conditions
12*9da22751SDavid van Moolenbroek.\" are met:
13*9da22751SDavid van Moolenbroek.\" 1. Redistributions of source code must retain the above copyright
14*9da22751SDavid van Moolenbroek.\"    notice, this list of conditions and the following disclaimer.
15*9da22751SDavid van Moolenbroek.\" 2. Redistributions in binary form must reproduce the above copyright
16*9da22751SDavid van Moolenbroek.\"    notice, this list of conditions and the following disclaimer in the
17*9da22751SDavid van Moolenbroek.\"    documentation and/or other materials provided with the distribution.
18*9da22751SDavid van Moolenbroek.\" 3. Neither the name of the University nor the names of its contributors
19*9da22751SDavid van Moolenbroek.\"    may be used to endorse or promote products derived from this software
20*9da22751SDavid van Moolenbroek.\"    without specific prior written permission.
21*9da22751SDavid van Moolenbroek.\"
22*9da22751SDavid van Moolenbroek.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23*9da22751SDavid van Moolenbroek.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24*9da22751SDavid van Moolenbroek.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25*9da22751SDavid van Moolenbroek.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26*9da22751SDavid van Moolenbroek.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27*9da22751SDavid van Moolenbroek.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28*9da22751SDavid van Moolenbroek.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29*9da22751SDavid van Moolenbroek.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30*9da22751SDavid van Moolenbroek.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31*9da22751SDavid van Moolenbroek.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32*9da22751SDavid van Moolenbroek.\" SUCH DAMAGE.
33*9da22751SDavid van Moolenbroek.\"
34*9da22751SDavid van Moolenbroek.\"     @(#)kvm_open.3	8.3 (Berkeley) 4/19/94
35*9da22751SDavid van Moolenbroek.\"
36*9da22751SDavid van Moolenbroek.Dd September 14, 2011
37*9da22751SDavid van Moolenbroek.Dt KVM_OPEN 3
38*9da22751SDavid van Moolenbroek.Os
39*9da22751SDavid van Moolenbroek.Sh NAME
40*9da22751SDavid van Moolenbroek.Nm kvm_open ,
41*9da22751SDavid van Moolenbroek.Nm kvm_openfiles ,
42*9da22751SDavid van Moolenbroek.Nm kvm_close
43*9da22751SDavid van Moolenbroek.Nd initialize kernel virtual memory access
44*9da22751SDavid van Moolenbroek.Sh LIBRARY
45*9da22751SDavid van Moolenbroek.Lb libkvm
46*9da22751SDavid van Moolenbroek.Sh SYNOPSIS
47*9da22751SDavid van Moolenbroek.In fcntl.h
48*9da22751SDavid van Moolenbroek.In kvm.h
49*9da22751SDavid van Moolenbroek.Ft kvm_t *
50*9da22751SDavid van Moolenbroek.Fn kvm_open "const char *execfile" "const char *corefile" "char *swapfile" "int flags" "const char *errstr"
51*9da22751SDavid van Moolenbroek.Ft kvm_t *
52*9da22751SDavid van Moolenbroek.Fn kvm_openfiles "const char *execfile" "const char *corefile" "char *swapfile" "int flags" "char *errbuf"
53*9da22751SDavid van Moolenbroek.Ft int
54*9da22751SDavid van Moolenbroek.Fn kvm_close "kvm_t *kd"
55*9da22751SDavid van Moolenbroek.Sh DESCRIPTION
56*9da22751SDavid van MoolenbroekThe functions
57*9da22751SDavid van Moolenbroek.Fn kvm_open
58*9da22751SDavid van Moolenbroekand
59*9da22751SDavid van Moolenbroek.Fn kvm_openfiles
60*9da22751SDavid van Moolenbroekreturn a descriptor used to access kernel virtual memory
61*9da22751SDavid van Moolenbroekvia the
62*9da22751SDavid van Moolenbroek.Xr kvm 3
63*9da22751SDavid van Moolenbroeklibrary routines.
64*9da22751SDavid van MoolenbroekBoth active kernels and crash dumps are accessible
65*9da22751SDavid van Moolenbroekthrough this interface.
66*9da22751SDavid van Moolenbroek.Pp
67*9da22751SDavid van Moolenbroek.Fa execfile
68*9da22751SDavid van Moolenbroekis the executable image of the kernel being examined.
69*9da22751SDavid van MoolenbroekThis file must contain a symbol table.
70*9da22751SDavid van MoolenbroekIf this argument is
71*9da22751SDavid van Moolenbroek.Dv NULL ,
72*9da22751SDavid van Moolenbroekthe currently running system is assumed; in this case, the functions will
73*9da22751SDavid van Moolenbroekattempt to use the
74*9da22751SDavid van Moolenbroek.Xr ksyms 4
75*9da22751SDavid van Moolenbroekdevice indicated by
76*9da22751SDavid van Moolenbroek.Dv _PATH_KSYMS
77*9da22751SDavid van Moolenbroekin
78*9da22751SDavid van Moolenbroek.In paths.h ;
79*9da22751SDavid van Moolenbroekif that fails, then they will use the file indicated by the
80*9da22751SDavid van Moolenbroek.Xr sysctl 3
81*9da22751SDavid van Moolenbroekvariable
82*9da22751SDavid van Moolenbroek.Va machdep.booted_kernel ,
83*9da22751SDavid van Moolenbroekor (if the sysctl information is not available)
84*9da22751SDavid van Moolenbroekthe default kernel path indicated by
85*9da22751SDavid van Moolenbroek.Dv _PATH_UNIX
86*9da22751SDavid van Moolenbroekin
87*9da22751SDavid van Moolenbroek.In paths.h .
88*9da22751SDavid van Moolenbroek.Pp
89*9da22751SDavid van Moolenbroek.Fa corefile
90*9da22751SDavid van Moolenbroekis the kernel memory device file.
91*9da22751SDavid van MoolenbroekIt can be either
92*9da22751SDavid van Moolenbroek.Pa /dev/mem
93*9da22751SDavid van Moolenbroekor a crash dump core generated by
94*9da22751SDavid van Moolenbroek.Xr savecore 8 .
95*9da22751SDavid van MoolenbroekIf
96*9da22751SDavid van Moolenbroek.Fa corefile
97*9da22751SDavid van Moolenbroekis
98*9da22751SDavid van Moolenbroek.Dv NULL ,
99*9da22751SDavid van Moolenbroekthe default indicated by
100*9da22751SDavid van Moolenbroek.Dv _PATH_MEM
101*9da22751SDavid van Moolenbroekfrom
102*9da22751SDavid van Moolenbroek.In paths.h
103*9da22751SDavid van Moolenbroekis used.
104*9da22751SDavid van Moolenbroek.Pp
105*9da22751SDavid van Moolenbroek.Fa swapfile
106*9da22751SDavid van Moolenbroekshould indicate the swap device.
107*9da22751SDavid van MoolenbroekIf
108*9da22751SDavid van Moolenbroek.Dv NULL ,
109*9da22751SDavid van Moolenbroek.Dv _PATH_DRUM
110*9da22751SDavid van Moolenbroekfrom
111*9da22751SDavid van Moolenbroek.In paths.h
112*9da22751SDavid van Moolenbroekis used.
113*9da22751SDavid van Moolenbroek.Pp
114*9da22751SDavid van MoolenbroekThe
115*9da22751SDavid van Moolenbroek.Fa flags
116*9da22751SDavid van Moolenbroekargument indicates read/write access as in
117*9da22751SDavid van Moolenbroek.Xr open 2
118*9da22751SDavid van Moolenbroekand applies only to the core file.
119*9da22751SDavid van MoolenbroekThe only permitted flags from
120*9da22751SDavid van Moolenbroek.Xr open 2
121*9da22751SDavid van Moolenbroekare
122*9da22751SDavid van Moolenbroek.Dv O_RDONLY ,
123*9da22751SDavid van Moolenbroek.Dv O_WRONLY ,
124*9da22751SDavid van Moolenbroekand
125*9da22751SDavid van Moolenbroek.Dv O_RDWR .
126*9da22751SDavid van Moolenbroek.Pp
127*9da22751SDavid van MoolenbroekAs a special case, a
128*9da22751SDavid van Moolenbroek.Fa flags
129*9da22751SDavid van Moolenbroekargument of
130*9da22751SDavid van Moolenbroek.Dv KVM_NO_FILES
131*9da22751SDavid van Moolenbroekwill initialize the
132*9da22751SDavid van Moolenbroek.Xr kvm 3
133*9da22751SDavid van Moolenbroeklibrary for use on active kernels only using
134*9da22751SDavid van Moolenbroek.Xr sysctl 3
135*9da22751SDavid van Moolenbroekfor retrieving kernel data and ignores the
136*9da22751SDavid van Moolenbroek.Fa execfile ,
137*9da22751SDavid van Moolenbroek.Fa corefile
138*9da22751SDavid van Moolenbroekand
139*9da22751SDavid van Moolenbroek.Fa swapfile
140*9da22751SDavid van Moolenbroekarguments.
141*9da22751SDavid van MoolenbroekOnly a small subset of the
142*9da22751SDavid van Moolenbroek.Xr kvm 3
143*9da22751SDavid van Moolenbroeklibrary functions are available using this method.
144*9da22751SDavid van MoolenbroekThese are currently
145*9da22751SDavid van Moolenbroek.Xr kvm_getproc2 3 ,
146*9da22751SDavid van Moolenbroek.Xr kvm_getargv2 3
147*9da22751SDavid van Moolenbroekand
148*9da22751SDavid van Moolenbroek.Xr kvm_getenvv2 3 .
149*9da22751SDavid van Moolenbroek.Pp
150*9da22751SDavid van MoolenbroekThere are two open routines which differ only with respect to
151*9da22751SDavid van Moolenbroekthe error mechanism.
152*9da22751SDavid van MoolenbroekOne provides backward compatibility with the SunOS kvm library, while the
153*9da22751SDavid van Moolenbroekother provides an improved error reporting framework.
154*9da22751SDavid van Moolenbroek.Pp
155*9da22751SDavid van MoolenbroekThe
156*9da22751SDavid van Moolenbroek.Fn kvm_open
157*9da22751SDavid van Moolenbroekfunction is the Sun kvm compatible open call.
158*9da22751SDavid van MoolenbroekHere, the
159*9da22751SDavid van Moolenbroek.Fa errstr
160*9da22751SDavid van Moolenbroekargument indicates how errors should be handled.
161*9da22751SDavid van MoolenbroekIf it is
162*9da22751SDavid van Moolenbroek.Dv NULL ,
163*9da22751SDavid van Moolenbroekno errors are reported and the application cannot know the
164*9da22751SDavid van Moolenbroekspecific nature of the failed kvm call.
165*9da22751SDavid van MoolenbroekIf it is not
166*9da22751SDavid van Moolenbroek.Dv NULL ,
167*9da22751SDavid van Moolenbroekerrors are printed to stderr with
168*9da22751SDavid van Moolenbroek.Fa errstr
169*9da22751SDavid van Moolenbroekprepended to the message, as in
170*9da22751SDavid van Moolenbroek.Xr perror 3 .
171*9da22751SDavid van MoolenbroekNormally, the name of the program is used here.
172*9da22751SDavid van MoolenbroekThe string is assumed to persist at least until the corresponding
173*9da22751SDavid van Moolenbroek.Fn kvm_close
174*9da22751SDavid van Moolenbroekcall.
175*9da22751SDavid van Moolenbroek.Pp
176*9da22751SDavid van MoolenbroekThe
177*9da22751SDavid van Moolenbroek.Fn kvm_openfiles
178*9da22751SDavid van Moolenbroekfunction provides
179*9da22751SDavid van Moolenbroek.Bx
180*9da22751SDavid van Moolenbroekstyle error reporting.
181*9da22751SDavid van MoolenbroekHere, error messages are not printed out by the library.
182*9da22751SDavid van MoolenbroekInstead, the application obtains the error message
183*9da22751SDavid van Moolenbroekcorresponding to the most recent kvm library call using
184*9da22751SDavid van Moolenbroek.Fn kvm_geterr
185*9da22751SDavid van Moolenbroek(see
186*9da22751SDavid van Moolenbroek.Xr kvm_geterr 3 ) .
187*9da22751SDavid van MoolenbroekThe results are undefined if the most recent kvm call did not produce
188*9da22751SDavid van Moolenbroekan error.
189*9da22751SDavid van MoolenbroekSince
190*9da22751SDavid van Moolenbroek.Fn kvm_geterr
191*9da22751SDavid van Moolenbroekrequires a kvm descriptor, but the open routines return
192*9da22751SDavid van Moolenbroek.Dv NULL
193*9da22751SDavid van Moolenbroekon failure,
194*9da22751SDavid van Moolenbroek.Fn kvm_geterr
195*9da22751SDavid van Moolenbroekcannot be used to get the error message if open fails.
196*9da22751SDavid van MoolenbroekThus,
197*9da22751SDavid van Moolenbroek.Fn kvm_openfiles
198*9da22751SDavid van Moolenbroekwill place any error message in the
199*9da22751SDavid van Moolenbroek.Fa errbuf
200*9da22751SDavid van Moolenbroekargument.
201*9da22751SDavid van MoolenbroekThis buffer should be _POSIX2_LINE_MAX characters large (from
202*9da22751SDavid van Moolenbroek.In limits.h ) .
203*9da22751SDavid van Moolenbroek.Sh RETURN VALUES
204*9da22751SDavid van MoolenbroekThe
205*9da22751SDavid van Moolenbroek.Fn kvm_open
206*9da22751SDavid van Moolenbroekand
207*9da22751SDavid van Moolenbroek.Fn kvm_openfiles
208*9da22751SDavid van Moolenbroekfunctions both return a descriptor to be used
209*9da22751SDavid van Moolenbroekin all subsequent kvm library calls.
210*9da22751SDavid van MoolenbroekThe library is fully re-entrant.
211*9da22751SDavid van MoolenbroekOn failure,
212*9da22751SDavid van Moolenbroek.Dv NULL
213*9da22751SDavid van Moolenbroekis returned, in which case
214*9da22751SDavid van Moolenbroek.Fn kvm_openfiles
215*9da22751SDavid van Moolenbroekwrites the error message into
216*9da22751SDavid van Moolenbroek.Fa errbuf .
217*9da22751SDavid van Moolenbroek.Pp
218*9da22751SDavid van MoolenbroekThe
219*9da22751SDavid van Moolenbroek.Fn kvm_close
220*9da22751SDavid van Moolenbroekfunction returns 0 on success and -1 on failure.
221*9da22751SDavid van Moolenbroek.Sh SEE ALSO
222*9da22751SDavid van Moolenbroek.Xr open 2 ,
223*9da22751SDavid van Moolenbroek.Xr kvm 3 ,
224*9da22751SDavid van Moolenbroek.Xr kvm_getargv 3 ,
225*9da22751SDavid van Moolenbroek.Xr kvm_getenvv 3 ,
226*9da22751SDavid van Moolenbroek.Xr kvm_geterr 3 ,
227*9da22751SDavid van Moolenbroek.Xr kvm_getkernelname 3 ,
228*9da22751SDavid van Moolenbroek.Xr kvm_getprocs 3 ,
229*9da22751SDavid van Moolenbroek.Xr kvm_nlist 3 ,
230*9da22751SDavid van Moolenbroek.Xr kvm_read 3 ,
231*9da22751SDavid van Moolenbroek.Xr kvm_write 3
232*9da22751SDavid van Moolenbroek.Sh BUGS
233*9da22751SDavid van MoolenbroekThere should not be two open calls.
234*9da22751SDavid van MoolenbroekThe ill-defined error semantics of the Sun library
235*9da22751SDavid van Moolenbroekand the desire to have a backward-compatible library for
236*9da22751SDavid van Moolenbroek.Bx
237*9da22751SDavid van Moolenbroekleft little choice.
238