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
111
IDEHelper/Debugger.cpp
Normal file
111
IDEHelper/Debugger.cpp
Normal file
|
@ -0,0 +1,111 @@
|
|||
#include "Debugger.h"
|
||||
#include "DebugManager.h"
|
||||
#include "Compiler/BfSystem.h"
|
||||
|
||||
USING_NS_BF;
|
||||
|
||||
DbgModuleMemoryCache::DbgModuleMemoryCache(uintptr addr, int size)
|
||||
{
|
||||
mAddr = addr;
|
||||
mSize = size;
|
||||
|
||||
mBlockSize = 4096;
|
||||
mBlockCount = size / mBlockSize;
|
||||
BF_ASSERT((size & (mBlockSize - 1)) == 0);
|
||||
//mBlocks = (uint8**)dwarf->mAlloc.AllocBytes(dwarf->mOrigImageBlockCount * sizeof(uint8*), alignof(uint8*));
|
||||
mBlocks = new uint8*[mBlockCount];
|
||||
memset(mBlocks, 0, mBlockCount * sizeof(uint8*));
|
||||
mFlags = new DbgMemoryFlags[mBlockCount];
|
||||
memset(mBlocks, 0, mBlockCount * sizeof(DbgMemoryFlags));
|
||||
mOwns = true;
|
||||
}
|
||||
|
||||
DbgModuleMemoryCache::DbgModuleMemoryCache(uintptr addr, uint8* data, int size, bool makeCopy)
|
||||
{
|
||||
mAddr = addr;
|
||||
mBlockSize = size;
|
||||
mBlocks = new uint8*[1];
|
||||
mFlags = new DbgMemoryFlags[1];
|
||||
mSize = size;
|
||||
|
||||
if (makeCopy)
|
||||
{
|
||||
uint8* dataCopy = new uint8[size];
|
||||
if (data != NULL)
|
||||
memcpy(dataCopy, data, size);
|
||||
mBlocks[0] = dataCopy;
|
||||
}
|
||||
else
|
||||
{
|
||||
mBlocks[0] = data;
|
||||
}
|
||||
|
||||
mOwns = makeCopy;
|
||||
mBlockCount = 1;
|
||||
}
|
||||
|
||||
DbgModuleMemoryCache::~DbgModuleMemoryCache()
|
||||
{
|
||||
if (mOwns)
|
||||
{
|
||||
for (int i = 0; i < mBlockCount; i++)
|
||||
delete mBlocks[i];
|
||||
}
|
||||
delete [] mBlocks;
|
||||
delete [] mFlags;
|
||||
}
|
||||
|
||||
DbgMemoryFlags DbgModuleMemoryCache::Read(uintptr addr, uint8* data, int size)
|
||||
{
|
||||
int sizeLeft = size;
|
||||
DbgMemoryFlags flags = DbgMemoryFlags_None;
|
||||
|
||||
if ((addr < mAddr) || (addr > mAddr + mSize))
|
||||
{
|
||||
gDebugger->ReadMemory(addr, size, data);
|
||||
return gDebugger->GetMemoryFlags(addr);
|
||||
}
|
||||
|
||||
int relAddr = (int)(addr - mAddr);
|
||||
int blockIdx = relAddr / mBlockSize;
|
||||
int curOffset = relAddr % mBlockSize;
|
||||
|
||||
while (sizeLeft > 0)
|
||||
{
|
||||
uint8* block = mBlocks[blockIdx];
|
||||
if (block == NULL)
|
||||
{
|
||||
block = new uint8[mBlockSize];
|
||||
gDebugger->ReadMemory(mAddr + blockIdx * mBlockSize, mBlockSize, block);
|
||||
mBlocks[blockIdx] = block;
|
||||
|
||||
mFlags[blockIdx] = gDebugger->GetMemoryFlags(mAddr + blockIdx * mBlockSize);
|
||||
//BfLogDbg("Memory flags for %p = %d\n", mAddr + blockIdx * mBlockSize, mFlags[blockIdx]);
|
||||
}
|
||||
|
||||
flags = mFlags[blockIdx];
|
||||
int readSize = BF_MIN(sizeLeft, mBlockSize - curOffset);
|
||||
if (data != NULL)
|
||||
{
|
||||
memcpy(data, block + curOffset, readSize);
|
||||
data += readSize;
|
||||
}
|
||||
sizeLeft -= readSize;
|
||||
curOffset = 0;
|
||||
blockIdx++;
|
||||
}
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
||||
void DbgModuleMemoryCache::ReportMemory(MemReporter * memReporter)
|
||||
{
|
||||
int totalMemory = 0;
|
||||
if (mOwns)
|
||||
{
|
||||
for (int i = 0; i < mBlockCount; i++)
|
||||
if (mBlocks[i] != NULL)
|
||||
totalMemory += mBlockSize;
|
||||
}
|
||||
memReporter->Add(totalMemory);
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue