1180734Simp/*- 2180734Simp * Copyright (C) 2006 Bruce M. Simpson. 3180734Simp * All rights reserved. 4180734Simp * 5180734Simp * Redistribution and use in source and binary forms, with or without 6180734Simp * modification, are permitted provided that the following conditions 7180734Simp * are met: 8180734Simp * 1. Redistributions of source code must retain the above copyright 9180734Simp * notice, this list of conditions and the following disclaimer. 10180734Simp * 2. Redistributions in binary form must reproduce the above copyright 11180734Simp * notice, this list of conditions and the following disclaimer in the 12180734Simp * documentation and/or other materials provided with the distribution. 13180734Simp * 14251475Semaste * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15251475Semaste * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16251475Semaste * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17251475Semaste * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18251475Semaste * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19251475Semaste * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20251475Semaste * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21251475Semaste * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22251475Semaste * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23251475Semaste * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24251475Semaste * SUCH DAMAGE. 25180734Simp */ 26180734Simp 27180734Simp/* 28180734Simp * MIPS machine dependent routines for kvm. 29180734Simp */ 30180734Simp 31180734Simp#include <sys/cdefs.h> 32180734Simp__FBSDID("$FreeBSD$"); 33180734Simp 34180734Simp#include <sys/param.h> 35180734Simp#include <sys/elf32.h> 36180734Simp#include <sys/mman.h> 37180734Simp 38180734Simp#include <vm/vm.h> 39180734Simp#include <vm/vm_param.h> 40180734Simp#include <vm/pmap.h> 41180734Simp 42180734Simp#include <machine/pmap.h> 43180734Simp 44180734Simp#include <db.h> 45180734Simp#include <limits.h> 46180734Simp#include <kvm.h> 47180734Simp#include <stdlib.h> 48214904Sgonzo#include <string.h> 49214904Sgonzo#include <unistd.h> 50180734Simp 51180734Simp#include "kvm_private.h" 52180734Simp 53214904Sgonzo/* minidump must be the first item! */ 54214904Sgonzostruct vmstate { 55214904Sgonzo int minidump; /* 1 = minidump mode */ 56214904Sgonzo void *mmapbase; 57214904Sgonzo size_t mmapsize; 58214904Sgonzo}; 59214904Sgonzo 60180734Simpvoid 61180734Simp_kvm_freevtop(kvm_t *kd) 62180734Simp{ 63214904Sgonzo if (kd->vmst != 0) { 64214904Sgonzo if (kd->vmst->minidump) 65214904Sgonzo return (_kvm_minidump_freevtop(kd)); 66214904Sgonzo if (kd->vmst->mmapbase != NULL) 67214904Sgonzo munmap(kd->vmst->mmapbase, kd->vmst->mmapsize); 68214904Sgonzo free(kd->vmst); 69214904Sgonzo kd->vmst = NULL; 70214904Sgonzo } 71180734Simp} 72180734Simp 73180734Simpint 74180734Simp_kvm_initvtop(kvm_t *kd) 75180734Simp{ 76214904Sgonzo char minihdr[8]; 77180734Simp 78214904Sgonzo if (!kd->rawdump) { 79214904Sgonzo if (pread(kd->pmfd, &minihdr, 8, 0) == 8) { 80214904Sgonzo if (memcmp(&minihdr, "minidump", 8) == 0) 81214904Sgonzo return (_kvm_minidump_initvtop(kd)); 82214904Sgonzo } else { 83214904Sgonzo _kvm_err(kd, kd->program, "cannot read header"); 84214904Sgonzo return (-1); 85214904Sgonzo } 86214904Sgonzo } 87214904Sgonzo 88214904Sgonzo _kvm_err(kd, 0, "_kvm_initvtop: Unsupported image type"); 89214904Sgonzo return (-1); 90180734Simp} 91180734Simp 92180734Simpint 93217744Suqs_kvm_kvatop(kvm_t *kd, u_long va, off_t *pa) 94180734Simp{ 95180734Simp 96214904Sgonzo if (kd->vmst->minidump) 97214904Sgonzo return _kvm_minidump_kvatop(kd, va, pa); 98214904Sgonzo 99214904Sgonzo 100214904Sgonzo _kvm_err(kd, 0, "_kvm_kvatop: Unsupported image type"); 101180734Simp return (0); 102180734Simp} 103180734Simp 104180734Simp/* 105180734Simp * Machine-dependent initialization for ALL open kvm descriptors, 106180734Simp * not just those for a kernel crash dump. Some architectures 107180734Simp * have to deal with these NOT being constants! (i.e. m68k) 108180734Simp */ 109217744Suqs#ifdef FBSD_NOT_YET 110180734Simpint 111214904Sgonzo_kvm_mdopen(kvm_t *kd __unused) 112180734Simp{ 113180734Simp 114180734Simp return (0); 115180734Simp} 116217744Suqs#endif 117