mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-08 03:28:20 +02:00
Initial checkin
This commit is contained in:
parent
c74712dad9
commit
078564ac9e
3242 changed files with 1616395 additions and 0 deletions
112
IDEHelper/DebugTarget.h
Normal file
112
IDEHelper/DebugTarget.h
Normal file
|
@ -0,0 +1,112 @@
|
|||
#pragma once
|
||||
|
||||
#include "X86Target.h"
|
||||
#include "DbgModule.h"
|
||||
|
||||
NS_BF_DBG_BEGIN
|
||||
|
||||
class HotHeap;
|
||||
|
||||
static const int DBG_MAX_LOOKBACK = 64*1024;
|
||||
|
||||
class WdStackFrame;
|
||||
|
||||
enum DbgOnDemandKind
|
||||
{
|
||||
DbgOnDemandKind_None,
|
||||
DbgOnDemandKind_LocalOnly,
|
||||
DbgOnDemandKind_AllowRemote
|
||||
};
|
||||
|
||||
class DebugTarget
|
||||
{
|
||||
public:
|
||||
WinDebugger* mDebugger;
|
||||
|
||||
DbgRadixMap<DbgSymbol*> mSymbolMap;
|
||||
DbgAutoStaticEntryBucketMap mAutoStaticEntryBucketMap;
|
||||
Array<Array<DbgAutoStaticEntry> > mAutoStaticEntryBuckets;
|
||||
DbgRadixMap<DbgSubprogramMapEntry*> mSubprogramMap;
|
||||
DbgRadixMap<DbgExceptionDirectoryEntry*> mExceptionDirectoryMap;
|
||||
DbgRadixMap<DbgCompileUnitContrib*> mContribMap;
|
||||
|
||||
Array<String>* mCapturedNamesPtr;
|
||||
Array<DbgType*>* mCapturedTypesPtr;
|
||||
|
||||
HotHeap* mHotHeap;
|
||||
int mLastHotHeapCleanIdx;
|
||||
DbgModule* mTargetBinary;
|
||||
Array<DbgModule*> mDbgModules;
|
||||
//DbgModule* mLastDWARF;
|
||||
HashSet<DbgSrcFile*> mPendingSrcFileRehup; // Waiting to remove old/invalid line info
|
||||
|
||||
BumpAllocator mAlloc;
|
||||
bool mWasLocallyBuilt;
|
||||
bool mIsEmpty;
|
||||
bool mCheckedCompilerSettings;
|
||||
bool mBfObjectHasFlags;
|
||||
bool mBfObjectHasVDataExtender;
|
||||
int mBfObjectVDataIntefaceSlotCount;
|
||||
int mBfObjectSize;
|
||||
|
||||
Array<DwCommonFrameDescriptor*> mCommonFrameDescriptors;
|
||||
std::map<addr_target, DwFrameDescriptor> mDwFrameDescriptorMap;
|
||||
std::map<addr_target, COFFFrameDescriptorEntry> mCOFFFrameDescriptorMap;
|
||||
|
||||
//Array<DbgSrcFile*> mSrcFiles;
|
||||
Dictionary<String, DbgSrcFile*> mSrcFiles;
|
||||
Dictionary<String, String> mLocalToOrigSrcMap;
|
||||
|
||||
protected:
|
||||
bool RollBackStackFrame_ExceptionDirectory(addr_target findPC, CPURegisters* registers, addr_target* outReturnAddressLoc, bool& alreadyRolledBackPC);
|
||||
bool RollBackStackFrame_ExceptionDirectory(CPURegisters* registers, addr_target* outReturnAddressLoc, bool& alreadyRolledBackPC);
|
||||
bool RollBackStackFrame_DwFrameDescriptor(CPURegisters* registers, addr_target* outReturnAddressLoc);
|
||||
bool RollBackStackFrame_COFFFrameDescriptor(CPURegisters* registers, addr_target* outReturnAddressLoc, bool isStackStart);
|
||||
bool PropogateRegisterUpCallStack_ExceptionDirectory(addr_target findPC, CPURegisters* callerRegisters, CPURegisters* calleeRegisters, void* regPtr, bool& wasSaved);
|
||||
void RemoveTargetData();
|
||||
bool GetValueByNameInBlock_Helper(DbgSubprogram* dwSubprogram, DbgBlock* dwBlock, String& name, WdStackFrame* stackFrame, intptr* outAddr, DbgType** outType, DbgAddrType* outAddrType);
|
||||
|
||||
public:
|
||||
DebugTarget(WinDebugger* debugger);
|
||||
~DebugTarget();
|
||||
|
||||
DbgModule* Init(const StringImpl& fileName, intptr imageBase = 0);
|
||||
void CreateEmptyTarget();
|
||||
DbgModule* HotLoad(const StringImpl& fileName, int hotIdx);
|
||||
DbgModule* SetupDyn(const StringImpl& filePath, DataStream* stream, intptr imageBase);
|
||||
String UnloadDyn(addr_target imageBase);
|
||||
void CleanupHotHeap();
|
||||
void RehupSrcFiles();
|
||||
DbgSrcFile* AddSrcFile(const String& srcFilePath);
|
||||
DbgSrcFile* GetSrcFile(const String& srcFilePath);
|
||||
|
||||
bool FindSymbolAt(addr_target addr, String* outSymbol, addr_target* outOffset = NULL, DbgModule** outDWARF = NULL);
|
||||
addr_target FindSymbolAddr(const StringImpl& name);
|
||||
|
||||
addr_target GetStaticAddress(DbgVariable* dwVariable);
|
||||
DbgSubprogram* FindSubProgram(addr_target address, DbgOnDemandKind onDemandKind = DbgOnDemandKind_AllowRemote);
|
||||
void GetCompilerSettings();
|
||||
void AddAutoStaticEntry(const DbgAutoStaticEntry& entry);
|
||||
void IterateAutoStaticEntries(uint64 memoryRangeStart, uint64 memoryRangeLen, std::function<void(DbgAutoStaticEntry const&)>& func);
|
||||
void EvaluateAutoStaticVariable(DbgVariable* variable, const StringImpl& fullName);
|
||||
|
||||
bool GetValueByName(DbgSubprogram* dwSubprogram, const StringImpl& name, WdStackFrame* stackFrame, intptr* outAddr, DbgType** outType, DbgAddrType* outAddrType);
|
||||
//bool GetValueByName(const StringImpl& name, CPURegisters* registers, addr_target* outAddr, DbgType** outType, bool* outIsAddr);
|
||||
bool GetValueByNameInBlock(DbgSubprogram* dwSubprogram, DbgBlock* dwBlock, String& name, WdStackFrame* stackFrame, intptr* outAddr, DbgType** outType, DbgAddrType* outAddrType);
|
||||
void GetAutoValueNames(DbgAutoValueMapType& outAutos, WdStackFrame* stackFrame, uint64 memoryRangeStart, uint64 memoryRangeLen);
|
||||
void GetAutoValueNamesInBlock(DbgAutoValueMapType& outAutos, DbgSubprogram* dwSubprogram, DbgBlock* dwBlock, WdStackFrame* stackFrame, uint64 memoryRangeStart, uint64 memoryRangeLen);
|
||||
bool GetAutoLocalsInBlock(Array<String>& outLocals, DbgSubprogram* dwSubprogram, DbgBlock* dwBlock, WdStackFrame* stackFrame, DbgLineData* dwLineData);
|
||||
bool RollBackStackFrame(CPURegisters* registers, addr_target* outReturnAddressLoc, bool isStackStart);
|
||||
bool PropogateRegisterUpCallStack(CPURegisters* callerRegisters, CPURegisters* calleeRegisters, void* regPtr, bool& wasSaved);
|
||||
int GetFrameBaseRegister(DbgSubprogram* dwSubprogram);
|
||||
bool GetVariableIndexRegisterAndOffset(DbgVariable* dwVariable, int* outRegister, int* outOffset);
|
||||
|
||||
const DbgMemoryFlags ReadOrigImageData(addr_target address, uint8* data, int size);
|
||||
bool DecodeInstruction(addr_target address, CPUInst* inst);
|
||||
bool IsObjectAccessBreak(addr_target address, CPURegisters* regs, intptr_target* objAddr);
|
||||
DbgModule* FindDbgModuleForAddress(addr_target address);
|
||||
DbgModule* GetMainDbgModule();
|
||||
void ReportMemory(MemReporter* memReporter);
|
||||
};
|
||||
|
||||
NS_BF_DBG_END
|
Loading…
Add table
Add a link
Reference in a new issue