| 243 | |
| 244 | |
| 245 | void Md1romView::ParseDebugInfo() |
| 246 | { |
| 247 | if (!m_dbgInfoFound) |
| 248 | return; |
| 249 | |
| 250 | DataBuffer data = GetParentView()->ReadBuffer(m_dbgInfoSeg.dataStart, m_dbgInfoSeg.length); |
| 251 | if (data.GetLength() != m_dbgInfoSeg.length) |
| 252 | return; |
| 253 | |
| 254 | DataBuffer decompressed; |
| 255 | if (!data.LzmaDecompress(decompressed)) |
| 256 | return; |
| 257 | |
| 258 | m_logger->LogDebug("The size of decompressed buffer: 0x%zx", decompressed.GetLength()); |
| 259 | |
| 260 | Ref<FileMetadata> file = new FileMetadata; |
| 261 | Ref<BinaryView> view = new BinaryData(file, decompressed); |
| 262 | BinaryReader reader(view); |
| 263 | |
| 264 | reader.Seek(0x1c); |
| 265 | auto target = reader.ReadCString(); |
| 266 | auto hardwarePlatform = reader.ReadCString(); |
| 267 | auto molyVersion = reader.ReadCString(); |
| 268 | auto buildTime = reader.ReadCString(); |
| 269 | |
| 270 | [[maybe_unused]] auto functionSymbolsOffset = reader.Read32() + 0x10; |
| 271 | auto fileSymbolsOffset = reader.Read32() + 0x10; |
| 272 | |
| 273 | try |
| 274 | { |
| 275 | while (true) |
| 276 | { |
| 277 | Md1DebugSymbol symbol; |
| 278 | symbol.name = reader.ReadCString(); |
| 279 | symbol.start = reader.Read32(); |
| 280 | symbol.end = reader.Read32(); |
| 281 | m_debugSymbols.emplace_back(symbol); |
| 282 | DefineMd1RomSymbol(FunctionSymbol, symbol.name, symbol.start); |
| 283 | if (reader.GetOffset() >= fileSymbolsOffset) |
| 284 | break; |
| 285 | } |
| 286 | } |
| 287 | catch(...) |
| 288 | { |
| 289 | m_logger->LogWarn("exception while parsing debug symbols"); |
| 290 | } |
| 291 | file->Close(); |
| 292 | } |
| 293 | |
| 294 | |
| 295 | void Md1romView::ParseDebugDatabase() |
nothing calls this directly
no test coverage detected