bool PCLibraryState::cacheLibraryRanges(Library::ptr lib) { std::string filename = lib->getName(); Address base = lib->getLoadAddress(); SymbolReaderFactory *fact = getDefaultSymbolReader(); SymReader *reader = fact->openSymbolReader(filename); if (!reader) { sw_printf("[%s:%u] - Error could not open expected file %s\n", FILE__, __LINE__, filename.c_str()); return false; } int num_segments = reader->numSegments(); for (int i=0; i<num_segments; i++) { SymSegment segment; reader->getSegment(i, segment); if (segment.type != 1) continue; Address segment_start = segment.mem_addr + base; Address segment_end = segment_start + segment.mem_size; loadedLibs.insert(segment_start, segment_end, makeCache(LibAddrPair(lib->getName(), lib->getLoadAddress()), lib)); } return true; }