1/*- 2 * Copyright (C) 2006 Bruce M. Simpson. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 */ 26 27/* 28 * MIPS machine dependent routines for kvm. 29 */ 30 31#include <sys/cdefs.h> 32__FBSDID("$FreeBSD: releng/10.2/lib/libkvm/kvm_mips.c 251475 2013-06-06 21:09:27Z emaste $"); 33 34#include <sys/param.h> 35#include <sys/elf32.h> 36#include <sys/mman.h> 37 38#include <vm/vm.h> 39#include <vm/vm_param.h> 40#include <vm/pmap.h> 41 42#include <machine/pmap.h> 43 44#include <db.h> 45#include <limits.h> 46#include <kvm.h> 47#include <stdlib.h> 48#include <string.h> 49#include <unistd.h> 50 51#include "kvm_private.h" 52 53/* minidump must be the first item! */ 54struct vmstate { 55 int minidump; /* 1 = minidump mode */ 56 void *mmapbase; 57 size_t mmapsize; 58}; 59 60void 61_kvm_freevtop(kvm_t *kd) 62{ 63 if (kd->vmst != 0) { 64 if (kd->vmst->minidump) 65 return (_kvm_minidump_freevtop(kd)); 66 if (kd->vmst->mmapbase != NULL) 67 munmap(kd->vmst->mmapbase, kd->vmst->mmapsize); 68 free(kd->vmst); 69 kd->vmst = NULL; 70 } 71} 72 73int 74_kvm_initvtop(kvm_t *kd) 75{ 76 char minihdr[8]; 77 78 if (!kd->rawdump) { 79 if (pread(kd->pmfd, &minihdr, 8, 0) == 8) { 80 if (memcmp(&minihdr, "minidump", 8) == 0) 81 return (_kvm_minidump_initvtop(kd)); 82 } else { 83 _kvm_err(kd, kd->program, "cannot read header"); 84 return (-1); 85 } 86 } 87 88 _kvm_err(kd, 0, "_kvm_initvtop: Unsupported image type"); 89 return (-1); 90} 91 92int 93_kvm_kvatop(kvm_t *kd, u_long va, off_t *pa) 94{ 95 96 if (kd->vmst->minidump) 97 return _kvm_minidump_kvatop(kd, va, pa); 98 99 100 _kvm_err(kd, 0, "_kvm_kvatop: Unsupported image type"); 101 return (0); 102} 103 104/* 105 * Machine-dependent initialization for ALL open kvm descriptors, 106 * not just those for a kernel crash dump. Some architectures 107 * have to deal with these NOT being constants! (i.e. m68k) 108 */ 109#ifdef FBSD_NOT_YET 110int 111_kvm_mdopen(kvm_t *kd __unused) 112{ 113 114 return (0); 115} 116#endif 117