[llvm] bcebade - [memprof] Update the isRuntime symbolization check.

Snehasish Kumar via llvm-commits llvm-commits at lists.llvm.org
Tue Mar 7 12:16:20 PST 2023


Author: Snehasish Kumar
Date: 2023-03-07T20:16:15Z
New Revision: bcebadeba75f4c05e9879607a89ac30d892fdcad

URL: https://github.com/llvm/llvm-project/commit/bcebadeba75f4c05e9879607a89ac30d892fdcad
DIFF: https://github.com/llvm/llvm-project/commit/bcebadeba75f4c05e9879607a89ac30d892fdcad.diff

LOG: [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

Added: 
    

Modified: 
    llvm/lib/ProfileData/RawMemProfReader.cpp
    llvm/unittests/ProfileData/MemProfTest.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/ProfileData/RawMemProfReader.cpp b/llvm/lib/ProfileData/RawMemProfReader.cpp
index 3081a04f26861..958bbc551f281 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 0908d3b12af90..9d79385ad5de7 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<uint64_t, MemInfoBlock> Prof;
   Prof[0x1].AllocCount = 1;


        


More information about the llvm-commits mailing list