| From c0702ac07b8e206f424930ff0331151954fb821c Mon Sep 17 00:00:00 2001 |
| From: Emre Kultursay <emrekultursay@google.com> |
| Date: Fri, 1 Jul 2022 13:44:01 +0800 |
| Subject: [PATCH] [PATCH] [lldb-server] Skip shared regions for memory |
| allocation |
| |
| Differential Revision: https://reviews.llvm.org/D128832 |
| --- |
| lldb/include/lldb/Target/MemoryRegionInfo.h | 14 +++- |
| .../Process/Linux/NativeProcessLinux.cpp | 3 +- |
| .../Plugins/Process/Utility/LinuxProcMaps.cpp | 10 ++- |
| .../Process/Utility/LinuxProcMapsTest.cpp | 84 +++++++++++++------ |
| .../MemoryTagManagerAArch64MTETest.cpp | 4 +- |
| .../Process/minidump/MinidumpParserTest.cpp | 32 +++---- |
| 6 files changed, 99 insertions(+), 48 deletions(-) |
| |
| diff --git a/lldb/include/lldb/Target/MemoryRegionInfo.h b/lldb/include/lldb/Target/MemoryRegionInfo.h |
| index 4e978d33b05..3ef66b403e1 100644 |
| --- a/lldb/include/lldb/Target/MemoryRegionInfo.h |
| +++ b/lldb/include/lldb/Target/MemoryRegionInfo.h |
| @@ -26,12 +26,14 @@ public: |
| |
| MemoryRegionInfo() = default; |
| MemoryRegionInfo(RangeType range, OptionalBool read, OptionalBool write, |
| - OptionalBool execute, OptionalBool mapped, ConstString name, |
| + OptionalBool execute, OptionalBool shared, |
| + OptionalBool mapped, ConstString name, |
| OptionalBool flash, lldb::offset_t blocksize, |
| OptionalBool memory_tagged, OptionalBool stack_memory) |
| : m_range(range), m_read(read), m_write(write), m_execute(execute), |
| - m_mapped(mapped), m_name(name), m_flash(flash), m_blocksize(blocksize), |
| - m_memory_tagged(memory_tagged), m_is_stack_memory(stack_memory) {} |
| + m_shared(shared), m_mapped(mapped), m_name(name), m_flash(flash), |
| + m_blocksize(blocksize), m_memory_tagged(memory_tagged), |
| + m_is_stack_memory(stack_memory) {} |
| |
| RangeType &GetRange() { return m_range; } |
| |
| @@ -45,6 +47,8 @@ public: |
| |
| OptionalBool GetExecutable() const { return m_execute; } |
| |
| + OptionalBool GetShared() const { return m_shared; } |
| + |
| OptionalBool GetMapped() const { return m_mapped; } |
| |
| ConstString GetName() const { return m_name; } |
| @@ -57,6 +61,8 @@ public: |
| |
| void SetExecutable(OptionalBool val) { m_execute = val; } |
| |
| + void SetShared(OptionalBool val) { m_shared = val; } |
| + |
| void SetMapped(OptionalBool val) { m_mapped = val; } |
| |
| void SetName(const char *name) { m_name = ConstString(name); } |
| @@ -95,6 +101,7 @@ public: |
| bool operator==(const MemoryRegionInfo &rhs) const { |
| return m_range == rhs.m_range && m_read == rhs.m_read && |
| m_write == rhs.m_write && m_execute == rhs.m_execute && |
| + m_shared == rhs.m_shared && |
| m_mapped == rhs.m_mapped && m_name == rhs.m_name && |
| m_flash == rhs.m_flash && m_blocksize == rhs.m_blocksize && |
| m_memory_tagged == rhs.m_memory_tagged && |
| @@ -134,6 +141,7 @@ protected: |
| OptionalBool m_read = eDontKnow; |
| OptionalBool m_write = eDontKnow; |
| OptionalBool m_execute = eDontKnow; |
| + OptionalBool m_shared = eDontKnow; |
| OptionalBool m_mapped = eDontKnow; |
| ConstString m_name; |
| OptionalBool m_flash = eDontKnow; |
| diff --git a/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp b/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp |
| index 0fb4c691118..90118f9386d 100644 |
| --- a/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp |
| +++ b/lldb/source/Plugins/Process/Linux/NativeProcessLinux.cpp |
| @@ -1227,7 +1227,8 @@ llvm::Expected<uint64_t> |
| NativeProcessLinux::Syscall(llvm::ArrayRef<uint64_t> args) { |
| PopulateMemoryRegionCache(); |
| auto region_it = llvm::find_if(m_mem_region_cache, [](const auto &pair) { |
| - return pair.first.GetExecutable() == MemoryRegionInfo::eYes; |
| + return pair.first.GetExecutable() == MemoryRegionInfo::eYes && |
| + pair.first.GetShared() != MemoryRegionInfo::eYes; |
| }); |
| if (region_it == m_mem_region_cache.end()) |
| return llvm::createStringError(llvm::inconvertibleErrorCode(), |
| diff --git a/lldb/source/Plugins/Process/Utility/LinuxProcMaps.cpp b/lldb/source/Plugins/Process/Utility/LinuxProcMaps.cpp |
| index 947b970edf6..2a15f981374 100644 |
| --- a/lldb/source/Plugins/Process/Utility/LinuxProcMaps.cpp |
| +++ b/lldb/source/Plugins/Process/Utility/LinuxProcMaps.cpp |
| @@ -94,7 +94,15 @@ ParseMemoryRegionInfoFromProcMapsLine(llvm::StringRef maps_line, |
| return ProcMapError("unexpected /proc/{pid}/%s exec permission char", |
| maps_kind); |
| |
| - line_extractor.GetChar(); // Read the private bit |
| + // Handle sharing status (private/shared). |
| + const char sharing_char = line_extractor.GetChar(); |
| + if (sharing_char == 's') |
| + region.SetShared(MemoryRegionInfo::OptionalBool::eYes); |
| + else if (sharing_char == 'p') |
| + region.SetShared(MemoryRegionInfo::OptionalBool::eNo); |
| + else |
| + region.SetShared(MemoryRegionInfo::OptionalBool::eDontKnow); |
| + |
| line_extractor.SkipSpaces(); // Skip the separator |
| line_extractor.GetHexMaxU64(false, 0); // Read the offset |
| line_extractor.GetHexMaxU64(false, 0); // Read the major device number |
| diff --git a/lldb/unittests/Process/Utility/LinuxProcMapsTest.cpp b/lldb/unittests/Process/Utility/LinuxProcMapsTest.cpp |
| index bc714e26fbf..ac1c6132630 100644 |
| --- a/lldb/unittests/Process/Utility/LinuxProcMapsTest.cpp |
| +++ b/lldb/unittests/Process/Utility/LinuxProcMapsTest.cpp |
| @@ -87,8 +87,8 @@ INSTANTIATE_TEST_SUITE_P( |
| "0-0 rwzp 00000000 00:00 0\n" |
| "2-3 r-xp 00000000 00:00 0 [def]\n", |
| MemoryRegionInfos{ |
| - MemoryRegionInfo(make_range(0, 1), MemoryRegionInfo::eYes, |
| - MemoryRegionInfo::eYes, MemoryRegionInfo::eNo, |
| + MemoryRegionInfo(make_range(0, 1), MemoryRegionInfo::eYes, MemoryRegionInfo::eYes, MemoryRegionInfo::eNo, |
| + MemoryRegionInfo::eNo, |
| MemoryRegionInfo::eYes, ConstString("[abc]"), |
| MemoryRegionInfo::eDontKnow, 0, |
| MemoryRegionInfo::eDontKnow, |
| @@ -101,8 +101,9 @@ INSTANTIATE_TEST_SUITE_P( |
| MemoryRegionInfos{ |
| MemoryRegionInfo( |
| make_range(0x55a4512f7000, 0x55a451b68000), |
| - MemoryRegionInfo::eYes, MemoryRegionInfo::eYes, |
| - MemoryRegionInfo::eNo, MemoryRegionInfo::eYes, |
| + MemoryRegionInfo::eYes, MemoryRegionInfo::eYes, MemoryRegionInfo::eNo, |
| + MemoryRegionInfo::eNo, |
| + MemoryRegionInfo::eYes, |
| ConstString("[heap]"), MemoryRegionInfo::eDontKnow, 0, |
| MemoryRegionInfo::eDontKnow, MemoryRegionInfo::eDontKnow), |
| }, |
| @@ -110,19 +111,29 @@ INSTANTIATE_TEST_SUITE_P( |
| // Multiple entries |
| std::make_tuple( |
| "7fc090021000-7fc094000000 ---p 00000000 00:00 0\n" |
| + "7fc094000000-7fc094a00000 ---s 00000000 00:00 0\n" |
| "ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 " |
| "[vsyscall]", |
| MemoryRegionInfos{ |
| MemoryRegionInfo( |
| make_range(0x7fc090021000, 0x7fc094000000), |
| - MemoryRegionInfo::eNo, MemoryRegionInfo::eNo, |
| - MemoryRegionInfo::eNo, MemoryRegionInfo::eYes, |
| + MemoryRegionInfo::eNo, MemoryRegionInfo::eNo, MemoryRegionInfo::eNo, |
| + MemoryRegionInfo::eNo, |
| + MemoryRegionInfo::eYes, |
| + ConstString(nullptr), MemoryRegionInfo::eDontKnow, 0, |
| + MemoryRegionInfo::eDontKnow, MemoryRegionInfo::eDontKnow), |
| + MemoryRegionInfo( |
| + make_range(0x7fc094000000, 0x7fc094a00000), |
| + MemoryRegionInfo::eNo, MemoryRegionInfo::eNo, MemoryRegionInfo::eNo, |
| + MemoryRegionInfo::eYes, |
| + MemoryRegionInfo::eYes, |
| ConstString(nullptr), MemoryRegionInfo::eDontKnow, 0, |
| MemoryRegionInfo::eDontKnow, MemoryRegionInfo::eDontKnow), |
| MemoryRegionInfo( |
| make_range(0xffffffffff600000, 0xffffffffff601000), |
| - MemoryRegionInfo::eYes, MemoryRegionInfo::eNo, |
| - MemoryRegionInfo::eYes, MemoryRegionInfo::eYes, |
| + MemoryRegionInfo::eYes, MemoryRegionInfo::eNo, MemoryRegionInfo::eYes, |
| + MemoryRegionInfo::eNo, |
| + MemoryRegionInfo::eYes, |
| ConstString("[vsyscall]"), MemoryRegionInfo::eDontKnow, 0, |
| MemoryRegionInfo::eDontKnow, MemoryRegionInfo::eDontKnow), |
| }, |
| @@ -146,8 +157,9 @@ INSTANTIATE_TEST_SUITE_P( |
| "0/0 rw-p 00000000 00:00 0", |
| MemoryRegionInfos{ |
| MemoryRegionInfo( |
| - make_range(0x1111, 0x2222), MemoryRegionInfo::eYes, |
| - MemoryRegionInfo::eYes, MemoryRegionInfo::eNo, |
| + make_range(0x1111, 0x2222), |
| + MemoryRegionInfo::eYes, MemoryRegionInfo::eYes, MemoryRegionInfo::eNo, |
| + MemoryRegionInfo::eNo, |
| MemoryRegionInfo::eYes, ConstString("[foo]"), |
| MemoryRegionInfo::eDontKnow, 0, MemoryRegionInfo::eDontKnow, |
| MemoryRegionInfo::eDontKnow), |
| @@ -166,8 +178,22 @@ INSTANTIATE_TEST_SUITE_P( |
| "1111-2222 rw-p 00000000 00:00 0 [foo]", |
| MemoryRegionInfos{ |
| MemoryRegionInfo( |
| - make_range(0x1111, 0x2222), MemoryRegionInfo::eYes, |
| - MemoryRegionInfo::eYes, MemoryRegionInfo::eNo, |
| + make_range(0x1111, 0x2222), |
| + MemoryRegionInfo::eYes, MemoryRegionInfo::eYes, MemoryRegionInfo::eNo, |
| + MemoryRegionInfo::eNo, |
| + MemoryRegionInfo::eYes, ConstString("[foo]"), |
| + MemoryRegionInfo::eDontKnow, 0, MemoryRegionInfo::eDontKnow, |
| + MemoryRegionInfo::eDontKnow), |
| + }, |
| + ""), |
| + // Single shared region parses, has no flags |
| + std::make_tuple( |
| + "1111-2222 rw-s 00000000 00:00 0 [foo]", |
| + MemoryRegionInfos{ |
| + MemoryRegionInfo( |
| + make_range(0x1111, 0x2222), |
| + MemoryRegionInfo::eYes, MemoryRegionInfo::eYes, MemoryRegionInfo::eNo, |
| + MemoryRegionInfo::eYes, |
| MemoryRegionInfo::eYes, ConstString("[foo]"), |
| MemoryRegionInfo::eDontKnow, 0, MemoryRegionInfo::eDontKnow, |
| MemoryRegionInfo::eDontKnow), |
| @@ -181,8 +207,9 @@ INSTANTIATE_TEST_SUITE_P( |
| "VmFlags: mt", |
| MemoryRegionInfos{ |
| MemoryRegionInfo( |
| - make_range(0x1111, 0x2222), MemoryRegionInfo::eYes, |
| - MemoryRegionInfo::eYes, MemoryRegionInfo::eNo, |
| + make_range(0x1111, 0x2222), |
| + MemoryRegionInfo::eYes, MemoryRegionInfo::eYes, MemoryRegionInfo::eNo, |
| + MemoryRegionInfo::eNo, |
| MemoryRegionInfo::eYes, ConstString("[foo]"), |
| MemoryRegionInfo::eDontKnow, 0, MemoryRegionInfo::eYes, |
| MemoryRegionInfo::eDontKnow), |
| @@ -193,8 +220,9 @@ INSTANTIATE_TEST_SUITE_P( |
| "0-0 rw-p 00000000 00:00 0\n" |
| "VmFlags: mt ", |
| MemoryRegionInfos{ |
| - MemoryRegionInfo(make_range(0, 0), MemoryRegionInfo::eYes, |
| - MemoryRegionInfo::eYes, MemoryRegionInfo::eNo, |
| + MemoryRegionInfo(make_range(0, 0), |
| + MemoryRegionInfo::eYes, MemoryRegionInfo::eYes, MemoryRegionInfo::eNo, |
| + MemoryRegionInfo::eNo, |
| MemoryRegionInfo::eYes, ConstString(nullptr), |
| MemoryRegionInfo::eDontKnow, 0, |
| MemoryRegionInfo::eYes, |
| @@ -206,8 +234,9 @@ INSTANTIATE_TEST_SUITE_P( |
| "0-0 rw-p 00000000 00:00 0\n" |
| "VmFlags: ", |
| MemoryRegionInfos{ |
| - MemoryRegionInfo(make_range(0, 0), MemoryRegionInfo::eYes, |
| - MemoryRegionInfo::eYes, MemoryRegionInfo::eNo, |
| + MemoryRegionInfo(make_range(0, 0), |
| + MemoryRegionInfo::eYes, MemoryRegionInfo::eYes, MemoryRegionInfo::eNo, |
| + MemoryRegionInfo::eNo, |
| MemoryRegionInfo::eYes, ConstString(nullptr), |
| MemoryRegionInfo::eDontKnow, 0, |
| MemoryRegionInfo::eNo, |
| @@ -223,14 +252,15 @@ INSTANTIATE_TEST_SUITE_P( |
| "VmFlags: mt", |
| MemoryRegionInfos{ |
| MemoryRegionInfo( |
| - make_range(0x1111, 0x2222), MemoryRegionInfo::eYes, |
| - MemoryRegionInfo::eYes, MemoryRegionInfo::eNo, |
| + make_range(0x1111, 0x2222), |
| + MemoryRegionInfo::eYes, MemoryRegionInfo::eYes, MemoryRegionInfo::eNo, |
| + MemoryRegionInfo::eNo, |
| MemoryRegionInfo::eYes, ConstString("[foo]"), |
| MemoryRegionInfo::eDontKnow, 0, MemoryRegionInfo::eDontKnow, |
| MemoryRegionInfo::eDontKnow), |
| MemoryRegionInfo( |
| - make_range(0x3333, 0x4444), MemoryRegionInfo::eYes, |
| - MemoryRegionInfo::eNo, MemoryRegionInfo::eYes, |
| + make_range(0x3333, 0x4444), MemoryRegionInfo::eYes, MemoryRegionInfo::eNo, MemoryRegionInfo::eYes, |
| + MemoryRegionInfo::eNo, |
| MemoryRegionInfo::eYes, ConstString("[bar]"), |
| MemoryRegionInfo::eDontKnow, 0, MemoryRegionInfo::eYes, |
| MemoryRegionInfo::eDontKnow), |
| @@ -246,14 +276,16 @@ INSTANTIATE_TEST_SUITE_P( |
| "MMUPageSize: 4 kB\n", |
| MemoryRegionInfos{ |
| MemoryRegionInfo( |
| - make_range(0x1111, 0x2222), MemoryRegionInfo::eYes, |
| - MemoryRegionInfo::eYes, MemoryRegionInfo::eNo, |
| + make_range(0x1111, 0x2222), |
| + MemoryRegionInfo::eYes, MemoryRegionInfo::eYes, MemoryRegionInfo::eNo, |
| + MemoryRegionInfo::eNo, |
| MemoryRegionInfo::eYes, ConstString(nullptr), |
| MemoryRegionInfo::eDontKnow, 0, MemoryRegionInfo::eDontKnow, |
| MemoryRegionInfo::eDontKnow), |
| MemoryRegionInfo( |
| - make_range(0x3333, 0x4444), MemoryRegionInfo::eYes, |
| - MemoryRegionInfo::eNo, MemoryRegionInfo::eYes, |
| + make_range(0x3333, 0x4444), |
| + MemoryRegionInfo::eYes, MemoryRegionInfo::eNo, MemoryRegionInfo::eYes, |
| + MemoryRegionInfo::eNo, |
| MemoryRegionInfo::eYes, ConstString(nullptr), |
| MemoryRegionInfo::eDontKnow, 0, MemoryRegionInfo::eDontKnow, |
| MemoryRegionInfo::eDontKnow), |
| diff --git a/lldb/unittests/Process/Utility/MemoryTagManagerAArch64MTETest.cpp b/lldb/unittests/Process/Utility/MemoryTagManagerAArch64MTETest.cpp |
| index 78688aef3fd..9c209ec2363 100644 |
| --- a/lldb/unittests/Process/Utility/MemoryTagManagerAArch64MTETest.cpp |
| +++ b/lldb/unittests/Process/Utility/MemoryTagManagerAArch64MTETest.cpp |
| @@ -134,8 +134,10 @@ TEST(MemoryTagManagerAArch64MTETest, ExpandToGranule) { |
| static MemoryRegionInfo MakeRegionInfo(lldb::addr_t base, lldb::addr_t size, |
| bool tagged) { |
| return MemoryRegionInfo( |
| - MemoryRegionInfo::RangeType(base, size), MemoryRegionInfo::eYes, |
| + MemoryRegionInfo::RangeType(base, size), |
| MemoryRegionInfo::eYes, MemoryRegionInfo::eYes, MemoryRegionInfo::eYes, |
| + MemoryRegionInfo::eNo, |
| + MemoryRegionInfo::eYes, |
| ConstString(), MemoryRegionInfo::eNo, 0, |
| /*memory_tagged=*/ |
| tagged ? MemoryRegionInfo::eYes : MemoryRegionInfo::eNo, |
| diff --git a/lldb/unittests/Process/minidump/MinidumpParserTest.cpp b/lldb/unittests/Process/minidump/MinidumpParserTest.cpp |
| index 95e2cf30b3d..b8143d53eb0 100644 |
| --- a/lldb/unittests/Process/minidump/MinidumpParserTest.cpp |
| +++ b/lldb/unittests/Process/minidump/MinidumpParserTest.cpp |
| @@ -378,15 +378,15 @@ Streams: |
| parser->BuildMemoryRegions(), |
| testing::Pair( |
| testing::ElementsAre( |
| - MemoryRegionInfo({0x0, 0x10000}, no, no, no, no, ConstString(), |
| + MemoryRegionInfo({0x0, 0x10000}, no, no, no, unknown, no, ConstString(), |
| unknown, 0, unknown, unknown), |
| - MemoryRegionInfo({0x10000, 0x21000}, yes, yes, no, yes, |
| + MemoryRegionInfo({0x10000, 0x21000}, yes, yes, no, unknown, yes, |
| ConstString(), unknown, 0, unknown, unknown), |
| - MemoryRegionInfo({0x40000, 0x1000}, yes, no, no, yes, |
| + MemoryRegionInfo({0x40000, 0x1000}, yes, no, no, unknown, yes, |
| ConstString(), unknown, 0, unknown, unknown), |
| - MemoryRegionInfo({0x7ffe0000, 0x1000}, yes, no, no, yes, |
| + MemoryRegionInfo({0x7ffe0000, 0x1000}, yes, no, no, unknown, yes, |
| ConstString(), unknown, 0, unknown, unknown), |
| - MemoryRegionInfo({0x7ffe1000, 0xf000}, no, no, no, yes, |
| + MemoryRegionInfo({0x7ffe1000, 0xf000}, no, no, no, unknown, yes, |
| ConstString(), unknown, 0, unknown, unknown)), |
| true)); |
| } |
| @@ -412,9 +412,9 @@ Streams: |
| parser->BuildMemoryRegions(), |
| testing::Pair( |
| testing::ElementsAre( |
| - MemoryRegionInfo({0x1000, 0x10}, yes, unknown, unknown, yes, |
| + MemoryRegionInfo({0x1000, 0x10}, yes, unknown, unknown, unknown, yes, |
| ConstString(), unknown, 0, unknown, unknown), |
| - MemoryRegionInfo({0x2000, 0x20}, yes, unknown, unknown, yes, |
| + MemoryRegionInfo({0x2000, 0x20}, yes, unknown, unknown, unknown, yes, |
| ConstString(), unknown, 0, unknown, unknown)), |
| false)); |
| } |
| @@ -428,9 +428,9 @@ TEST_F(MinidumpParserTest, GetMemoryRegionInfoFromMemory64List) { |
| parser->BuildMemoryRegions(), |
| testing::Pair( |
| testing::ElementsAre( |
| - MemoryRegionInfo({0x1000, 0x10}, yes, unknown, unknown, yes, |
| + MemoryRegionInfo({0x1000, 0x10}, yes, unknown, unknown, unknown, yes, |
| ConstString(), unknown, 0, unknown, unknown), |
| - MemoryRegionInfo({0x2000, 0x20}, yes, unknown, unknown, yes, |
| + MemoryRegionInfo({0x2000, 0x20}, yes, unknown, unknown, unknown, yes, |
| ConstString(), unknown, 0, unknown, unknown)), |
| false)); |
| } |
| @@ -460,17 +460,17 @@ Streams: |
| parser->BuildMemoryRegions(), |
| testing::Pair( |
| testing::ElementsAre( |
| - MemoryRegionInfo({0x400d9000, 0x2000}, yes, no, yes, yes, |
| + MemoryRegionInfo({0x400d9000, 0x2000}, yes, no, yes, no, yes, |
| app_process, unknown, 0, unknown, unknown), |
| - MemoryRegionInfo({0x400db000, 0x1000}, yes, no, no, yes, |
| + MemoryRegionInfo({0x400db000, 0x1000}, yes, no, no, no, yes, |
| app_process, unknown, 0, unknown, unknown), |
| - MemoryRegionInfo({0x400dc000, 0x1000}, yes, yes, no, yes, |
| + MemoryRegionInfo({0x400dc000, 0x1000}, yes, yes, no, no, yes, |
| ConstString(), unknown, 0, unknown, unknown), |
| - MemoryRegionInfo({0x400ec000, 0x1000}, yes, no, no, yes, |
| + MemoryRegionInfo({0x400ec000, 0x1000}, yes, no, no, no, yes, |
| ConstString(), unknown, 0, unknown, unknown), |
| - MemoryRegionInfo({0x400ee000, 0x1000}, yes, yes, no, yes, linker, |
| + MemoryRegionInfo({0x400ee000, 0x1000}, yes, yes, no, no, yes, linker, |
| unknown, 0, unknown, unknown), |
| - MemoryRegionInfo({0x400fc000, 0x1000}, yes, yes, yes, yes, liblog, |
| + MemoryRegionInfo({0x400fc000, 0x1000}, yes, yes, yes, no, yes, liblog, |
| unknown, 0, unknown, unknown)), |
| true)); |
| } |
| @@ -491,7 +491,7 @@ Streams: |
| EXPECT_THAT( |
| parser->BuildMemoryRegions(), |
| testing::Pair(testing::ElementsAre(MemoryRegionInfo( |
| - {0x400fc000, 0x1000}, yes, yes, yes, yes, |
| + {0x400fc000, 0x1000}, yes, yes, yes, no, yes, |
| ConstString(nullptr), unknown, 0, unknown, unknown)), |
| true)); |
| } |
| -- |
| 2.37.0.rc0.161.g10f37bed90-goog |
| |