diff options
author | Rahman Lavaee <rahmanl@google.com> | 2025-08-25 10:17:29 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-08-25 10:17:29 -0700 |
commit | a61ff1487b6696b9ab3bb7d9c2c1ea899eb7a4f0 (patch) | |
tree | 250bcc9d0640f18091f0343d2092020526438c30 /llvm/lib/Object/ELF.cpp | |
parent | 7b74a2755165a1e4d0f3b8c3a5d1591be4b45ed1 (diff) | |
download | llvm-a61ff1487b6696b9ab3bb7d9c2c1ea899eb7a4f0.zip llvm-a61ff1487b6696b9ab3bb7d9c2c1ea899eb7a4f0.tar.gz llvm-a61ff1487b6696b9ab3bb7d9c2c1ea899eb7a4f0.tar.bz2 |
[SHT_LLVM_BB_ADDR_MAP] Change the callsite feature to emit end of callsites. (#155041)
This PR simply moves the callsite anchors from the beginning of
callsites to their end.
Emitting the end of callsites is more sensible as it allows breaking the
basic block into subblocks which end with control transfer instructions.
Diffstat (limited to 'llvm/lib/Object/ELF.cpp')
-rw-r--r-- | llvm/lib/Object/ELF.cpp | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/llvm/lib/Object/ELF.cpp b/llvm/lib/Object/ELF.cpp index 788c602..53699ce0 100644 --- a/llvm/lib/Object/ELF.cpp +++ b/llvm/lib/Object/ELF.cpp @@ -847,7 +847,7 @@ decodeBBAddrMapImpl(const ELFFile<ELFT> &EF, if (!FeatEnableOrErr) return FeatEnableOrErr.takeError(); FeatEnable = *FeatEnableOrErr; - if (FeatEnable.CallsiteOffsets && Version < 3) + if (FeatEnable.CallsiteEndOffsets && Version < 3) return createError("version should be >= 3 for SHT_LLVM_BB_ADDR_MAP when " "callsite offsets feature is enabled: version = " + Twine(static_cast<int>(Version)) + @@ -890,22 +890,22 @@ decodeBBAddrMapImpl(const ELFFile<ELFT> &EF, uint32_t ID = readULEB128As<uint32_t>(Data, Cur, ULEBSizeErr); uint32_t Offset = readULEB128As<uint32_t>(Data, Cur, ULEBSizeErr); // Read the callsite offsets. - uint32_t LastCallsiteOffset = 0; - SmallVector<uint32_t, 1> CallsiteOffsets; - if (FeatEnable.CallsiteOffsets) { + uint32_t LastCallsiteEndOffset = 0; + SmallVector<uint32_t, 1> CallsiteEndOffsets; + if (FeatEnable.CallsiteEndOffsets) { uint32_t NumCallsites = readULEB128As<uint32_t>(Data, Cur, ULEBSizeErr); - CallsiteOffsets.reserve(NumCallsites); + CallsiteEndOffsets.reserve(NumCallsites); for (uint32_t CallsiteIndex = 0; !ULEBSizeErr && Cur && (CallsiteIndex < NumCallsites); ++CallsiteIndex) { - LastCallsiteOffset += + LastCallsiteEndOffset += readULEB128As<uint32_t>(Data, Cur, ULEBSizeErr); - CallsiteOffsets.push_back(LastCallsiteOffset); + CallsiteEndOffsets.push_back(LastCallsiteEndOffset); } } uint32_t Size = readULEB128As<uint32_t>(Data, Cur, ULEBSizeErr) + - LastCallsiteOffset; + LastCallsiteEndOffset; uint32_t MD = readULEB128As<uint32_t>(Data, Cur, ULEBSizeErr); Expected<BBAddrMap::BBEntry::Metadata> MetadataOrErr = BBAddrMap::BBEntry::Metadata::decode(MD); @@ -914,7 +914,7 @@ decodeBBAddrMapImpl(const ELFFile<ELFT> &EF, break; } BBEntries.push_back({ID, Offset + PrevBBEndOffset, Size, - *MetadataOrErr, CallsiteOffsets}); + *MetadataOrErr, CallsiteEndOffsets}); PrevBBEndOffset += Offset + Size; } TotalNumBlocks += BBEntries.size(); |