mirror of
https://github.com/intel/llvm.git
synced 2026-02-05 13:21:04 +08:00
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
41 lines
1.6 KiB
C++
41 lines
1.6 KiB
C++
//===-- MemoryRegionInfo.cpp ------------------------------------*- C++ -*-===//
|
|
//
|
|
// 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 "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: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;
|
|
}
|
|
}
|