mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-30 06:40:53 +00:00
Fixed two leaks in the MC disassembler. The MC
disassembler requires a MCSubtargetInfo and a MCInstrInfo to exist in order to initialize the instruction printer and disassembler; however, although the printer and disassembler keep references to these objects they do not own them. Previously, the MCSubtargetInfo and MCInstrInfo objects were just leaked. I have extended LLVMDisasmContext to own these objects and delete them when it is destroyed. llvm-svn: 154192
This commit is contained in:
parent
bb7b631def
commit
f467eceb2a
@ -15,7 +15,9 @@
|
||||
#include "llvm/MC/MCDisassembler.h"
|
||||
#include "llvm/MC/MCInst.h"
|
||||
#include "llvm/MC/MCInstPrinter.h"
|
||||
#include "llvm/MC/MCInstrInfo.h"
|
||||
#include "llvm/MC/MCRegisterInfo.h"
|
||||
#include "llvm/MC/MCSubtargetInfo.h"
|
||||
#include "llvm/Support/MemoryObject.h"
|
||||
#include "llvm/Support/TargetRegistry.h"
|
||||
#include "llvm/Support/TargetSelect.h"
|
||||
@ -89,7 +91,7 @@ LLVMDisasmContextRef LLVMCreateDisasm(const char *TripleName, void *DisInfo,
|
||||
LLVMDisasmContext *DC = new LLVMDisasmContext(TripleName, DisInfo, TagType,
|
||||
GetOpInfo, SymbolLookUp,
|
||||
TheTarget, MAI, MRI,
|
||||
Ctx, DisAsm, IP);
|
||||
STI, MII, Ctx, DisAsm, IP);
|
||||
assert(DC && "Allocation failure!");
|
||||
|
||||
return DC;
|
||||
|
@ -28,7 +28,9 @@ class MCContext;
|
||||
class MCAsmInfo;
|
||||
class MCDisassembler;
|
||||
class MCInstPrinter;
|
||||
class MCInstrInfo;
|
||||
class MCRegisterInfo;
|
||||
class MCSubtargetInfo;
|
||||
class Target;
|
||||
|
||||
//
|
||||
@ -61,6 +63,10 @@ private:
|
||||
llvm::OwningPtr<const llvm::MCAsmInfo> MAI;
|
||||
// The register information for the target architecture.
|
||||
llvm::OwningPtr<const llvm::MCRegisterInfo> MRI;
|
||||
// The subtarget information for the target architecture.
|
||||
llvm::OwningPtr<const llvm::MCSubtargetInfo> MSI;
|
||||
// The instruction information for the target architecture.
|
||||
llvm::OwningPtr<const llvm::MCInstrInfo> MII;
|
||||
// The assembly context for creating symbols and MCExprs.
|
||||
llvm::OwningPtr<const llvm::MCContext> Ctx;
|
||||
// The disassembler for the target architecture.
|
||||
@ -78,6 +84,8 @@ public:
|
||||
LLVMSymbolLookupCallback symbolLookUp,
|
||||
const Target *theTarget, const MCAsmInfo *mAI,
|
||||
const MCRegisterInfo *mRI,
|
||||
const MCSubtargetInfo *mSI,
|
||||
const MCInstrInfo *mII,
|
||||
llvm::MCContext *ctx, const MCDisassembler *disAsm,
|
||||
MCInstPrinter *iP) : TripleName(tripleName),
|
||||
DisInfo(disInfo), TagType(tagType), GetOpInfo(getOpInfo),
|
||||
@ -85,6 +93,8 @@ public:
|
||||
CommentStream(CommentsToEmit) {
|
||||
MAI.reset(mAI);
|
||||
MRI.reset(mRI);
|
||||
MSI.reset(mSI);
|
||||
MII.reset(mII);
|
||||
Ctx.reset(ctx);
|
||||
DisAsm.reset(disAsm);
|
||||
IP.reset(iP);
|
||||
|
Loading…
Reference in New Issue
Block a user