Revision 0e4b179d target-i386/helper2.c

b/target-i386/helper2.c
31 31

  
32 32
//#define DEBUG_MMU
33 33

  
34
#ifdef USE_CODE_COPY
35
#include <asm/ldt.h>
36
#include <linux/unistd.h>
37

  
38
_syscall3(int, modify_ldt, int, func, void *, ptr, unsigned long, bytecount)
39
#endif
40

  
34 41
CPUX86State *cpu_x86_init(void)
35 42
{
36 43
    CPUX86State *env;
......
84 91
        inited = 1;
85 92
        optimize_flags_init();
86 93
    }
94
#ifdef USE_CODE_COPY
95
    /* testing code for code copy case */
96
    {
97
        struct modify_ldt_ldt_s ldt;
98

  
99
        ldt.entry_number = 1;
100
        ldt.base_addr = (unsigned long)env;
101
        ldt.limit = (sizeof(CPUState) + 0xfff) >> 12;
102
        ldt.seg_32bit = 1;
103
        ldt.contents = MODIFY_LDT_CONTENTS_DATA;
104
        ldt.read_exec_only = 0;
105
        ldt.limit_in_pages = 1;
106
        ldt.seg_not_present = 0;
107
        ldt.useable = 1;
108
        modify_ldt(1, &ldt, sizeof(ldt)); /* write ldt entry */
109
        
110
        asm volatile ("movl %0, %%fs" : : "r" ((1 << 3) | 7));
111
        cpu_single_env = env;
112
    }
113
#endif
87 114
    return env;
88 115
}
89 116

  
......
213 240
#endif
214 241
        /* if the cpu is currently executing code, we must unlink it and
215 242
           all the potentially executing TB */
216
        cpu_interrupt(env, 0);
243
        cpu_interrupt(env, CPU_INTERRUPT_EXITTB);
217 244

  
218 245
        /* when a20 is changed, all the MMU mappings are invalid, so
219 246
           we must flush everything */

Also available in: Unified diff