Remove HLE emulation of Rtl Heap functions

Titles can now manage their own heap, so this is no longer required
This commit is contained in:
Luke Usher 2016-08-12 09:30:12 +01:00
parent 67c37feebd
commit bea4f63f20
10 changed files with 3 additions and 759 deletions

View File

@ -142,214 +142,6 @@ DWORD WINAPI XTL::EmuGetTimeZoneInformation
return dwRet;
}
// ******************************************************************
// * func: EmuRtlCreateHeap
// ******************************************************************
PVOID WINAPI XTL::EmuRtlCreateHeap
(
IN ULONG Flags,
IN PVOID Base OPTIONAL,
IN ULONG Reserve OPTIONAL,
IN ULONG Commit,
IN PVOID Lock OPTIONAL,
IN PVOID RtlHeapParams OPTIONAL
)
{
EmuSwapFS(); // Win2k/XP FS
DbgPrintf("EmuXapi (0x%X): EmuRtlCreateHeap\n"
"(\n"
" Flags : 0x%.08X\n"
" Base : 0x%.08X\n"
" Reserve : 0x%.08X\n"
" Commit : 0x%.08X\n"
" Lock : 0x%.08X\n"
" RtlHeapParams : 0x%.08X\n"
");\n",
GetCurrentThreadId(), Flags, Base, Reserve, Commit, Lock, RtlHeapParams);
NtDll::RTL_HEAP_DEFINITION RtlHeapDefinition;
ZeroMemory(&RtlHeapDefinition, sizeof(RtlHeapDefinition));
RtlHeapDefinition.Length = sizeof(RtlHeapDefinition);
PVOID pRet = NtDll::RtlCreateHeap(Flags, Base, Reserve, Commit, Lock, &RtlHeapDefinition);
EmuSwapFS(); // XBox FS
return pRet;
}
// ******************************************************************
// * func: EmuRtlAllocateHeap
// ******************************************************************
PVOID WINAPI XTL::EmuRtlAllocateHeap
(
IN HANDLE hHeap,
IN DWORD dwFlags,
IN SIZE_T dwBytes
)
{
EmuSwapFS(); // Win2k/XP FS
//* too much debug output
DbgPrintf("EmuXapi (0x%X): EmuRtlAllocateHeap\n"
"(\n"
" hHeap : 0x%.08X\n"
" dwFlags : 0x%.08X\n"
" dwBytes : 0x%.08X\n"
");\n",
GetCurrentThreadId(), hHeap, dwFlags, dwBytes);
//*/
BYTE offs;
PVOID pRet = CxbxRtlAlloc(hHeap, dwFlags, dwBytes+0x20);
if( pRet )
{
offs = (BYTE)(RoundUp((uint32)pRet, 0x20) - (uint32)pRet);
if(offs == 0)
{
offs = 0x20;
}
pRet = (PVOID)((uint32)pRet + offs);
*(BYTE*)((uint32)pRet - 1) = offs;
DbgPrintf("pRet : 0x%.08X\n", pRet);
}
// JSRF test
// if( !pRet ) __asm int 3;
EmuSwapFS(); // XBox FS
return pRet;
}
// ******************************************************************
// * func: EmuRtlFreeHeap
// ******************************************************************
BOOL WINAPI XTL::EmuRtlFreeHeap
(
IN HANDLE hHeap,
IN DWORD dwFlags,
IN PVOID lpMem
)
{
EmuSwapFS(); // Win2k/XP FS
//* too much debug output
DbgPrintf("EmuXapi (0x%X): EmuRtlFreeHeap\n"
"(\n"
" hHeap : 0x%.08X\n"
" dwFlags : 0x%.08X\n"
" lpMem : 0x%.08X\n"
");\n",
GetCurrentThreadId(), hHeap, dwFlags, lpMem);
//*/
if(lpMem != NULL)
{
BYTE offs = *(BYTE*)((uint32)lpMem - 1);
lpMem = (PVOID)((uint32)lpMem - offs);
}
BOOL bRet = CxbxRtlFree(hHeap, dwFlags, lpMem);
EmuSwapFS(); // XBox FS
return bRet;
}
// ******************************************************************
// * func: EmuRtlReAllocateHeap
// ******************************************************************
PVOID WINAPI XTL::EmuRtlReAllocateHeap
(
IN HANDLE hHeap,
IN DWORD dwFlags,
IN PVOID lpMem,
IN SIZE_T dwBytes
)
{
EmuSwapFS(); // Win2k/XP FS
//* too much debug output
DbgPrintf("EmuXapi (0x%X): EmuRtlReAllocateHeap\n"
"(\n"
" hHeap : 0x%.08X\n"
" dwFlags : 0x%.08X\n"
" lpMem : 0x%.08X\n"
" dwBytes : 0x%.08X\n"
");\n",
GetCurrentThreadId(), hHeap, dwFlags, lpMem, dwBytes);
//*/
BYTE offs;
if(lpMem != NULL)
{
offs = *(BYTE*)((uint32)lpMem - 1);
lpMem = (PVOID)((uint32)lpMem - offs);
}
PVOID pRet = CxbxRtlRealloc(hHeap, dwFlags, lpMem, dwBytes + 0x20);
if(lpMem != NULL)
{
pRet = (PVOID)((uint32)pRet + offs);
}
DbgPrintf("pRet : 0x%.08X\n", pRet);
EmuSwapFS(); // XBox FS
return pRet;
}
// ******************************************************************
// * func: EmuRtlSizeHeap
// ******************************************************************
SIZE_T WINAPI XTL::EmuRtlSizeHeap
(
IN HANDLE hHeap,
IN DWORD dwFlags,
IN PVOID lpMem
)
{
EmuSwapFS(); // Win2k/XP FS
//* too much debug output
DbgPrintf("EmuXapi (0x%X): EmuRtlSizeHeap\n"
"(\n"
" hHeap : 0x%.08X\n"
" dwFlags : 0x%.08X\n"
" lpMem : 0x%.08X\n"
");\n",
GetCurrentThreadId(), hHeap, dwFlags, lpMem);
//*/
if(lpMem != NULL)
{
BYTE offs = *(BYTE*)((uint32)lpMem - 1);
lpMem = (PVOID)((uint32)lpMem - offs);
}
SIZE_T ret = CxbxRtlSizeHeap(hHeap, dwFlags, lpMem) - 0x20;
EmuSwapFS(); // XBox FS
return ret;
}
// ******************************************************************
// * func: EmuQueryPerformanceCounter
// ******************************************************************
@ -1652,29 +1444,6 @@ DWORD WINAPI XTL::EmuXGetSectionSize
}
// ******************************************************************
// * func: EmuRtlDestroyHeap
// ******************************************************************
PVOID WINAPI XTL::EmuRtlDestroyHeap
(
IN HANDLE HeapHandle
)
{
EmuSwapFS(); // Win2k/XP FS
DbgPrintf("EmuXapi (0x%X): EmuRtlDestroyHeap\n"
"(\n"
" HeapHandle : 0x%.08X\n"
");\n",
GetCurrentThreadId(), HeapHandle );
PVOID pRet = NtDll::RtlDestroyHeap( HeapHandle );
EmuSwapFS(); // Xbox FS
return pRet;
}
// ******************************************************************
// * func: EmuQueueUserAPC
// ******************************************************************

