diff --git a/llvm/tools/llvm-profgen/PerfReader.cpp b/llvm/tools/llvm-profgen/PerfReader.cpp index 878147642aa6e..e9442027aed3f 100644 --- a/llvm/tools/llvm-profgen/PerfReader.cpp +++ b/llvm/tools/llvm-profgen/PerfReader.cpp @@ -11,6 +11,7 @@ #include "llvm/DebugInfo/Symbolize/SymbolizableModule.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/Process.h" +#include "llvm/Support/ToolOutputFile.h" #define DEBUG_TYPE "perf-reader" @@ -375,6 +376,9 @@ PerfScriptReader::convertPerfDataToTrace(ProfiledBinary *Binary, StringRef(ErrorFile)}; // Stderr sys::ExecuteAndWait(PerfPath, ScriptMMapArgs, std::nullopt, Redirects); + PerfScriptReader::TempFileCleanups.emplace_back(PerfTraceFile); + PerfScriptReader::TempFileCleanups.emplace_back(ErrorFile); + // Collect the PIDs TraceStream TraceIt(PerfTraceFile); std::string PIDs; @@ -1220,5 +1224,7 @@ void PerfScriptReader::parsePerfTraces() { writeUnsymbolizedProfile(OutputFilename); } +SmallVector PerfScriptReader::TempFileCleanups; + } // end namespace sampleprof } // end namespace llvm diff --git a/llvm/tools/llvm-profgen/PerfReader.h b/llvm/tools/llvm-profgen/PerfReader.h index e9f619350bf97..b821cbe13efae 100644 --- a/llvm/tools/llvm-profgen/PerfReader.h +++ b/llvm/tools/llvm-profgen/PerfReader.h @@ -21,6 +21,9 @@ using namespace llvm; using namespace sampleprof; namespace llvm { + +class CleanupInstaller; + namespace sampleprof { // Stream based trace line iterator @@ -604,6 +607,11 @@ class PerfScriptReader : public PerfReaderBase { // Extract perf script type by peaking at the input static PerfContent checkPerfScriptType(StringRef FileName); + // Cleanup installers for temporary files created by perf script command. + // Those files will be automatically removed when running destructor or + // receiving signals. + static SmallVector TempFileCleanups; + protected: // The parsed MMap event struct MMapEvent {