[llvm] [BOLT][RelVTable] Skip special handling on non virtual function pointer relocations (PR #137406)
YongKang Zhu via llvm-commits
llvm-commits at lists.llvm.org
Fri Apr 25 15:14:54 PDT 2025
https://github.com/yozhu created https://github.com/llvm/llvm-project/pull/137406
Besides virtual function pointers vtable could contain other kinds of entries
like the those for RTTI data that also require relocations. We need to skip
the special handling on the relocations for non virtual function pointers in
relative vtable.
>From c2ea84a98526d435a00a4741a076135bcb314bee Mon Sep 17 00:00:00 2001
From: YongKang Zhu <yongzhu at fb.com>
Date: Thu, 24 Apr 2025 20:31:55 -0700
Subject: [PATCH] [BOLT] Skip special handling on non virtual function pointer
relocation in relative vtable
Besides virtual function pointers vtable could also contain other kinds of
entries like the one for RTTI data that requires relocation too. We need to
skip the special handling on the relocations for non virtual function pointers
in relative vtable.
---
bolt/lib/Rewrite/RewriteInstance.cpp | 25 ++++++++++++-------------
1 file changed, 12 insertions(+), 13 deletions(-)
diff --git a/bolt/lib/Rewrite/RewriteInstance.cpp b/bolt/lib/Rewrite/RewriteInstance.cpp
index 69fb736d7bde0..1c24200059035 100644
--- a/bolt/lib/Rewrite/RewriteInstance.cpp
+++ b/bolt/lib/Rewrite/RewriteInstance.cpp
@@ -2697,20 +2697,19 @@ void RewriteInstance::handleRelocation(const SectionRef &RelocatedSection,
BD->nameStartsWith("_ZTCN"))) { // construction vtable
BinaryFunction *BF = BC->getBinaryFunctionContainingAddress(
SymbolAddress, /*CheckPastEnd*/ false, /*UseMaxSize*/ true);
- if (!BF || BF->getAddress() != SymbolAddress) {
- BC->errs()
- << "BOLT-ERROR: the virtual function table entry at offset 0x"
- << Twine::utohexstr(Rel.getOffset());
- if (BF)
- BC->errs() << " points to the middle of a function @ 0x"
- << Twine::utohexstr(BF->getAddress()) << "\n";
- else
- BC->errs() << " does not point to any function\n";
- exit(1);
+ if (BF) {
+ if (BF->getAddress() != SymbolAddress) {
+ BC->errs()
+ << "BOLT-ERROR: the virtual function table entry at offset 0x"
+ << Twine::utohexstr(Rel.getOffset())
+ << " points to the middle of a function @ 0x"
+ << Twine::utohexstr(BF->getAddress()) << "\n";
+ exit(1);
+ }
+ BC->addRelocation(Rel.getOffset(), BF->getSymbol(), RType, Addend,
+ ExtractedValue);
+ return;
}
- BC->addRelocation(Rel.getOffset(), BF->getSymbol(), RType, Addend,
- ExtractedValue);
- return;
}
}
More information about the llvm-commits
mailing list