summaryrefslogtreecommitdiff
path: root/gnu/llvm/lldb/unittests/Process/Utility/LinuxProcMapsTest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/llvm/lldb/unittests/Process/Utility/LinuxProcMapsTest.cpp')
-rw-r--r--gnu/llvm/lldb/unittests/Process/Utility/LinuxProcMapsTest.cpp262
1 files changed, 0 insertions, 262 deletions
diff --git a/gnu/llvm/lldb/unittests/Process/Utility/LinuxProcMapsTest.cpp b/gnu/llvm/lldb/unittests/Process/Utility/LinuxProcMapsTest.cpp
deleted file mode 100644
index 66db61ff659..00000000000
--- a/gnu/llvm/lldb/unittests/Process/Utility/LinuxProcMapsTest.cpp
+++ /dev/null
@@ -1,262 +0,0 @@
-//===-- LinuxProcMapsTest.cpp ---------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#include "gmock/gmock.h"
-#include "gtest/gtest.h"
-
-#include "Plugins/Process/Utility/LinuxProcMaps.h"
-#include "lldb/Target/MemoryRegionInfo.h"
-#include "lldb/Utility/Status.h"
-#include <tuple>
-
-using namespace lldb_private;
-
-typedef std::tuple<const char *, MemoryRegionInfos, const char *>
- LinuxProcMapsTestParams;
-
-// Wrapper for convenience because Range is usually begin, size
-static MemoryRegionInfo::RangeType make_range(lldb::addr_t begin,
- lldb::addr_t end) {
- MemoryRegionInfo::RangeType range(begin, 0);
- range.SetRangeEnd(end);
- return range;
-}
-
-class LinuxProcMapsTestFixture
- : public ::testing::TestWithParam<LinuxProcMapsTestParams> {
-protected:
- Status error;
- std::string err_str;
- MemoryRegionInfos regions;
- LinuxMapCallback callback;
-
- void SetUp() override {
- callback = [this](llvm::Expected<MemoryRegionInfo> Info) {
- if (Info) {
- err_str.clear();
- regions.push_back(*Info);
- return true;
- }
-
- err_str = toString(Info.takeError());
- return false;
- };
- }
-
- void check_regions(LinuxProcMapsTestParams params) {
- EXPECT_THAT(std::get<1>(params), testing::ContainerEq(regions));
- ASSERT_EQ(std::get<2>(params), err_str);
- }
-};
-
-TEST_P(LinuxProcMapsTestFixture, ParseMapRegions) {
- auto params = GetParam();
- ParseLinuxMapRegions(std::get<0>(params), callback);
- check_regions(params);
-}
-
-// Note: ConstString("") != ConstString(nullptr)
-// When a region has no name, it will have the latter in the MemoryRegionInfo
-INSTANTIATE_TEST_SUITE_P(
- ProcMapTests, LinuxProcMapsTestFixture,
- ::testing::Values(
- // Nothing in nothing out
- std::make_tuple("", MemoryRegionInfos{}, ""),
- // Various formatting error conditions
- std::make_tuple("55a4512f7000/55a451b68000 rw-p 00000000 00:00 0",
- MemoryRegionInfos{},
- "malformed /proc/{pid}/maps entry, missing dash "
- "between address range"),
- std::make_tuple("0-0 rw", MemoryRegionInfos{},
- "malformed /proc/{pid}/maps entry, missing some "
- "portion of permissions"),
- std::make_tuple("0-0 z--p 00000000 00:00 0", MemoryRegionInfos{},
- "unexpected /proc/{pid}/maps read permission char"),
- std::make_tuple("0-0 rz-p 00000000 00:00 0", MemoryRegionInfos{},
- "unexpected /proc/{pid}/maps write permission char"),
- std::make_tuple("0-0 rwzp 00000000 00:00 0", MemoryRegionInfos{},
- "unexpected /proc/{pid}/maps exec permission char"),
- // Stops at first parsing error
- std::make_tuple(
- "0-1 rw-p 00000000 00:00 0 [abc]\n"
- "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::eYes, ConstString("[abc]"),
- MemoryRegionInfo::eDontKnow, 0,
- MemoryRegionInfo::eDontKnow),
- },
- "unexpected /proc/{pid}/maps exec permission char"),
- // Single entry
- std::make_tuple(
- "55a4512f7000-55a451b68000 rw-p 00000000 00:00 0 [heap]",
- MemoryRegionInfos{
- MemoryRegionInfo(make_range(0x55a4512f7000, 0x55a451b68000),
- MemoryRegionInfo::eYes, MemoryRegionInfo::eYes,
- MemoryRegionInfo::eNo, MemoryRegionInfo::eYes,
- ConstString("[heap]"),
- MemoryRegionInfo::eDontKnow, 0,
- MemoryRegionInfo::eDontKnow),
- },
- ""),
- // Multiple entries
- std::make_tuple(
- "7fc090021000-7fc094000000 ---p 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,
- ConstString(nullptr),
- MemoryRegionInfo::eDontKnow, 0,
- MemoryRegionInfo::eDontKnow),
- MemoryRegionInfo(
- make_range(0xffffffffff600000, 0xffffffffff601000),
- MemoryRegionInfo::eYes, MemoryRegionInfo::eNo,
- MemoryRegionInfo::eYes, MemoryRegionInfo::eYes,
- ConstString("[vsyscall]"), MemoryRegionInfo::eDontKnow, 0,
- MemoryRegionInfo::eDontKnow),
- },
- "")));
-
-class LinuxProcSMapsTestFixture : public LinuxProcMapsTestFixture {};
-
-INSTANTIATE_TEST_SUITE_P(
- ProcSMapTests, LinuxProcSMapsTestFixture,
- ::testing::Values(
- // Nothing in nothing out
- std::make_tuple("", MemoryRegionInfos{}, ""),
- // Uses the same parsing for first line, so same errors but referring to
- // smaps
- std::make_tuple("0/0 rw-p 00000000 00:00 0", MemoryRegionInfos{},
- "malformed /proc/{pid}/smaps entry, missing dash "
- "between address range"),
- // Stop parsing at first error
- std::make_tuple(
- "1111-2222 rw-p 00000000 00:00 0 [foo]\n"
- "0/0 rw-p 00000000 00:00 0",
- MemoryRegionInfos{
- MemoryRegionInfo(make_range(0x1111, 0x2222),
- MemoryRegionInfo::eYes, MemoryRegionInfo::eYes,
- MemoryRegionInfo::eNo, MemoryRegionInfo::eYes,
- ConstString("[foo]"),
- MemoryRegionInfo::eDontKnow, 0,
- MemoryRegionInfo::eDontKnow),
- },
- "malformed /proc/{pid}/smaps entry, missing dash between address "
- "range"),
- // Property line without a region is an error
- std::make_tuple("Referenced: 2188 kB\n"
- "1111-2222 rw-p 00000000 00:00 0 [foo]\n"
- "3333-4444 rw-p 00000000 00:00 0 [bar]\n",
- MemoryRegionInfos{},
- "Found a property line without a corresponding mapping "
- "in /proc/{pid}/smaps"),
- // Single region parses, has no flags
- std::make_tuple(
- "1111-2222 rw-p 00000000 00:00 0 [foo]",
- MemoryRegionInfos{
- MemoryRegionInfo(make_range(0x1111, 0x2222),
- MemoryRegionInfo::eYes, MemoryRegionInfo::eYes,
- MemoryRegionInfo::eNo, MemoryRegionInfo::eYes,
- ConstString("[foo]"),
- MemoryRegionInfo::eDontKnow, 0,
- MemoryRegionInfo::eDontKnow),
- },
- ""),
- // Single region with flags, other lines ignored
- std::make_tuple(
- "1111-2222 rw-p 00000000 00:00 0 [foo]\n"
- "Referenced: 2188 kB\n"
- "AnonHugePages: 0 kB\n"
- "VmFlags: mt",
- MemoryRegionInfos{
- MemoryRegionInfo(
- make_range(0x1111, 0x2222), MemoryRegionInfo::eYes,
- MemoryRegionInfo::eYes, MemoryRegionInfo::eNo,
- MemoryRegionInfo::eYes, ConstString("[foo]"),
- MemoryRegionInfo::eDontKnow, 0, MemoryRegionInfo::eYes),
- },
- ""),
- // Whitespace ignored
- std::make_tuple(
- "0-0 rw-p 00000000 00:00 0\n"
- "VmFlags: mt ",
- MemoryRegionInfos{
- MemoryRegionInfo(make_range(0, 0), MemoryRegionInfo::eYes,
- MemoryRegionInfo::eYes, MemoryRegionInfo::eNo,
- MemoryRegionInfo::eYes, ConstString(nullptr),
- MemoryRegionInfo::eDontKnow, 0,
- MemoryRegionInfo::eYes),
- },
- ""),
- // VmFlags line means it has flag info, but nothing is set
- std::make_tuple(
- "0-0 rw-p 00000000 00:00 0\n"
- "VmFlags: ",
- MemoryRegionInfos{
- MemoryRegionInfo(make_range(0, 0), MemoryRegionInfo::eYes,
- MemoryRegionInfo::eYes, MemoryRegionInfo::eNo,
- MemoryRegionInfo::eYes, ConstString(nullptr),
- MemoryRegionInfo::eDontKnow, 0,
- MemoryRegionInfo::eNo),
- },
- ""),
- // Handle some pages not having a flags line
- std::make_tuple(
- "1111-2222 rw-p 00000000 00:00 0 [foo]\n"
- "Referenced: 2188 kB\n"
- "AnonHugePages: 0 kB\n"
- "3333-4444 r-xp 00000000 00:00 0 [bar]\n"
- "VmFlags: mt",
- MemoryRegionInfos{
- MemoryRegionInfo(make_range(0x1111, 0x2222),
- MemoryRegionInfo::eYes, MemoryRegionInfo::eYes,
- MemoryRegionInfo::eNo, MemoryRegionInfo::eYes,
- ConstString("[foo]"),
- MemoryRegionInfo::eDontKnow, 0,
- MemoryRegionInfo::eDontKnow),
- MemoryRegionInfo(
- make_range(0x3333, 0x4444), MemoryRegionInfo::eYes,
- MemoryRegionInfo::eNo, MemoryRegionInfo::eYes,
- MemoryRegionInfo::eYes, ConstString("[bar]"),
- MemoryRegionInfo::eDontKnow, 0, MemoryRegionInfo::eYes),
- },
- ""),
- // Handle no pages having a flags line (older kernels)
- std::make_tuple(
- "1111-2222 rw-p 00000000 00:00 0\n"
- "Referenced: 2188 kB\n"
- "AnonHugePages: 0 kB\n"
- "3333-4444 r-xp 00000000 00:00 0\n"
- "KernelPageSize: 4 kB\n"
- "MMUPageSize: 4 kB\n",
- MemoryRegionInfos{
- MemoryRegionInfo(make_range(0x1111, 0x2222),
- MemoryRegionInfo::eYes, MemoryRegionInfo::eYes,
- MemoryRegionInfo::eNo, MemoryRegionInfo::eYes,
- ConstString(nullptr),
- MemoryRegionInfo::eDontKnow, 0,
- MemoryRegionInfo::eDontKnow),
- MemoryRegionInfo(make_range(0x3333, 0x4444),
- MemoryRegionInfo::eYes, MemoryRegionInfo::eNo,
- MemoryRegionInfo::eYes, MemoryRegionInfo::eYes,
- ConstString(nullptr),
- MemoryRegionInfo::eDontKnow, 0,
- MemoryRegionInfo::eDontKnow),
- },
- "")));
-
-TEST_P(LinuxProcSMapsTestFixture, ParseSMapRegions) {
- auto params = GetParam();
- ParseLinuxSMapRegions(std::get<0>(params), callback);
- check_regions(params);
-}