diff --git a/reactos/ntoskrnl/include/internal/trap_x.h b/reactos/ntoskrnl/include/internal/trap_x.h index bf82738f22d..3d5260db1fe 100644 --- a/reactos/ntoskrnl/include/internal/trap_x.h +++ b/reactos/ntoskrnl/include/internal/trap_x.h @@ -214,6 +214,7 @@ KiCheckForApcDelivery(IN PKTRAP_FRAME TrapFrame) VOID FORCEINLINE +DECLSPEC_NORETURN KiDispatchException0Args(IN NTSTATUS Code, IN ULONG_PTR Address, IN PKTRAP_FRAME TrapFrame) @@ -224,6 +225,7 @@ KiDispatchException0Args(IN NTSTATUS Code, VOID FORCEINLINE +DECLSPEC_NORETURN KiDispatchException1Args(IN NTSTATUS Code, IN ULONG_PTR Address, IN ULONG P1, @@ -235,6 +237,7 @@ KiDispatchException1Args(IN NTSTATUS Code, VOID FORCEINLINE +DECLSPEC_NORETURN KiDispatchException2Args(IN NTSTATUS Code, IN ULONG_PTR Address, IN ULONG P1, @@ -247,6 +250,7 @@ KiDispatchException2Args(IN NTSTATUS Code, FORCEINLINE VOID +DECLSPEC_NORETURN KiSystemCallReturn(IN PKTRAP_FRAME TrapFrame) { /* Restore nonvolatiles, EAX, and do a "jump" back to the kernel caller */ @@ -272,10 +276,12 @@ KiSystemCallReturn(IN PKTRAP_FRAME TrapFrame) [v] "i"(KTRAP_FRAME_ESP) : "%esp" ); + exit(0); } FORCEINLINE VOID +DECLSPEC_NORETURN KiSystemCallTrapReturn(IN PKTRAP_FRAME TrapFrame) { /* Regular interrupt exit, but we only restore EAX as a volatile */ @@ -299,10 +305,12 @@ KiSystemCallTrapReturn(IN PKTRAP_FRAME TrapFrame) [e] "i"(KTRAP_FRAME_EIP) : "%esp" ); + exit(0); } FORCEINLINE VOID +DECLSPEC_NORETURN KiSystemCallSysExitReturn(IN PKTRAP_FRAME TrapFrame) { /* Restore nonvolatiles, EAX, and do a SYSEXIT back to the user caller */ @@ -330,10 +338,12 @@ KiSystemCallSysExitReturn(IN PKTRAP_FRAME TrapFrame) [v] "i"(KTRAP_FRAME_V86_ES) : "%esp" ); + exit(0); } FORCEINLINE VOID +DECLSPEC_NORETURN KiTrapReturn(IN PKTRAP_FRAME TrapFrame) { /* Regular interrupt exit */ @@ -361,10 +371,12 @@ KiTrapReturn(IN PKTRAP_FRAME TrapFrame) [e] "i"(KTRAP_FRAME_EIP) : "%esp" ); + exit(0); } FORCEINLINE VOID +DECLSPEC_NORETURN KiEditedTrapReturn(IN PKTRAP_FRAME TrapFrame) { /* Regular interrupt exit */ @@ -393,6 +405,7 @@ KiEditedTrapReturn(IN PKTRAP_FRAME TrapFrame) [e] "i"(KTRAP_FRAME_ERROR_CODE) /* We *WANT* the error code since ESP is there! */ : "%esp" ); + exit(0); } NTSTATUS diff --git a/reactos/ntoskrnl/ke/i386/traphdlr.c b/reactos/ntoskrnl/ke/i386/traphdlr.c index bf82b8e51a2..a2e380234de 100644 --- a/reactos/ntoskrnl/ke/i386/traphdlr.c +++ b/reactos/ntoskrnl/ke/i386/traphdlr.c @@ -50,6 +50,7 @@ UCHAR KiTrapIoTable[] = VOID FASTCALL +DECLSPEC_NORETURN KiExitTrap(IN PKTRAP_FRAME TrapFrame, IN UCHAR Skip) { @@ -235,6 +236,7 @@ KiExitV86Trap(IN PKTRAP_FRAME TrapFrame) VOID FASTCALL +DECLSPEC_NORETURN KiEoiHelper(IN PKTRAP_FRAME TrapFrame) { /* Disable interrupts until we return */ @@ -249,6 +251,7 @@ KiEoiHelper(IN PKTRAP_FRAME TrapFrame) VOID FASTCALL +DECLSPEC_NORETURN KiServiceExit(IN PKTRAP_FRAME TrapFrame, IN NTSTATUS Status) { @@ -267,6 +270,7 @@ KiServiceExit(IN PKTRAP_FRAME TrapFrame, VOID FASTCALL +DECLSPEC_NORETURN KiServiceExit2(IN PKTRAP_FRAME TrapFrame) { /* Disable interrupts until we return */ @@ -423,6 +427,7 @@ KiEnterTrap(IN PKTRAP_FRAME TrapFrame) VOID FASTCALL +DECLSPEC_NORETURN KiSystemFatalException(IN ULONG ExceptionCode, IN PKTRAP_FRAME TrapFrame) { @@ -437,6 +442,7 @@ KiSystemFatalException(IN ULONG ExceptionCode, VOID NTAPI +DECLSPEC_NORETURN KiDispatchExceptionFromTrapFrame(IN NTSTATUS Code, IN ULONG_PTR Address, IN ULONG ParameterCount, @@ -477,6 +483,7 @@ KiDispatchExceptionFromTrapFrame(IN NTSTATUS Code, VOID FASTCALL +DECLSPEC_NORETURN KiDebugHandler(IN PKTRAP_FRAME TrapFrame, IN ULONG Parameter1, IN ULONG Parameter2, @@ -500,6 +507,7 @@ KiDebugHandler(IN PKTRAP_FRAME TrapFrame, VOID FASTCALL +DECLSPEC_NORETURN KiNpxHandler(IN PKTRAP_FRAME TrapFrame, IN PKTHREAD Thread, IN PFX_SAVE_AREA SaveArea) @@ -656,6 +664,7 @@ KiNpxHandler(IN PKTRAP_FRAME TrapFrame, VOID FASTCALL +DECLSPEC_NORETURN KiTrap00Handler(IN PKTRAP_FRAME TrapFrame) { /* Save trap frame */ @@ -675,6 +684,7 @@ KiTrap00Handler(IN PKTRAP_FRAME TrapFrame) VOID FASTCALL +DECLSPEC_NORETURN KiTrap01Handler(IN PKTRAP_FRAME TrapFrame) { /* Save trap frame */ @@ -694,6 +704,7 @@ KiTrap01Handler(IN PKTRAP_FRAME TrapFrame) } VOID +DECLSPEC_NORETURN KiTrap02(VOID) { PKTSS Tss, NmiTss; @@ -840,6 +851,7 @@ KiTrap02(VOID) VOID FASTCALL +DECLSPEC_NORETURN KiTrap03Handler(IN PKTRAP_FRAME TrapFrame) { /* Save trap frame */ @@ -851,6 +863,7 @@ KiTrap03Handler(IN PKTRAP_FRAME TrapFrame) VOID FASTCALL +DECLSPEC_NORETURN KiTrap04Handler(IN PKTRAP_FRAME TrapFrame) { /* Save trap frame */ @@ -870,6 +883,7 @@ KiTrap04Handler(IN PKTRAP_FRAME TrapFrame) VOID FASTCALL +DECLSPEC_NORETURN KiTrap05Handler(IN PKTRAP_FRAME TrapFrame) { /* Save trap frame */ @@ -892,6 +906,7 @@ KiTrap05Handler(IN PKTRAP_FRAME TrapFrame) VOID FASTCALL +DECLSPEC_NORETURN KiTrap06Handler(IN PKTRAP_FRAME TrapFrame) { PUCHAR Instruction; @@ -937,6 +952,7 @@ KiTrap06Handler(IN PKTRAP_FRAME TrapFrame) VOID FASTCALL +DECLSPEC_NORETURN KiTrap07Handler(IN PKTRAP_FRAME TrapFrame) { PKTHREAD Thread, NpxThread; @@ -1046,6 +1062,7 @@ KiTrap07Handler(IN PKTRAP_FRAME TrapFrame) VOID FASTCALL +DECLSPEC_NORETURN KiTrap08Handler(IN PKTRAP_FRAME TrapFrame) { /* FIXME: Not handled */ @@ -1054,6 +1071,7 @@ KiTrap08Handler(IN PKTRAP_FRAME TrapFrame) VOID FASTCALL +DECLSPEC_NORETURN KiTrap09Handler(IN PKTRAP_FRAME TrapFrame) { /* Save trap frame */ @@ -1066,6 +1084,7 @@ KiTrap09Handler(IN PKTRAP_FRAME TrapFrame) VOID FASTCALL +DECLSPEC_NORETURN KiTrap0AHandler(IN PKTRAP_FRAME TrapFrame) { /* Save trap frame */ @@ -1080,6 +1099,7 @@ KiTrap0AHandler(IN PKTRAP_FRAME TrapFrame) VOID FASTCALL +DECLSPEC_NORETURN KiTrap0BHandler(IN PKTRAP_FRAME TrapFrame) { /* Save trap frame */ @@ -1092,6 +1112,7 @@ KiTrap0BHandler(IN PKTRAP_FRAME TrapFrame) VOID FASTCALL +DECLSPEC_NORETURN KiTrap0CHandler(IN PKTRAP_FRAME TrapFrame) { /* Save trap frame */ @@ -1104,6 +1125,7 @@ KiTrap0CHandler(IN PKTRAP_FRAME TrapFrame) VOID FASTCALL +DECLSPEC_NORETURN KiTrap0DHandler(IN PKTRAP_FRAME TrapFrame, IN ULONG EFlags) { @@ -1388,6 +1410,7 @@ KiTrap0DHandler(IN PKTRAP_FRAME TrapFrame, VOID FASTCALL +DECLSPEC_NORETURN KiTrap0EHandler(IN PKTRAP_FRAME TrapFrame) { PKTHREAD Thread; @@ -1510,6 +1533,7 @@ KiTrap0EHandler(IN PKTRAP_FRAME TrapFrame) VOID FASTCALL +DECLSPEC_NORETURN KiTrap0FHandler(IN PKTRAP_FRAME TrapFrame) { /* Save trap frame */ @@ -1520,9 +1544,9 @@ KiTrap0FHandler(IN PKTRAP_FRAME TrapFrame) KiSystemFatalException(EXCEPTION_RESERVED_TRAP, TrapFrame); } - VOID FASTCALL +DECLSPEC_NORETURN KiTrap10Handler(IN PKTRAP_FRAME TrapFrame) { PKTHREAD Thread; @@ -1550,6 +1574,7 @@ KiTrap10Handler(IN PKTRAP_FRAME TrapFrame) VOID FASTCALL +DECLSPEC_NORETURN KiTrap11Handler(IN PKTRAP_FRAME TrapFrame) { /* Save trap frame */ @@ -1562,6 +1587,7 @@ KiTrap11Handler(IN PKTRAP_FRAME TrapFrame) VOID FASTCALL +DECLSPEC_NORETURN KiTrap13Handler(IN PKTRAP_FRAME TrapFrame) { PKTHREAD Thread; @@ -1664,6 +1690,7 @@ KiCallbackReturnHandler(IN PKTRAP_FRAME TrapFrame) VOID FASTCALL +DECLSPEC_NORETURN KiRaiseAssertionHandler(IN PKTRAP_FRAME TrapFrame) { /* Save trap frame */ @@ -1680,6 +1707,7 @@ KiRaiseAssertionHandler(IN PKTRAP_FRAME TrapFrame) VOID FASTCALL +DECLSPEC_NORETURN KiDebugServiceHandler(IN PKTRAP_FRAME TrapFrame) { /* Save trap frame */ @@ -1694,6 +1722,7 @@ KiDebugServiceHandler(IN PKTRAP_FRAME TrapFrame) VOID FASTCALL +DECLSPEC_NORETURN KiSystemCall(IN ULONG SystemCallNumber, IN PVOID Arguments) { @@ -1784,6 +1813,7 @@ ExitCall: VOID FORCEINLINE +DECLSPEC_NORETURN KiSystemCallHandler(IN PKTRAP_FRAME TrapFrame, IN ULONG ServiceNumber, IN PVOID Arguments, @@ -1825,6 +1855,7 @@ KiSystemCallHandler(IN PKTRAP_FRAME TrapFrame, VOID __attribute__((regparm(3))) +DECLSPEC_NORETURN KiFastCallEntryHandler(IN ULONG ServiceNumber, IN PVOID Arguments, IN PKTRAP_FRAME TrapFrame) @@ -1858,6 +1889,7 @@ KiFastCallEntryHandler(IN ULONG ServiceNumber, VOID __attribute__((regparm(3))) +DECLSPEC_NORETURN KiSystemServiceHandler(IN ULONG ServiceNumber, IN PVOID Arguments, IN PKTRAP_FRAME TrapFrame)