1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-25 12:12:47 +01:00
llvm-mirror/lib/Support/ScopedPrinter.cpp
Zachary Turner 3f515460eb [llvm-pdbdump] Allow printing only a portion of a stream.
When dumping raw data from a stream, you might know the offset
of a certain record you're interested in, as well as how long
that record is.  Previously, you had to dump the entire stream
and wade through the bytes to find the interesting record.

This patch allows you to specify an offset and length on the
command line, and it will only dump the requested range.

llvm-svn: 301607
2017-04-28 00:43:38 +00:00

48 lines
1.2 KiB
C++

#include "llvm/Support/ScopedPrinter.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/Support/Format.h"
#include <cctype>
using namespace llvm::support;
namespace llvm {
raw_ostream &operator<<(raw_ostream &OS, const HexNumber &Value) {
OS << "0x" << to_hexString(Value.Value);
return OS;
}
const std::string to_hexString(uint64_t Value, bool UpperCase) {
std::string number;
llvm::raw_string_ostream stream(number);
stream << format_hex_no_prefix(Value, 1, UpperCase);
return stream.str();
}
void ScopedPrinter::printBinaryImpl(StringRef Label, StringRef Str,
ArrayRef<uint8_t> Data, bool Block,
uint32_t StartOffset) {
if (Data.size() > 16)
Block = true;
if (Block) {
startLine() << Label;
if (!Str.empty())
OS << ": " << Str;
OS << " (\n";
if (!Data.empty())
OS << format_bytes_with_ascii(Data, StartOffset, 16, 4,
(IndentLevel + 1) * 2, true)
<< "\n";
startLine() << ")\n";
} else {
startLine() << Label << ":";
if (!Str.empty())
OS << " " << Str;
OS << " (" << format_bytes(Data, None, Data.size(), 1, 0, true) << ")\n";
}
}
} // namespace llvm