|
|
| version 1.3, 2003/12/22 18:00:31 | version 1.5, 2004/01/14 16:14:49 |
|---|---|
| Line 176 load_ldtr(WORD selector, int exc) | Line 176 load_ldtr(WORD selector, int exc) |
| /* check limit */ | /* check limit */ |
| if (sel.desc.u.seg.limit < 7) { | if (sel.desc.u.seg.limit < 7) { |
| ia32_panic("load_ldtr: LDTR descriptor limit < 7"); | ia32_panic("load_ldtr: LDTR descriptor limit < 7 (limit = %d)", sel.desc.u.seg.limit); |
| } | } |
| /* not present */ | /* not present */ |
| Line 185 load_ldtr(WORD selector, int exc) | Line 185 load_ldtr(WORD selector, int exc) |
| EXCEPTION((exc == TS_EXCEPTION) ? TS_EXCEPTION : NP_EXCEPTION, sel.selector); | EXCEPTION((exc == TS_EXCEPTION) ? TS_EXCEPTION : NP_EXCEPTION, sel.selector); |
| } | } |
| #if defined(DEBUG) | |
| { | |
| DWORD v[2]; | |
| DWORD i; | |
| for (i = 0; i < sel.desc.u.seg.limit; i += 8) { | |
| v[0] = cpu_lmemoryread_d(sel.desc.u.seg.segbase + i); | |
| v[1] = cpu_lmemoryread_d(sel.desc.u.seg.segbase + i + 4); | |
| VERBOSE(("load_ldtr: %08x: %08x%08x", sel.desc.u.seg.segbase + i, v[0], v[1])); | |
| } | |
| } | |
| #endif | |
| CPU_LDTR = sel.selector; | CPU_LDTR = sel.selector; |
| CPU_LDTR_DESC = sel.desc; | CPU_LDTR_DESC = sel.desc; |
| } | } |
| Line 232 load_descriptor(descriptor_t *descp, DWO | Line 245 load_descriptor(descriptor_t *descp, DWO |
| switch (descp->type) { | switch (descp->type) { |
| case CPU_SYSDESC_TYPE_LDT: /* LDT */ | case CPU_SYSDESC_TYPE_LDT: /* LDT */ |
| descp->valid = 1; | descp->valid = 1; |
| descp->u.seg.segbase = descp->h & 0xff000000; | |
| descp->u.seg.segbase |= (descp->h & 0xff) << 16; | |
| descp->u.seg.segbase |= descp->l >> 16; | |
| descp->u.seg.limit = descp->h & 0xf0000; | |
| descp->u.seg.limit |= descp->l & 0xffff; | |
| VERBOSE(("load_descriptor: LDT descriptor")); | VERBOSE(("load_descriptor: LDT descriptor")); |
| break; | break; |