socsvn commit: r246300 - in soc2012/syuu/bhyve-bios: etc/mtree lib/libbiosemul lib/libudis86 usr.sbin/bhyve
syuu at FreeBSD.org
syuu at FreeBSD.org
Sun Jan 6 14:16:58 UTC 2013
Author: syuu
Date: Sun Jan 6 14:13:53 2013
New Revision: 246300
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=246300
Log:
revert instruction level tracer
Deleted:
soc2012/syuu/bhyve-bios/lib/libudis86/
Modified:
soc2012/syuu/bhyve-bios/etc/mtree/BSD.include.dist
soc2012/syuu/bhyve-bios/lib/libbiosemul/biosemul.c
soc2012/syuu/bhyve-bios/lib/libbiosemul/biosemul.h
soc2012/syuu/bhyve-bios/lib/libbiosemul/callback.c
soc2012/syuu/bhyve-bios/lib/libbiosemul/cpu.c
soc2012/syuu/bhyve-bios/lib/libbiosemul/port.c
soc2012/syuu/bhyve-bios/lib/libbiosemul/register.h
soc2012/syuu/bhyve-bios/usr.sbin/bhyve/Makefile
soc2012/syuu/bhyve-bios/usr.sbin/bhyve/fbsdrun.c
Modified: soc2012/syuu/bhyve-bios/etc/mtree/BSD.include.dist
==============================================================================
--- soc2012/syuu/bhyve-bios/etc/mtree/BSD.include.dist Sun Jan 6 07:14:04 2013 (r246299)
+++ soc2012/syuu/bhyve-bios/etc/mtree/BSD.include.dist Sun Jan 6 14:13:53 2013 (r246300)
@@ -321,8 +321,6 @@
..
sys
..
- udis86
- ..
ufs
ffs
..
Modified: soc2012/syuu/bhyve-bios/lib/libbiosemul/biosemul.c
==============================================================================
--- soc2012/syuu/bhyve-bios/lib/libbiosemul/biosemul.c Sun Jan 6 07:14:04 2013 (r246299)
+++ soc2012/syuu/bhyve-bios/lib/libbiosemul/biosemul.c Sun Jan 6 14:13:53 2013 (r246300)
@@ -57,7 +57,6 @@
#endif
#include <machine/vmm.h>
#include <vmmapi.h>
-#include <assert.h>
#include "doscmd.h"
#include "tty.h"
@@ -121,10 +120,9 @@
#define HDISK_FILE "/home/syuu/test.img"
regcontext_t *saved_regcontext;
-int trace_mode;
/* lobotomise */
-void biosemul_init(struct vmctx *ctx, int vcpu, char *lomem, int trace)
+void biosemul_init(struct vmctx *ctx, int vcpu, char *lomem)
{
lomem_addr = lomem;
ivec = (u_int32_t *)lomem_addr;
@@ -157,18 +155,6 @@
#if 0
gettimeofday(&boot_time, 0);
#endif
-
- trace_mode = trace;
- if (trace_mode) {
- uint64_t rflags;
- int error;
-
- error = vm_get_register(ctx, 0, VM_REG_GUEST_RFLAGS, &rflags);
- assert(error == 0);
- rflags |= 0x100; /* Trap Flag */
- error = vm_set_register(ctx, 0, VM_REG_GUEST_RFLAGS, rflags);
- assert(error == 0);
- }
}
#if 0
@@ -849,9 +835,6 @@
if ((error = vm_get_register(ctx, vcpu, VM_REG_GUEST_RFLAGS, ®s->r.efl.r_rx)) != 0)
goto done;
-
- if ((error = vm_get_register(ctx, vcpu, VM_REG_GUEST_CR0, ®s->r.cr0.r_rx)) != 0)
- goto done;
done:
return (error);
}
@@ -862,106 +845,144 @@
int error = 0;
if ((orig->r.gs.r_rx != modified->r.gs.r_rx) &&
-// fprintf(stderr, "%s gs:%lx\n", __func__, modified->r.gs.r_rx) &&
+ fprintf(stderr, "%s gs:%lx\n", __func__, modified->r.gs.r_rx) &&
(error = vm_set_register(ctx, vcpu, VM_REG_GUEST_GS, modified->r.gs.r_rx)) != 0)
goto done;
if ((orig->r.fs.r_rx != modified->r.fs.r_rx) &&
-// fprintf(stderr, "%s fs:%lx\n", __func__, modified->r.fs.r_rx) &&
+ fprintf(stderr, "%s fs:%lx\n", __func__, modified->r.fs.r_rx) &&
(error = vm_set_register(ctx, vcpu, VM_REG_GUEST_FS, modified->r.fs.r_rx)) != 0)
goto done;
if ((orig->r.es.r_rx != modified->r.es.r_rx) &&
-// fprintf(stderr, "%s es:%lx\n", __func__, modified->r.es.r_rx) &&
+ fprintf(stderr, "%s es:%lx\n", __func__, modified->r.es.r_rx) &&
(error = vm_set_register(ctx, vcpu, VM_REG_GUEST_ES, modified->r.es.r_rx)) != 0)
goto done;
if ((orig->r.ds.r_rx != modified->r.ds.r_rx) &&
-// fprintf(stderr, "%s ds:%lx\n", __func__, modified->r.ds.r_rx) &&
+ fprintf(stderr, "%s ds:%lx\n", __func__, modified->r.ds.r_rx) &&
(error = vm_set_register(ctx, vcpu, VM_REG_GUEST_DS, modified->r.es.r_rx)) != 0)
goto done;
if ((orig->r.edi.r_rx != modified->r.edi.r_rx) &&
-// fprintf(stderr, "%s edi:%lx\n", __func__, modified->r.edi.r_rx) &&
+ fprintf(stderr, "%s edi:%lx\n", __func__, modified->r.edi.r_rx) &&
(error = vm_set_register(ctx, vcpu, VM_REG_GUEST_RDI, modified->r.edi.r_rx)) != 0)
goto done;
if ((orig->r.esi.r_rx != modified->r.esi.r_rx) &&
-// fprintf(stderr, "%s esi:%lx\n", __func__, modified->r.esi.r_rx) &&
+ fprintf(stderr, "%s esi:%lx\n", __func__, modified->r.esi.r_rx) &&
(error = vm_set_register(ctx, vcpu, VM_REG_GUEST_RSI, modified->r.esi.r_rx)) != 0)
goto done;
if ((orig->r.ebp.r_rx != modified->r.ebp.r_rx) &&
-// fprintf(stderr, "%s ebp:%lx\n", __func__, modified->r.ebp.r_rx) &&
+ fprintf(stderr, "%s ebp:%lx\n", __func__, modified->r.ebp.r_rx) &&
(error = vm_set_register(ctx, vcpu, VM_REG_GUEST_RBP, modified->r.ebp.r_rx)) != 0)
goto done;
if ((orig->r.ebx.r_rx != modified->r.ebx.r_rx) &&
-// fprintf(stderr, "%s ebx:%lx\n", __func__, modified->r.ebx.r_rx) &&
+ fprintf(stderr, "%s ebx:%lx\n", __func__, modified->r.ebx.r_rx) &&
(error = vm_set_register(ctx, vcpu, VM_REG_GUEST_RBX, modified->r.ebx.r_rx)) != 0)
goto done;
if ((orig->r.edx.r_rx != modified->r.edx.r_rx) &&
-// fprintf(stderr, "%s edx:%lx\n", __func__, modified->r.edx.r_rx) &&
+ fprintf(stderr, "%s edx:%lx\n", __func__, modified->r.edx.r_rx) &&
(error = vm_set_register(ctx, vcpu, VM_REG_GUEST_RDX, modified->r.edx.r_rx)) != 0)
goto done;
if ((orig->r.ecx.r_rx != modified->r.ecx.r_rx) &&
-// fprintf(stderr, "%s ecx:%lx\n", __func__, modified->r.ecx.r_rx) &&
+ fprintf(stderr, "%s ecx:%lx\n", __func__, modified->r.ecx.r_rx) &&
(error = vm_set_register(ctx, vcpu, VM_REG_GUEST_RCX, modified->r.ecx.r_rx)) != 0)
goto done;
if ((orig->r.eax.r_rx != modified->r.eax.r_rx) &&
-// fprintf(stderr, "%s eax:%lx\n", __func__, modified->r.eax.r_rx) &&
+ fprintf(stderr, "%s eax:%lx\n", __func__, modified->r.eax.r_rx) &&
(error = vm_set_register(ctx, vcpu, VM_REG_GUEST_RAX, modified->r.eax.r_rx)) != 0)
goto done;
if ((orig->r.esp.r_rx != modified->r.esp.r_rx) &&
-// fprintf(stderr, "%s esp:%lx\n", __func__, modified->r.esp.r_rx) &&
+ fprintf(stderr, "%s esp:%lx\n", __func__, modified->r.esp.r_rx) &&
(error = vm_set_register(ctx, vcpu, VM_REG_GUEST_RSP, modified->r.esp.r_rx)) != 0)
goto done;
if ((orig->r.ss.r_rx != modified->r.ss.r_rx) &&
-// fprintf(stderr, "%s ss:%lx\n", __func__, modified->r.ss.r_rx) &&
+ fprintf(stderr, "%s ss:%lx\n", __func__, modified->r.ss.r_rx) &&
(error = vm_set_register(ctx, vcpu, VM_REG_GUEST_SS, modified->r.ss.r_rx)) != 0)
goto done;
if ((orig->r.eip.r_rx != modified->r.eip.r_rx) &&
-// fprintf(stderr, "%s eip:%lx\n", __func__, modified->r.eip.r_rx) &&
+ fprintf(stderr, "%s eip:%lx\n", __func__, modified->r.eip.r_rx) &&
(error = vm_set_register(ctx, vcpu, VM_REG_GUEST_RIP, modified->r.eip.r_rx)) != 0)
goto done;
if ((orig->r.cs.r_rx != modified->r.cs.r_rx) &&
-// fprintf(stderr, "%s cs:%lx\n", __func__, modified->r.cs.r_rx) &&
+ fprintf(stderr, "%s cs:%lx\n", __func__, modified->r.cs.r_rx) &&
(error = vm_set_register(ctx, vcpu, VM_REG_GUEST_CS, modified->r.cs.r_rx)) != 0)
goto done;
if ((orig->r.efl.r_rx != modified->r.efl.r_rx) &&
-// fprintf(stderr, "%s eflags:%lx\n", __func__, modified->r.efl.r_rx) &&
+ fprintf(stderr, "%s eflags:%lx\n", __func__, modified->r.efl.r_rx) &&
(error = vm_set_register(ctx, vcpu, VM_REG_GUEST_RFLAGS, modified->r.efl.r_rx)) != 0)
goto done;
done:
-
+
return (error);
}
-extern u_int32_t vec01;
+extern void int13(regcontext_t *REGS);
+
int
-biosemul_call(struct vmctx *ctx, int vcpu)
+biosemul_call(struct vmctx *ctx, int vcpu, int intno)
{
int ret = 0;
regcontext_t orig, modified;
regcontext_t *REGS = &modified;
- callback_t func;
get_all_regs(ctx, vcpu, &orig);
+ {
+ u_int16_t *sp, eip, cs, efl;
+
+ sp = (uint16_t *)(lomem_addr + orig.r.esp.r_rx);
+ eip = *sp;
+ cs = *(--sp);
+ efl = *(--sp);
+ fprintf(stderr, "%s eip:%x cs:%x efl:%x\n",
+ __func__, eip, cs, efl);
+ }
modified = orig;
- func = find_callback(MAKEVEC(R_CS, R_IP));
+ fprintf(stderr, "%s orig RAX=%lx EAX=%x AX=%x AL=%x AH=%x\n",
+ __func__,
+ orig.r.eax.r_rx,
+ orig.r.eax.r_dw.r_ex,
+ orig.r.eax.r_w.r_x,
+ orig.r.eax.r_b.r_l,
+ orig.r.eax.r_b.r_h);
+ fprintf(stderr, "%s orig RBX=%lx EBX=%x BX=%x BL=%x BH=%x\n",
+ __func__,
+ orig.r.ebx.r_rx,
+ orig.r.ebx.r_dw.r_ex,
+ orig.r.ebx.r_w.r_x,
+ orig.r.ebx.r_b.r_l,
+ orig.r.ebx.r_b.r_h);
+ fprintf(stderr, "%s modified RAX=%lx EAX=%x AX=%x AL=%x AH=%x\n",
+ __func__,
+ modified.r.eax.r_rx,
+ modified.r.eax.r_dw.r_ex,
+ modified.r.eax.r_w.r_x,
+ modified.r.eax.r_b.r_l,
+ modified.r.eax.r_b.r_h);
+ fprintf(stderr, "%s modified RBX=%lx EBX=%x BX=%x BL=%x BH=%x\n",
+ __func__,
+ modified.r.ebx.r_rx,
+ modified.r.ebx.r_dw.r_ex,
+ modified.r.ebx.r_w.r_x,
+ modified.r.ebx.r_b.r_l,
+ modified.r.ebx.r_b.r_h);
+ callback_t func = find_callback(MAKEVEC(R_CS, R_IP));
+ fprintf(stderr, "%s R_CS:%x R_IP:%x MAKEVEC(R_CS, R_IP):%x func:%p\n",
+ __func__, R_CS, R_IP, MAKEVEC(R_CS, R_IP), func);
if (func)
func(&modified);
- if (trace_mode && MAKEVEC(R_CS, R_IP) != vec01)
- R_EFLAGS |= 0x100;
set_modified_regs(ctx, vcpu, &orig, &modified);
return (ret);
@@ -981,6 +1002,9 @@
modified = orig;
saved_regcontext = &modified;
+ fprintf(stderr, "%s in:%d port:%x bytes:%d eax:%x strict:%d\n",
+ __func__, in, port, bytes, *eax, strict);
+
if (in)
inb(&modified, port);
else
Modified: soc2012/syuu/bhyve-bios/lib/libbiosemul/biosemul.h
==============================================================================
--- soc2012/syuu/bhyve-bios/lib/libbiosemul/biosemul.h Sun Jan 6 07:14:04 2013 (r246299)
+++ soc2012/syuu/bhyve-bios/lib/libbiosemul/biosemul.h Sun Jan 6 14:13:53 2013 (r246300)
@@ -6,8 +6,8 @@
#include <machine/vmm.h>
#include <vmmapi.h>
-void biosemul_init(struct vmctx *ctx, int vcpu, char *lomem, int trace_mode);
-int biosemul_call(struct vmctx *ctx, int vcpu);
+void biosemul_init(struct vmctx *ctx, int vcpu, char *lomem);
+int biosemul_call(struct vmctx *ctx, int vcpu, int intno);
bool biosemul_inout_registered(int in, int port);
int biosemul_inout(struct vmctx *ctx, int vcpu, int in, int port, int bytes,
uint32_t *eax, int strict);
Modified: soc2012/syuu/bhyve-bios/lib/libbiosemul/callback.c
==============================================================================
--- soc2012/syuu/bhyve-bios/lib/libbiosemul/callback.c Sun Jan 6 07:14:04 2013 (r246299)
+++ soc2012/syuu/bhyve-bios/lib/libbiosemul/callback.c Sun Jan 6 14:13:53 2013 (r246300)
@@ -43,7 +43,6 @@
/*
** Find a handler for (vec)
*/
-extern u_int32_t vec01;
callback_t
find_callback(u_int32_t vec)
{
@@ -55,8 +54,7 @@
if (elm->vec == vec)
break;
if (elm) {
- if (vec != vec01)
- debug(D_TRAPS2, "callback %s\n", elm->name);
+ debug(D_TRAPS2, "callback %s\n", elm->name);
return (elm->func);
} else
return ((callback_t)0);
Modified: soc2012/syuu/bhyve-bios/lib/libbiosemul/cpu.c
==============================================================================
--- soc2012/syuu/bhyve-bios/lib/libbiosemul/cpu.c Sun Jan 6 07:14:04 2013 (r246299)
+++ soc2012/syuu/bhyve-bios/lib/libbiosemul/cpu.c Sun Jan 6 14:13:53 2013 (r246300)
@@ -27,12 +27,7 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD: projects/doscmd/cpu.c,v 1.8 2002/05/10 10:37:57 tg Exp $");
-#include <sys/types.h>
-#include <machine/vmm.h>
-#include <machine/specialreg.h>
-#include <vmmapi.h>
#include "doscmd.h"
-#include <udis86/udis86.h>
#include "video.h"
static u_int32_t decode_modrm(u_int8_t *, u_int16_t,
@@ -56,50 +51,10 @@
exit(1);
}
-extern char *lomem_addr;
-
void
-int01(regcontext_t *REGS)
+int01(regcontext_t *REGS __unused)
{
- ud_t ud_obj;
-
- ud_init(&ud_obj);
- ud_set_syntax(&ud_obj, UD_SYN_ATT);
- ud_set_vendor(&ud_obj, UD_VENDOR_INTEL);
-
- if (R_CR0 & CR0_PE) {
- u_int32_t *sp, eip, eflags;
-
- sp = (uint32_t *)(lomem_addr + R_ESP);
- eip = *sp;
- --sp; /* CS */
- --sp; /* EFLAGS */
- eflags = *sp;
- *sp |= 0x100;
- ud_set_mode(&ud_obj, 32);
- ud_set_pc(&ud_obj, eip);
- ud_set_input_buffer(&ud_obj, lomem_addr + eip, 16);
-
- fprintf(stderr, "[trace] 32bit eip:%x eflags:%x", eip, eflags);
- }else{
- u_int16_t *sp, eip, eflags;
-
- sp = (uint16_t *)(lomem_addr + R_ESP);
- eip = *sp;
- --sp; /* CS */
- --sp; /* EFLAGS */
- eflags = *sp;
- *sp |= 0x100;
- ud_set_mode(&ud_obj, 16);
- ud_set_pc(&ud_obj, eip);
- ud_set_input_buffer(&ud_obj, lomem_addr + eip, 16);
-
- fprintf(stderr, "[trace] 16bit eip:%x eflags:%x", eip, eflags);
- }
- ud_disassemble(&ud_obj);
- fprintf(stderr, " insn:%s", ud_insn_asm(&ud_obj));
- fprintf(stderr, " eax:%x ebx:%x ecx:%x edx:%x\n",
- R_EAX, R_EBX, R_ECX, R_EDX);
+ debug(D_ALWAYS, "INT 1 with no handler! (single-step/debug)\n");
}
void
@@ -114,7 +69,6 @@
debug(D_ALWAYS, "IRQ5 with no handler!\n");
}
-u_int32_t vec01;
void
cpu_init(void)
{
@@ -124,9 +78,9 @@
ivec[0x00] = vec;
register_callback(vec, int00, "int 00");
- vec01 = insert_hardint_trampoline();
- ivec[0x01] = vec01;
- register_callback(vec01, int01, "int 01");
+ vec = insert_softint_trampoline();
+ ivec[0x01] = vec;
+ register_callback(vec, int01, "int 01");
vec = insert_softint_trampoline();
ivec[0x03] = vec;
Modified: soc2012/syuu/bhyve-bios/lib/libbiosemul/port.c
==============================================================================
--- soc2012/syuu/bhyve-bios/lib/libbiosemul/port.c Sun Jan 6 07:14:04 2013 (r246299)
+++ soc2012/syuu/bhyve-bios/lib/libbiosemul/port.c Sun Jan 6 14:13:53 2013 (r246300)
@@ -232,6 +232,8 @@
void
define_input_port_handler(int port, unsigned char (*p_inb)(int port))
{
+ fprintf(stderr, "%s port:%d func:%p\n",
+ __func__, port, p_inb);
if ((port >= MINPORT) && (port < MAXPORT)) {
portsw[port].p_inb = p_inb;
} else
@@ -241,6 +243,8 @@
void
define_output_port_handler(int port, void (*p_outb)(int port, unsigned char byte))
{
+ fprintf(stderr, "%s port:%d func:%p\n",
+ __func__, port, p_outb);
if ((port >= MINPORT) && (port < MAXPORT)) {
portsw[port].p_outb = p_outb;
} else
Modified: soc2012/syuu/bhyve-bios/lib/libbiosemul/register.h
==============================================================================
--- soc2012/syuu/bhyve-bios/lib/libbiosemul/register.h Sun Jan 6 07:14:04 2013 (r246299)
+++ soc2012/syuu/bhyve-bios/lib/libbiosemul/register.h Sun Jan 6 14:13:53 2013 (r246300)
@@ -84,7 +84,6 @@
reg86_t efl;
reg86_t esp;
reg86_t ss;
- reg86_t cr0;
} registers_t;
typedef union
@@ -140,7 +139,6 @@
#define R_GS (REGS->r.gs.r_w.r_x)
#define R_EFS (REGS->r.fs.r_dw.r_ex)
#define R_FS (REGS->r.fs.r_w.r_x)
-#define R_CR0 (REGS->r.cr0.r_dw.r_ex)
#endif
Modified: soc2012/syuu/bhyve-bios/usr.sbin/bhyve/Makefile
==============================================================================
--- soc2012/syuu/bhyve-bios/usr.sbin/bhyve/Makefile Sun Jan 6 07:14:04 2013 (r246299)
+++ soc2012/syuu/bhyve-bios/usr.sbin/bhyve/Makefile Sun Jan 6 14:13:53 2013 (r246300)
@@ -11,8 +11,8 @@
NO_MAN=
-DPADD= ${LIBVMMAPI} ${LIBMD} ${LIBPTHREAD} ${LIBBIOSEMUL} ${LIBUDIS86}
-LDADD= -lvmmapi -lmd -lpthread -lbiosemul -ludis86
+DPADD= ${LIBVMMAPI} ${LIBMD} ${LIBPTHREAD} ${LIBBIOSEMUL}
+LDADD= -lvmmapi -lmd -lpthread -lbiosemul
WARNS?= 2
Modified: soc2012/syuu/bhyve-bios/usr.sbin/bhyve/fbsdrun.c
==============================================================================
--- soc2012/syuu/bhyve-bios/usr.sbin/bhyve/fbsdrun.c Sun Jan 6 07:14:04 2013 (r246299)
+++ soc2012/syuu/bhyve-bios/usr.sbin/bhyve/fbsdrun.c Sun Jan 6 14:13:53 2013 (r246300)
@@ -102,7 +102,6 @@
static int oem_tbl_size;
static int bios_mode;
-static int trace_mode;
static void vm_loop(struct vmctx *ctx, int vcpu, uint64_t rip);
@@ -131,7 +130,7 @@
{
fprintf(stderr,
- "Usage: %s [-ehBHPbT][-g <gdb port>][-z <hz>][-s <pci>][-p pincpu]"
+ "Usage: %s [-ehBHPb][-g <gdb port>][-z <hz>][-s <pci>][-p pincpu]"
"[-n <pci>][-m lowmem][-M highmem] <vm>\n"
" -g: gdb port (default is %d and 0 means don't open)\n"
" -c: # cpus (default 1)\n"
@@ -149,8 +148,7 @@
" -M: highmem in MB\n"
" -x: mux vcpus to 1 hcpu\n"
" -t: mux vcpu timeslice hz (default %d)\n"
- " -b: BIOS compatible mode\n"
- " -T: Trace mode\n",
+ " -b: BIOS compatible mode\n",
progname, DEFAULT_GDB_PORT, DEFAULT_GUEST_HZ,
DEFAULT_GUEST_TSLICE);
exit(code);
@@ -442,15 +440,17 @@
static int
vmexit_hypercall(struct vmctx *ctx, struct vm_exit *vmexit, int *pvcpu)
{
+ int intno = (vmexit->rip - 0x400) / 0x4;
+
if (!bios_mode) {
fprintf(stderr, "Failed to handle hypercall at 0x%lx\n",
vmexit->rip);
return (VMEXIT_ABORT);
}
- if (biosemul_call(ctx, *pvcpu) != 0) {
- fprintf(stderr, "Failed to emulate INT at 0x%lx\n",
- vmexit->rip);
+ if (biosemul_call(ctx, *pvcpu, intno) != 0) {
+ fprintf(stderr, "Failed to emulate INT %x at 0x%lx\n",
+ intno, vmexit->rip);
return (VMEXIT_ABORT);
}
@@ -560,7 +560,7 @@
gdb_port = DEFAULT_GDB_PORT;
guest_ncpus = 1;
- while ((c = getopt(argc, argv, "ehBHPxbTp:g:c:z:s:S:n:m:M:")) != -1) {
+ while ((c = getopt(argc, argv, "ehBHPxbp:g:c:z:s:S:n:m:M:")) != -1) {
switch (c) {
case 'B':
inject_bkpt = 1;
@@ -610,9 +610,6 @@
case 'b':
bios_mode = 1;
break;
- case 'T':
- trace_mode = 1;
- break;
case 'h':
usage(0);
default:
@@ -681,10 +678,7 @@
if (bios_mode != 0) {
vm_set_capability(ctx, BSP, VM_CAP_UNRESTRICTED_GUEST, 1);
- biosemul_init(ctx, 0, lomem_addr, trace_mode);
- } else if (trace_mode != 0) {
- fprintf(stderr, "Trace mode only works with BIOS emulation mode\n");
- return (-1);
+ biosemul_init(ctx, 0, lomem_addr);
}
init_inout();
More information about the svn-soc-all
mailing list