mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 20:23:11 +01:00
For the 'C' disassembler API, add a new ReferenceType for the
SymbolLookUp() call back to return a demangled C++ name to be used as a comment. For example darwin's otool(1) program the uses the llvm disassembler now can produce disassembly like: callq __ZNK4llvm6Target20createMCDisassemblerERKNS_15MCSubtargetInfoE ## llvm::Target::createMCDisassembler(llvm::MCSubtargetInfo const&) const 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 llvm-svn: 198637
This commit is contained in:
parent
858e3503c4
commit
f3e817fa09
@ -141,6 +141,9 @@ typedef const char *(*LLVMSymbolLookupCallback)(void *DisInfo,
|
||||
/* The output reference is to a Objective-C class ref. */
|
||||
#define LLVMDisassembler_ReferenceType_Out_Objc_Class_Ref 8
|
||||
|
||||
/* The output reference is to a C++ symbol name. */
|
||||
#define LLVMDisassembler_ReferenceType_DeMangled_Name 9
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* !defined(__cplusplus) */
|
||||
|
@ -298,6 +298,7 @@ size_t LLVMDisasmInstruction(LLVMDisasmContextRef DCR, uint8_t *Bytes,
|
||||
emitLatency(DC, Inst);
|
||||
|
||||
emitComments(DC, FormattedOS);
|
||||
OS.flush();
|
||||
|
||||
assert(OutStringSize != 0 && "Output buffer cannot be zero size");
|
||||
size_t OutputSize = std::min(OutStringSize-1, InsnStr.size());
|
||||
|
@ -56,6 +56,9 @@ bool MCExternalSymbolizer::tryAddingSymbolicOperand(MCInst &MI,
|
||||
if (Name) {
|
||||
SymbolicOp.AddSymbol.Name = Name;
|
||||
SymbolicOp.AddSymbol.Present = true;
|
||||
// If Name is a C++ symbol name put the human readable name in a comment.
|
||||
if(ReferenceType == LLVMDisassembler_ReferenceType_DeMangled_Name)
|
||||
cStream << ReferenceName;
|
||||
}
|
||||
// For branches always create an MCExpr so it gets printed as hex address.
|
||||
else if (IsBranch) {
|
||||
|
Loading…
Reference in New Issue
Block a user