projects
/
qemu
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
set to protected mode
[qemu]
/
linux-user
/
main.c
diff --git
a/linux-user/main.c
b/linux-user/main.c
index
df01a1c
..
b85637f
100644
(file)
--- a/
linux-user/main.c
+++ b/
linux-user/main.c
@@
-26,8
+26,6
@@
#include "qemu.h"
#include "qemu.h"
-#include "cpu-i386.h"
-
#define DEBUG_LOGFILE "/tmp/qemu.log"
FILE *logfile = NULL;
#define DEBUG_LOGFILE "/tmp/qemu.log"
FILE *logfile = NULL;
@@
-100,6
+98,11
@@
int cpu_x86_inl(CPUX86State *env, int addr)
return 0;
}
return 0;
}
+int cpu_x86_get_pic_interrupt(CPUX86State *env)
+{
+ return -1;
+}
+
static void write_dt(void *ptr, unsigned long addr, unsigned long limit,
int flags)
{
static void write_dt(void *ptr, unsigned long addr, unsigned long limit,
int flags)
{
@@
-243,8
+246,6
@@
void cpu_loop(CPUX86State *env)
#ifdef TARGET_ARM
#ifdef TARGET_ARM
-#define ARM_SYSCALL_BASE 0x900000
-
void cpu_loop(CPUARMState *env)
{
int trapnr;
void cpu_loop(CPUARMState *env)
{
int trapnr;
@@
-282,6
+283,9
@@
void cpu_loop(CPUARMState *env)
}
}
break;
}
}
break;
+ case EXCP_INTERRUPT:
+ /* just indicate that signals should be handled asap */
+ break;
default:
error:
fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n",
default:
error:
fprintf(stderr, "qemu: unhandled CPU exception 0x%x - aborting\n",
@@
-317,6
+321,9
@@
void usage(void)
/* XXX: currently only used for async signals (see signal.c) */
CPUState *global_env;
/* XXX: currently only used for async signals (see signal.c) */
CPUState *global_env;
+/* used only if single thread */
+CPUState *cpu_single_env = NULL;
+
/* used to free thread contexts */
TaskState *first_task_state;
/* used to free thread contexts */
TaskState *first_task_state;
@@
-395,7
+402,7
@@
int main(int argc, char **argv)
/* NOTE: we need to init the CPU at this stage to get the
host_page_size */
env = cpu_init();
/* NOTE: we need to init the CPU at this stage to get the
host_page_size */
env = cpu_init();
-
+
if (elf_exec(filename, argv+optind, environ, regs, info) != 0) {
printf("Error loading %s\n", filename);
_exit(1);
if (elf_exec(filename, argv+optind, environ, regs, info) != 0) {
printf("Error loading %s\n", filename);
_exit(1);
@@
-423,8
+430,11
@@
int main(int argc, char **argv)
memset(ts, 0, sizeof(TaskState));
env->opaque = ts;
ts->used = 1;
memset(ts, 0, sizeof(TaskState));
env->opaque = ts;
ts->used = 1;
+ env->user_mode_only = 1;
#if defined(TARGET_I386)
#if defined(TARGET_I386)
+ env->cr[0] = CR0_PG_MASK | CR0_WP_MASK | CR0_PE_MASK;
+
/* linux register setup */
env->regs[R_EAX] = regs->eax;
env->regs[R_EBX] = regs->ebx;
/* linux register setup */
env->regs[R_EAX] = regs->eax;
env->regs[R_EBX] = regs->ebx;
@@
-476,6
+486,7
@@
int main(int argc, char **argv)
cpu_x86_load_seg(env, R_SS, __USER_DS);
cpu_x86_load_seg(env, R_FS, __USER_DS);
cpu_x86_load_seg(env, R_GS, __USER_DS);
cpu_x86_load_seg(env, R_SS, __USER_DS);
cpu_x86_load_seg(env, R_FS, __USER_DS);
cpu_x86_load_seg(env, R_GS, __USER_DS);
+
#elif defined(TARGET_ARM)
{
int i;
#elif defined(TARGET_ARM)
{
int i;