MCPcopy Create free account
hub / github.com/beefytech/Beef / FinishHotSwap

Method FinishHotSwap

IDEHelper/DbgModule.cpp:6711–6813  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6709}
6710
6711void DbgModule::FinishHotSwap()
6712{
6713 BF_ASSERT(IsObjectFile());
6714
6715 auto linkedModule = GetLinkedModule();
6716 auto mainModule = mDebugTarget->mTargetBinary;
6717
6718 HashSet<String> failSet;
6719
6720 String findName;
6721 for (auto deferredHotResolve : mDeferredHotResolveList)
6722 {
6723 addr_target resolveTargetAddr = deferredHotResolve->mNewAddr;
6724
6725 findName = deferredHotResolve->mName;
6726 if (mDbgFlavor == DbgFlavor_MS)
6727 {
6728 // ... why do we need to find these variables in the variable map instead of the symbol name map?
6729 }
6730
6731 auto itr = mainModule->mStaticVariableMap.find(findName.c_str());
6732 if (itr != mainModule->mStaticVariableMap.end())
6733 {
6734 DbgVariable* variable = itr->second;
6735 resolveTargetAddr = mDebugTarget->GetStaticAddress(variable);
6736 }
6737 else
6738 {
6739 auto symbolEntry = mainModule->mSymbolNameMap.Find(findName.c_str());
6740
6741 if (symbolEntry != NULL)
6742 {
6743 resolveTargetAddr = symbolEntry->mValue->mAddress;
6744 }
6745 else
6746 {
6747 if (deferredHotResolve->mName == "__ImageBase")
6748 {
6749 resolveTargetAddr = (addr_target)mainModule->mImageBase;
6750 }
6751 else
6752 {
6753 resolveTargetAddr = mainModule->LocateSymbol(deferredHotResolve->mName);
6754 if (resolveTargetAddr == 0)
6755 {
6756 failSet.Add(deferredHotResolve->mName);
6757 continue;
6758 }
6759 }
6760 }
6761 }
6762 DoReloc(deferredHotResolve->mHotTargetSection, deferredHotResolve->mReloc, resolveTargetAddr, NULL);
6763 }
6764 mDeferredHotResolveList.Clear();
6765
6766 if (!failSet.IsEmpty())
6767 {
6768 bool handled = false;

Callers

nothing calls this directly

Calls 14

findMethod · 0.80
GetStaticAddressMethod · 0.80
c_strMethod · 0.45
endMethod · 0.45
FindMethod · 0.45
LocateSymbolMethod · 0.45
AddMethod · 0.45
ClearMethod · 0.45
IsEmptyMethod · 0.45
emptyMethod · 0.45
backMethod · 0.45
ContainsMethod · 0.45

Tested by

no test coverage detected