mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-10 12:32:20 +02:00
Improved hot swap error handling
This commit is contained in:
parent
6e5b6694a1
commit
ca37d1d8af
3 changed files with 19 additions and 6 deletions
|
@ -6462,7 +6462,7 @@ bool DbgModule::ReadCOFF(DataStream* stream, DbgModuleKind moduleKind)
|
||||||
|
|
||||||
if (needHotTargetMemory != 0)
|
if (needHotTargetMemory != 0)
|
||||||
{
|
{
|
||||||
BF_ASSERT(needHotTargetMemory == mImageSize);
|
BF_ASSERT(needHotTargetMemory >= mImageSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
//BF_ASSERT(mEndTypeIdx == (int)linkedModule->mTypes.size());
|
//BF_ASSERT(mEndTypeIdx == (int)linkedModule->mTypes.size());
|
||||||
|
|
|
@ -103,21 +103,22 @@ void DebugTarget::SetupTargetBinary()
|
||||||
|
|
||||||
addr_target reservedPtr = NULL;
|
addr_target reservedPtr = NULL;
|
||||||
while ((addr_target)checkHotReserveAddr < (addr_target)mTargetBinary->mImageBase + 0x30000000)
|
while ((addr_target)checkHotReserveAddr < (addr_target)mTargetBinary->mImageBase + 0x30000000)
|
||||||
{
|
{
|
||||||
reservedPtr = (addr_target)VirtualAllocEx(mDebugger->mProcessInfo.hProcess, (void*)(intptr)checkHotReserveAddr, reserveSize, MEM_RESERVE, PAGE_EXECUTE_READWRITE);
|
reservedPtr = (addr_target)VirtualAllocEx(mDebugger->mProcessInfo.hProcess, (void*)(intptr)checkHotReserveAddr, reserveSize, MEM_RESERVE, PAGE_EXECUTE_READWRITE);
|
||||||
if (reservedPtr != NULL)
|
if (reservedPtr != NULL)
|
||||||
break;
|
break;
|
||||||
checkHotReserveAddr += 4 * mb;
|
checkHotReserveAddr += 4 * mb;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (reservedPtr != 0)
|
if (reservedPtr == 0)
|
||||||
|
{
|
||||||
|
mDebugger->Fail("Failed to reserve memory for hot swapping");
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
BF_ASSERT(mHotHeap == NULL);
|
BF_ASSERT(mHotHeap == NULL);
|
||||||
mHotHeap = new HotHeap(reservedPtr, reserveSize);
|
mHotHeap = new HotHeap(reservedPtr, reserveSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: Throw actual error if we can't reserve HOT area
|
|
||||||
BF_ASSERT(reservedPtr != NULL);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -1061,6 +1061,18 @@ void WinDebugger::HotLoad(const Array<String>& objectFiles, int hotIdx)
|
||||||
{
|
{
|
||||||
AutoCrit autoCrit(mDebugManager->mCritSect);
|
AutoCrit autoCrit(mDebugManager->mCritSect);
|
||||||
|
|
||||||
|
if (mDebugTarget->mTargetBinary == NULL)
|
||||||
|
{
|
||||||
|
Fail("Hot swapping failed because the hot target binary has not yet been loaded.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mDebugTarget->mHotHeap == NULL)
|
||||||
|
{
|
||||||
|
Fail("There is no hot heap space available for hot swapping.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
BfLogDbg("WinDebugger::HotLoad Start %d\n", hotIdx);
|
BfLogDbg("WinDebugger::HotLoad Start %d\n", hotIdx);
|
||||||
|
|
||||||
SetAndRestoreValue<int> prevHotIdx(mActiveHotIdx, hotIdx);
|
SetAndRestoreValue<int> prevHotIdx(mActiveHotIdx, hotIdx);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue