- Fix several issues with msvc in ntoskrnl
- Add ATTRIB_NORETURN definition which will be used by function pointers because msvc doesn't like DECLSPEC_NORETURN in function pointers

svn path=/trunk/; revision=48287
This commit is contained in:
Giannis Adamopoulos 2010-07-26 21:32:38 +00:00
parent f126b1d282
commit 91f37cae9a
17 changed files with 70 additions and 52 deletions

View file

@ -28,10 +28,9 @@ VOID
);
typedef
FASTCALL
VOID
DECLSPEC_NORETURN
(*PHAL_SW_INTERRUPT_HANDLER_2ND_ENTRY)(
ATTRIB_NORETURN
(FASTCALL *PHAL_SW_INTERRUPT_HANDLER_2ND_ENTRY)(
IN PKTRAP_FRAME TrapFrame
);
@ -558,8 +557,8 @@ VOID NTAPI HalpInitializePICs(IN BOOLEAN EnableInterrupts);
VOID HalpApcInterrupt(VOID);
VOID HalpDispatchInterrupt(VOID);
VOID HalpDispatchInterrupt2(VOID);
VOID FASTCALL DECLSPEC_NORETURN HalpApcInterrupt2ndEntry(IN PKTRAP_FRAME TrapFrame);
VOID FASTCALL DECLSPEC_NORETURN HalpDispatchInterrupt2ndEntry(IN PKTRAP_FRAME TrapFrame);
DECLSPEC_NORETURN VOID FASTCALL HalpApcInterrupt2ndEntry(IN PKTRAP_FRAME TrapFrame);
DECLSPEC_NORETURN VOID FASTCALL HalpDispatchInterrupt2ndEntry(IN PKTRAP_FRAME TrapFrame);
/* timer.c */
VOID NTAPI HalpInitializeClock(VOID);

View file

@ -205,6 +205,12 @@ allow GCC to optimize away some EH unwind code, at least in DW2 case. */
#define _CRT_UNUSED(x) (void)x
#endif
#ifdef _MSC_VER
#define ATTRIB_NORETURN
#else
#define ATTRIB_NORETURN DECLSPEC_NORETURN
#endif
#include "_mingw_mac.h"
#endif /* !_INC_MINGW */

View file

@ -136,7 +136,7 @@ extern "C" {
#define _JMP_BUF_DEFINED
#endif
static inline __attribute__((always_inline)) void * mingw_getsp(void)
FORCEINLINE void * mingw_getsp(void)
{
void *value;
#if defined(__x86_64)

View file

@ -489,7 +489,9 @@ extern "C" {
__MINGW_EXTENSION lldiv_t __cdecl lldiv(long long, long long);
#ifndef _MSC_VER
__MINGW_EXTENSION __CRT_INLINE long long __cdecl llabs(long long _j) { return (_j >= 0 ? _j : -_j); }
#endif
__MINGW_EXTENSION long long __cdecl strtoll(const char* __restrict__, char** __restrict, int);
__MINGW_EXTENSION unsigned long long __cdecl strtoull(const char* __restrict__, char** __restrict__, int);

View file

@ -1230,6 +1230,8 @@ ExpInitializeExecutive(IN ULONG Cpu,
SharedUserData->ImageNumberHigh = IMAGE_FILE_MACHINE_ARCHITECTURE;
}
extern BOOLEAN AllowPagedPool;
VOID
NTAPI
Phase1InitializationDiscard(IN PVOID Context)
@ -1860,7 +1862,6 @@ Phase1InitializationDiscard(IN PVOID Context)
InbvEnableDisplayString(TRUE);
/* Enough fun for now */
extern BOOLEAN AllowPagedPool;
AllowPagedPool = FALSE;
/* Wait 5 seconds for it to initialize */

View file

@ -455,7 +455,7 @@ extern ULONG Ke386CacheAlignment;
extern ULONG KiFastSystemCallDisable;
extern UCHAR KiDebugRegisterTrapOffsets[9];
extern UCHAR KiDebugRegisterContextOffsets[9];
extern VOID __cdecl KiTrap02(VOID);
extern DECLSPEC_NORETURN VOID __cdecl KiTrap02(VOID);
extern VOID __cdecl KiTrap08(VOID);
extern VOID __cdecl KiTrap13(VOID);
extern VOID __cdecl KiFastCallEntry(VOID);

View file

@ -940,6 +940,7 @@ KiContinue(
IN PKTRAP_FRAME TrapFrame
);
DECLSPEC_NORETURN
VOID
FASTCALL
KiServiceExit(
@ -947,6 +948,7 @@ KiServiceExit(
IN NTSTATUS Status
);
DECLSPEC_NORETURN
VOID
FASTCALL
KiServiceExit2(

View file

@ -199,7 +199,7 @@ DECLSPEC_NORETURN VOID FASTCALL KiTrapReturn(IN PKTRAP_FRAME TrapFrame);
DECLSPEC_NORETURN VOID FASTCALL KiTrapReturnNoSegments(IN PKTRAP_FRAME TrapFrame);
typedef
DECLSPEC_NORETURN
ATTRIB_NORETURN
VOID
(FASTCALL *PFAST_SYSTEM_CALL_EXIT)(
IN PKTRAP_FRAME TrapFrame

View file

@ -29,8 +29,8 @@ VOID
NTAPI
IopReadyDeviceObjects(IN PDRIVER_OBJECT Driver)
{
PAGED_CODE();
PDEVICE_OBJECT DeviceObject;
PAGED_CODE();
/* Set the driver as initialized */
Driver->Flags |= DRVO_INITIALIZED;

View file

@ -3035,10 +3035,11 @@ NTAPI
PpIrpQueryCapabilities(IN PDEVICE_OBJECT DeviceObject,
OUT PDEVICE_CAPABILITIES DeviceCaps)
{
PAGED_CODE();
PVOID Dummy;
IO_STACK_LOCATION Stack;
PAGED_CODE();
/* Set up the Header */
RtlZeroMemory(DeviceCaps, sizeof(DEVICE_CAPABILITIES));
DeviceCaps->Size = sizeof(DEVICE_CAPABILITIES);

View file

@ -1173,7 +1173,12 @@ KiIsNpxPresent(VOID)
Cr0 = __readcr0() & ~(CR0_MP | CR0_TS | CR0_EM | CR0_ET);
/* Store on FPU stack */
#ifdef _MSC_VER
__asm fninit;
__asm fnstsw Magic;
#else
asm volatile ("fninit;" "fnstsw %0" : "+m"(Magic));
#endif
/* Magic should now be cleared */
if (Magic & 0xFF)
@ -1210,7 +1215,7 @@ KiIsNpxErrataPresent(VOID)
__writecr0(Cr0 & ~(CR0_MP | CR0_TS | CR0_EM));
/* Initialize FPU state */
asm volatile ("fninit");
Ke386FnInit();
/* Multiply the magic values and divide, we should get the result back */
Value1 = 4195835.0;
@ -1227,8 +1232,8 @@ KiIsNpxErrataPresent(VOID)
return ErrataPresent;
}
NTAPI
VOID
NTAPI
KiFlushNPXState(IN PFLOATING_SAVE_AREA SaveArea)
{
ULONG EFlags, Cr0;

View file

@ -1106,9 +1106,9 @@ Handled:
return;
}
DECLSPEC_NORETURN
VOID
NTAPI
DECLSPEC_NORETURN
KiDispatchExceptionFromTrapFrame(IN NTSTATUS Code,
IN ULONG_PTR Address,
IN ULONG ParameterCount,
@ -1145,9 +1145,9 @@ KiDispatchExceptionFromTrapFrame(IN NTSTATUS Code,
KiEoiHelper(TrapFrame);
}
DECLSPEC_NORETURN
VOID
FASTCALL
DECLSPEC_NORETURN
KiSystemFatalException(IN ULONG ExceptionCode,
IN PKTRAP_FRAME TrapFrame)
{

View file

@ -184,9 +184,8 @@ KiUnexpectedInterruptTailHandler(IN PKTRAP_FRAME TrapFrame)
}
typedef
FASTCALL
VOID
(PKI_INTERRUPT_DISPATCH)(
(FASTCALL *PKI_INTERRUPT_DISPATCH)(
IN PKTRAP_FRAME TrapFrame,
IN PKINTERRUPT Interrupt
);
@ -310,7 +309,7 @@ KiInterruptTemplateHandler(IN PKTRAP_FRAME TrapFrame,
KiEnterInterruptTrap(TrapFrame);
/* Call the correct dispatcher */
((PKI_INTERRUPT_DISPATCH*)Interrupt->DispatchAddress)(TrapFrame, Interrupt);
((PKI_INTERRUPT_DISPATCH)Interrupt->DispatchAddress)(TrapFrame, Interrupt);
}

View file

@ -16,8 +16,8 @@
/* GLOBALS *******************************************************************/
/* Boot and double-fault/NMI/DPC stack */
UCHAR P0BootStackData[KERNEL_STACK_SIZE] __attribute__((aligned (16))) = {0};
UCHAR KiDoubleFaultStackData[KERNEL_STACK_SIZE] __attribute__((aligned (16))) = {0};
UCHAR DECLSPEC_ALIGN(16) P0BootStackData[KERNEL_STACK_SIZE] = {0};
UCHAR DECLSPEC_ALIGN(16) KiDoubleFaultStackData[KERNEL_STACK_SIZE] = {0};
ULONG_PTR P0BootStack = (ULONG_PTR)&P0BootStackData[KERNEL_STACK_SIZE];
ULONG_PTR KiDoubleFaultStack = (ULONG_PTR)&KiDoubleFaultStackData[KERNEL_STACK_SIZE];

View file

@ -102,9 +102,9 @@ KiCommonExit(IN PKTRAP_FRAME TrapFrame, const ULONG Flags)
}
}
DECLSPEC_NORETURN
VOID
FASTCALL
DECLSPEC_NORETURN
KiEoiHelper(IN PKTRAP_FRAME TrapFrame)
{
/* Common trap exit code */
@ -123,9 +123,9 @@ KiEoiHelper(IN PKTRAP_FRAME TrapFrame)
KiTrapReturnNoSegments(TrapFrame);
}
DECLSPEC_NORETURN
VOID
FASTCALL
DECLSPEC_NORETURN
KiServiceExit(IN PKTRAP_FRAME TrapFrame,
IN NTSTATUS Status)
{
@ -161,9 +161,9 @@ KiServiceExit(IN PKTRAP_FRAME TrapFrame,
KiSystemCallReturn(TrapFrame);
}
DECLSPEC_NORETURN
VOID
FASTCALL
DECLSPEC_NORETURN
KiServiceExit2(IN PKTRAP_FRAME TrapFrame)
{
/* Common trap exit code */
@ -188,9 +188,9 @@ KiServiceExit2(IN PKTRAP_FRAME TrapFrame)
/* TRAP HANDLERS **************************************************************/
DECLSPEC_NORETURN
VOID
FASTCALL
DECLSPEC_NORETURN
KiDebugHandler(IN PKTRAP_FRAME TrapFrame,
IN ULONG Parameter1,
IN ULONG Parameter2,
@ -212,9 +212,9 @@ KiDebugHandler(IN PKTRAP_FRAME TrapFrame,
TrapFrame);
}
DECLSPEC_NORETURN
VOID
FASTCALL
DECLSPEC_NORETURN
KiNpxHandler(IN PKTRAP_FRAME TrapFrame,
IN PKTHREAD Thread,
IN PFX_SAVE_AREA SaveArea)
@ -369,9 +369,9 @@ KiNpxHandler(IN PKTRAP_FRAME TrapFrame,
KeBugCheckWithTf(TRAP_CAUSE_UNKNOWN, 1, Error, 0, 0, TrapFrame);
}
DECLSPEC_NORETURN
VOID
FASTCALL
DECLSPEC_NORETURN
KiTrap00Handler(IN PKTRAP_FRAME TrapFrame)
{
/* Save trap frame */
@ -389,9 +389,9 @@ KiTrap00Handler(IN PKTRAP_FRAME TrapFrame)
TrapFrame);
}
DECLSPEC_NORETURN
VOID
FASTCALL
DECLSPEC_NORETURN
KiTrap01Handler(IN PKTRAP_FRAME TrapFrame)
{
/* Save trap frame */
@ -410,8 +410,9 @@ KiTrap01Handler(IN PKTRAP_FRAME TrapFrame)
TrapFrame);
}
VOID
DECLSPEC_NORETURN
VOID
__cdecl
KiTrap02(VOID)
{
PKTSS Tss, NmiTss;
@ -556,9 +557,9 @@ KiTrap02(VOID)
KiSystemFatalException(EXCEPTION_NMI, NULL);
}
DECLSPEC_NORETURN
VOID
FASTCALL
DECLSPEC_NORETURN
KiTrap03Handler(IN PKTRAP_FRAME TrapFrame)
{
/* Save trap frame */
@ -568,9 +569,9 @@ KiTrap03Handler(IN PKTRAP_FRAME TrapFrame)
KiDebugHandler(TrapFrame, BREAKPOINT_BREAK, 0, 0);
}
DECLSPEC_NORETURN
VOID
FASTCALL
DECLSPEC_NORETURN
KiTrap04Handler(IN PKTRAP_FRAME TrapFrame)
{
/* Save trap frame */
@ -588,9 +589,9 @@ KiTrap04Handler(IN PKTRAP_FRAME TrapFrame)
TrapFrame);
}
DECLSPEC_NORETURN
VOID
FASTCALL
DECLSPEC_NORETURN
KiTrap05Handler(IN PKTRAP_FRAME TrapFrame)
{
/* Save trap frame */
@ -611,9 +612,9 @@ KiTrap05Handler(IN PKTRAP_FRAME TrapFrame)
TrapFrame);
}
DECLSPEC_NORETURN
VOID
FASTCALL
DECLSPEC_NORETURN
KiTrap06Handler(IN PKTRAP_FRAME TrapFrame)
{
PUCHAR Instruction;
@ -693,9 +694,9 @@ KiTrap06Handler(IN PKTRAP_FRAME TrapFrame)
}
DECLSPEC_NORETURN
VOID
FASTCALL
DECLSPEC_NORETURN
KiTrap07Handler(IN PKTRAP_FRAME TrapFrame)
{
PKTHREAD Thread, NpxThread;
@ -803,18 +804,18 @@ KiTrap07Handler(IN PKTRAP_FRAME TrapFrame)
KiNpxHandler(TrapFrame, Thread, SaveArea);
}
DECLSPEC_NORETURN
VOID
FASTCALL
DECLSPEC_NORETURN
KiTrap08Handler(IN PKTRAP_FRAME TrapFrame)
{
/* FIXME: Not handled */
KiSystemFatalException(EXCEPTION_DOUBLE_FAULT, TrapFrame);
}
DECLSPEC_NORETURN
VOID
FASTCALL
DECLSPEC_NORETURN
KiTrap09Handler(IN PKTRAP_FRAME TrapFrame)
{
/* Save trap frame */
@ -825,9 +826,9 @@ KiTrap09Handler(IN PKTRAP_FRAME TrapFrame)
KiSystemFatalException(EXCEPTION_NPX_OVERRUN, TrapFrame);
}
DECLSPEC_NORETURN
VOID
FASTCALL
DECLSPEC_NORETURN
KiTrap0AHandler(IN PKTRAP_FRAME TrapFrame)
{
/* Save trap frame */
@ -840,9 +841,9 @@ KiTrap0AHandler(IN PKTRAP_FRAME TrapFrame)
KiSystemFatalException(EXCEPTION_INVALID_TSS, TrapFrame);
}
DECLSPEC_NORETURN
VOID
FASTCALL
DECLSPEC_NORETURN
KiTrap0BHandler(IN PKTRAP_FRAME TrapFrame)
{
/* Save trap frame */
@ -853,9 +854,9 @@ KiTrap0BHandler(IN PKTRAP_FRAME TrapFrame)
KiSystemFatalException(EXCEPTION_SEGMENT_NOT_PRESENT, TrapFrame);
}
DECLSPEC_NORETURN
VOID
FASTCALL
DECLSPEC_NORETURN
KiTrap0CHandler(IN PKTRAP_FRAME TrapFrame)
{
/* Save trap frame */
@ -866,9 +867,9 @@ KiTrap0CHandler(IN PKTRAP_FRAME TrapFrame)
KiSystemFatalException(EXCEPTION_STACK_FAULT, TrapFrame);
}
DECLSPEC_NORETURN
VOID
FASTCALL
DECLSPEC_NORETURN
KiTrap0DHandler(IN PKTRAP_FRAME TrapFrame)
{
ULONG i, j, Iopl;
@ -1145,9 +1146,9 @@ KiTrap0DHandler(IN PKTRAP_FRAME TrapFrame)
KiTrapReturn(TrapFrame);
}
DECLSPEC_NORETURN
VOID
FASTCALL
DECLSPEC_NORETURN
KiTrap0EHandler(IN PKTRAP_FRAME TrapFrame)
{
PKTHREAD Thread;
@ -1260,9 +1261,9 @@ KiTrap0EHandler(IN PKTRAP_FRAME TrapFrame)
TrapFrame);
}
DECLSPEC_NORETURN
VOID
FASTCALL
DECLSPEC_NORETURN
KiTrap0FHandler(IN PKTRAP_FRAME TrapFrame)
{
/* Save trap frame */
@ -1273,9 +1274,9 @@ KiTrap0FHandler(IN PKTRAP_FRAME TrapFrame)
KiSystemFatalException(EXCEPTION_RESERVED_TRAP, TrapFrame);
}
DECLSPEC_NORETURN
VOID
FASTCALL
DECLSPEC_NORETURN
KiTrap10Handler(IN PKTRAP_FRAME TrapFrame)
{
PKTHREAD Thread;
@ -1301,9 +1302,9 @@ KiTrap10Handler(IN PKTRAP_FRAME TrapFrame)
KiNpxHandler(TrapFrame, Thread, SaveArea);
}
DECLSPEC_NORETURN
VOID
FASTCALL
DECLSPEC_NORETURN
KiTrap11Handler(IN PKTRAP_FRAME TrapFrame)
{
/* Save trap frame */
@ -1314,9 +1315,9 @@ KiTrap11Handler(IN PKTRAP_FRAME TrapFrame)
KiSystemFatalException(EXCEPTION_ALIGNMENT_CHECK, TrapFrame);
}
DECLSPEC_NORETURN
VOID
FASTCALL
DECLSPEC_NORETURN
KiTrap13Handler(IN PKTRAP_FRAME TrapFrame)
{
PKTHREAD Thread;
@ -1417,9 +1418,9 @@ KiCallbackReturnHandler(IN PKTRAP_FRAME TrapFrame)
while (TRUE);
}
DECLSPEC_NORETURN
VOID
FASTCALL
DECLSPEC_NORETURN
KiRaiseAssertionHandler(IN PKTRAP_FRAME TrapFrame)
{
/* Save trap frame */
@ -1434,9 +1435,9 @@ KiRaiseAssertionHandler(IN PKTRAP_FRAME TrapFrame)
TrapFrame);
}
DECLSPEC_NORETURN
VOID
FASTCALL
DECLSPEC_NORETURN
KiDebugServiceHandler(IN PKTRAP_FRAME TrapFrame)
{
/* Save trap frame */
@ -1449,9 +1450,9 @@ KiDebugServiceHandler(IN PKTRAP_FRAME TrapFrame)
KiDebugHandler(TrapFrame, TrapFrame->Eax, TrapFrame->Ecx, TrapFrame->Edx);
}
DECLSPEC_NORETURN
VOID
FORCEINLINE
DECLSPEC_NORETURN
KiSystemCall(IN PKTRAP_FRAME TrapFrame,
IN PVOID Arguments)
{
@ -1574,9 +1575,9 @@ ExitCall:
KiServiceExit(TrapFrame, Result);
}
DECLSPEC_NORETURN
VOID
FASTCALL
DECLSPEC_NORETURN
KiSystemServiceHandler(IN PKTRAP_FRAME TrapFrame,
IN PVOID Arguments)
{
@ -1584,9 +1585,9 @@ KiSystemServiceHandler(IN PKTRAP_FRAME TrapFrame,
KiSystemCall(TrapFrame, Arguments);
}
DECLSPEC_NORETURN
VOID
FASTCALL
DECLSPEC_NORETURN
KiFastCallEntryHandler(IN PKTRAP_FRAME TrapFrame,
IN PVOID Arguments)
{

View file

@ -145,6 +145,8 @@ MiComputeNonPagedPoolVa(IN ULONG FreePages)
}
}
extern KEVENT ZeroPageThreadEvent;
NTSTATUS
NTAPI
MiInitMachineDependent(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
@ -497,7 +499,6 @@ MiInitMachineDependent(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
MiInitializeColorTables();
/* ReactOS Stuff */
extern KEVENT ZeroPageThreadEvent;
KeInitializeEvent(&ZeroPageThreadEvent, NotificationEvent, TRUE);
/* Build the PFN Database */

View file

@ -566,6 +566,8 @@ MiRemoveHeadList(IN PMMPFNLIST ListHead)
return Pfn1;
}
extern KEVENT ZeroPageThreadEvent;
VOID
NTAPI
MiInsertPageInFreeList(IN PFN_NUMBER PageFrameIndex)
@ -674,7 +676,6 @@ MiInsertPageInFreeList(IN PFN_NUMBER PageFrameIndex)
#endif
/* Notify zero page thread if enough pages are on the free list now */
extern KEVENT ZeroPageThreadEvent;
if ((MmFreePageListHead.Total > 8) && !(KeReadStateEvent(&ZeroPageThreadEvent)))
{
/* This is ReactOS-specific */