diff options
author | Pavel Labath <pavel@labath.sk> | 2019-10-16 15:29:20 +0200 |
---|---|---|
committer | Pavel Labath <pavel@labath.sk> | 2019-11-05 11:17:27 +0100 |
commit | 28cf9698abd39221001ace885a7d1c1f488b967c (patch) | |
tree | c6172494612b5fea570b3f06ef72d1d6a511f30a /lldb/source/Target/MemoryRegionInfo.cpp | |
parent | 12c4a71ca9dc19dc364cd6ad4cfc2a3787141c24 (diff) | |
download | bcm5719-llvm-28cf9698abd39221001ace885a7d1c1f488b967c.tar.gz bcm5719-llvm-28cf9698abd39221001ace885a7d1c1f488b967c.zip |
MemoryRegion: Print "don't know" permission values as such
Summary:
The permissions in a memory region have ternary states (yes, no, don't
know), but the memory region command only prints in binary, treating
"don't know" as "yes", which is particularly confusing as for instance
the unwinder will treat an unknown value as "no".
This patch makes is so that we distinguish all three states when
printing the values, using "?" to indicate the lack of information. It
is implemented via a special argument to the format provider for the
OptionalBool enumeration.
Reviewers: clayborg, jingham
Subscribers: lldb-commits
Differential Revision: https://reviews.llvm.org/D69106
Diffstat (limited to 'lldb/source/Target/MemoryRegionInfo.cpp')
-rw-r--r-- | lldb/source/Target/MemoryRegionInfo.cpp | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/lldb/source/Target/MemoryRegionInfo.cpp b/lldb/source/Target/MemoryRegionInfo.cpp index 1feb84bffc5..2c31563786a 100644 --- a/lldb/source/Target/MemoryRegionInfo.cpp +++ b/lldb/source/Target/MemoryRegionInfo.cpp @@ -8,13 +8,33 @@ #include "lldb/Target/MemoryRegionInfo.h" +using namespace lldb_private; + llvm::raw_ostream &lldb_private::operator<<(llvm::raw_ostream &OS, const MemoryRegionInfo &Info) { - return OS << llvm::formatv("MemoryRegionInfo([{0}, {1}), {2}, {3}, {4}, {5}, " - "`{6}`, {7}, {8})", + return OS << llvm::formatv("MemoryRegionInfo([{0}, {1}), {2:r}{3:w}{4:x}, " + "{5}, `{6}`, {7}, {8})", Info.GetRange().GetRangeBase(), Info.GetRange().GetRangeEnd(), Info.GetReadable(), Info.GetWritable(), Info.GetExecutable(), Info.GetMapped(), Info.GetName(), Info.GetFlash(), Info.GetBlocksize()); } + +void llvm::format_provider<MemoryRegionInfo::OptionalBool>::format( + const MemoryRegionInfo::OptionalBool &B, raw_ostream &OS, + StringRef Options) { + assert(Options.size() <= 1); + bool Empty = Options.empty(); + switch (B) { + case lldb_private::MemoryRegionInfo::eNo: + OS << (Empty ? "no" : "-"); + return; + case lldb_private::MemoryRegionInfo::eYes: + OS << (Empty ? "yes" : Options); + return; + case lldb_private::MemoryRegionInfo::eDontKnow: + OS << (Empty ? "don't know" : "?"); + return; + } +} |