forked from OSchip/llvm-project
llvm-mc: Remove --show-fixups and always show as part of --show-encoding.
Also, fix a silly memory leak. llvm-svn: 95752
This commit is contained in:
parent
0f058c83a7
commit
75c9a4eeae
|
@ -278,15 +278,12 @@ namespace llvm {
|
||||||
///
|
///
|
||||||
/// \param ShowInst - Whether to show the MCInst representation inline with
|
/// \param ShowInst - Whether to show the MCInst representation inline with
|
||||||
/// the assembly.
|
/// the assembly.
|
||||||
///
|
|
||||||
/// \param ShowFixups - Whether to show the fixups in an encoded instruction.
|
|
||||||
MCStreamer *createAsmStreamer(MCContext &Ctx, formatted_raw_ostream &OS,
|
MCStreamer *createAsmStreamer(MCContext &Ctx, formatted_raw_ostream &OS,
|
||||||
const MCAsmInfo &MAI, bool isLittleEndian,
|
const MCAsmInfo &MAI, bool isLittleEndian,
|
||||||
bool isVerboseAsm,
|
bool isVerboseAsm,
|
||||||
MCInstPrinter *InstPrint = 0,
|
MCInstPrinter *InstPrint = 0,
|
||||||
MCCodeEmitter *CE = 0,
|
MCCodeEmitter *CE = 0,
|
||||||
bool ShowInst = false,
|
bool ShowInst = false);
|
||||||
bool ShowFixups = false);
|
|
||||||
|
|
||||||
// FIXME: These two may end up getting rolled into a single
|
// FIXME: These two may end up getting rolled into a single
|
||||||
// createObjectStreamer interface, which implements the assembler backend, and
|
// createObjectStreamer interface, which implements the assembler backend, and
|
||||||
|
|
|
@ -37,18 +37,17 @@ class MCAsmStreamer : public MCStreamer {
|
||||||
|
|
||||||
unsigned IsLittleEndian : 1;
|
unsigned IsLittleEndian : 1;
|
||||||
unsigned IsVerboseAsm : 1;
|
unsigned IsVerboseAsm : 1;
|
||||||
unsigned ShowFixups : 1;
|
|
||||||
unsigned ShowInst : 1;
|
unsigned ShowInst : 1;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
MCAsmStreamer(MCContext &Context, formatted_raw_ostream &os,
|
MCAsmStreamer(MCContext &Context, formatted_raw_ostream &os,
|
||||||
const MCAsmInfo &mai,
|
const MCAsmInfo &mai,
|
||||||
bool isLittleEndian, bool isVerboseAsm, MCInstPrinter *printer,
|
bool isLittleEndian, bool isVerboseAsm, MCInstPrinter *printer,
|
||||||
MCCodeEmitter *emitter, bool showInst, bool showFixups)
|
MCCodeEmitter *emitter, bool showInst)
|
||||||
: MCStreamer(Context), OS(os), MAI(mai), InstPrinter(printer),
|
: MCStreamer(Context), OS(os), MAI(mai), InstPrinter(printer),
|
||||||
Emitter(emitter), CommentStream(CommentToEmit),
|
Emitter(emitter), CommentStream(CommentToEmit),
|
||||||
IsLittleEndian(isLittleEndian), IsVerboseAsm(isVerboseAsm),
|
IsLittleEndian(isLittleEndian), IsVerboseAsm(isVerboseAsm),
|
||||||
ShowFixups(showFixups), ShowInst(showInst) {
|
ShowInst(showInst) {
|
||||||
if (InstPrinter && IsVerboseAsm)
|
if (InstPrinter && IsVerboseAsm)
|
||||||
InstPrinter->setCommentStream(CommentStream);
|
InstPrinter->setCommentStream(CommentStream);
|
||||||
}
|
}
|
||||||
|
@ -543,22 +542,11 @@ void MCAsmStreamer::AddEncodingComment(const MCInst &Inst) {
|
||||||
Emitter->EncodeInstruction(Inst, VecOS, Fixups);
|
Emitter->EncodeInstruction(Inst, VecOS, Fixups);
|
||||||
VecOS.flush();
|
VecOS.flush();
|
||||||
|
|
||||||
// If we aren't showing fixups, just show the bytes.
|
|
||||||
if (!ShowFixups) {
|
|
||||||
OS << "encoding: [";
|
|
||||||
for (unsigned i = 0, e = Code.size(); i != e; ++i) {
|
|
||||||
if (i)
|
|
||||||
OS << ',';
|
|
||||||
OS << format("0x%02x", uint8_t(Code[i]));
|
|
||||||
}
|
|
||||||
OS << "]\n";
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we are showing fixups, create symbolic markers in the encoded
|
// If we are showing fixups, create symbolic markers in the encoded
|
||||||
// representation. We do this by making a per-bit map to the fixup item index,
|
// representation. We do this by making a per-bit map to the fixup item index,
|
||||||
// then trying to display it as nicely as possible.
|
// then trying to display it as nicely as possible.
|
||||||
uint8_t *FixupMap = new uint8_t[Code.size() * 8];
|
SmallVector<uint8_t, 64> FixupMap;
|
||||||
|
FixupMap.resize(Code.size() * 8);
|
||||||
for (unsigned i = 0, e = Code.size() * 8; i != e; ++i)
|
for (unsigned i = 0, e = Code.size() * 8; i != e; ++i)
|
||||||
FixupMap[i] = 0;
|
FixupMap[i] = 0;
|
||||||
|
|
||||||
|
@ -652,8 +640,7 @@ MCStreamer *llvm::createAsmStreamer(MCContext &Context,
|
||||||
formatted_raw_ostream &OS,
|
formatted_raw_ostream &OS,
|
||||||
const MCAsmInfo &MAI, bool isLittleEndian,
|
const MCAsmInfo &MAI, bool isLittleEndian,
|
||||||
bool isVerboseAsm, MCInstPrinter *IP,
|
bool isVerboseAsm, MCInstPrinter *IP,
|
||||||
MCCodeEmitter *CE, bool ShowInst,
|
MCCodeEmitter *CE, bool ShowInst) {
|
||||||
bool ShowFixups) {
|
|
||||||
return new MCAsmStreamer(Context, OS, MAI, isLittleEndian, isVerboseAsm,
|
return new MCAsmStreamer(Context, OS, MAI, isLittleEndian, isVerboseAsm,
|
||||||
IP, CE, ShowInst, ShowFixups);
|
IP, CE, ShowInst);
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,9 +46,6 @@ OutputFilename("o", cl::desc("Output filename"),
|
||||||
static cl::opt<bool>
|
static cl::opt<bool>
|
||||||
ShowEncoding("show-encoding", cl::desc("Show instruction encodings"));
|
ShowEncoding("show-encoding", cl::desc("Show instruction encodings"));
|
||||||
|
|
||||||
static cl::opt<bool>
|
|
||||||
ShowFixups("show-fixups", cl::desc("Show fixups inside encodings"));
|
|
||||||
|
|
||||||
static cl::opt<bool>
|
static cl::opt<bool>
|
||||||
ShowInst("show-inst", cl::desc("Show internal instruction representation"));
|
ShowInst("show-inst", cl::desc("Show internal instruction representation"));
|
||||||
|
|
||||||
|
@ -273,7 +270,7 @@ static int AssembleInput(const char *ProgName) {
|
||||||
Str.reset(createAsmStreamer(Ctx, *Out, *MAI,
|
Str.reset(createAsmStreamer(Ctx, *Out, *MAI,
|
||||||
TM->getTargetData()->isLittleEndian(),
|
TM->getTargetData()->isLittleEndian(),
|
||||||
/*asmverbose*/true, IP.get(), CE.get(),
|
/*asmverbose*/true, IP.get(), CE.get(),
|
||||||
ShowInst, ShowFixups));
|
ShowInst));
|
||||||
} else {
|
} else {
|
||||||
assert(FileType == OFT_ObjectFile && "Invalid file type!");
|
assert(FileType == OFT_ObjectFile && "Invalid file type!");
|
||||||
CE.reset(TheTarget->createCodeEmitter(*TM));
|
CE.reset(TheTarget->createCodeEmitter(*TM));
|
||||||
|
|
Loading…
Reference in New Issue