diff --git a/bolt/include/bolt/Core/BinaryContext.h b/bolt/include/bolt/Core/BinaryContext.h --- a/bolt/include/bolt/Core/BinaryContext.h +++ b/bolt/include/bolt/Core/BinaryContext.h @@ -29,7 +29,6 @@ #include "llvm/MC/MCContext.h" #include "llvm/MC/MCObjectFileInfo.h" #include "llvm/MC/MCObjectWriter.h" -#include "llvm/MC/MCPseudoProbe.h" #include "llvm/MC/MCSectionELF.h" #include "llvm/MC/MCSectionMachO.h" #include "llvm/MC/MCStreamer.h" @@ -681,9 +680,6 @@ /// and are referenced from BinaryFunction. std::list> InterproceduralReferences; - /// PseudoProbe decoder - MCPseudoProbeDecoder ProbeDecoder; - /// DWARF encoding. Available encoding types defined in BinaryFormat/Dwarf.h /// enum Constants, e.g. DW_EH_PE_omit. unsigned LSDAEncoding = dwarf::DW_EH_PE_omit; diff --git a/bolt/lib/Rewrite/PseudoProbeRewriter.cpp b/bolt/lib/Rewrite/PseudoProbeRewriter.cpp --- a/bolt/lib/Rewrite/PseudoProbeRewriter.cpp +++ b/bolt/lib/Rewrite/PseudoProbeRewriter.cpp @@ -15,6 +15,7 @@ #include "bolt/Rewrite/Rewriters.h" #include "bolt/Utils/CommandLineOpts.h" #include "llvm/IR/Function.h" +#include "llvm/MC/MCPseudoProbe.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/Debug.h" #include "llvm/Support/LEB128.h" @@ -70,6 +71,9 @@ /// Setup Pseudo probe decoder void parsePseudoProbe(); + /// PseudoProbe decoder + MCPseudoProbeDecoder ProbeDecoder; + public: PseudoProbeRewriter() : RewriterBase("pseudo-probe-rewriter") {} @@ -102,7 +106,7 @@ } StringRef Contents = PseudoProbeDescSection->getContents(); - if (!BC->ProbeDecoder.buildGUID2FuncDescMap( + if (!ProbeDecoder.buildGUID2FuncDescMap( reinterpret_cast(Contents.data()), Contents.size())) { errs() << "BOLT-WARNING: fail in building GUID2FuncDescMap\n"; @@ -118,10 +122,10 @@ } } Contents = PseudoProbeSection->getContents(); - if (!BC->ProbeDecoder.buildAddress2ProbeMap( + if (!ProbeDecoder.buildAddress2ProbeMap( reinterpret_cast(Contents.data()), Contents.size(), GuidFilter, FuncStartAddrs)) { - BC->ProbeDecoder.getAddress2ProbesMap().clear(); + ProbeDecoder.getAddress2ProbesMap().clear(); errs() << "BOLT-WARNING: fail in building Address2ProbeMap\n"; return; } @@ -130,19 +134,18 @@ opts::PrintPseudoProbes == opts::PrintPseudoProbesOptions::PPP_Probes_Section_Decode) { outs() << "Report of decoding input pseudo probe binaries \n"; - BC->ProbeDecoder.printGUID2FuncDescMap(outs()); - BC->ProbeDecoder.printProbesForAllAddresses(outs()); + ProbeDecoder.printGUID2FuncDescMap(outs()); + ProbeDecoder.printProbesForAllAddresses(outs()); } } void PseudoProbeRewriter::updatePseudoProbes() { // check if there is pseudo probe section decoded - if (BC->ProbeDecoder.getAddress2ProbesMap().empty()) + if (ProbeDecoder.getAddress2ProbesMap().empty()) return; // input address converted to output - AddressProbesMap &Address2ProbesMap = BC->ProbeDecoder.getAddress2ProbesMap(); - const GUIDProbeFunctionMap &GUID2Func = - BC->ProbeDecoder.getGUID2FuncDescMap(); + AddressProbesMap &Address2ProbesMap = ProbeDecoder.getAddress2ProbesMap(); + const GUIDProbeFunctionMap &GUID2Func = ProbeDecoder.getGUID2FuncDescMap(); for (auto &AP : Address2ProbesMap) { BinaryFunction *F = BC->getBinaryFunctionContainingAddress(AP.first); @@ -300,7 +303,7 @@ // encoded to binaries. It's a "wrapper" of inline trees of each function. std::list> NextNodes; const MCDecodedPseudoProbeInlineTree &Root = - BC->ProbeDecoder.getDummyInlineRoot(); + ProbeDecoder.getDummyInlineRoot(); for (auto Child = Root.getChildren().begin(); Child != Root.getChildren().end(); ++Child) Inlinees[Child->first] = Child->second.get();