[llvm] [BOLT] Fix C++ exceptions when LPStart is specified (PR #72737)
Alexander Yermolovich via llvm-commits
llvm-commits at lists.llvm.org
Sun Nov 19 08:39:49 PST 2023
================
@@ -175,38 +180,38 @@ void BinaryFunction::parseLSDA(ArrayRef<uint8_t> LSDASectionData,
uint64_t LandingPad = *Data.getEncodedPointer(
&CallSitePtr, CallSiteEncoding, CallSitePtr + LSDASectionAddress);
uint64_t ActionEntry = Data.getULEB128(&CallSitePtr);
-
- uint64_t LPOffset = LPStart + LandingPad;
- uint64_t LPAddress = Address + LPOffset;
-
- // Verify if landing pad code is located outside current function
- // Support landing pad to builtin_unreachable
- if (LPAddress < Address || LPAddress > Address + getSize()) {
- BinaryFunction *Fragment =
- BC.getBinaryFunctionContainingAddress(LPAddress);
- assert(Fragment != nullptr &&
- "BOLT-ERROR: cannot find landing pad fragment");
- BC.addInterproceduralReference(this, Fragment->getAddress());
- BC.processInterproceduralReferences();
- assert(isParentOrChildOf(*Fragment) &&
- "BOLT-ERROR: cannot have landing pads in different functions");
- setHasIndirectTargetToSplitFragment(true);
- BC.addFragmentsToSkip(this);
- return;
- }
+ if (LandingPad)
+ LandingPad += LPStart;
if (opts::PrintExceptions) {
outs() << "Call Site: [0x" << Twine::utohexstr(RangeBase + Start)
<< ", 0x" << Twine::utohexstr(RangeBase + Start + Length)
- << "); landing pad: 0x" << Twine::utohexstr(LPOffset)
+ << "); landing pad: 0x" << Twine::utohexstr(LandingPad)
<< "; action entry: 0x" << Twine::utohexstr(ActionEntry) << "\n";
outs() << " current offset is " << (CallSitePtr - CallSiteTableStart)
<< '\n';
}
// Create a handler entry if necessary.
MCSymbol *LPSymbol = nullptr;
- if (LPOffset) {
+ if (LandingPad) {
+ // Verify if landing pad code is located outside current function
+ // Support landing pad to builtin_unreachable
----------------
ayermolo wrote:
Not sure I follow.
https://github.com/llvm/llvm-project/pull/72737
More information about the llvm-commits
mailing list