experimental code copy support - fixed A20 emulation
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@621 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
77fef8c148
commit
0e4b179d33
|
@ -31,6 +31,13 @@
|
||||||
|
|
||||||
//#define DEBUG_MMU
|
//#define DEBUG_MMU
|
||||||
|
|
||||||
|
#ifdef USE_CODE_COPY
|
||||||
|
#include <asm/ldt.h>
|
||||||
|
#include <linux/unistd.h>
|
||||||
|
|
||||||
|
_syscall3(int, modify_ldt, int, func, void *, ptr, unsigned long, bytecount)
|
||||||
|
#endif
|
||||||
|
|
||||||
CPUX86State *cpu_x86_init(void)
|
CPUX86State *cpu_x86_init(void)
|
||||||
{
|
{
|
||||||
CPUX86State *env;
|
CPUX86State *env;
|
||||||
|
@ -84,6 +91,26 @@ CPUX86State *cpu_x86_init(void)
|
||||||
inited = 1;
|
inited = 1;
|
||||||
optimize_flags_init();
|
optimize_flags_init();
|
||||||
}
|
}
|
||||||
|
#ifdef USE_CODE_COPY
|
||||||
|
/* testing code for code copy case */
|
||||||
|
{
|
||||||
|
struct modify_ldt_ldt_s ldt;
|
||||||
|
|
||||||
|
ldt.entry_number = 1;
|
||||||
|
ldt.base_addr = (unsigned long)env;
|
||||||
|
ldt.limit = (sizeof(CPUState) + 0xfff) >> 12;
|
||||||
|
ldt.seg_32bit = 1;
|
||||||
|
ldt.contents = MODIFY_LDT_CONTENTS_DATA;
|
||||||
|
ldt.read_exec_only = 0;
|
||||||
|
ldt.limit_in_pages = 1;
|
||||||
|
ldt.seg_not_present = 0;
|
||||||
|
ldt.useable = 1;
|
||||||
|
modify_ldt(1, &ldt, sizeof(ldt)); /* write ldt entry */
|
||||||
|
|
||||||
|
asm volatile ("movl %0, %%fs" : : "r" ((1 << 3) | 7));
|
||||||
|
cpu_single_env = env;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
return env;
|
return env;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -213,7 +240,7 @@ void cpu_x86_set_a20(CPUX86State *env, int a20_state)
|
||||||
#endif
|
#endif
|
||||||
/* if the cpu is currently executing code, we must unlink it and
|
/* if the cpu is currently executing code, we must unlink it and
|
||||||
all the potentially executing TB */
|
all the potentially executing TB */
|
||||||
cpu_interrupt(env, 0);
|
cpu_interrupt(env, CPU_INTERRUPT_EXITTB);
|
||||||
|
|
||||||
/* when a20 is changed, all the MMU mappings are invalid, so
|
/* when a20 is changed, all the MMU mappings are invalid, so
|
||||||
we must flush everything */
|
we must flush everything */
|
||||||
|
|
Loading…
Reference in a new issue