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