Generate MSVC debugging info for KiUserExceptionDispatcher, KiIntSystemCall, KiFastSystemCall, KiFastSystemCallRet, KiSystemService, KiFastCallEntry, all systemcall stubs
Now usermode backtraces look as they should in WinDbg

svn path=/trunk/; revision=52705
This commit is contained in:
Timo Kreuzer 2011-07-17 00:38:46 +00:00
parent 005a7acbfc
commit 4040433bfa
6 changed files with 52 additions and 10 deletions

View file

@ -184,7 +184,8 @@ _KiRaiseUserExceptionDispatcher@0:
PUBLIC _KiUserExceptionDispatcher@8
_KiUserExceptionDispatcher@8:
.PROC KiUserExceptionDispatcher@8
FPO 0, 0, 0, 0, 0, FRAME_FPO
/* Clear direction flag */
cld
@ -240,9 +241,11 @@ Exit:
call _RtlRaiseException@4
ret 8
.ENDP KiUserExceptionDispatcher@8
PUBLIC _KiIntSystemCall@0
_KiIntSystemCall@0:
.PROC KiIntSystemCall@0
FPO 0, 0, 0, 0, 0, FRAME_FPO
/* Set stack in EDX and do the interrupt */
lea edx, [esp+8]
@ -251,21 +254,26 @@ _KiIntSystemCall@0:
/* Return to caller */
ret
.ENDP KiIntSystemCall@0
PUBLIC _KiFastSystemCall@0
_KiFastSystemCall@0:
.PROC KiFastSystemCall@0
FPO 0, 0, 0, 0, 0, FRAME_FPO
/* Put ESP in EDX and do the SYSENTER */
mov edx, esp
sysenter
.ENDP KiFastSystemCall@0
PUBLIC _KiFastSystemCallRet@0
_KiFastSystemCallRet@0:
.PROC KiFastSystemCallRet@0
FPO 0, 0, 0, 0, 0, FRAME_FPO
/* Just return to caller */
ret
.ENDP KiFastSystemCallRet@0
PUBLIC _RtlpGetStackLimits@8
_RtlpGetStackLimits@8:

View file

@ -327,3 +327,10 @@ ENDM
#define NUL "\0"
#endif
/* Common definitions for FPO macro
see http://msdn.microsoft.com/en-us/library/ms679352%28VS.85%29.aspx */
#define FRAME_FPO 0
#define FRAME_TRAP 1
#define FRAME_TSS 2
#define FRAME_NONFPO 3

View file

@ -71,24 +71,42 @@ MACRO(MAKE_LABEL, Name, Stackbytes)
PUBLIC _&Name&@&Stackbytes
_&Name&@&Stackbytes:
ENDM
MACRO(START_PROC, Name, Stackbytes)
PUBLIC _&Name&@&Stackbytes
.PROC &Name&@&Stackbytes
FPO 0, 0, 0, 0, 0, FRAME_FPO
ENDM
MACRO(END_PROC, Name, Stackbytes)
.ENDP &Name&@&Stackbytes
ENDM
#else
MACRO(MAKE_LABEL, Name, Stackbytes)
PUBLIC &Name
&Name:
ENDM
MACRO(START_PROC, Name, Stackbytes)
PUBLIC &Name
.PROC &Name
FPO 0, 0, 0, 0, 0, FRAME_FPO
ENDM
MACRO(END_PROC, Name, Stackbytes)
.ENDP &Name
ENDM
#endif
MACRO(STUB_U, Name, ArgCount)
Stackbytes = 4 * &ArgCount
MAKE_LABEL Zw&Name, %Stackbytes
MAKE_LABEL Nt&Name, %Stackbytes
START_PROC Nt&Name, %Stackbytes
STUBCODE_U SyscallId, %Stackbytes
END_PROC Nt&Name, %Stackbytes
SyscallId = SyscallId + 1
ENDM
MACRO(STUB_K, Name, ArgCount)
Stackbytes = 4 * &ArgCount
MAKE_LABEL Zw&Name, %Stackbytes
START_PROC Zw&Name, %Stackbytes
STUBCODE_K SyscallId, %Stackbytes
END_PROC Zw&Name, %Stackbytes
SyscallId = SyscallId + 1
ENDM

View file

@ -271,4 +271,11 @@ code = 1
#endif
/* Common definitions for FPO macro
see http://msdn.microsoft.com/en-us/library/ms679352%28VS.85%29.aspx */
#define FRAME_FPO 0
#define FRAME_TRAP 1
#define FRAME_TSS 2
#define FRAME_NONFPO 3
#endif /* _ASM_INC_ */

View file

@ -216,8 +216,6 @@ MACRO(KiCallHandler, Handler)
nop
ENDM
#define FRAME_TRAP 1
MACRO(TRAP_ENTRY, Trap, Flags)
EXTERN @&Trap&Handler@4 :PROC
PUBLIC _&Trap

View file

@ -126,15 +126,19 @@ _KiInterruptTemplateDispatch:
EXTERN @KiSystemServiceHandler@8:PROC
PUBLIC _KiSystemService
_KiSystemService:
.PROC KiSystemService
FPO 0, 0, 0, 0, 1, FRAME_TRAP
KiEnterTrap (KI_PUSH_FAKE_ERROR_CODE OR KI_NONVOLATILES_ONLY OR KI_DONT_SAVE_SEGS)
KiCallHandler @KiSystemServiceHandler@8
.ENDP KiSystemService
EXTERN @KiFastCallEntryHandler@8:PROC
PUBLIC _KiFastCallEntry
_KiFastCallEntry:
.PROC KiFastCallEntry
FPO 0, 0, 0, 0, 1, FRAME_TRAP
KiEnterTrap (KI_FAST_SYSTEM_CALL OR KI_NONVOLATILES_ONLY OR KI_DONT_SAVE_SEGS)
KiCallHandler @KiFastCallEntryHandler@8
.ENDP KiFastCallEntry
PUBLIC _KiStartUnexpectedRange@0
_KiStartUnexpectedRange@0: