diff --git a/reactos/include/asm/asm.inc b/reactos/include/asm/asm.inc index 6f0b0925177..c204283452e 100644 --- a/reactos/include/asm/asm.inc +++ b/reactos/include/asm/asm.inc @@ -32,17 +32,22 @@ rip = 0 /* To avoid reverse syntax we provide a new macro .PROC, replacing PROC... */ .PROC MACRO name - name PROC FRAME - _name: + _&name PROC ENDM #define FUNC .PROC /* ... and .ENDP, replacing ENDP */ .ENDP MACRO name - name ENDP + _&name ENDP ENDM #define ENDFUNC .ENDP +/* check http://msdn.microsoft.com/en-us/library/9c9k076y%28VS.80%29.aspx + and http://msdn.microsoft.com/en-us/library/ms679352%28VS.85%29.aspx */ +FPO MACRO cdwLocals, cdwParams, cbProlog, cbRegs, fUseBP, cbFrame + .FPO (cdwLocals, cdwParams, cbProlog, cbRegs, fUseBP, cbFrame) +ENDM + /* MASM doesn't have an ASCII macro */ .ASCII MACRO text:VARARG DB text @@ -184,7 +189,7 @@ ENDM /* To avoid reverse syntax we provide a new macro .PROC, replacing PROC... */ .macro .PROC name .func \name - \name: + _\name: .cfi_startproc .equ cfa_current_offset, -8 .endm @@ -237,6 +242,12 @@ ENDM .text .endm +/* check http://msdn.microsoft.com/en-us/library/9c9k076y%28VS.80%29.aspx + and http://msdn.microsoft.com/en-us/library/ms679352%28VS.85%29.aspx */ +.macro FPO cdwLocals, cdwParams, cbProlog, cbRegs, fUseBP, cbFrame + /* dummy */ +.endm + /* Macros for x64 stack unwind OPs */ .macro .allocstack size diff --git a/reactos/include/reactos/asm.inc b/reactos/include/reactos/asm.inc index 45c9068abf4..b029eb08d45 100644 --- a/reactos/include/reactos/asm.inc +++ b/reactos/include/reactos/asm.inc @@ -41,6 +41,12 @@ ENDM name ENDP ENDM +/* check http://msdn.microsoft.com/en-us/library/9c9k076y%28VS.80%29.aspx + and http://msdn.microsoft.com/en-us/library/ms679352%28VS.85%29.aspx */ +FPO MACRO cdwLocals, cdwParams, cbProlog, cbRegs, fUseBP, cbFrame + .FPO (cdwLocals, cdwParams, cbProlog, cbRegs, fUseBP, cbFrame) +ENDM + /* MASM doesn't have an ASCII macro */ .ASCII MACRO text DB text @@ -143,7 +149,7 @@ ENDM /* To avoid reverse syntax we provide a new macro .PROC, replacing PROC... */ .macro .PROC name .func \name - \name: + _\name: .cfi_startproc .equ cfa_current_offset, -8 .endm @@ -192,6 +198,12 @@ ENDM .text .endm +/* check http://msdn.microsoft.com/en-us/library/9c9k076y%28VS.80%29.aspx + and http://msdn.microsoft.com/en-us/library/ms679352%28VS.85%29.aspx */ +.macro FPO cdwLocals, cdwParams, cbProlog, cbRegs, fUseBP, cbFrame + /* dummy */ +.endm + /* Macros for x64 stack unwind OPs */ .macro .allocstack size diff --git a/reactos/ntoskrnl/include/internal/i386/asmmacro.S b/reactos/ntoskrnl/include/internal/i386/asmmacro.S index aeb67fcd417..d220c9a445f 100644 --- a/reactos/ntoskrnl/include/internal/i386/asmmacro.S +++ b/reactos/ntoskrnl/include/internal/i386/asmmacro.S @@ -216,12 +216,21 @@ MACRO(KiCallHandler, Handler) nop ENDM +#define FRAME_TRAP 1 + MACRO(TRAP_ENTRY, Trap, Flags) -EXTERN @&Trap&Handler@4 :PROC + EXTERN @&Trap&Handler@4 :PROC PUBLIC _&Trap - _&Trap: - KiEnterTrap Flags - KiCallHandler @&Trap&Handler@4 + .PROC &Trap + /* Generate proper debugging symbols */ + FPO 0, 0, 0, 0, 1, FRAME_TRAP + + /* Common code to create the trap frame */ + KiEnterTrap Flags + + /* Call the C handler */ + KiCallHandler @&Trap&Handler@4 + .ENDP &Trap ENDM #define KI_RESTORE_EAX HEX(001)