diff -r 16f9d1fd37da -r 13ca6071796b src/arch/x86/system.cc --- a/src/arch/x86/system.cc Mon Jun 03 12:28:52 2013 +0200 +++ b/src/arch/x86/system.cc Mon Jun 03 12:35:34 2013 +0200 @@ -156,6 +156,7 @@ csDesc.type.codeOrData = 1; csDesc.type.c = 0; // Not conforming csDesc.type.r = 1; // Readable + csDesc.type.a = 1; csDesc.dpl = 0; // Privelege level 0 csDesc.p = 1; // Present csDesc.l = 1; // 64 bit @@ -163,7 +164,7 @@ csDesc.g = 1; // Page granularity csDesc.s = 1; // Not a system segment csDesc.limitHigh = 0xF; - csDesc.limitLow = 0xFF; + csDesc.limitLow = 0xFFFF; //Because we're dealing with a pointer and I don't think it's //guaranteed that there isn't anything in a nonvirtual class between //it's beginning in memory and it's actual data, we'll use an @@ -184,13 +185,14 @@ dsDesc.type.codeOrData = 0; dsDesc.type.e = 0; // Not expand down dsDesc.type.w = 1; // Writable + dsDesc.type.a = 1; dsDesc.dpl = 0; // Privelege level 0 dsDesc.p = 1; // Present dsDesc.d = 1; // default operand size dsDesc.g = 1; // Page granularity dsDesc.s = 1; // Not a system segment dsDesc.limitHigh = 0xF; - dsDesc.limitLow = 0xFF; + dsDesc.limitLow = 0xFFFF; uint64_t dsDescVal = dsDesc; physProxy.writeBlob(GDTBase + numGDTEntries * 8, (uint8_t *)(&dsDescVal), 8); @@ -216,9 +218,9 @@ tssDesc.p = 1; // Present tssDesc.d = 1; // default operand size tssDesc.g = 1; // Page granularity - tssDesc.s = 1; // Not a system segment + tssDesc.s = 0; tssDesc.limitHigh = 0xF; - tssDesc.limitLow = 0xFF; + tssDesc.limitLow = 0xFFFF; uint64_t tssDescVal = tssDesc; physProxy.writeBlob(GDTBase + numGDTEntries * 8, (uint8_t *)(&tssDescVal), 8);