From bcebadeba75f4c05e9879607a89ac30d892fdcad Mon Sep 17 00:00:00 2001 From: Snehasish Kumar Date: Tue, 7 Mar 2023 19:34:57 +0000 Subject: [PATCH] [memprof] Update the isRuntime symbolization check. Update the isRuntime check to only match against known memprof filenames where interceptors are defined. This avoid issues where the path does not include the directory based on how the runtime was compiled. Also update the unittest. Reviewed By: tejohnson Differential Revision: https://reviews.llvm.org/D145521 --- llvm/lib/ProfileData/RawMemProfReader.cpp | 8 ++++++-- llvm/unittests/ProfileData/MemProfTest.cpp | 13 +++++++++++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/llvm/lib/ProfileData/RawMemProfReader.cpp b/llvm/lib/ProfileData/RawMemProfReader.cpp index 3081a04f2686..958bbc551f28 100644 --- a/llvm/lib/ProfileData/RawMemProfReader.cpp +++ b/llvm/lib/ProfileData/RawMemProfReader.cpp @@ -149,8 +149,12 @@ Error report(Error E, const StringRef Context) { } bool isRuntimePath(const StringRef Path) { - return StringRef(llvm::sys::path::convert_to_slash(Path)) - .contains("memprof/memprof_"); + const StringRef Filename = llvm::sys::path::filename(Path); + // This list should be updated in case new files with additional interceptors + // are added to the memprof runtime. + return Filename.equals("memprof_malloc_linux.cpp") || + Filename.equals("memprof_interceptors.cpp") || + Filename.equals("memprof_new_delete.cpp"); } std::string getBuildIdString(const SegmentEntry &Entry) { diff --git a/llvm/unittests/ProfileData/MemProfTest.cpp b/llvm/unittests/ProfileData/MemProfTest.cpp index 0908d3b12af9..9d79385ad5de 100644 --- a/llvm/unittests/ProfileData/MemProfTest.cpp +++ b/llvm/unittests/ProfileData/MemProfTest.cpp @@ -321,14 +321,23 @@ TEST(MemProf, SymbolizationFilter) { specifier(), false)) .Times(1) .WillRepeatedly(Return(makeInliningInfo({ - {"foo", 10, 5, 30}, + {"foo", 10, 5, 30, "memprof/memprof_test_file.cpp"}, + }))); + + EXPECT_CALL(*Symbolizer, symbolizeInlinedCode(SectionedAddress{0x5000}, + specifier(), false)) + .Times(1) + .WillRepeatedly(Return(makeInliningInfo({ + // Depending on how the runtime was compiled, only the filename + // may be present in the debug information. + {"malloc", 70, 57, 3, "memprof_malloc_linux.cpp"}, }))); CallStackMap CSM; CSM[0x1] = {0x1000, 0x2000, 0x3000, 0x4000}; // This entry should be dropped since all PCs are either not // symbolizable or belong to the runtime. - CSM[0x2] = {0x1000, 0x2000}; + CSM[0x2] = {0x1000, 0x2000, 0x5000}; llvm::MapVector Prof; Prof[0x1].AllocCount = 1;