xref: /llvm-project/lldb/unittests/Process/Utility/LinuxProcMapsTest.cpp (revision b1751faada35e3456b2a3f6b6c9559b5d74d559b)
132541685SDavid Spickett //===-- LinuxProcMapsTest.cpp ---------------------------------------------===//
232541685SDavid Spickett //
332541685SDavid Spickett // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
432541685SDavid Spickett // See https://llvm.org/LICENSE.txt for license information.
532541685SDavid Spickett // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
632541685SDavid Spickett //
732541685SDavid Spickett //===----------------------------------------------------------------------===//
832541685SDavid Spickett 
932541685SDavid Spickett #include "gmock/gmock.h"
1032541685SDavid Spickett #include "gtest/gtest.h"
1132541685SDavid Spickett 
1232541685SDavid Spickett #include "Plugins/Process/Utility/LinuxProcMaps.h"
1332541685SDavid Spickett #include "lldb/Target/MemoryRegionInfo.h"
1432541685SDavid Spickett #include "lldb/Utility/Status.h"
1532541685SDavid Spickett #include <tuple>
1632541685SDavid Spickett 
1732541685SDavid Spickett using namespace lldb_private;
1832541685SDavid Spickett 
1932541685SDavid Spickett typedef std::tuple<const char *, MemoryRegionInfos, const char *>
2032541685SDavid Spickett     LinuxProcMapsTestParams;
2132541685SDavid Spickett 
2232541685SDavid Spickett // Wrapper for convenience because Range is usually begin, size
2332541685SDavid Spickett static MemoryRegionInfo::RangeType make_range(lldb::addr_t begin,
2432541685SDavid Spickett                                               lldb::addr_t end) {
2532541685SDavid Spickett   MemoryRegionInfo::RangeType range(begin, 0);
2632541685SDavid Spickett   range.SetRangeEnd(end);
2732541685SDavid Spickett   return range;
2832541685SDavid Spickett }
2932541685SDavid Spickett 
3032541685SDavid Spickett class LinuxProcMapsTestFixture
3132541685SDavid Spickett     : public ::testing::TestWithParam<LinuxProcMapsTestParams> {
3232541685SDavid Spickett protected:
3332541685SDavid Spickett   Status error;
3432541685SDavid Spickett   std::string err_str;
3532541685SDavid Spickett   MemoryRegionInfos regions;
3632541685SDavid Spickett   LinuxMapCallback callback;
3732541685SDavid Spickett 
3832541685SDavid Spickett   void SetUp() override {
3932541685SDavid Spickett     callback = [this](llvm::Expected<MemoryRegionInfo> Info) {
4032541685SDavid Spickett       if (Info) {
4132541685SDavid Spickett         err_str.clear();
4232541685SDavid Spickett         regions.push_back(*Info);
4332541685SDavid Spickett         return true;
4432541685SDavid Spickett       }
4532541685SDavid Spickett 
4632541685SDavid Spickett       err_str = toString(Info.takeError());
4732541685SDavid Spickett       return false;
4832541685SDavid Spickett     };
4932541685SDavid Spickett   }
5032541685SDavid Spickett 
5132541685SDavid Spickett   void check_regions(LinuxProcMapsTestParams params) {
5232541685SDavid Spickett     EXPECT_THAT(std::get<1>(params), testing::ContainerEq(regions));
5332541685SDavid Spickett     ASSERT_EQ(std::get<2>(params), err_str);
5432541685SDavid Spickett   }
5532541685SDavid Spickett };
5632541685SDavid Spickett 
5732541685SDavid Spickett TEST_P(LinuxProcMapsTestFixture, ParseMapRegions) {
5832541685SDavid Spickett   auto params = GetParam();
5932541685SDavid Spickett   ParseLinuxMapRegions(std::get<0>(params), callback);
6032541685SDavid Spickett   check_regions(params);
6132541685SDavid Spickett }
6232541685SDavid Spickett 
6332541685SDavid Spickett // Note: ConstString("") != ConstString(nullptr)
6432541685SDavid Spickett // When a region has no name, it will have the latter in the MemoryRegionInfo
65d4d80a29SBenjamin Kramer INSTANTIATE_TEST_SUITE_P(
6632541685SDavid Spickett     ProcMapTests, LinuxProcMapsTestFixture,
6732541685SDavid Spickett     ::testing::Values(
6832541685SDavid Spickett         // Nothing in nothing out
6932541685SDavid Spickett         std::make_tuple("", MemoryRegionInfos{}, ""),
7032541685SDavid Spickett         // Various formatting error conditions
7132541685SDavid Spickett         std::make_tuple("55a4512f7000/55a451b68000 rw-p 00000000 00:00 0",
7232541685SDavid Spickett                         MemoryRegionInfos{},
7332541685SDavid Spickett                         "malformed /proc/{pid}/maps entry, missing dash "
7432541685SDavid Spickett                         "between address range"),
7532541685SDavid Spickett         std::make_tuple("0-0 rw", MemoryRegionInfos{},
7632541685SDavid Spickett                         "malformed /proc/{pid}/maps entry, missing some "
7732541685SDavid Spickett                         "portion of permissions"),
7832541685SDavid Spickett         std::make_tuple("0-0 z--p 00000000 00:00 0", MemoryRegionInfos{},
7932541685SDavid Spickett                         "unexpected /proc/{pid}/maps read permission char"),
8032541685SDavid Spickett         std::make_tuple("0-0 rz-p 00000000 00:00 0", MemoryRegionInfos{},
8132541685SDavid Spickett                         "unexpected /proc/{pid}/maps write permission char"),
8232541685SDavid Spickett         std::make_tuple("0-0 rwzp 00000000 00:00 0", MemoryRegionInfos{},
8332541685SDavid Spickett                         "unexpected /proc/{pid}/maps exec permission char"),
8432541685SDavid Spickett         // Stops at first parsing error
8532541685SDavid Spickett         std::make_tuple(
8632541685SDavid Spickett             "0-1 rw-p 00000000 00:00 0 [abc]\n"
8732541685SDavid Spickett             "0-0 rwzp 00000000 00:00 0\n"
8832541685SDavid Spickett             "2-3 r-xp 00000000 00:00 0 [def]\n",
8932541685SDavid Spickett             MemoryRegionInfos{
90*b1751faaSDavid Spickett                 MemoryRegionInfo(
91*b1751faaSDavid Spickett                     make_range(0, 1), MemoryRegionInfo::eYes,
92*b1751faaSDavid Spickett                     MemoryRegionInfo::eYes, MemoryRegionInfo::eNo,
93*b1751faaSDavid Spickett                     MemoryRegionInfo::eNo, MemoryRegionInfo::eYes,
94*b1751faaSDavid Spickett                     ConstString("[abc]"), MemoryRegionInfo::eDontKnow, 0,
95*b1751faaSDavid Spickett                     MemoryRegionInfo::eDontKnow, MemoryRegionInfo::eDontKnow,
9632541685SDavid Spickett                     MemoryRegionInfo::eDontKnow),
9732541685SDavid Spickett             },
9832541685SDavid Spickett             "unexpected /proc/{pid}/maps exec permission char"),
9932541685SDavid Spickett         // Single entry
10032541685SDavid Spickett         std::make_tuple(
10132541685SDavid Spickett             "55a4512f7000-55a451b68000 rw-p 00000000 00:00 0    [heap]",
10232541685SDavid Spickett             MemoryRegionInfos{
103b97afc9dSJonas Devlieghere                 MemoryRegionInfo(
104b97afc9dSJonas Devlieghere                     make_range(0x55a4512f7000, 0x55a451b68000),
105*b1751faaSDavid Spickett                     MemoryRegionInfo::eYes, MemoryRegionInfo::eYes,
106*b1751faaSDavid Spickett                     MemoryRegionInfo::eNo, MemoryRegionInfo::eNo,
107*b1751faaSDavid Spickett                     MemoryRegionInfo::eYes, ConstString("[heap]"),
108*b1751faaSDavid Spickett                     MemoryRegionInfo::eDontKnow, 0, MemoryRegionInfo::eDontKnow,
109b97afc9dSJonas Devlieghere                     MemoryRegionInfo::eDontKnow, MemoryRegionInfo::eDontKnow),
11032541685SDavid Spickett             },
11132541685SDavid Spickett             ""),
11232541685SDavid Spickett         // Multiple entries
11332541685SDavid Spickett         std::make_tuple(
11432541685SDavid Spickett             "7fc090021000-7fc094000000 ---p 00000000 00:00 0\n"
115c0702ac0SEmre Kultursay             "7fc094000000-7fc094a00000 ---s 00000000 00:00 0\n"
11632541685SDavid Spickett             "ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 "
11732541685SDavid Spickett             "[vsyscall]",
11832541685SDavid Spickett             MemoryRegionInfos{
119b97afc9dSJonas Devlieghere                 MemoryRegionInfo(
120b97afc9dSJonas Devlieghere                     make_range(0x7fc090021000, 0x7fc094000000),
121*b1751faaSDavid Spickett                     MemoryRegionInfo::eNo, MemoryRegionInfo::eNo,
122*b1751faaSDavid Spickett                     MemoryRegionInfo::eNo, MemoryRegionInfo::eNo,
123*b1751faaSDavid Spickett                     MemoryRegionInfo::eYes, ConstString(nullptr),
124*b1751faaSDavid Spickett                     MemoryRegionInfo::eDontKnow, 0, MemoryRegionInfo::eDontKnow,
125c0702ac0SEmre Kultursay                     MemoryRegionInfo::eDontKnow, MemoryRegionInfo::eDontKnow),
126c0702ac0SEmre Kultursay                 MemoryRegionInfo(
127c0702ac0SEmre Kultursay                     make_range(0x7fc094000000, 0x7fc094a00000),
128*b1751faaSDavid Spickett                     MemoryRegionInfo::eNo, MemoryRegionInfo::eNo,
129*b1751faaSDavid Spickett                     MemoryRegionInfo::eNo, MemoryRegionInfo::eYes,
130*b1751faaSDavid Spickett                     MemoryRegionInfo::eYes, ConstString(nullptr),
131*b1751faaSDavid Spickett                     MemoryRegionInfo::eDontKnow, 0, MemoryRegionInfo::eDontKnow,
132b97afc9dSJonas Devlieghere                     MemoryRegionInfo::eDontKnow, MemoryRegionInfo::eDontKnow),
13332541685SDavid Spickett                 MemoryRegionInfo(
13432541685SDavid Spickett                     make_range(0xffffffffff600000, 0xffffffffff601000),
135*b1751faaSDavid Spickett                     MemoryRegionInfo::eYes, MemoryRegionInfo::eNo,
136*b1751faaSDavid Spickett                     MemoryRegionInfo::eYes, MemoryRegionInfo::eNo,
137*b1751faaSDavid Spickett                     MemoryRegionInfo::eYes, ConstString("[vsyscall]"),
138*b1751faaSDavid Spickett                     MemoryRegionInfo::eDontKnow, 0, MemoryRegionInfo::eDontKnow,
139b97afc9dSJonas Devlieghere                     MemoryRegionInfo::eDontKnow, MemoryRegionInfo::eDontKnow),
14032541685SDavid Spickett             },
141d4d80a29SBenjamin Kramer             "")));
14232541685SDavid Spickett 
14332541685SDavid Spickett class LinuxProcSMapsTestFixture : public LinuxProcMapsTestFixture {};
14432541685SDavid Spickett 
145d4d80a29SBenjamin Kramer INSTANTIATE_TEST_SUITE_P(
14632541685SDavid Spickett     ProcSMapTests, LinuxProcSMapsTestFixture,
14732541685SDavid Spickett     ::testing::Values(
14832541685SDavid Spickett         // Nothing in nothing out
14932541685SDavid Spickett         std::make_tuple("", MemoryRegionInfos{}, ""),
15032541685SDavid Spickett         // Uses the same parsing for first line, so same errors but referring to
15132541685SDavid Spickett         // smaps
15232541685SDavid Spickett         std::make_tuple("0/0 rw-p 00000000 00:00 0", MemoryRegionInfos{},
15332541685SDavid Spickett                         "malformed /proc/{pid}/smaps entry, missing dash "
15432541685SDavid Spickett                         "between address range"),
15532541685SDavid Spickett         // Stop parsing at first error
15632541685SDavid Spickett         std::make_tuple(
15732541685SDavid Spickett             "1111-2222 rw-p 00000000 00:00 0 [foo]\n"
15832541685SDavid Spickett             "0/0 rw-p 00000000 00:00 0",
15932541685SDavid Spickett             MemoryRegionInfos{
160b97afc9dSJonas Devlieghere                 MemoryRegionInfo(
161*b1751faaSDavid Spickett                     make_range(0x1111, 0x2222), MemoryRegionInfo::eYes,
162*b1751faaSDavid Spickett                     MemoryRegionInfo::eYes, MemoryRegionInfo::eNo,
163*b1751faaSDavid Spickett                     MemoryRegionInfo::eNo, MemoryRegionInfo::eYes,
164*b1751faaSDavid Spickett                     ConstString("[foo]"), MemoryRegionInfo::eDontKnow, 0,
165*b1751faaSDavid Spickett                     MemoryRegionInfo::eDontKnow, MemoryRegionInfo::eDontKnow,
16632541685SDavid Spickett                     MemoryRegionInfo::eDontKnow),
16732541685SDavid Spickett             },
16832541685SDavid Spickett             "malformed /proc/{pid}/smaps entry, missing dash between address "
16932541685SDavid Spickett             "range"),
17032541685SDavid Spickett         // Property line without a region is an error
17132541685SDavid Spickett         std::make_tuple("Referenced:         2188 kB\n"
17232541685SDavid Spickett                         "1111-2222 rw-p 00000000 00:00 0    [foo]\n"
17332541685SDavid Spickett                         "3333-4444 rw-p 00000000 00:00 0    [bar]\n",
17432541685SDavid Spickett                         MemoryRegionInfos{},
17532541685SDavid Spickett                         "Found a property line without a corresponding mapping "
17632541685SDavid Spickett                         "in /proc/{pid}/smaps"),
17732541685SDavid Spickett         // Single region parses, has no flags
17832541685SDavid Spickett         std::make_tuple(
17932541685SDavid Spickett             "1111-2222 rw-p 00000000 00:00 0    [foo]",
18032541685SDavid Spickett             MemoryRegionInfos{
181b97afc9dSJonas Devlieghere                 MemoryRegionInfo(
182*b1751faaSDavid Spickett                     make_range(0x1111, 0x2222), MemoryRegionInfo::eYes,
183*b1751faaSDavid Spickett                     MemoryRegionInfo::eYes, MemoryRegionInfo::eNo,
184*b1751faaSDavid Spickett                     MemoryRegionInfo::eNo, MemoryRegionInfo::eYes,
185*b1751faaSDavid Spickett                     ConstString("[foo]"), MemoryRegionInfo::eDontKnow, 0,
186*b1751faaSDavid Spickett                     MemoryRegionInfo::eDontKnow, MemoryRegionInfo::eDontKnow,
187c0702ac0SEmre Kultursay                     MemoryRegionInfo::eDontKnow),
188c0702ac0SEmre Kultursay             },
189c0702ac0SEmre Kultursay             ""),
190c0702ac0SEmre Kultursay         // Single shared region parses, has no flags
191c0702ac0SEmre Kultursay         std::make_tuple(
192c0702ac0SEmre Kultursay             "1111-2222 rw-s 00000000 00:00 0    [foo]",
193c0702ac0SEmre Kultursay             MemoryRegionInfos{
194c0702ac0SEmre Kultursay                 MemoryRegionInfo(
195*b1751faaSDavid Spickett                     make_range(0x1111, 0x2222), MemoryRegionInfo::eYes,
196*b1751faaSDavid Spickett                     MemoryRegionInfo::eYes, MemoryRegionInfo::eNo,
197*b1751faaSDavid Spickett                     MemoryRegionInfo::eYes, MemoryRegionInfo::eYes,
198*b1751faaSDavid Spickett                     ConstString("[foo]"), MemoryRegionInfo::eDontKnow, 0,
199*b1751faaSDavid Spickett                     MemoryRegionInfo::eDontKnow, MemoryRegionInfo::eDontKnow,
20032541685SDavid Spickett                     MemoryRegionInfo::eDontKnow),
20132541685SDavid Spickett             },
20232541685SDavid Spickett             ""),
20332541685SDavid Spickett         // Single region with flags, other lines ignored
20432541685SDavid Spickett         std::make_tuple(
20532541685SDavid Spickett             "1111-2222 rw-p 00000000 00:00 0    [foo]\n"
20632541685SDavid Spickett             "Referenced:         2188 kB\n"
20732541685SDavid Spickett             "AnonHugePages:         0 kB\n"
20832541685SDavid Spickett             "VmFlags: mt",
20932541685SDavid Spickett             MemoryRegionInfos{
21032541685SDavid Spickett                 MemoryRegionInfo(
211*b1751faaSDavid Spickett                     make_range(0x1111, 0x2222), MemoryRegionInfo::eYes,
212*b1751faaSDavid Spickett                     MemoryRegionInfo::eYes, MemoryRegionInfo::eNo,
213*b1751faaSDavid Spickett                     MemoryRegionInfo::eNo, MemoryRegionInfo::eYes,
214*b1751faaSDavid Spickett                     ConstString("[foo]"), MemoryRegionInfo::eDontKnow, 0,
215*b1751faaSDavid Spickett                     MemoryRegionInfo::eYes, MemoryRegionInfo::eDontKnow,
216*b1751faaSDavid Spickett                     MemoryRegionInfo::eNo),
21732541685SDavid Spickett             },
21832541685SDavid Spickett             ""),
21932541685SDavid Spickett         // Whitespace ignored
22032541685SDavid Spickett         std::make_tuple(
22132541685SDavid Spickett             "0-0 rw-p 00000000 00:00 0\n"
22232541685SDavid Spickett             "VmFlags:      mt      ",
22332541685SDavid Spickett             MemoryRegionInfos{
224*b1751faaSDavid Spickett                 MemoryRegionInfo(
225*b1751faaSDavid Spickett                     make_range(0, 0), MemoryRegionInfo::eYes,
226*b1751faaSDavid Spickett                     MemoryRegionInfo::eYes, MemoryRegionInfo::eNo,
227*b1751faaSDavid Spickett                     MemoryRegionInfo::eNo, MemoryRegionInfo::eYes,
228*b1751faaSDavid Spickett                     ConstString(nullptr), MemoryRegionInfo::eDontKnow, 0,
229*b1751faaSDavid Spickett                     MemoryRegionInfo::eYes, MemoryRegionInfo::eDontKnow,
230*b1751faaSDavid Spickett                     MemoryRegionInfo::eNo),
23132541685SDavid Spickett             },
23232541685SDavid Spickett             ""),
23332541685SDavid Spickett         // VmFlags line means it has flag info, but nothing is set
23432541685SDavid Spickett         std::make_tuple(
23532541685SDavid Spickett             "0-0 rw-p 00000000 00:00 0\n"
23632541685SDavid Spickett             "VmFlags:         ",
23732541685SDavid Spickett             MemoryRegionInfos{
238*b1751faaSDavid Spickett                 MemoryRegionInfo(
239*b1751faaSDavid Spickett                     make_range(0, 0), MemoryRegionInfo::eYes,
240*b1751faaSDavid Spickett                     MemoryRegionInfo::eYes, MemoryRegionInfo::eNo,
241*b1751faaSDavid Spickett                     MemoryRegionInfo::eNo, MemoryRegionInfo::eYes,
242*b1751faaSDavid Spickett                     ConstString(nullptr), MemoryRegionInfo::eDontKnow, 0,
243*b1751faaSDavid Spickett                     MemoryRegionInfo::eNo, MemoryRegionInfo::eDontKnow,
244*b1751faaSDavid Spickett                     MemoryRegionInfo::eNo),
24532541685SDavid Spickett             },
24632541685SDavid Spickett             ""),
24732541685SDavid Spickett         // Handle some pages not having a flags line
24832541685SDavid Spickett         std::make_tuple(
24932541685SDavid Spickett             "1111-2222 rw-p 00000000 00:00 0    [foo]\n"
25032541685SDavid Spickett             "Referenced:         2188 kB\n"
25132541685SDavid Spickett             "AnonHugePages:         0 kB\n"
25232541685SDavid Spickett             "3333-4444 r-xp 00000000 00:00 0    [bar]\n"
25332541685SDavid Spickett             "VmFlags: mt",
25432541685SDavid Spickett             MemoryRegionInfos{
255b97afc9dSJonas Devlieghere                 MemoryRegionInfo(
256*b1751faaSDavid Spickett                     make_range(0x1111, 0x2222), MemoryRegionInfo::eYes,
257*b1751faaSDavid Spickett                     MemoryRegionInfo::eYes, MemoryRegionInfo::eNo,
258*b1751faaSDavid Spickett                     MemoryRegionInfo::eNo, MemoryRegionInfo::eYes,
259*b1751faaSDavid Spickett                     ConstString("[foo]"), MemoryRegionInfo::eDontKnow, 0,
260*b1751faaSDavid Spickett                     MemoryRegionInfo::eDontKnow, MemoryRegionInfo::eDontKnow,
26132541685SDavid Spickett                     MemoryRegionInfo::eDontKnow),
26232541685SDavid Spickett                 MemoryRegionInfo(
263*b1751faaSDavid Spickett                     make_range(0x3333, 0x4444), MemoryRegionInfo::eYes,
264*b1751faaSDavid Spickett                     MemoryRegionInfo::eNo, MemoryRegionInfo::eYes,
265*b1751faaSDavid Spickett                     MemoryRegionInfo::eNo, MemoryRegionInfo::eYes,
266*b1751faaSDavid Spickett                     ConstString("[bar]"), MemoryRegionInfo::eDontKnow, 0,
267*b1751faaSDavid Spickett                     MemoryRegionInfo::eYes, MemoryRegionInfo::eDontKnow,
268*b1751faaSDavid Spickett                     MemoryRegionInfo::eNo),
26932541685SDavid Spickett             },
27032541685SDavid Spickett             ""),
27132541685SDavid Spickett         // Handle no pages having a flags line (older kernels)
27232541685SDavid Spickett         std::make_tuple(
27332541685SDavid Spickett             "1111-2222 rw-p 00000000 00:00 0\n"
27432541685SDavid Spickett             "Referenced:         2188 kB\n"
27532541685SDavid Spickett             "AnonHugePages:         0 kB\n"
27632541685SDavid Spickett             "3333-4444 r-xp 00000000 00:00 0\n"
27732541685SDavid Spickett             "KernelPageSize:        4 kB\n"
27832541685SDavid Spickett             "MMUPageSize:           4 kB\n",
27932541685SDavid Spickett             MemoryRegionInfos{
280b97afc9dSJonas Devlieghere                 MemoryRegionInfo(
281*b1751faaSDavid Spickett                     make_range(0x1111, 0x2222), MemoryRegionInfo::eYes,
282*b1751faaSDavid Spickett                     MemoryRegionInfo::eYes, MemoryRegionInfo::eNo,
283*b1751faaSDavid Spickett                     MemoryRegionInfo::eNo, MemoryRegionInfo::eYes,
284*b1751faaSDavid Spickett                     ConstString(nullptr), MemoryRegionInfo::eDontKnow, 0,
285*b1751faaSDavid Spickett                     MemoryRegionInfo::eDontKnow, MemoryRegionInfo::eDontKnow,
286b97afc9dSJonas Devlieghere                     MemoryRegionInfo::eDontKnow),
287b97afc9dSJonas Devlieghere                 MemoryRegionInfo(
288*b1751faaSDavid Spickett                     make_range(0x3333, 0x4444), MemoryRegionInfo::eYes,
289*b1751faaSDavid Spickett                     MemoryRegionInfo::eNo, MemoryRegionInfo::eYes,
290*b1751faaSDavid Spickett                     MemoryRegionInfo::eNo, MemoryRegionInfo::eYes,
291*b1751faaSDavid Spickett                     ConstString(nullptr), MemoryRegionInfo::eDontKnow, 0,
292*b1751faaSDavid Spickett                     MemoryRegionInfo::eDontKnow, MemoryRegionInfo::eDontKnow,
29332541685SDavid Spickett                     MemoryRegionInfo::eDontKnow),
29432541685SDavid Spickett             },
295*b1751faaSDavid Spickett             ""),
296*b1751faaSDavid Spickett         // We must look for exact flag strings, ignoring substrings of longer
297*b1751faaSDavid Spickett         // flag names.
298*b1751faaSDavid Spickett         std::make_tuple(
299*b1751faaSDavid Spickett             "0-0 rw-p 00000000 00:00 0\n"
300*b1751faaSDavid Spickett             "VmFlags: amt mtb amtb",
301*b1751faaSDavid Spickett             MemoryRegionInfos{
302*b1751faaSDavid Spickett                 MemoryRegionInfo(
303*b1751faaSDavid Spickett                     make_range(0, 0), MemoryRegionInfo::eYes,
304*b1751faaSDavid Spickett                     MemoryRegionInfo::eYes, MemoryRegionInfo::eNo,
305*b1751faaSDavid Spickett                     MemoryRegionInfo::eNo, MemoryRegionInfo::eYes,
306*b1751faaSDavid Spickett                     ConstString(nullptr), MemoryRegionInfo::eDontKnow, 0,
307*b1751faaSDavid Spickett                     MemoryRegionInfo::eNo, MemoryRegionInfo::eDontKnow,
308*b1751faaSDavid Spickett                     MemoryRegionInfo::eNo),
309*b1751faaSDavid Spickett             },
310d4d80a29SBenjamin Kramer             "")));
31132541685SDavid Spickett 
31232541685SDavid Spickett TEST_P(LinuxProcSMapsTestFixture, ParseSMapRegions) {
31332541685SDavid Spickett   auto params = GetParam();
31432541685SDavid Spickett   ParseLinuxSMapRegions(std::get<0>(params), callback);
31532541685SDavid Spickett   check_regions(params);
31632541685SDavid Spickett }
317