BOOLEAN
KdbpStepIntoInstruction(ULONG_PTR Eip)
{
- struct __attribute__((packed)) {
- USHORT Limit;
- ULONG Base;
- } Idtr;
+ KDESCRIPTOR Idtr;
UCHAR Mem[2];
INT IntVect;
ULONG IntDesc[2];
}
/* Read the interrupt descriptor table register */
- asm volatile("sidt %0" : : "m"(Idtr));
+ asm volatile("sidt %0" : : "m"(Idtr.Limit));
if (IntVect >= (Idtr.Limit + 1) / 8)
{
/*KdbpPrint("IDT does not contain interrupt vector %d\n.", IntVect);*/
else if (Argv[0][0] == 'c') /* cregs */
{
ULONG Cr0, Cr2, Cr3, Cr4;
- struct __attribute__((packed)) {
- USHORT Limit;
- ULONG Base;
- } Gdtr, Ldtr, Idtr;
+ KDESCRIPTOR Gdtr, Ldtr, Idtr;
ULONG Tr;
STATIC CONST PCHAR Cr0Bits[32] = { " PE", " MP", " EM", " TS", " ET", " NE", NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
Cr4 = KdbCurrentTrapFrame->Cr4;
/* Get descriptor table regs */
- asm volatile("sgdt %0" : : "m"(Gdtr));
- asm volatile("sldt %0" : : "m"(Ldtr));
- asm volatile("sidt %0" : : "m"(Idtr));
+ asm volatile("sgdt %0" : : "m"(Gdtr.Limit));
+ asm volatile("sldt %0" : : "m"(Ldtr.Limit));
+ asm volatile("sidt %0" : : "m"(Idtr.Limit));
/* Get the task register */
asm volatile("str %0" : "=g"(Tr));