mirror of
https://github.com/reactos/reactos.git
synced 2024-10-04 00:13:57 +00:00
[NTOS]
- Fix KGDT64 names, - Add missing .ALLOCSTACK svn path=/branches/ros-amd64-bringup/; revision=45384
This commit is contained in:
parent
c8f9aa3f4b
commit
832d8290c8
|
@ -85,7 +85,7 @@ KdpSetContextState(IN PDBGKD_ANY_WAIT_STATE_CHANGE WaitStateChange,
|
|||
|
||||
/* Set Report Flags */
|
||||
WaitStateChange->ControlReport.ReportFlags = REPORT_INCLUDES_SEGS;
|
||||
if (WaitStateChange->ControlReport.SegCs == KGDT_64_R0_CODE)
|
||||
if (WaitStateChange->ControlReport.SegCs == KGDT64_R0_CODE)
|
||||
{
|
||||
WaitStateChange->ControlReport.ReportFlags |= REPORT_STANDARD_CS;
|
||||
}
|
||||
|
|
|
@ -526,14 +526,14 @@ KDDEBUGGER_DATA64 KdDebuggerDataBlock =
|
|||
//
|
||||
// AMD64 GDT/LDT/TSS constants
|
||||
//
|
||||
KGDT_64_R0_CODE,
|
||||
KGDT_64_DATA,
|
||||
KGDT_64_DATA,
|
||||
KGDT_64_R3_CODE,
|
||||
KGDT_64_DATA,
|
||||
KGDT_64_DATA,
|
||||
KGDT64_R0_CODE,
|
||||
KGDT64_R3_DATA,
|
||||
KGDT64_R3_DATA,
|
||||
KGDT64_R3_CODE,
|
||||
KGDT64_R3_DATA,
|
||||
KGDT64_R3_DATA,
|
||||
0,
|
||||
KGDT_TSS,
|
||||
KGDT64_SYS_TSS,
|
||||
0,
|
||||
0,
|
||||
#else
|
||||
|
|
|
@ -74,11 +74,11 @@ KeContextToTrapFrame(IN PCONTEXT Context,
|
|||
if ((Context->ContextFlags & CONTEXT_CONTROL) == CONTEXT_CONTROL)
|
||||
{
|
||||
/* Check if this was a Kernel Trap */
|
||||
if (Context->SegCs == KGDT_64_R0_CODE)
|
||||
if (Context->SegCs == KGDT64_R0_CODE)
|
||||
{
|
||||
/* Set valid selectors */
|
||||
TrapFrame->SegCs = KGDT_64_R0_CODE;
|
||||
TrapFrame->SegSs = KGDT_64_R0_SS;
|
||||
TrapFrame->SegCs = KGDT64_R0_CODE;
|
||||
TrapFrame->SegSs = KGDT64_R0_DATA;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -97,13 +97,13 @@ KeContextToTrapFrame(IN PCONTEXT Context,
|
|||
if ((Context->ContextFlags & CONTEXT_SEGMENTS) == CONTEXT_SEGMENTS)
|
||||
{
|
||||
/* Check if this was a Kernel Trap */
|
||||
if (Context->SegCs == KGDT_64_R0_CODE)
|
||||
if (Context->SegCs == KGDT64_R0_CODE)
|
||||
{
|
||||
/* Set valid selectors */
|
||||
TrapFrame->SegDs = KGDT_64_DATA | RPL_MASK;
|
||||
TrapFrame->SegEs = KGDT_64_DATA | RPL_MASK;
|
||||
TrapFrame->SegFs = KGDT_32_R3_TEB | RPL_MASK;
|
||||
TrapFrame->SegGs = KGDT_64_DATA | RPL_MASK;
|
||||
TrapFrame->SegDs = KGDT64_R3_DATA | RPL_MASK;
|
||||
TrapFrame->SegEs = KGDT64_R3_DATA | RPL_MASK;
|
||||
TrapFrame->SegFs = KGDT64_R3_CMTEB | RPL_MASK;
|
||||
TrapFrame->SegGs = KGDT64_R3_DATA | RPL_MASK;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -190,11 +190,11 @@ KeTrapFrameToContext(IN PKTRAP_FRAME TrapFrame,
|
|||
if ((Context->ContextFlags & CONTEXT_CONTROL) == CONTEXT_CONTROL)
|
||||
{
|
||||
/* Check if this was a Kernel Trap */
|
||||
if (TrapFrame->SegCs == KGDT_64_R0_CODE)
|
||||
if (TrapFrame->SegCs == KGDT64_R0_CODE)
|
||||
{
|
||||
/* Set valid selectors */
|
||||
Context->SegCs = KGDT_64_R0_CODE;
|
||||
Context->SegSs = KGDT_64_R0_SS;
|
||||
Context->SegCs = KGDT64_R0_CODE;
|
||||
Context->SegSs = KGDT64_R0_DATA;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -213,13 +213,13 @@ KeTrapFrameToContext(IN PKTRAP_FRAME TrapFrame,
|
|||
if ((Context->ContextFlags & CONTEXT_SEGMENTS) == CONTEXT_SEGMENTS)
|
||||
{
|
||||
/* Check if this was a Kernel Trap */
|
||||
if (TrapFrame->SegCs == KGDT_64_R0_CODE)
|
||||
if (TrapFrame->SegCs == KGDT64_R0_CODE)
|
||||
{
|
||||
/* Set valid selectors */
|
||||
Context->SegDs = KGDT_64_DATA | RPL_MASK;
|
||||
Context->SegEs = KGDT_64_DATA | RPL_MASK;
|
||||
Context->SegFs = KGDT_32_R3_TEB | RPL_MASK;
|
||||
Context->SegGs = KGDT_64_DATA | RPL_MASK;
|
||||
Context->SegDs = KGDT64_R3_DATA | RPL_MASK;
|
||||
Context->SegEs = KGDT64_R3_DATA | RPL_MASK;
|
||||
Context->SegFs = KGDT64_R3_CMTEB | RPL_MASK;
|
||||
Context->SegGs = KGDT64_R3_DATA | RPL_MASK;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -379,7 +379,7 @@ KiInitializeTss(IN PKTSS64 Tss,
|
|||
PKGDTENTRY64 TssEntry;
|
||||
|
||||
/* Get pointer to the GDT entry */
|
||||
TssEntry = KiGetGdtEntry(KeGetPcr()->GdtBase, KGDT_TSS);
|
||||
TssEntry = KiGetGdtEntry(KeGetPcr()->GdtBase, KGDT64_SYS_TSS);
|
||||
|
||||
/* Initialize the GDT entry */
|
||||
KiInitGdtEntry(TssEntry, (ULONG64)Tss, sizeof(KTSS64), AMD64_TSS, 0);
|
||||
|
@ -403,7 +403,7 @@ KiInitializeTss(IN PKTSS64 Tss,
|
|||
Tss->Ist[3] = (ULONG64)KiDoubleFaultStack;
|
||||
|
||||
/* Load the task register */
|
||||
__ltr(KGDT_TSS);
|
||||
__ltr(KGDT64_SYS_TSS);
|
||||
}
|
||||
|
||||
VOID
|
||||
|
|
|
@ -50,10 +50,9 @@ KIDT_INIT KiInterruptInitTable[] =
|
|||
KIDTENTRY64 KiIdt[256];
|
||||
KDESCRIPTOR KiIdtDescriptor = {{0}, sizeof(KiIdt) - 1, KiIdt};
|
||||
|
||||
|
||||
/* FUNCTIONS *****************************************************************/
|
||||
|
||||
|
||||
|
||||
VOID
|
||||
INIT_FUNCTION
|
||||
NTAPI
|
||||
|
@ -80,7 +79,7 @@ KeInitExceptions(VOID)
|
|||
KiIdt[i].IstIndex = 0;
|
||||
}
|
||||
KiIdt[i].OffsetLow = Offset & 0xffff;
|
||||
KiIdt[i].Selector = KGDT_64_R0_CODE;
|
||||
KiIdt[i].Selector = KGDT64_R0_CODE;
|
||||
KiIdt[i].Type = 0x0e;
|
||||
KiIdt[i].Reserved0 = 0;
|
||||
KiIdt[i].Present = 1;
|
||||
|
@ -242,6 +241,20 @@ KiGeneralProtectionFaultHandler(
|
|||
ASSERT(FALSE);
|
||||
}
|
||||
|
||||
/* Check for lazy segment load */
|
||||
if (TrapFrame->SegDs != (KGDT64_R3_DATA | RPL_MASK))
|
||||
{
|
||||
/* Fix it */
|
||||
TrapFrame->SegDs = (KGDT64_R3_DATA | RPL_MASK);
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
else if (TrapFrame->SegEs != (KGDT64_R3_DATA | RPL_MASK))
|
||||
{
|
||||
/* Fix it */
|
||||
TrapFrame->SegEs = (KGDT64_R3_DATA | RPL_MASK);
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/* Check for nested exception */
|
||||
if ((TrapFrame->Rip >= (ULONG64)KiGeneralProtectionFaultHandler) &&
|
||||
(TrapFrame->Rip < (ULONG64)KiGeneralProtectionFaultHandler))
|
||||
|
@ -271,20 +284,6 @@ KiGeneralProtectionFaultHandler(
|
|||
return STATUS_ACCESS_VIOLATION;
|
||||
}
|
||||
|
||||
/* Check for lazy segment load */
|
||||
if (TrapFrame->SegDs != (KGDT64_R0_DATA | RPL_MASK))
|
||||
{
|
||||
/* Fix it */
|
||||
TrapFrame->SegDs = (KGDT64_R0_DATA | RPL_MASK);
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
else if (TrapFrame->SegEs != (KGDT64_R0_DATA | RPL_MASK))
|
||||
{
|
||||
/* Fix it */
|
||||
TrapFrame->SegEs = (KGDT64_R0_DATA | RPL_MASK);
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
ASSERT(FALSE);
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
|
|
|
@ -120,7 +120,7 @@ KiInitializePcr(IN PKIPCR Pcr,
|
|||
|
||||
/* Get TSS Selector */
|
||||
__str(&Tr);
|
||||
ASSERT(Tr == KGDT_TSS);
|
||||
ASSERT(Tr == KGDT64_SYS_TSS);
|
||||
|
||||
/* Get TSS Entry */
|
||||
TssEntry = KiGetGdtEntry(Pcr->GdtBase, Tr);
|
||||
|
@ -390,9 +390,9 @@ KiSystemStartup(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
|
|||
__writemsr(X86_MSR_KERNEL_GSBASE, (ULONG64)Pcr);
|
||||
|
||||
/* Load Ring 3 selectors for DS/ES/FS */
|
||||
Ke386SetDs(KGDT_64_DATA | RPL_MASK);
|
||||
Ke386SetEs(KGDT_64_DATA | RPL_MASK);
|
||||
Ke386SetFs(KGDT_32_R3_TEB | RPL_MASK);
|
||||
Ke386SetDs(KGDT64_R3_DATA | RPL_MASK);
|
||||
Ke386SetEs(KGDT64_R3_DATA | RPL_MASK);
|
||||
Ke386SetFs(KGDT64_R3_CMTEB | RPL_MASK);
|
||||
|
||||
/* LDT is unused */
|
||||
__lldt(0);
|
||||
|
|
|
@ -274,6 +274,7 @@ ENDR
|
|||
|
||||
/* Allocate stack space for EXCEPTION_RECORD and KEXCEPTION_FRAME */
|
||||
sub rsp, SIZE_EXCEPTION_RECORD + SIZE_KEXCEPTION_FRAME
|
||||
.allocstack (SIZE_EXCEPTION_RECORD + SIZE_KEXCEPTION_FRAME)
|
||||
|
||||
/* Set up EXCEPTION_RECORD */
|
||||
lea rcx, [rsp + SIZE_KEXCEPTION_FRAME]
|
||||
|
|
Loading…
Reference in a new issue