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