From 3b1b21cb159c0368d50aa0dedd39a8874d91e735 Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Sun, 19 Apr 2009 03:41:10 -0700 Subject: X86: Some segment selectors can be used when "NULL". --- src/arch/x86/tlb.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/arch/x86/tlb.cc') diff --git a/src/arch/x86/tlb.cc b/src/arch/x86/tlb.cc index 62d694225..330a8682b 100644 --- a/src/arch/x86/tlb.cc +++ b/src/arch/x86/tlb.cc @@ -571,7 +571,10 @@ TLB::translate(RequestPtr req, ThreadContext *tc, Translation *translation, if (!efer.lma || !csAttr.longMode) { DPRINTF(TLB, "Not in long mode. Checking segment protection.\n"); // Check for a NULL segment selector. - if (!tc->readMiscRegNoEffect(MISCREG_SEG_SEL(seg))) + if (!(seg == SEGMENT_REG_TSG || seg == SYS_SEGMENT_REG_IDTR || + seg == SEGMENT_REG_HS || seg == SEGMENT_REG_LS || + seg == SEGMENT_REG_MS) + && !tc->readMiscRegNoEffect(MISCREG_SEG_SEL(seg))) return new GeneralProtection(0); bool expandDown = false; SegAttr attr = tc->readMiscRegNoEffect(MISCREG_SEG_ATTR(seg)); -- cgit v1.2.3