Fix compilation of Interlocked API

This was achieved by prefixing XboxKrnl functions with Xb to prevent a name conflict with WinNT.h
Additionally, rather than importing native Interlocked functions from NTDLL, we use the versions defined in WinNT.h
This commit is contained in:
Luke Usher 2016-12-01 22:03:48 +00:00
parent 86053967fc
commit 56185eed5f
5 changed files with 43 additions and 92 deletions

View File

@ -172,47 +172,47 @@ XBSYSAPI EXPORTNUM(34) PLIST_ENTRY FASTCALL ExfInterlockedRemoveHeadList
IN PKSPIN_LOCK Lock
);
XBSYSAPI EXPORTNUM(51) LONG FASTCALL InterlockedCompareExchange
XBSYSAPI EXPORTNUM(51) LONG FASTCALL XbInterlockedCompareExchange
(
IN OUT volatile PLONG Destination,
IN LONG Exchange,
IN LONG Comparand
);
XBSYSAPI EXPORTNUM(52) LONG FASTCALL InterlockedDecrement
XBSYSAPI EXPORTNUM(52) LONG FASTCALL XbInterlockedDecrement
(
IN OUT PLONG Addend
);
XBSYSAPI EXPORTNUM(53) LONG FASTCALL InterlockedIncrement
XBSYSAPI EXPORTNUM(53) LONG FASTCALL XbInterlockedIncrement
(
IN OUT PLONG Addend
);
XBSYSAPI EXPORTNUM(54) LONG FASTCALL InterlockedExchange
XBSYSAPI EXPORTNUM(54) LONG FASTCALL XbInterlockedExchange
(
IN volatile PLONG Destination,
IN LONG Value
);
XBSYSAPI EXPORTNUM(55) LONG FASTCALL InterlockedExchangeAdd
XBSYSAPI EXPORTNUM(55) LONG FASTCALL XbInterlockedExchangeAdd
(
IN volatile PLONG Addend,
IN LONG Value
);
// Dxbx Note : The Xbox1 SINGLE_LIST strucures are the same as in WinNT
XBSYSAPI EXPORTNUM(56) SINGLE_LIST_ENTRY * FASTCALL InterlockedFlushSList
XBSYSAPI EXPORTNUM(56) SINGLE_LIST_ENTRY * FASTCALL XbInterlockedFlushSList
(
IN PSLIST_HEADER ListHead
);
XBSYSAPI EXPORTNUM(57) SLIST_ENTRY * FASTCALL InterlockedPopEntrySList
XBSYSAPI EXPORTNUM(57) SLIST_ENTRY * FASTCALL XbInterlockedPopEntrySList
(
IN PSLIST_HEADER ListHead
);
XBSYSAPI EXPORTNUM(58) SLIST_ENTRY * FASTCALL InterlockedPushEntrySList
XBSYSAPI EXPORTNUM(58) SLIST_ENTRY * FASTCALL XbInterlockedPushEntrySList
(
IN PSLIST_HEADER ListHead,
IN PSLIST_ENTRY ListEntry

View File

@ -287,8 +287,12 @@ LIST_ENTRY, *PLIST_ENTRY;
typedef struct _SINGLE_LIST_ENTRY {
struct _SINGLE_LIST_ENTRY *Next;
} SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
} SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY, SLIST_ENTRY, *PSLIST_ENTRY;
/*
* Disabled as Cxbx-Reloaded does not support Win64 compilation
* Win64 is not possible while using direct code execution, unless we add
* X86-X64 translation
#if defined(_WIN64)
//
@ -311,10 +315,13 @@ typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY {
#else
typedef struct _SINGLE_LIST_ENTRY SLIST_ENTRY, *PSLIST_ENTRY;
typedef _SLIST_ENTRY {
struct _SLIST_ENTRY *Next;
} SLIST_ENTRY, *PSLIST_ENTRY;
#endif // _WIN64
*/
typedef union _SLIST_HEADER {
ULONGLONG Alignment;
struct {

View File

@ -123,9 +123,9 @@ std::ostream& operator<<(std::ostream& os, const xboxkrnl::PLARGE_INTEGER& value
using namespace xboxkrnl;
/*
// Source:ReactOS
XBSYSAPI EXPORTNUM(51) xboxkrnl::LONG FASTCALL xboxkrnl::InterlockedCompareExchange
XBSYSAPI EXPORTNUM(51) xboxkrnl::LONG FASTCALL xboxkrnl::XbInterlockedCompareExchange
(
IN OUT volatile PLONG Destination,
IN LONG Exchange,
@ -138,33 +138,33 @@ XBSYSAPI EXPORTNUM(51) xboxkrnl::LONG FASTCALL xboxkrnl::InterlockedCompareExcha
LOG_FUNC_ARG(Comparand)
LOG_FUNC_END;
RETURN(NtDll::InterlockedCompareExchange((NtDll::PLONG)Destination, (NtDll::LONG)Exchange, (NtDll::LONG)Comparand));
RETURN(InterlockedCompareExchange((NtDll::PLONG)Destination, (NtDll::LONG)Exchange, (NtDll::LONG)Comparand));
}
// Source:ReactOS
XBSYSAPI EXPORTNUM(52) xboxkrnl::LONG FASTCALL xboxkrnl::InterlockedDecrement
XBSYSAPI EXPORTNUM(52) xboxkrnl::LONG FASTCALL xboxkrnl::XbInterlockedDecrement
(
IN OUT PLONG Addend
)
{
LOG_FUNC_ONE_ARG(Addend);
RETURN(NtDll::InterlockedDecrement((NtDll::PLONG)Addend));
RETURN(InterlockedDecrement((NtDll::PLONG)Addend));
}
// Source:ReactOS
XBSYSAPI EXPORTNUM(53) xboxkrnl::LONG FASTCALL xboxkrnl::InterlockedIncrement
XBSYSAPI EXPORTNUM(53) xboxkrnl::LONG FASTCALL xboxkrnl::XbInterlockedIncrement
(
IN OUT PLONG Addend
)
{
LOG_FUNC_ONE_ARG(Addend);
RETURN(NtDll::InterlockedIncrement((NtDll::PLONG)Addend));
RETURN(InterlockedIncrement((NtDll::PLONG)Addend));
}
// Source:ReactOS
XBSYSAPI EXPORTNUM(54) xboxkrnl::LONG FASTCALL xboxkrnl::InterlockedExchange
XBSYSAPI EXPORTNUM(54) xboxkrnl::LONG FASTCALL xboxkrnl::XbInterlockedExchange
(
IN volatile PLONG Destination,
IN LONG Value
@ -175,11 +175,11 @@ XBSYSAPI EXPORTNUM(54) xboxkrnl::LONG FASTCALL xboxkrnl::InterlockedExchange
LOG_FUNC_ARG(Value)
LOG_FUNC_END;
RETURN(NtDll::InterlockedExchange((NtDll::PLONG)Destination, (NtDll::LONG)Value));
RETURN(InterlockedExchange((NtDll::PLONG)Destination, (NtDll::LONG)Value));
}
// Source:ReactOS
XBSYSAPI EXPORTNUM(55) xboxkrnl::LONG FASTCALL xboxkrnl::InterlockedExchangeAdd
XBSYSAPI EXPORTNUM(55) xboxkrnl::LONG FASTCALL xboxkrnl::XbInterlockedExchangeAdd
(
IN volatile PLONG Addend,
IN LONG Value
@ -190,34 +190,34 @@ XBSYSAPI EXPORTNUM(55) xboxkrnl::LONG FASTCALL xboxkrnl::InterlockedExchangeAdd
LOG_FUNC_ARG(Value)
LOG_FUNC_END;
RETURN(NtDll::InterlockedExchangeAdd((NtDll::PLONG)Addend, (NtDll::LONG)Value));
RETURN(InterlockedExchangeAdd((NtDll::PLONG)Addend, (NtDll::LONG)Value));
}
// Source:ReactOS
// Dxbx Note : The Xbox1 SINGLE_LIST strucures are the same as in WinNT
XBSYSAPI EXPORTNUM(56) xboxkrnl::PSINGLE_LIST_ENTRY FASTCALL xboxkrnl::InterlockedFlushSList
XBSYSAPI EXPORTNUM(56) xboxkrnl::PSINGLE_LIST_ENTRY FASTCALL xboxkrnl::XbInterlockedFlushSList
(
IN xboxkrnl::PSLIST_HEADER ListHead
)
{
LOG_FUNC_ONE_ARG(ListHead);
RETURN(NtDll::InterlockedFlushSList((NtDll::PSLIST_HEADER)ListHead));
RETURN((xboxkrnl::PSINGLE_LIST_ENTRY)InterlockedFlushSList((::PSLIST_HEADER)ListHead));
}
// Source:ReactOS
XBSYSAPI EXPORTNUM(57) xboxkrnl::PSLIST_ENTRY FASTCALL xboxkrnl::InterlockedPopEntrySList
XBSYSAPI EXPORTNUM(57) xboxkrnl::PSLIST_ENTRY FASTCALL xboxkrnl::XbInterlockedPopEntrySList
(
IN PSLIST_HEADER ListHead
)
{
LOG_FUNC_ONE_ARG(ListHead);
RETURN(NtDll::InterlockedPopEntrySList((NtDll::PSLIST_HEADER)ListHead));
RETURN((PSLIST_ENTRY)InterlockedPopEntrySList((::PSLIST_HEADER)ListHead));
}
// Source:ReactOS
XBSYSAPI EXPORTNUM(58) xboxkrnl::PSLIST_ENTRY FASTCALL xboxkrnl::InterlockedPushEntrySList
XBSYSAPI EXPORTNUM(58) xboxkrnl::PSLIST_ENTRY FASTCALL xboxkrnl::XbInterlockedPushEntrySList
(
IN PSLIST_HEADER ListHead,
IN PSLIST_ENTRY ListEntry
@ -228,9 +228,9 @@ XBSYSAPI EXPORTNUM(58) xboxkrnl::PSLIST_ENTRY FASTCALL xboxkrnl::InterlockedPush
LOG_FUNC_ARG(ListEntry)
LOG_FUNC_END;
RETURN(NtDll::InterlockedPushEntrySList((NtDll::PSLIST_HEADER)ListHead, (NtDll::PSLIST_ENTRY)ListEntry));
RETURN((xboxkrnl::PSLIST_ENTRY)InterlockedPushEntrySList((::PSLIST_HEADER)ListHead, (::PSLIST_ENTRY)ListEntry));
}
*/
// ******************************************************************
// * 0x00A0 - KfRaiseIrql

View File

@ -565,52 +565,6 @@ KUSER_SHARED_DATA, *PKUSER_SHARED_DATA;
// This is only the top of the actual definition. For the complete version,
// see http://processhacker.sourceforge.net/doc/ntexapi_8h_source.html
/*
typedef LONG(FASTCALL *FPTR_InterlockedCompareExchange)
(
IN OUT volatile PLONG Destination,
IN LONG Exchange,
IN LONG Comparand
);
typedef LONG(FASTCALL *FPTR_InterlockedDecrement)
(
IN OUT PLONG Addend
);
typedef LONG(FASTCALL *FPTR_InterlockedExchange)
(
IN volatile PLONG Destination,
IN LONG Value
);
typedef LONG(FASTCALL *FPTR_InterlockedExchangeAdd)
(
IN volatile PLONG Addend,
IN LONG Value
);
typedef PSINGLE_LIST_ENTRY(FASTCALL *FPTR_InterlockedFlushSList)
(
IN PSLIST_HEADER ListHead
);
typedef LONG(FASTCALL *FPTR_InterlockedIncrement)
(
IN OUT PLONG Addend
);
typedef PSLIST_ENTRY(FASTCALL *FPTR_InterlockedPopEntrySList)
(
IN PSLIST_HEADER ListHead
);
typedef PSLIST_ENTRY(FASTCALL *FPTR_InterlockedPushEntrySList)
(
IN PSLIST_HEADER ListHead,
IN PSLIST_ENTRY ListEntry
);
*/
// ******************************************************************
// * KeDelayExecutionThread

View File

@ -115,24 +115,14 @@ extern "C" CXBXKRNL_API uint32 CxbxKrnl_KernelThunkTable[379] =
(uint32)FUNC(&xboxkrnl::HalRequestSoftwareInterrupt), // 0x0030 (48)
(uint32)FUNC(&xboxkrnl::HalReturnToFirmware), // 0x0031 (49)
(uint32)FUNC(&xboxkrnl::HalWriteSMBusValue), // 0x0032 (50)
(uint32)PANIC(0x0033), // 0x0033 (51) InterlockedCompareExchange
(uint32)PANIC(0x0034), // 0x0034 (52) InterlockedDecrement
(uint32)PANIC(0x0035), // 0x0035 (53) InterlockedIncrement
(uint32)PANIC(0x0036), // 0x0036 (54) InterlockedExchange
(uint32)PANIC(0x0037), // 0x0037 (55) InterlockedExchangeAdd
(uint32)PANIC(0x0038), // 0x0038 (56) InterlockedFlushSList
(uint32)PANIC(0x0039), // 0x0039 (57) InterlockedPopEntrySList
(uint32)PANIC(0x003A), // 0x003A (58) InterlockedPushEntrySList
/*
(uint32)FUNC(&xboxkrnl::InterlockedCompareExchange), // 0x0033 (51)
(uint32)FUNC(&xboxkrnl::InterlockedDecrement), // 0x0034 (52)
(uint32)FUNC(&xboxkrnl::InterlockedIncrement), // 0x0035 (53)
(uint32)FUNC(&xboxkrnl::InterlockedExchange), // 0x0036 (54)
(uint32)FUNC(&xboxkrnl::InterlockedExchangeAdd), // 0x0037 (55)
(uint32)FUNC(&xboxkrnl::InterlockedFlushSList), // 0x0038 (56)
(uint32)FUNC(&xboxkrnl::InterlockedPopEntrySList), // 0x0039 (57)
(uint32)FUNC(&xboxkrnl::InterlockedPushEntrySList), // 0x003A (58)
*/
(uint32)FUNC(&xboxkrnl::XbInterlockedCompareExchange), // 0x0033 (51)
(uint32)FUNC(&xboxkrnl::XbInterlockedDecrement), // 0x0034 (52)
(uint32)FUNC(&xboxkrnl::XbInterlockedIncrement), // 0x0035 (53)
(uint32)FUNC(&xboxkrnl::XbInterlockedExchange), // 0x0036 (54)
(uint32)FUNC(&xboxkrnl::XbInterlockedExchangeAdd), // 0x0037 (55)
(uint32)FUNC(&xboxkrnl::XbInterlockedFlushSList), // 0x0038 (56)
(uint32)FUNC(&xboxkrnl::XbInterlockedPopEntrySList), // 0x0039 (57)
(uint32)FUNC(&xboxkrnl::XbInterlockedPushEntrySList), // 0x003A (58)
(uint32)PANIC(0x003B), // 0x003B (59) IoAllocateIrp
(uint32)PANIC(0x003C), // 0x003C (60) IoBuildAsynchronousFsdRequest
(uint32)PANIC(0x003D), // 0x003D (61) IoBuildDeviceIoControlRequest