diff --git a/compiler-rt/lib/sanitizer_common/tests/sanitizer_procmaps_test.cpp b/compiler-rt/lib/sanitizer_common/tests/sanitizer_procmaps_test.cpp index 08750c06e6fbc..ea435fcf7b8f7 100644 --- a/compiler-rt/lib/sanitizer_common/tests/sanitizer_procmaps_test.cpp +++ b/compiler-rt/lib/sanitizer_common/tests/sanitizer_procmaps_test.cpp @@ -11,10 +11,14 @@ //===----------------------------------------------------------------------===// #if !defined(_WIN32) // There are no /proc/maps on Windows. -#include "sanitizer_common/sanitizer_procmaps.h" -#include "gtest/gtest.h" +# include "sanitizer_common/sanitizer_procmaps.h" -#include +# include +# include + +# include + +# include "gtest/gtest.h" static void noop() {} extern const char *argv0; @@ -74,5 +78,35 @@ TEST(MemoryMapping, LoadedModuleArchAndUUID) { } } +TEST(MemoryMapping, ParseUnixMemoryProfile) { + struct entry { + uptr p; + uptr rss; + bool file; + }; + typedef std::vector entries_t; + const char *input = R"( +7fb9862f1000-7fb9862f3000 rw-p 00000000 00:00 0 +Size: 8 kB +Rss: 4 kB +7fb9864ae000-7fb9864b1000 r--p 001ba000 fd:01 22413919 /lib/x86_64-linux-gnu/libc-2.32.so +Size: 12 kB +Rss: 12 kB +)"; + entries_t entries; + ParseUnixMemoryProfile( + [](uptr p, uptr rss, bool file, uptr *mem) { + reinterpret_cast(mem)->push_back({p, rss, file}); + }, + reinterpret_cast(&entries), input, strlen(input)); + EXPECT_EQ(entries.size(), 2ul); + EXPECT_EQ(entries[0].p, 0x7fb9862f1000ul); + EXPECT_EQ(entries[0].rss, 4ul << 10); + EXPECT_EQ(entries[0].file, false); + EXPECT_EQ(entries[1].p, 0x7fb9864ae000ul); + EXPECT_EQ(entries[1].rss, 12ul << 10); + EXPECT_EQ(entries[1].file, true); +} + } // namespace __sanitizer #endif // !defined(_WIN32)