Ryo Onodera
2013-Mar-28 02:55 UTC
[LLVMdev] Avoid Valgrind's still-reachable leak warnings
Hi, I'm Ryo Onodera. This is my first post to this mailing list. Fist, thanks for creating a great library! We're using LLVM to support JIT in Rubinius (an alternative implementation of Ruby, a dynamic programming language). I'm submitting a small patch for a minor issue. It solves still-reachable leak warnings from Valgrind. Example warnings are shown at the end of this mail. As these warnings weren't considered problematic in the past(*1), I know this is really minor issue. But, I want to fix it to reduce noises when using Valgrind, not resorting to Valgrind's suppression mechanism. This patch contains no functional change. And it should cause no problem. Since this is my first patch to LLVM, please let me know any corrections. I'll greatly appreciate them and happily update my patch. Also, LLVM's codebase is really clean. It took little time to make this patch. The actual warnings are like this: ==26332== 40 bytes in 1 blocks are still reachable in loss record 5 of 10 ==26332== at 0x4C2B3F8: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==26332== by 0x165CC6C: llvm::sys::MutexImpl::MutexImpl(bool) (Mutex.cpp:49) ==26332== by 0xD41D5A: llvm::sys::SmartMutex<true>::SmartMutex(bool) (Mutex.h:94) ==26332== by 0xD3E81F: void* llvm::object_creator<llvm::sys::SmartMutex<true> >() (ManagedStatic.h:26) ==26332== by 0x165AA95: llvm::ManagedStaticBase::RegisterManagedStatic(void* (*)(), void (*)(void*)) const (ManagedStatic.cpp:50) ==26332== by 0xD3C372: llvm::ManagedStatic<llvm::sys::SmartMutex<true> >::operator*() (ManagedStatic.h:68) ==26332== by 0x1605FE2: llvm::PassRegistry::removeRegistrationListener(llvm::PassRegistrationListener*) (PassRegistry.cpp:195) ==26332== by 0x15F1FC5: llvm::PassRegistrationListener::~PassRegistrationListener() (Pass.cpp:211) ==26332== by 0x15F2074: llvm::PassNameParser::~PassNameParser() (Pass.cpp:221) ==26332== by 0x1604973: llvm::cl::list<llvm::PassInfo const*, bool, llvm::PassNameParser>::~list() (in /home/ryoqun/rubinius/ryoqun/bin/rbx) ==26332== by 0x5EE4900: __run_exit_handlers (exit.c:78) ==26332== by 0x5EE4984: exit (exit.c:100) *1 http://lists.cs.uiuc.edu/pipermail/llvmdev/2012-January/046828.html Regards, -------------- next part -------------- A non-text attachment was scrubbed... Name: 0001-Avoid-Valgrind-s-still-reachable-leak-warnings.patch Type: application/octet-stream Size: 3602 bytes Desc: not available URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130328/c848b23e/attachment.obj>