diff options
author | Amir Ayupov <aaupov@fb.com> | 2024-05-01 18:07:28 -0700 |
---|---|---|
committer | Amir Ayupov <aaupov@fb.com> | 2024-05-01 18:07:28 -0700 |
commit | ff94c5a9458d0cf8b6371bb783fdb933ca207609 (patch) | |
tree | 2ce786adbdc6f8e46a542068fa4a3edd6c2dcc83 | |
parent | d484c4d3501a7ff3d00a6e0cfad026a3b01d320c (diff) |
[𝘀𝗽𝗿] changes to main this commit is based onupstream/users/aaupov/spr/main.boltnfci-allow-non-simple-functions-to-be-in-disassembled-state
Created using spr 1.3.4
[skip ci]
-rw-r--r-- | bolt/include/bolt/Core/BinaryFunction.h | 6 | ||||
-rw-r--r-- | bolt/lib/Core/BinaryFunction.cpp | 1 | ||||
-rw-r--r-- | bolt/lib/Passes/ValidateInternalCalls.cpp | 13 |
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 |