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

Method ScanSpan

IDEHelper/HotScanner.cpp:146–290  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

144}
145
146void DbgHotScanner::ScanSpan(TCFake::Span* span, int expectedStartPage, int memKind)
147{
148 if (span->location != TCFake::Span::IN_USE)
149 return;
150
151 if (span->start != expectedStartPage)
152 {
153 return;
154 }
155
156 intptr pageSize = (intptr)1 << kPageShift;
157 int spanSize = pageSize * span->length;
158 addr_target spanStart = ((addr_target)span->start << kPageShift);
159
160 if (spanSize > mScanData.size())
161 {
162 mScanData.Resize(spanSize);
163 }
164 void* spanPtr = &mScanData[0];
165 mDebugger->ReadMemory(spanStart, spanSize, spanPtr);
166 void* spanEnd = (void*)((intptr)spanPtr + spanSize);
167
168 //BF_LOGASSERT((spanStart >= TCFake::PageHeap::sAddressStart) && (spanEnd <= TCFake::PageHeap::sAddressEnd));
169
170 int elementSize = mDbgGCData.mSizeClasses[span->sizeclass];
171 if (elementSize == 0)
172 elementSize = spanSize;
173 //BF_LOGASSERT(elementSize >= sizeof(bf::System::Object));
174
175 auto _MarkTypeUsed = [&](int typeId, intptr size)
176 {
177 if (typeId < 0)
178 return;
179 while (mDebugger->mHotResolveData->mTypeData.size() <= typeId)
180 mDebugger->mHotResolveData->mTypeData.Add(DbgHotResolveData::TypeData());
181 auto& typeData = mDebugger->mHotResolveData->mTypeData[typeId];
182 typeData.mSize += size;
183 typeData.mCount++;
184 };
185
186 int objectSize = ((mDbgGCData.mDbgFlags & BfRtFlags_ObjectHasDebugFlags) != 0) ? sizeof(addr_target)*2 : sizeof(addr_target);
187
188 mDebugger->mDebugTarget->GetCompilerSettings();
189 if (mDebugger->mDebugTarget->mBfObjectSize != 0)
190 objectSize = mDebugger->mDebugTarget->mBfObjectSize;
191
192 while (spanPtr <= (uint8*)spanEnd - elementSize)
193 {
194 addr_target classVDataAddr = 0;
195 if (memKind == 0)
196 {
197 // Obj
198 Fake_BfObject_WithFlags* obj = (Fake_BfObject_WithFlags*)spanPtr;
199 if (obj->mAllocCheckPtr != 0)
200 {
201 int objectFlags = obj->mObjectFlags;
202 if ((objectFlags & BF_OBJECTFLAG_DELETED) == 0)
203 {

Callers

nothing calls this directly

Calls 9

TypeDataClass · 0.85
GetCompilerSettingsMethod · 0.80
FindSubProgramMethod · 0.80
sizeMethod · 0.45
ResizeMethod · 0.45
ReadMemoryMethod · 0.45
AddMethod · 0.45
TryAddMethod · 0.45
GetLanguageMethod · 0.45

Tested by

no test coverage detected