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:
SarahW 2017-02-04 21:39:28 +00:00
commit 31a97096ec

View file

@ -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;