[llvm] [BOLT] DataAggregator support for binaries with multiple text segments (PR #92815)
Maksim Panchenko via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 19 16:42:43 PST 2024
================
@@ -2073,12 +2078,22 @@ std::error_code DataAggregator::parseMMapEvents() {
<< " using file offset 0x" << Twine::utohexstr(MMapInfo.Offset)
<< ". Ignoring profile data for this mapping\n";
continue;
- } else {
- MMapInfo.BaseAddress = *BaseAddress;
}
+ MMapInfo.BaseAddress = *BaseAddress;
}
- BinaryMMapInfo.insert(std::make_pair(MMapInfo.PID, MMapInfo));
+ // Try to add MMapInfo to the map and update its size. Large binaries may
+ // span to multiple text segments, so the mapping is inserted only on the
+ // first occurrence.
+ if (!BinaryMMapInfo.insert(std::make_pair(MMapInfo.PID, MMapInfo)).second)
+ assert(MMapInfo.BaseAddress == BinaryMMapInfo[MMapInfo.PID].BaseAddress &&
+ "Base address on multiple segment mappings should match");
+
+ // Update section size.
+ uint64_t EndAddress = MMapInfo.MMapAddress + MMapInfo.Size;
+ uint64_t Size = EndAddress - BinaryMMapInfo[MMapInfo.PID].BaseAddress;
----------------
maksfb wrote:
```suggestion
const uint64_t EndAddress = MMapInfo.MMapAddress + MMapInfo.Size;
const uint64_t Size = EndAddress - BinaryMMapInfo[MMapInfo.PID].BaseAddress;
```
https://github.com/llvm/llvm-project/pull/92815
More information about the llvm-commits
mailing list