Trigger TS fault correctly on IRET with NT flag set when back link selector invalid. Fixes NTVDM issues with Windows 2000.
This commit is contained in:
parent
4a36365044
commit
31a97096ec
1 changed files with 4 additions and 8 deletions
12
src/x86seg.c
12
src/x86seg.c
|
|
@ -2011,20 +2011,16 @@ void pmodeiret(int is32)
|
||||||
addr=seg&~7;
|
addr=seg&~7;
|
||||||
if (seg&4)
|
if (seg&4)
|
||||||
{
|
{
|
||||||
if (addr>=ldt.limit)
|
pclog("TS LDT %04X %04X IRET\n",seg,gdt.limit);
|
||||||
{
|
x86ts(NULL,seg&~3);
|
||||||
pclog("TS Bigger than LDT limit %04X %04X IRET\n",seg,gdt.limit);
|
return;
|
||||||
x86gpf(NULL,seg&~3);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
addr+=ldt.base;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (addr>=gdt.limit)
|
if (addr>=gdt.limit)
|
||||||
{
|
{
|
||||||
pclog("TS Bigger than GDT limit %04X %04X IRET\n",seg,gdt.limit);
|
pclog("TS Bigger than GDT limit %04X %04X IRET\n",seg,gdt.limit);
|
||||||
x86gpf(NULL,seg&~3);
|
x86ts(NULL,seg&~3);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
addr+=gdt.base;
|
addr+=gdt.base;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue