Always print the disassembler output to file.
It will be better to print the disassembler output to a file
instead of stdout, since the stdout will be dropped by default.
Even if we have "setprop log.redirect-stdio true", you will
find out the output will be messed up by other messages.
Change-Id: I0fc02b082a5a3dff22f8b1ea5809562810a20915
diff --git a/lib/Disassembler/Disassembler.cpp b/lib/Disassembler/Disassembler.cpp
index 29eecc7..1ecf726 100644
--- a/lib/Disassembler/Disassembler.cpp
+++ b/lib/Disassembler/Disassembler.cpp
@@ -18,6 +18,7 @@
#include "Config.h"
+#include "DebugHelper.h"
#include "ExecutionEngine/Compiler.h"
#include "llvm/MC/MCAsmInfo.h"
@@ -88,23 +89,20 @@
std::string const &Name,
unsigned char const *Func,
size_t FuncSize) {
- llvm::raw_ostream *OS;
-#if USE_DISASSEMBLER_FILE
std::string ErrorInfo;
- OS = new llvm::raw_fd_ostream(OutputFileName, ErrorInfo,
- llvm::raw_fd_ostream::F_Append);
- if (!ErrorInfo.empty()) { // some errors occurred
- // LOGE("Error in creating disassembly file");
- delete OS;
+ // Open the disassembler output file
+ llvm::raw_fd_ostream OS(OutputFileName, ErrorInfo,
+ llvm::raw_fd_ostream::F_Append);
+
+ if (!ErrorInfo.empty()) {
+ LOGE("Unable to open disassembler output file: %s\n", OutputFileName);
return;
}
-#else
- OS = &llvm::outs();
-#endif
- *OS << "Disassembled code: " << Name << "\n";
+ // Disassemble the given function
+ OS << "Disassembled code: " << Name << "\n";
const llvm::MCAsmInfo *AsmInfo;
const llvm::MCDisassembler *Disassmbler;
@@ -126,30 +124,28 @@
if (Disassmbler->getInstruction(Inst, Size, *BufferMObj, Index,
/* REMOVED */ llvm::nulls())) {
- OS->indent(4);
- OS->write("0x", 2);
- OS->write_hex((uint32_t)Func + Index);
- OS->write(": 0x", 4);
- OS->write_hex(*(uint32_t *)(Func + Index));
- IP->printInst(&Inst, *OS);
- *OS << "\n";
+ OS.indent(4);
+ OS.write("0x", 2);
+ OS.write_hex((uint32_t)Func + Index);
+ OS.write(": 0x", 4);
+ OS.write_hex(*(uint32_t *)(Func + Index));
+ IP->printInst(&Inst, OS);
+ OS << "\n";
} else {
if (Size == 0)
Size = 1; // skip illegible bytes
}
}
- *OS << "\n";
+ OS << "\n";
+
delete BufferMObj;
delete AsmInfo;
delete Disassmbler;
delete IP;
-#if USE_DISASSEMBLER_FILE
- ((llvm::raw_fd_ostream*)OS)->close();
- delete OS;
-#endif
+ OS.close();
}
} // namespace bcc