summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lldb/include/lldb/Target/MemoryRegionInfo.h18
-rw-r--r--lldb/source/Commands/CommandObjectMemory.cpp13
-rw-r--r--lldb/source/Target/MemoryRegionInfo.cpp24
-rw-r--r--lldb/test/Shell/Minidump/memory-region-from-module.yaml3
4 files changed, 33 insertions, 25 deletions
diff --git a/lldb/include/lldb/Target/MemoryRegionInfo.h b/lldb/include/lldb/Target/MemoryRegionInfo.h
index c6c4e080f8d..07e50188843 100644
--- a/lldb/include/lldb/Target/MemoryRegionInfo.h
+++ b/lldb/include/lldb/Target/MemoryRegionInfo.h
@@ -133,21 +133,13 @@ public:
namespace llvm {
template <>
+/// If Options is empty, prints a textual representation of the value. If
+/// Options is a single character, it uses that character for the "yes" value,
+/// while "no" is printed as "-", and "don't know" as "?". This can be used to
+/// print the permissions in the traditional "rwx" form.
struct format_provider<lldb_private::MemoryRegionInfo::OptionalBool> {
static void format(const lldb_private::MemoryRegionInfo::OptionalBool &B,
- raw_ostream &OS, StringRef Options) {
- switch(B) {
- case lldb_private::MemoryRegionInfo::eNo:
- OS << "no";
- return;
- case lldb_private::MemoryRegionInfo::eYes:
- OS << "yes";
- return;
- case lldb_private::MemoryRegionInfo::eDontKnow:
- OS << "don't know";
- return;
- }
- }
+ raw_ostream &OS, StringRef Options);
};
}
diff --git a/lldb/source/Commands/CommandObjectMemory.cpp b/lldb/source/Commands/CommandObjectMemory.cpp
index 679a7b6a998..a20290f94bf 100644
--- a/lldb/source/Commands/CommandObjectMemory.cpp
+++ b/lldb/source/Commands/CommandObjectMemory.cpp
@@ -1730,15 +1730,12 @@ protected:
section_name = section_sp->GetName();
}
}
- result.AppendMessageWithFormat(
- "[0x%16.16" PRIx64 "-0x%16.16" PRIx64 ") %c%c%c%s%s%s%s\n",
+ result.AppendMessageWithFormatv(
+ "[{0:x16}-{1:x16}) {2:r}{3:w}{4:x}{5}{6}{7}{8}\n",
range_info.GetRange().GetRangeBase(),
- range_info.GetRange().GetRangeEnd(),
- range_info.GetReadable() ? 'r' : '-',
- range_info.GetWritable() ? 'w' : '-',
- range_info.GetExecutable() ? 'x' : '-', name ? " " : "",
- name.AsCString(""), section_name ? " " : "",
- section_name.AsCString(""));
+ range_info.GetRange().GetRangeEnd(), range_info.GetReadable(),
+ range_info.GetWritable(), range_info.GetExecutable(),
+ name ? " " : "", name, section_name ? " " : "", section_name);
m_prev_end_addr = range_info.GetRange().GetRangeEnd();
result.SetStatus(eReturnStatusSuccessFinishResult);
} else {
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;
+ }
+}
diff --git a/lldb/test/Shell/Minidump/memory-region-from-module.yaml b/lldb/test/Shell/Minidump/memory-region-from-module.yaml
index 0c405e8f6c2..fb6c4a40a69 100644
--- a/lldb/test/Shell/Minidump/memory-region-from-module.yaml
+++ b/lldb/test/Shell/Minidump/memory-region-from-module.yaml
@@ -19,8 +19,7 @@
# ALL: [0x0000000000000000-0x0000000000004000) ---
# ALL-LABEL: (lldb) memory region 0x4000
# CHECK1: [0x0000000000004000-0x00000000000040b0) r-x {{.*}}memory-region-from-module.exe PT_LOAD[0]
-# TODO: This output does not give any indication that the region is only "potentially" writable.
-# CHECK2: [0x0000000000004000-0x0000000000004010) rwx
+# CHECK2: [0x0000000000004000-0x0000000000004010) r??
# ALL-LABEL: (lldb) memory region 0x5000
# ALL: [0x0000000000005000-0x000000000000505c) rw- {{.*}}memory-region-from-module.exe PT_LOAD[1]
# ALL-LABEL: (lldb) memory region 0x6000
OpenPOWER on IntegriCloud