mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-25 00:24:26 +00:00
[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:
@ -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
|
||||||
|
@ -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() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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";
|
||||||
|
@ -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();
|
||||||
|
@ -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);
|
||||||
|
Reference in New Issue
Block a user