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