X86: Add a check to chks to verify a task state segment descriptor.
This commit is contained in:
parent
7b1cb74ac3
commit
2f31643db5
2 changed files with 11 additions and 2 deletions
|
@ -87,7 +87,7 @@ let {{
|
|||
# Add in symbols for the various checks of segment selectors.
|
||||
for check in ("NoCheck", "CSCheck", "CallGateCheck", "IntGateCheck",
|
||||
"SoftIntGateCheck", "SSCheck", "IretCheck", "IntCSCheck",
|
||||
"TRCheck"):
|
||||
"TRCheck", "TSSCheck"):
|
||||
assembler.symbols[check] = "Seg%s" % check
|
||||
|
||||
for reg in ("TR", "IDTR"):
|
||||
|
|
|
@ -235,7 +235,7 @@ output header {{
|
|||
enum SegmentSelectorCheck {
|
||||
SegNoCheck, SegCSCheck, SegCallGateCheck, SegIntGateCheck,
|
||||
SegSoftIntGateCheck, SegSSCheck, SegIretCheck, SegIntCSCheck,
|
||||
SegTRCheck
|
||||
SegTRCheck, SegTSSCheck
|
||||
};
|
||||
|
||||
enum LongModeDescriptorType {
|
||||
|
@ -1124,6 +1124,15 @@ let {{
|
|||
fault = new GeneralProtection(selector);
|
||||
}
|
||||
break;
|
||||
case SegTSSCheck:
|
||||
if (!desc.p) {
|
||||
fault = new SegmentNotPresent(selector);
|
||||
} else if (!(desc.type == 0x9 ||
|
||||
(desc.type == 1 &&
|
||||
m5reg.mode != LongMode))) {
|
||||
|
||||
}
|
||||
break;
|
||||
default:
|
||||
panic("Undefined segment check type.\\n");
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue