From 64d6460a56119c2da726d7de426dc8ac33e7f8bc Mon Sep 17 00:00:00 2001 From: Roland Scheidegger Date: Thu, 1 May 2014 00:31:47 +0200 Subject: [PATCH] gallivm: fix 2 leaks in disassembly code don't leak the MCSubtargetInfo (not really big, was already fixed with llvm master) and TargetMachine (big). While this is only used for debugging the leak is large enough to get you into trouble in some cases. Tested with llvm 3.1 and master. Before (llvm 3.1), GALLIVM_DEBUG=asm glxgears: ==14152== LEAK SUMMARY: ==14152== definitely lost: 105,228 bytes in 20 blocks ==14152== indirectly lost: 347,252 bytes in 261 blocks ==14152== possibly lost: 866,625 bytes in 1,453 blocks ==14152== still reachable: 7,344,677 bytes in 6,494 blocks ==14152== suppressed: 0 bytes in 0 blocks After: ==13799== LEAK SUMMARY: ==13799== definitely lost: 3,108 bytes in 6 blocks ==13799== indirectly lost: 0 bytes in 0 blocks ==13799== possibly lost: 804,143 bytes in 1,429 blocks ==13799== still reachable: 7,314,267 bytes in 6,473 blocks ==13799== suppressed: 0 bytes in 0 blocks Reviewed-by: Brian Paul --- src/gallium/auxiliary/gallivm/lp_bld_debug.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/gallium/auxiliary/gallivm/lp_bld_debug.cpp b/src/gallium/auxiliary/gallivm/lp_bld_debug.cpp index 541cf9ec2d3..7e43b514b66 100644 --- a/src/gallium/auxiliary/gallivm/lp_bld_debug.cpp +++ b/src/gallium/auxiliary/gallivm/lp_bld_debug.cpp @@ -36,6 +36,7 @@ #if HAVE_LLVM >= 0x0300 #include +#include #else /* HAVE_LLVM < 0x0300 */ #include #endif /* HAVE_LLVM < 0x0300 */ @@ -254,7 +255,7 @@ disassemble(const void* func, llvm::raw_ostream & Out) OwningPtr MCCtx(new MCContext(AsmInfo.get(), MRI.get(), 0)); OwningPtr DisAsm(T->createMCDisassembler(*STI, *MCCtx)); #elif HAVE_LLVM >= 0x0300 - const MCSubtargetInfo *STI = T->createMCSubtargetInfo(Triple, sys::getHostCPUName(), ""); + OwningPtr STI(T->createMCSubtargetInfo(Triple, sys::getHostCPUName(), "")); OwningPtr DisAsm(T->createMCDisassembler(*STI)); #else OwningPtr DisAsm(T->createMCDisassembler()); @@ -294,11 +295,11 @@ disassemble(const void* func, llvm::raw_ostream & Out) #if defined(DEBUG) || defined(PROFILE) options.NoFramePointerElim = true; #endif - TargetMachine *TM = T->createTargetMachine(Triple, sys::getHostCPUName(), "", options); + OwningPtr TM(T->createTargetMachine(Triple, sys::getHostCPUName(), "", options)); #elif HAVE_LLVM == 0x0300 - TargetMachine *TM = T->createTargetMachine(Triple, sys::getHostCPUName(), ""); + OwningPtr TM(T->createTargetMachine(Triple, sys::getHostCPUName(), "")); #else - TargetMachine *TM = T->createTargetMachine(Triple, ""); + OwningPtr TM(T->createTargetMachine(Triple, "")); #endif const TargetInstrInfo *TII = TM->getInstrInfo(); -- 2.30.2