summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmir Ayupov <aaupov@fb.com>2024-05-01 18:07:28 -0700
committerAmir Ayupov <aaupov@fb.com>2024-05-01 18:07:28 -0700
commitff94c5a9458d0cf8b6371bb783fdb933ca207609 (patch)
tree2ce786adbdc6f8e46a542068fa4a3edd6c2dcc83
parentd484c4d3501a7ff3d00a6e0cfad026a3b01d320c (diff)
Created using spr 1.3.4 [skip ci]
-rw-r--r--bolt/include/bolt/Core/BinaryFunction.h6
-rw-r--r--bolt/lib/Core/BinaryFunction.cpp1
-rw-r--r--bolt/lib/Passes/ValidateInternalCalls.cpp13
3 files changed, 11 insertions, 9 deletions
diff --git a/bolt/include/bolt/Core/BinaryFunction.h b/bolt/include/bolt/Core/BinaryFunction.h
index 26d2d01f8626..540a9767760a 100644
--- a/bolt/include/bolt/Core/BinaryFunction.h
+++ b/bolt/include/bolt/Core/BinaryFunction.h
@@ -361,6 +361,9 @@ private:
/// True if another function body was merged into this one.
bool HasFunctionsFoldedInto{false};
+ /// True if the function has internal calls.
+ bool HasInternalCalls{false};
+
/// Name for the section this function code should reside in.
std::string CodeSectionName;
@@ -1334,6 +1337,9 @@ public:
/// Return true if other functions were folded into this one.
bool hasFunctionsFoldedInto() const { return HasFunctionsFoldedInto; }
+ /// Return true if the function has internal calls.
+ bool hasInternalCalls() const { return HasInternalCalls; }
+
/// If this function was folded, return the function it was folded into.
BinaryFunction *getFoldedIntoFunction() const { return FoldedIntoFunction; }
diff --git a/bolt/lib/Core/BinaryFunction.cpp b/bolt/lib/Core/BinaryFunction.cpp
index 1fa96dfaabde..fff53dd25004 100644
--- a/bolt/lib/Core/BinaryFunction.cpp
+++ b/bolt/lib/Core/BinaryFunction.cpp
@@ -1281,6 +1281,7 @@ Error BinaryFunction::disassemble() {
// Recursive call.
TargetSymbol = getSymbol();
} else {
+ HasInternalCalls = true;
if (BC.isX86()) {
// Dangerous old-style x86 PIC code. We may need to freeze this
// function, so preserve the function as is for now.
diff --git a/bolt/lib/Passes/ValidateInternalCalls.cpp b/bolt/lib/Passes/ValidateInternalCalls.cpp
index 88df2e5b59f3..24f9bfde401a 100644
--- a/bolt/lib/Passes/ValidateInternalCalls.cpp
+++ b/bolt/lib/Passes/ValidateInternalCalls.cpp
@@ -309,15 +309,10 @@ Error ValidateInternalCalls::runOnFunctions(BinaryContext &BC) {
std::set<BinaryFunction *> NeedsValidation;
for (auto &BFI : BC.getBinaryFunctions()) {
BinaryFunction &Function = BFI.second;
- for (BinaryBasicBlock &BB : Function) {
- for (MCInst &Inst : BB) {
- if (getInternalCallTarget(Function, Inst)) {
- NeedsValidation.insert(&Function);
- Function.setSimple(false);
- break;
- }
- }
- }
+ if (!Function.hasInternalCalls())
+ continue;
+ NeedsValidation.insert(&Function);
+ Function.setSimple(false);
}
// Skip validation for non-relocation mode