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

Method Load

IDEHelper/Linker/BlPdbParser.cpp:40–95  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

38}
39
40bool BlPdbParser::Load(const StringImpl& fileName)
41{
42 mMappedFile = new MappedFile();
43 if (!mMappedFile->Open(fileName))
44 return false;
45 mData = (uint8*)mMappedFile->mData;
46
47 uint8* data = (uint8*)mMappedFile->mData;
48 if (memcmp(data, MSF_SIGNATURE_700, 32) != 0)
49 {
50 Fail("PDB signature error");
51 return false;
52 }
53 data += 32;
54
55 int pageSize = GET(int32);
56 int fpmPageNum = GET(int32);
57 int totalPageCount = GET(int32);
58 int rootDirSize = GET(int32);
59 int unknown = GET(int32);
60 int rootDirPtr = GET(int32);
61
62 bool failed = false;
63
64 mCvPageSize = pageSize;
65
66 int rootPageCount = (rootDirSize + pageSize - 1) / pageSize;
67 int rootPointersPages = (rootPageCount * sizeof(int32) + pageSize - 1) / pageSize;
68 int rootPageIdx = 0;
69
70 std::vector<uint8> rootDirData;
71 rootDirData.resize(rootPageCount * pageSize);
72 data = mData + (rootDirPtr * pageSize);
73
74 int32* rootPages = (int32*)data;
75 for (int subRootPageIdx = 0; subRootPageIdx < pageSize / 4; subRootPageIdx++, rootPageIdx++)
76 {
77 if (rootPageIdx >= rootPageCount)
78 break;
79
80 int rootPagePtr = rootPages[subRootPageIdx];
81 if (rootPagePtr == 0)
82 break;
83 data = mData + (rootPagePtr * pageSize);
84 memcpy(&rootDirData[rootPageIdx * pageSize], data, pageSize);
85 data += pageSize;
86 }
87
88 if (!ParseCv(&rootDirData[0]))
89 {
90 Fail("Failed to parse PDB");
91 return false;
92 }
93
94 return true;
95}
96
97bool BlPdbParser::CvParseHeader()

Callers 2

RunMethod · 0.45
ParseTypeDataMethod · 0.45

Calls 3

FailFunction · 0.85
OpenMethod · 0.45
resizeMethod · 0.45

Tested by

no test coverage detected