Revision 4dbc422b

b/linux-user/main.c
153 153
static void set_gate64(void *ptr, unsigned int type, unsigned int dpl,
154 154
                       uint64_t addr, unsigned int sel)
155 155
{
156
    unsigned int e1, e2;
157
    uint32_t *p;
156
    uint32_t *p, e1, e2;
158 157
    e1 = (addr & 0xffff) | (sel << 16);
159 158
    e2 = (addr & 0xffff0000) | 0x8000 | (dpl << 13) | (type << 8);
160 159
    p = ptr;
161
    p[0] = tswapl(e1);
162
    p[1] = tswapl(e2);
163
    p[2] = addr >> 32;
160
    p[0] = tswap32(e1);
161
    p[1] = tswap32(e2);
162
    p[2] = tswap32(addr >> 32);
163
    p[3] = 0;
164 164
}
165 165
/* only dpl matters as we do only user space emulation */
166 166
static void set_idt(int n, unsigned int dpl)
......
173 173
static void set_gate(void *ptr, unsigned int type, unsigned int dpl,
174 174
                     uint32_t addr, unsigned int sel)
175 175
{
176
    unsigned int e1, e2;
177
    uint32_t *p;
176
    uint32_t *p, e1, e2;
178 177
    e1 = (addr & 0xffff) | (sel << 16);
179 178
    e2 = (addr & 0xffff0000) | 0x8000 | (dpl << 13) | (type << 8);
180 179
    p = ptr;
181
    p[0] = tswapl(e1);
182
    p[1] = tswapl(e2);
180
    p[0] = tswap32(e1);
181
    p[1] = tswap32(e2);
183 182
}
184 183

  
185 184
/* only dpl matters as we do only user space emulation */
......
2113 2112
        env->hflags |= HF_OSFXSR_MASK;
2114 2113
    }
2115 2114
#ifndef TARGET_ABI32
2116
    /* enable 64 bit mode */
2115
    /* enable 64 bit mode if possible */
2116
    if (!(env->cpuid_ext2_features & CPUID_EXT2_LM)) {
2117
        fprintf(stderr, "The selected x86 CPU does not support 64 bit mode\n");
2118
        exit(1);
2119
    }
2117 2120
    env->cr[4] |= CR4_PAE_MASK;
2118
    env->efer |= MSR_EFER_LMA;
2121
    env->efer |= MSR_EFER_LMA | MSR_EFER_LME;
2119 2122
    env->hflags |= HF_LMA_MASK;
2120 2123
#endif
2121 2124

  

Also available in: Unified diff