[llvm] Parameterizing the output stream for dumpbytes and outputting directly to stream.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@238453 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Colin LeMahieu
2015-05-28 18:39:50 +00:00
parent 967f6ad3e1
commit 58dd70dced
5 changed files with 22 additions and 23 deletions

View File

@ -10,6 +10,7 @@
#ifndef LLVM_MC_MCINSTPRINTER_H #ifndef LLVM_MC_MCINSTPRINTER_H
#define LLVM_MC_MCINSTPRINTER_H #define LLVM_MC_MCINSTPRINTER_H
#include "llvm/ADT/ArrayRef.h"
#include "llvm/Support/DataTypes.h" #include "llvm/Support/DataTypes.h"
#include "llvm/Support/Format.h" #include "llvm/Support/Format.h"
@ -22,6 +23,9 @@ class MCRegisterInfo;
class MCSubtargetInfo; class MCSubtargetInfo;
class StringRef; class StringRef;
/// Convert `Bytes' to a hex string and output to `OS'
void dumpBytes(ArrayRef<uint8_t> Bytes, raw_ostream &OS);
namespace HexStyle { namespace HexStyle {
enum Style { enum Style {
C, ///< 0xff C, ///< 0xff

View File

@ -16,6 +16,15 @@
#include "llvm/Support/raw_ostream.h" #include "llvm/Support/raw_ostream.h"
using namespace llvm; using namespace llvm;
void llvm::dumpBytes(ArrayRef<uint8_t> bytes, raw_ostream &OS) {
static const char hex_rep[] = "0123456789abcdef";
for (char i: bytes) {
OS << hex_rep[(i & 0xF0) >> 4];
OS << hex_rep[i & 0xF];
OS << ' ';
}
}
MCInstPrinter::~MCInstPrinter() { MCInstPrinter::~MCInstPrinter() {
} }

View File

@ -228,19 +228,19 @@ static uint64_t DumpDataInCode(const uint8_t *bytes, uint64_t Length,
case MachO::DICE_KIND_DATA: case MachO::DICE_KIND_DATA:
if (Length >= 4) { if (Length >= 4) {
if (!NoShowRawInsn) if (!NoShowRawInsn)
DumpBytes(ArrayRef<uint8_t>(bytes, 4)); dumpBytes(ArrayRef<uint8_t>(bytes, 4), outs());
Value = bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0]; Value = bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];
outs() << "\t.long " << Value; outs() << "\t.long " << Value;
Size = 4; Size = 4;
} else if (Length >= 2) { } else if (Length >= 2) {
if (!NoShowRawInsn) if (!NoShowRawInsn)
DumpBytes(ArrayRef<uint8_t>(bytes, 2)); dumpBytes(ArrayRef<uint8_t>(bytes, 2), outs());
Value = bytes[1] << 8 | bytes[0]; Value = bytes[1] << 8 | bytes[0];
outs() << "\t.short " << Value; outs() << "\t.short " << Value;
Size = 2; Size = 2;
} else { } else {
if (!NoShowRawInsn) if (!NoShowRawInsn)
DumpBytes(ArrayRef<uint8_t>(bytes, 2)); dumpBytes(ArrayRef<uint8_t>(bytes, 2), outs());
Value = bytes[0]; Value = bytes[0];
outs() << "\t.byte " << Value; outs() << "\t.byte " << Value;
Size = 1; Size = 1;
@ -252,14 +252,14 @@ static uint64_t DumpDataInCode(const uint8_t *bytes, uint64_t Length,
break; break;
case MachO::DICE_KIND_JUMP_TABLE8: case MachO::DICE_KIND_JUMP_TABLE8:
if (!NoShowRawInsn) if (!NoShowRawInsn)
DumpBytes(ArrayRef<uint8_t>(bytes, 1)); dumpBytes(ArrayRef<uint8_t>(bytes, 1), outs());
Value = bytes[0]; Value = bytes[0];
outs() << "\t.byte " << format("%3u", Value) << "\t@ KIND_JUMP_TABLE8\n"; outs() << "\t.byte " << format("%3u", Value) << "\t@ KIND_JUMP_TABLE8\n";
Size = 1; Size = 1;
break; break;
case MachO::DICE_KIND_JUMP_TABLE16: case MachO::DICE_KIND_JUMP_TABLE16:
if (!NoShowRawInsn) if (!NoShowRawInsn)
DumpBytes(ArrayRef<uint8_t>(bytes, 2)); dumpBytes(ArrayRef<uint8_t>(bytes, 2), outs());
Value = bytes[1] << 8 | bytes[0]; Value = bytes[1] << 8 | bytes[0];
outs() << "\t.short " << format("%5u", Value & 0xffff) outs() << "\t.short " << format("%5u", Value & 0xffff)
<< "\t@ KIND_JUMP_TABLE16\n"; << "\t@ KIND_JUMP_TABLE16\n";
@ -268,7 +268,7 @@ static uint64_t DumpDataInCode(const uint8_t *bytes, uint64_t Length,
case MachO::DICE_KIND_JUMP_TABLE32: case MachO::DICE_KIND_JUMP_TABLE32:
case MachO::DICE_KIND_ABS_JUMP_TABLE32: case MachO::DICE_KIND_ABS_JUMP_TABLE32:
if (!NoShowRawInsn) if (!NoShowRawInsn)
DumpBytes(ArrayRef<uint8_t>(bytes, 4)); dumpBytes(ArrayRef<uint8_t>(bytes, 4), outs());
Value = bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0]; Value = bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];
outs() << "\t.long " << Value; outs() << "\t.long " << Value;
if (Kind == MachO::DICE_KIND_JUMP_TABLE32) if (Kind == MachO::DICE_KIND_JUMP_TABLE32)
@ -6313,7 +6313,7 @@ static void DisassembleMachO(StringRef Filename, MachOObjectFile *MachOOF,
DebugOut, Annotations); DebugOut, Annotations);
if (gotInst) { if (gotInst) {
if (!NoShowRawInsn) { if (!NoShowRawInsn) {
DumpBytes(ArrayRef<uint8_t>(Bytes.data() + Index, Size)); dumpBytes(ArrayRef<uint8_t>(Bytes.data() + Index, Size), outs());
} }
formatted_raw_ostream FormattedOS(outs()); formatted_raw_ostream FormattedOS(outs());
Annotations.flush(); Annotations.flush();
@ -6378,7 +6378,7 @@ static void DisassembleMachO(StringRef Filename, MachOObjectFile *MachOOF,
} }
if (!NoShowRawInsn) { if (!NoShowRawInsn) {
outs() << "\t"; outs() << "\t";
DumpBytes(ArrayRef<uint8_t>(Bytes.data() + Index, InstSize)); dumpBytes(ArrayRef<uint8_t>(Bytes.data() + Index, InstSize), outs());
} }
IP->printInst(&Inst, outs(), "", *STI); IP->printInst(&Inst, outs(), "", *STI);
outs() << "\n"; outs() << "\n";

View File

@ -194,19 +194,6 @@ static const Target *getTarget(const ObjectFile *Obj = nullptr) {
return TheTarget; return TheTarget;
} }
void llvm::DumpBytes(ArrayRef<uint8_t> bytes) {
static const char hex_rep[] = "0123456789abcdef";
SmallString<64> output;
for (char i: bytes) {
output.push_back(hex_rep[(i & 0xF0) >> 4]);
output.push_back(hex_rep[i & 0xF]);
output.push_back(' ');
}
outs() << output.c_str();
}
bool llvm::RelocAddressLess(RelocationRef a, RelocationRef b) { bool llvm::RelocAddressLess(RelocationRef a, RelocationRef b) {
uint64_t a_addr, b_addr; uint64_t a_addr, b_addr;
if (error(a.getOffset(a_addr))) return false; if (error(a.getOffset(a_addr))) return false;
@ -399,7 +386,7 @@ static void DisassembleObject(const ObjectFile *Obj, bool InlineRelocs) {
outs() << format("%8" PRIx64 ":", SectionAddr + Index); outs() << format("%8" PRIx64 ":", SectionAddr + Index);
if (!NoShowRawInsn) { if (!NoShowRawInsn) {
outs() << "\t"; outs() << "\t";
DumpBytes(ArrayRef<uint8_t>(Bytes.data() + Index, Size)); dumpBytes(ArrayRef<uint8_t>(Bytes.data() + Index, Size), outs());
} }
IP->printInst(&Inst, outs(), "", *STI); IP->printInst(&Inst, outs(), "", *STI);
outs() << CommentStream.str(); outs() << CommentStream.str();

View File

@ -55,7 +55,6 @@ extern cl::opt<bool> UnwindInfo;
// Various helper functions. // Various helper functions.
bool error(std::error_code ec); bool error(std::error_code ec);
bool RelocAddressLess(object::RelocationRef a, object::RelocationRef b); bool RelocAddressLess(object::RelocationRef a, object::RelocationRef b);
void DumpBytes(ArrayRef<uint8_t> bytes);
void ParseInputMachO(StringRef Filename); void ParseInputMachO(StringRef Filename);
void printCOFFUnwindInfo(const object::COFFObjectFile* o); void printCOFFUnwindInfo(const object::COFFObjectFile* o);
void printMachOUnwindInfo(const object::MachOObjectFile* o); void printMachOUnwindInfo(const object::MachOObjectFile* o);