Changeset View
Changeset View
Standalone View
Standalone View
head/lib/libkvm/kvm_aarch64.c
/*- | /*- | ||||
* Copyright (c) 2014 The FreeBSD Foundation | * Copyright (C) 2006 Bruce M. Simpson. | ||||
* Copyright (c) 2015 The FreeBSD Foundation | |||||
* All rights reserved. | * All rights reserved. | ||||
* | * | ||||
* This software was developed by Andrew Turner under | * This software was developed by Andrew Turner under | ||||
* sponsorship from the FreeBSD Foundation. | * sponsorship from the FreeBSD Foundation. | ||||
* | * | ||||
* Redistribution and use in source and binary forms, with or without | * Redistribution and use in source and binary forms, with or without | ||||
* modification, are permitted provided that the following conditions | * modification, are permitted provided that the following conditions | ||||
* are met: | * are met: | ||||
Show All 11 Lines | |||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS | ||||
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) | ||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | ||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | ||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | ||||
* SUCH DAMAGE. | * SUCH DAMAGE. | ||||
*/ | */ | ||||
/* | |||||
* arm64 (AArch64) machine dependent routines for kvm. | |||||
*/ | |||||
#include <sys/cdefs.h> | #include <sys/cdefs.h> | ||||
__FBSDID("$FreeBSD$"); | __FBSDID("$FreeBSD$"); | ||||
#include <sys/param.h> | #include <sys/param.h> | ||||
#include <sys/mman.h> | |||||
#include <vm/vm.h> | |||||
#include <vm/vm_param.h> | |||||
#include <vm/pmap.h> | |||||
#include <machine/pmap.h> | |||||
#include <limits.h> | #include <limits.h> | ||||
#include <kvm.h> | #include <kvm.h> | ||||
#include <stdio.h> | |||||
#include <stdlib.h> | #include <stdlib.h> | ||||
#include <string.h> | |||||
#include <unistd.h> | |||||
#include "kvm_private.h" | #include "kvm_private.h" | ||||
/* minidump must be the first item! */ | |||||
struct vmstate { | |||||
int minidump; /* 1 = minidump mode */ | |||||
void *mmapbase; | |||||
size_t mmapsize; | |||||
}; | |||||
void | void | ||||
_kvm_freevtop(kvm_t *kd) | _kvm_freevtop(kvm_t *kd) | ||||
{ | { | ||||
printf("_kvm_freevtop\n"); | if (kd->vmst != 0) { | ||||
abort(); | if (kd->vmst->minidump) | ||||
return (_kvm_minidump_freevtop(kd)); | |||||
if (kd->vmst->mmapbase != NULL) | |||||
munmap(kd->vmst->mmapbase, kd->vmst->mmapsize); | |||||
free(kd->vmst); | |||||
kd->vmst = NULL; | |||||
} | } | ||||
} | |||||
int | int | ||||
_kvm_initvtop(kvm_t *kd) | _kvm_initvtop(kvm_t *kd) | ||||
{ | { | ||||
char minihdr[8]; | |||||
printf("_kvm_initvtop\n"); | if (!kd->rawdump) { | ||||
abort(); | if (pread(kd->pmfd, &minihdr, 8, 0) == 8) { | ||||
if (memcmp(&minihdr, "minidump", 8) == 0) | |||||
return (_kvm_minidump_initvtop(kd)); | |||||
} else { | |||||
_kvm_err(kd, kd->program, "cannot read header"); | |||||
return (-1); | |||||
} | } | ||||
} | |||||
_kvm_err(kd, 0, "_kvm_initvtop: Unsupported image type"); | |||||
return (-1); | |||||
} | |||||
int | int | ||||
_kvm_kvatop(kvm_t *kd, u_long va, off_t *pa) | _kvm_kvatop(kvm_t *kd, u_long va, off_t *pa) | ||||
{ | { | ||||
printf("_kvm_kvatop\n"); | if (kd->vmst->minidump) | ||||
abort(); | return _kvm_minidump_kvatop(kd, va, pa); | ||||
_kvm_err(kd, 0, "_kvm_kvatop: Unsupported image type"); | |||||
return (0); | |||||
} | } |