View File

@ -1674,59 +1674,6 @@ OOVPATable XAPI_1_0_3911[] =
"EmuGetExitCodeThread"
#endif
},
// RtlCreateHeap
{
(OOVPA*)&RtlCreateHeap_1_0_3911,
XTL::EmuRtlCreateHeap,
#ifdef _DEBUG_TRACE
"EmuRtlCreateHeap"
#endif
},
// RtlAllocateHeap
{
(OOVPA*)&RtlAllocateHeap_1_0_3911,
XTL::EmuRtlAllocateHeap,
#ifdef _DEBUG_TRACE
"EmuRtlAllocateHeap"
#endif
},
// RtlFreeHeap
{
(OOVPA*)&RtlFreeHeap_1_0_3911,
XTL::EmuRtlFreeHeap,
#ifdef _DEBUG_TRACE
"EmuRtlFreeHeap"
#endif
},
//*
// RtlReAllocateHeap
{
(OOVPA*)&RtlReAllocateHeap_1_0_3911,
XTL::EmuRtlReAllocateHeap,
#ifdef _DEBUG_TRACE
"EmuRtlReAllocateHeap"
#endif
},
//*/
//*
// RtlSizeHeap
{
(OOVPA*)&RtlSizeHeap_1_0_3911,
XTL::EmuRtlSizeHeap,
#ifdef _DEBUG_TRACE
"EmuRtlSizeHeap"
#endif
},
//*/
// XInitDevices
{

View File

@ -391,59 +391,7 @@ OOVPATable XAPI_1_0_4034[] =
"EmuXInputSetState"
#endif
},
// RtlCreateHeap (* unchanged since 3911 *)
{
(OOVPA*)&RtlCreateHeap_1_0_3911,
XTL::EmuRtlCreateHeap,
#ifdef _DEBUG_TRACE
"EmuRtlCreateHeap"
#endif
},
// RtlAllocateHeap (* unchanged since 3911 *)
{
(OOVPA*)&RtlAllocateHeap_1_0_3911,
XTL::EmuRtlAllocateHeap,
#ifdef _DEBUG_TRACE
"EmuRtlAllocateHeap"
#endif
},
// RtlFreeHeap (* unchanged since 3911 *)
{
(OOVPA*)&RtlFreeHeap_1_0_3911,
XTL::EmuRtlFreeHeap,
#ifdef _DEBUG_TRACE
"EmuRtlFreeHeap"
#endif
},
//*
// RtlReAllocateHeap (* unchanged since 3911 *)
{
(OOVPA*)&RtlReAllocateHeap_1_0_3911,
XTL::EmuRtlReAllocateHeap,
#ifdef _DEBUG_TRACE
"EmuRtlReAllocateHeap"
#endif
},
//*/
//*
// RtlSizeHeap (* unchanged since 3911 *)
{
(OOVPA*)&RtlSizeHeap_1_0_3911,
XTL::EmuRtlSizeHeap,
#ifdef _DEBUG_TRACE
"EmuRtlSizeHeap"
#endif
},
// XRegisterThreadNotifyRoutine (* unchanged since 3911 *)
{
(OOVPA*)&XRegisterThreadNotifyRoutine_1_0_3911,

View File

@ -642,59 +642,6 @@ OOVPATable XAPI_1_0_4134[] =
#ifdef _DEBUG_TRACE
"GetTimeZoneInformation"
#endif
},
// RtlCreateHeap (* unchanged since 3911 *)
{
(OOVPA*)&RtlCreateHeap_1_0_3911,
XTL::EmuRtlCreateHeap,
#ifdef _DEBUG_TRACE
"EmuRtlCreateHeap"
#endif
},
// RtlAllocateHeap (* unchanged since 3911 *)
{
(OOVPA*)&RtlAllocateHeap_1_0_3911,
XTL::EmuRtlAllocateHeap,
#ifdef _DEBUG_TRACE
"EmuRtlAllocateHeap"
#endif
},
// RtlFreeHeap (* unchanged since 3911 *)
{
(OOVPA*)&RtlFreeHeap_1_0_3911,
XTL::EmuRtlFreeHeap,
#ifdef _DEBUG_TRACE
"EmuRtlFreeHeap"
#endif
},
//*
// RtlReAllocateHeap (* unchanged since 3911 *)
{
(OOVPA*)&RtlReAllocateHeap_1_0_3911,
XTL::EmuRtlReAllocateHeap,
#ifdef _DEBUG_TRACE
"EmuRtlReAllocateHeap"
#endif
},
//*/
//*
// RtlSizeHeap (* unchanged since 3911 *)
{
(OOVPA*)&RtlSizeHeap_1_0_3911,
XTL::EmuRtlSizeHeap,
#ifdef _DEBUG_TRACE
"EmuRtlSizeHeap"
#endif
},
// XapiBootToDash (* unchanged since 3911 *)
{
@ -824,16 +771,6 @@ OOVPATable XAPI_1_0_4134[] =
"EmuXFreeSectionByHandle"
#endif
},
// RtlDestroyHeap
{
(OOVPA*)&RtlDestroyHeap_1_0_4134,
XTL::EmuRtlDestroyHeap,
#ifdef _DEBUG_TRACE
"EmuRtlDestroyHeap"
#endif
},
// SetThreadPriorityBoost (* unchanged since 3911 *)
{
(OOVPA*)&SetThreadPriorityBoost_1_0_3911,

View File

@ -589,56 +589,7 @@ SOOVPA<7> SetWaitableTimer_1_0_4361 =
// ******************************************************************
OOVPATable XAPI_1_0_4361[] =
{
// RtlCreateHeap (* unchanged since 3911 *)
{
(OOVPA*)&RtlCreateHeap_1_0_3911,
XTL::EmuRtlCreateHeap,
#ifdef _DEBUG_TRACE
"EmuRtlCreateHeap"
#endif
},
// RtlAllocateHeap (* unchanged since 3911 *)
{
(OOVPA*)&RtlAllocateHeap_1_0_3911,
XTL::EmuRtlAllocateHeap,
#ifdef _DEBUG_TRACE
"EmuRtlAllocateHeap"
#endif
},
// RtlFreeHeap
{
(OOVPA*)&RtlFreeHeap_1_0_4361,
XTL::EmuRtlFreeHeap,
#ifdef _DEBUG_TRACE
"EmuRtlFreeHeap"
#endif
},
// RtlReAllocateHeap (* unchanged since 1.0.3911 *)
{
(OOVPA*)&RtlReAllocateHeap_1_0_3911,
XTL::EmuRtlReAllocateHeap,
#ifdef _DEBUG_TRACE
"EmuRtlReAllocateHeap"
#endif
},
// RtlSizeHeap (* unchanged since 1.0.3911 *)
{
(OOVPA*)&RtlSizeHeap_1_0_3911,
XTL::EmuRtlSizeHeap,
#ifdef _DEBUG_TRACE
"EmuRtlSizeHeap"
#endif
},
// QueryPerformanceCounter
{
(OOVPA*)&QueryPerformanceCounter_1_0_4361,
@ -928,16 +879,6 @@ OOVPATable XAPI_1_0_4361[] =
"EmuSetWaitableTimer"
#endif
},
// RtlDestroyHeap (* unchanged since 4134 *)
{
(OOVPA*)&RtlDestroyHeap_1_0_4134,
XTL::EmuRtlDestroyHeap,
#ifdef _DEBUG_TRACE
"EmuRtlDestroyHeap"
#endif
},
};
// ******************************************************************

View File

@ -98,56 +98,7 @@ SOOVPA<8> XMountUtilityDrive_1_0_4432 =
// ******************************************************************
OOVPATable XAPI_1_0_4432[] =
{
// RtlCreateHeap (* unchanged since 1.0.4361 *) (* OR FARTHER *)
{
(OOVPA*)&RtlCreateHeap_1_0_3911,
XTL::EmuRtlCreateHeap,
#ifdef _DEBUG_TRACE
"EmuRtlCreateHeap"
#endif
},
// RtlAllocateHeap (* unchanged since 1.0.4361 *) (* OR FARTHER *)
{
(OOVPA*)&RtlAllocateHeap_1_0_3911,
XTL::EmuRtlAllocateHeap,
#ifdef _DEBUG_TRACE
"EmuRtlAllocateHeap"
#endif
},
// RtlFreeHeap
{
(OOVPA*)&RtlFreeHeap_1_0_4432,
XTL::EmuRtlFreeHeap,
#ifdef _DEBUG_TRACE
"EmuRtlFreeHeap"
#endif
},
// RtlReAllocateHeap (* unchanged since 1.0.3911 *)
{
(OOVPA*)&RtlReAllocateHeap_1_0_3911,
XTL::EmuRtlReAllocateHeap,
#ifdef _DEBUG_TRACE
"EmuRtlReAllocateHeap"
#endif
},
// RtlSizeHeap (* unchanged since 1.0.3911 *)
{
(OOVPA*)&RtlSizeHeap_1_0_3911,
XTL::EmuRtlSizeHeap,
#ifdef _DEBUG_TRACE
"EmuRtlSizeHeap"
#endif
},
// XMountUtilityDrive
{
(OOVPA*)&XMountUtilityDrive_1_0_4432,
@ -351,16 +302,6 @@ OOVPATable XAPI_1_0_4432[] =
"EmuGetFileAttributesA"
#endif
},
// RtlDestroyHeap (* unchanged since 4134 *)
{
(OOVPA*)&RtlDestroyHeap_1_0_4134,
XTL::EmuRtlDestroyHeap,
#ifdef _DEBUG_TRACE
"EmuRtlDestroyHeap"
#endif
},
};
// ******************************************************************

View File

@ -1315,56 +1315,6 @@ OOVPATable XAPI_1_0_4627[] =
"EmuXRegisterThreadNotifyRoutine"
#endif
},
// RtlCreateHeap (* unchanged since 1.0.3911 *)
{
(OOVPA*)&RtlCreateHeap_1_0_3911,
XTL::EmuRtlCreateHeap,
#ifdef _DEBUG_TRACE
"EmuRtlCreateHeap"
#endif
},
// RtlAllocateHeap (* unchanged since 1.0.3911 *)
{
(OOVPA*)&RtlAllocateHeap_1_0_3911,
XTL::EmuRtlAllocateHeap,
#ifdef _DEBUG_TRACE
"EmuRtlAllocateHeap"
#endif
},
// RtlFreeHeap
{
(OOVPA*)&RtlFreeHeap_1_0_4627,
XTL::EmuRtlFreeHeap,
#ifdef _DEBUG_TRACE
"EmuRtlFreeHeap"
#endif
},
// RtlReAllocateHeap
{
(OOVPA*)&RtlReAllocateHeap_1_0_4627,
XTL::EmuRtlReAllocateHeap,
#ifdef _DEBUG_TRACE
"EmuRtlReAllocateHeap"
#endif
},
// RtlSizeHeap (* unchanged since 3911 *)
{
(OOVPA*)&RtlSizeHeap_1_0_3911,
XTL::EmuRtlSizeHeap,
#ifdef _DEBUG_TRACE
"EmuRtlSizeHeap"
#endif
},
// QueryPerformanceCounter (* unchanged since 4361 *)
{
(OOVPA*)&QueryPerformanceCounter_1_0_4361,
@ -1798,16 +1748,6 @@ OOVPATable XAPI_1_0_4627[] =
#ifdef _DEBUG_TRACE
"EmuGetExitCodeThread"
#endif
},
// RtlDestroyHeap (* unchanged since 4134 *)
{
(OOVPA*)&RtlDestroyHeap_1_0_4134,
XTL::EmuRtlDestroyHeap,
#ifdef _DEBUG_TRACE
"EmuRtlDestroyHeap"
#endif
},
// GetOverlappedResult
{

View File

@ -304,56 +304,7 @@ OOVPATable XAPI_1_0_5233[] =
"EmuXRegisterThreadNotifyRoutine"
#endif
},
// RtlCreateHeap (* unchanged since 1.0.3911 *)
{
(OOVPA*)&RtlCreateHeap_1_0_3911,
XTL::EmuRtlCreateHeap,
#ifdef _DEBUG_TRACE
"EmuRtlCreateHeap"
#endif
},
// RtlAllocateHeap (* unchanged since 1.0.3911 *)
{
(OOVPA*)&RtlAllocateHeap_1_0_3911,
XTL::EmuRtlAllocateHeap,
#ifdef _DEBUG_TRACE
"EmuRtlAllocateHeap"
#endif
},
// RtlFreeHeap (* unchanged since 1.0.4627 *)
{
(OOVPA*)&RtlFreeHeap_1_0_4627,
XTL::EmuRtlFreeHeap,
#ifdef _DEBUG_TRACE
"EmuRtlFreeHeap"
#endif
},
// RtlReAllocateHeap (* unchanged since 1.0.4627 *)
{
(OOVPA*)&RtlReAllocateHeap_1_0_4627,
XTL::EmuRtlReAllocateHeap,
#ifdef _DEBUG_TRACE
"EmuRtlReAllocateHeap"
#endif
},
// RtlSizeHeap (* unchanged since 3911 *)
{
(OOVPA*)&RtlSizeHeap_1_0_3911,
XTL::EmuRtlSizeHeap,
#ifdef _DEBUG_TRACE
"EmuRtlSizeHeap"
#endif
},
// QueryPerformanceCounter (* unchanged since 4361 *)
{
(OOVPA*)&QueryPerformanceCounter_1_0_4361,
@ -519,16 +470,6 @@ OOVPATable XAPI_1_0_5233[] =
"EmuGetFileAttributesA"
#endif
},
// RtlDestroyHeap (* unchanged since 4134 *)
{
(OOVPA*)&RtlDestroyHeap_1_0_4134,
XTL::EmuRtlDestroyHeap,
#ifdef _DEBUG_TRACE
"EmuRtlDestroyHeap"
#endif
},
};
// ******************************************************************

View File

@ -517,57 +517,7 @@ OOVPATable XAPI_1_0_5558[] =
"EmuXRegisterThreadNotifyRoutine"
#endif
},
// RtlCreateHeap
{
(OOVPA*)&RtlCreateHeap_1_0_5558,
XTL::EmuRtlCreateHeap,
#ifdef _DEBUG_TRACE
"EmuRtlCreateHeap"
#endif
},
// RtlAllocateHeap
{
(OOVPA*)&RtlAllocateHeap_1_0_5558,
XTL::EmuRtlAllocateHeap,
#ifdef _DEBUG_TRACE
"EmuRtlAllocateHeap"
#endif
},
// RtlFreeHeap (* unchanged since 4627 *)
{
(OOVPA*)&RtlFreeHeap_1_0_4627,
XTL::EmuRtlFreeHeap,
#ifdef _DEBUG_TRACE
"EmuRtlFreeHeap"
#endif
},
// RtlReAllocateHeap (* unchanged since 4627 *)
{
(OOVPA*)&RtlReAllocateHeap_1_0_4627,
XTL::EmuRtlReAllocateHeap,
#ifdef _DEBUG_TRACE
"EmuRtlReAllocateHeap"
#endif
},
// RtlSizeHeap
{
(OOVPA*)&RtlSizeHeap_1_0_5558,
XTL::EmuRtlSizeHeap,
#ifdef _DEBUG_TRACE
"EmuRtlSizeHeap"
#endif
},
// QueryPerformanceCounter (* unchanged since 4361 *)
// QueryPerformanceCounter (* unchanged since 4361 *)
{
(OOVPA*)&QueryPerformanceCounter_1_0_4361,
@ -903,16 +853,6 @@ OOVPATable XAPI_1_0_5558[] =
// "XapiFiberStartup"
// #endif
//},
// RtlDestroyHeap (* unchanged since 4134 *)
{
(OOVPA*)&RtlDestroyHeap_1_0_4134,
XTL::EmuRtlDestroyHeap,
#ifdef _DEBUG_TRACE
"EmuRtlDestroyHeap"
#endif
},
// XID_fCloseDevice
{
(OOVPA*)&XID_fCloseDevice_1_0_5558, 0,

View File

@ -231,56 +231,6 @@ OOVPATable XAPI_1_0_5849[] =
"EmuSetThreadPriority"
#endif
},
// RtlCreateHeap (* unchanged since 5558 *)
{
(OOVPA*)&RtlCreateHeap_1_0_5558,
XTL::EmuRtlCreateHeap,
#ifdef _DEBUG_TRACE
"EmuRtlCreateHeap"
#endif
},
// RtlAllocateHeap (* unchanged since 5558 *)
{
(OOVPA*)&RtlAllocateHeap_1_0_5558,
XTL::EmuRtlAllocateHeap,
#ifdef _DEBUG_TRACE
"EmuRtlAllocateHeap"
#endif
},
// RtlFreeHeap (* unchanged since 4627 *)
{
(OOVPA*)&RtlFreeHeap_1_0_4627,
XTL::EmuRtlFreeHeap,
#ifdef _DEBUG_TRACE
"EmuRtlFreeHeap"
#endif
},
// RtlReAllocateHeap (* unchanged since 4627 *)
{
(OOVPA*)&RtlReAllocateHeap_1_0_4627,
XTL::EmuRtlReAllocateHeap,
#ifdef _DEBUG_TRACE
"EmuRtlReAllocateHeap"
#endif
},
// RtlSizeHeap (* unchanged since 5558 *)
{
(OOVPA*)&RtlSizeHeap_1_0_5558,
XTL::EmuRtlSizeHeap,
#ifdef _DEBUG_TRACE
"EmuRtlSizeHeap"
#endif
},
// QueryPerformanceCounter (* unchanged since 4361 *)
{
(OOVPA*)&QueryPerformanceCounter_1_0_4361,
@ -575,16 +525,6 @@ OOVPATable XAPI_1_0_5849[] =
"EmuConvertThreadToFiber"
#endif
},
// RtlDestroyHeap (* unchanged since 4134 *)
{
(OOVPA*)&RtlDestroyHeap_1_0_4134,
XTL::EmuRtlDestroyHeap,
#ifdef _DEBUG_TRACE
"EmuRtlDestroyHeap"
#endif
},
};
// ******************************************************************