[Mesa-dev] [PATCH 1/2] gallivm: fix 2 leaks in disassembly code
Brian Paul
brianp at vmware.com
Wed Apr 30 16:56:35 PDT 2014
On 04/30/2014 04:41 PM, sroland at vmware.com wrote:
> From: Roland Scheidegger <sroland at vmware.com>
>
> 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
> ---
> 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 541cf9e..7e43b51 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 <llvm/Support/TargetRegistry.h>
> +#include <llvm/MC/MCSubtargetInfo.h>
> #else /* HAVE_LLVM < 0x0300 */
> #include <llvm/Target/TargetRegistry.h>
> #endif /* HAVE_LLVM < 0x0300 */
> @@ -254,7 +255,7 @@ disassemble(const void* func, llvm::raw_ostream & Out)
> OwningPtr<MCContext> MCCtx(new MCContext(AsmInfo.get(), MRI.get(), 0));
> OwningPtr<const MCDisassembler> DisAsm(T->createMCDisassembler(*STI, *MCCtx));
> #elif HAVE_LLVM >= 0x0300
> - const MCSubtargetInfo *STI = T->createMCSubtargetInfo(Triple, sys::getHostCPUName(), "");
> + OwningPtr<const MCSubtargetInfo> STI(T->createMCSubtargetInfo(Triple, sys::getHostCPUName(), ""));
> OwningPtr<const MCDisassembler> DisAsm(T->createMCDisassembler(*STI));
> #else
> OwningPtr<const MCDisassembler> 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<TargetMachine> TM(T->createTargetMachine(Triple, sys::getHostCPUName(), "", options));
> #elif HAVE_LLVM == 0x0300
> - TargetMachine *TM = T->createTargetMachine(Triple, sys::getHostCPUName(), "");
> + OwningPtr<TargetMachine> TM(T->createTargetMachine(Triple, sys::getHostCPUName(), ""));
> #else
> - TargetMachine *TM = T->createTargetMachine(Triple, "");
> + OwningPtr<TargetMachine> TM(T->createTargetMachine(Triple, ""));
> #endif
>
> const TargetInstrInfo *TII = TM->getInstrInfo();
>
I'm not too familiar with that code, but looks OK AFAICT.
Reviewed-by: Brian Paul <brianp at vmware.com>
More information about the mesa-dev
mailing list