| 5157 | } |
| 5158 | |
| 5159 | void DbgModule::ParseHotTargetSections(DataStream* stream, addr_target* resolvedSymbolAddrs) |
| 5160 | { |
| 5161 | auto mainModule = mDebugTarget->mTargetBinary; |
| 5162 | mainModule->ParseSymbolData(); |
| 5163 | |
| 5164 | String name; |
| 5165 | for (int sectNum = 0; sectNum < (int)mHotTargetSections.size(); sectNum++) |
| 5166 | { |
| 5167 | if (mHotTargetSections[sectNum] != NULL) |
| 5168 | { |
| 5169 | DbgHotTargetSection* hotTargetSection = mHotTargetSections[sectNum]; |
| 5170 | stream->SetPos(hotTargetSection->mPointerToRelocations); |
| 5171 | for (int relocIdx = 0; relocIdx < hotTargetSection->mNumberOfRelocations; relocIdx++) |
| 5172 | { |
| 5173 | COFFRelocation coffReloc; |
| 5174 | stream->Read(&coffReloc, sizeof(COFFRelocation)); |
| 5175 | |
| 5176 | PE_SymInfo* symInfo = (PE_SymInfo*)&mSymbolData[coffReloc.mSymbolTableIndex * 18]; |
| 5177 | |
| 5178 | bool isStaticSymbol = symInfo->mStorageClass == COFF_SYM_CLASS_STATIC; |
| 5179 | |
| 5180 | if (symInfo->mNameOfs[0] != 0) |
| 5181 | { |
| 5182 | if (symInfo->mName[7] != 0) |
| 5183 | { |
| 5184 | // Name is exactly 8 chars, not null terminated yet |
| 5185 | name = String(symInfo->mName, symInfo->mName + 8); |
| 5186 | } |
| 5187 | else |
| 5188 | name = symInfo->mName; |
| 5189 | } |
| 5190 | else |
| 5191 | name = mStringTable + symInfo->mNameOfs[1]; |
| 5192 | |
| 5193 | bool didNameMatch = false; |
| 5194 | |
| 5195 | addr_target resolvedSymbolAddr = resolvedSymbolAddrs[coffReloc.mSymbolTableIndex]; |
| 5196 | |
| 5197 | #ifdef BF_DBG_32 |
| 5198 | bool needsSymbolAddr = (coffReloc.mType == IMAGE_REL_I386_DIR32) || (coffReloc.mType == IMAGE_REL_I386_REL32) || (coffReloc.mType == IMAGE_REL_I386_SECREL) || (coffReloc.mType == IMAGE_REL_I386_SECTION); |
| 5199 | if (name[0] == '_') |
| 5200 | name.Remove(0, 1); |
| 5201 | #else |
| 5202 | bool needsSymbolAddr = (coffReloc.mType == IMAGE_REL_AMD64_ADDR64) || (coffReloc.mType == IMAGE_REL_AMD64_ADDR32) || (coffReloc.mType == IMAGE_REL_AMD64_ADDR32NB) || |
| 5203 | ((coffReloc.mType >= IMAGE_REL_AMD64_REL32) || (coffReloc.mType <= IMAGE_REL_AMD64_REL32_5)); |
| 5204 | #endif |
| 5205 | |
| 5206 | bool isHsPrev = false; |
| 5207 | if (name.StartsWith("bf_hs_prev@")) |
| 5208 | { |
| 5209 | isHsPrev = true; |
| 5210 | name.Remove(0, 11); |
| 5211 | } |
| 5212 | |
| 5213 | bool deferResolve = false; |
| 5214 | |
| 5215 | if ((resolvedSymbolAddr == 0) && (needsSymbolAddr)) |
| 5216 | { |
nothing calls this directly
no test coverage detected