mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 12:12:47 +01:00
3f515460eb
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
48 lines
1.2 KiB
C++
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
|