mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-12 14:20:33 +00:00
For disassembly when adding a symbolic operand that is a C++
symbol name, also put the human readable name in a comment. Also fix a bug in LLVMDisasmInstruction() that was not flushing the raw_svector_ostream for the disassembled instruction string before copying it to the output buffer that was causing truncation of the output. rdar://10173828 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@198441 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
8e0f67dcec
commit
6cedb06492
@ -298,6 +298,7 @@ size_t LLVMDisasmInstruction(LLVMDisasmContextRef DCR, uint8_t *Bytes,
|
|||||||
emitLatency(DC, Inst);
|
emitLatency(DC, Inst);
|
||||||
|
|
||||||
emitComments(DC, FormattedOS);
|
emitComments(DC, FormattedOS);
|
||||||
|
OS.flush();
|
||||||
|
|
||||||
assert(OutStringSize != 0 && "Output buffer cannot be zero size");
|
assert(OutStringSize != 0 && "Output buffer cannot be zero size");
|
||||||
size_t OutputSize = std::min(OutStringSize-1, InsnStr.size());
|
size_t OutputSize = std::min(OutStringSize-1, InsnStr.size());
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
#include "llvm/MC/MCInst.h"
|
#include "llvm/MC/MCInst.h"
|
||||||
#include "llvm/Support/raw_ostream.h"
|
#include "llvm/Support/raw_ostream.h"
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
#include <cxxabi.h>
|
||||||
|
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
@ -56,6 +57,14 @@ bool MCExternalSymbolizer::tryAddingSymbolicOperand(MCInst &MI,
|
|||||||
if (Name) {
|
if (Name) {
|
||||||
SymbolicOp.AddSymbol.Name = Name;
|
SymbolicOp.AddSymbol.Name = Name;
|
||||||
SymbolicOp.AddSymbol.Present = true;
|
SymbolicOp.AddSymbol.Present = true;
|
||||||
|
// If Name is a C++ symbol name put the human readable name in a comment.
|
||||||
|
if (strncmp(Name, "__Z", 3) == 0) {
|
||||||
|
char *demangled = abi::__cxa_demangle(Name + 1, 0, 0, 0);
|
||||||
|
if (demangled) {
|
||||||
|
cStream << demangled;
|
||||||
|
free(demangled);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
// For branches always create an MCExpr so it gets printed as hex address.
|
// For branches always create an MCExpr so it gets printed as hex address.
|
||||||
else if (IsBranch) {
|
else if (IsBranch) {
|
||||||
|
Loading…
Reference in New Issue
Block a user