mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 01:55:19 +00:00
Don't use hack for trap frames anymore, read TempEsp and TempSegSs for kernel-mode traps during debugging.
svn path=/trunk/; revision=14790
This commit is contained in:
parent
5673eb73b9
commit
88d6fe5cb4
3 changed files with 21 additions and 51 deletions
|
@ -27,8 +27,8 @@
|
||||||
#define KTRAP_FRAME_DEBUGEIP (0x4)
|
#define KTRAP_FRAME_DEBUGEIP (0x4)
|
||||||
#define KTRAP_FRAME_DEBUGARGMARK (0x8)
|
#define KTRAP_FRAME_DEBUGARGMARK (0x8)
|
||||||
#define KTRAP_FRAME_DEBUGPOINTER (0xC)
|
#define KTRAP_FRAME_DEBUGPOINTER (0xC)
|
||||||
#define KTRAP_FRAME_TEMPCS (0x10)
|
#define KTRAP_FRAME_TEMPSS (0x10)
|
||||||
#define KTRAP_FRAME_TEMPEIP (0x14)
|
#define KTRAP_FRAME_TEMPESP (0x14)
|
||||||
#define KTRAP_FRAME_DR0 (0x18)
|
#define KTRAP_FRAME_DR0 (0x18)
|
||||||
#define KTRAP_FRAME_DR1 (0x1C)
|
#define KTRAP_FRAME_DR1 (0x1C)
|
||||||
#define KTRAP_FRAME_DR2 (0x20)
|
#define KTRAP_FRAME_DR2 (0x20)
|
||||||
|
@ -117,8 +117,8 @@ typedef struct _KTRAP_FRAME
|
||||||
PVOID DebugEip;
|
PVOID DebugEip;
|
||||||
PVOID DebugArgMark;
|
PVOID DebugArgMark;
|
||||||
PVOID DebugPointer;
|
PVOID DebugPointer;
|
||||||
PVOID TempCs;
|
PVOID TempSegSs;
|
||||||
PVOID TempEip;
|
PVOID TempEsp;
|
||||||
ULONG Dr0;
|
ULONG Dr0;
|
||||||
ULONG Dr1;
|
ULONG Dr1;
|
||||||
ULONG Dr2;
|
ULONG Dr2;
|
||||||
|
|
|
@ -374,6 +374,19 @@ KdbpCmdRegs(ULONG Argc, PCHAR Argv[])
|
||||||
|
|
||||||
if (Argv[0][0] == 'r') /* regs */
|
if (Argv[0][0] == 'r') /* regs */
|
||||||
{
|
{
|
||||||
|
ULONG Esp;
|
||||||
|
USHORT Ss;
|
||||||
|
|
||||||
|
if (!(Tf->Cs & 1))
|
||||||
|
{
|
||||||
|
Esp = (ULONG)Tf->TempEsp;
|
||||||
|
Ss = (USHORT)((ULONG)Tf->TempSegSs & 0xFFFF);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Esp = Tf->Esp;
|
||||||
|
Ss = Tf->Ss;
|
||||||
|
}
|
||||||
KdbpPrint("CS:EIP 0x%04x:0x%08x\n"
|
KdbpPrint("CS:EIP 0x%04x:0x%08x\n"
|
||||||
"SS:ESP 0x%04x:0x%08x\n"
|
"SS:ESP 0x%04x:0x%08x\n"
|
||||||
" EAX 0x%08x EBX 0x%08x\n"
|
" EAX 0x%08x EBX 0x%08x\n"
|
||||||
|
@ -381,7 +394,7 @@ KdbpCmdRegs(ULONG Argc, PCHAR Argv[])
|
||||||
" ESI 0x%08x EDI 0x%08x\n"
|
" ESI 0x%08x EDI 0x%08x\n"
|
||||||
" EBP 0x%08x\n",
|
" EBP 0x%08x\n",
|
||||||
Tf->Cs & 0xFFFF, Tf->Eip,
|
Tf->Cs & 0xFFFF, Tf->Eip,
|
||||||
Tf->Ss, Tf->Esp,
|
Ss, Esp,
|
||||||
Tf->Eax, Tf->Ebx,
|
Tf->Eax, Tf->Ebx,
|
||||||
Tf->Ecx, Tf->Edx,
|
Tf->Ecx, Tf->Edx,
|
||||||
Tf->Esi, Tf->Edi,
|
Tf->Esi, Tf->Edi,
|
||||||
|
|
|
@ -76,29 +76,6 @@ _KiTrapRet:
|
||||||
popl %edi
|
popl %edi
|
||||||
popl %esi
|
popl %esi
|
||||||
popl %ebx
|
popl %ebx
|
||||||
|
|
||||||
#ifdef KDBG
|
|
||||||
/*
|
|
||||||
* Cleanup the stack which was used to setup a trapframe with SS:ESP when called
|
|
||||||
* from kmode.
|
|
||||||
*/
|
|
||||||
movw 0xC(%esp), %bp /* Get CS from trapframe */
|
|
||||||
cmpw $KERNEL_CS, %bp
|
|
||||||
jne 0f
|
|
||||||
|
|
||||||
/* Copy EBP, CS:EIP and EFLAGS from the trapframe back onto the top of our stack. */
|
|
||||||
movl 0x00(%esp), %ebp /* EBP */
|
|
||||||
movl %ebp, 0x24(%esp)
|
|
||||||
movl 0x08(%esp), %ebp /* EIP */
|
|
||||||
movl %ebp, 0x2C(%esp)
|
|
||||||
movl 0x0C(%esp), %ebp /* CS */
|
|
||||||
movl %ebp, 0x30(%esp)
|
|
||||||
movl 0x10(%esp), %ebp /* EFLAGS */
|
|
||||||
movl %ebp, 0x34(%esp)
|
|
||||||
|
|
||||||
addl $0x24, %esp
|
|
||||||
0:
|
|
||||||
#endif /* DBG */
|
|
||||||
popl %ebp
|
popl %ebp
|
||||||
addl $0x4, %esp /* Ignore error code */
|
addl $0x4, %esp /* Ignore error code */
|
||||||
|
|
||||||
|
@ -106,27 +83,6 @@ _KiTrapRet:
|
||||||
|
|
||||||
.globl _KiTrapProlog
|
.globl _KiTrapProlog
|
||||||
_KiTrapProlog:
|
_KiTrapProlog:
|
||||||
#ifdef KDBG
|
|
||||||
/*
|
|
||||||
* If we were called from kmode we start setting up a new trapframe (with SS:ESP at the end)
|
|
||||||
*/
|
|
||||||
movw 0x14(%esp), %bx /* Get old CS */
|
|
||||||
cmpw $KERNEL_CS, %bx
|
|
||||||
|
|
||||||
jne 0f
|
|
||||||
|
|
||||||
leal 0x1C(%esp), %ebp
|
|
||||||
pushl %ss /* Old SS */
|
|
||||||
pushl %ebp /* Old ESP */
|
|
||||||
pushl 0x20(%esp) /* Old EFLAGS */
|
|
||||||
pushl 0x20(%esp) /* Old CS */
|
|
||||||
pushl 0x20(%esp) /* Old EIP */
|
|
||||||
pushl 0x20(%esp) /* ErrorCode */
|
|
||||||
pushl 0x20(%esp) /* Ebp */
|
|
||||||
pushl 0x20(%esp) /* Ebx */
|
|
||||||
pushl 0x20(%esp) /* Esi */
|
|
||||||
0:
|
|
||||||
#endif /* DBG */
|
|
||||||
|
|
||||||
pushl %edi
|
pushl %edi
|
||||||
pushl %fs
|
pushl %fs
|
||||||
|
@ -191,8 +147,9 @@ _KiTrapProlog:
|
||||||
pushl %eax /* Dr1 */
|
pushl %eax /* Dr1 */
|
||||||
movl %dr0, %eax
|
movl %dr0, %eax
|
||||||
pushl %eax /* Dr0 */
|
pushl %eax /* Dr0 */
|
||||||
pushl $0 /* XXX: TempESP */
|
leal 0x64(%esp), %eax
|
||||||
pushl $0 /* XXX: TempCS */
|
pushl %eax /* XXX: TempESP */
|
||||||
|
pushl %ss /* XXX: TempSS */
|
||||||
pushl $0 /* XXX: DebugPointer */
|
pushl $0 /* XXX: DebugPointer */
|
||||||
pushl $0 /* XXX: DebugArgMark */
|
pushl $0 /* XXX: DebugArgMark */
|
||||||
movl 0x60(%esp), %ebx
|
movl 0x60(%esp), %ebx
|
||||||
|
|
Loading…
Reference in a new issue