Avoid a problem in libc_freeres() seen on a linux-i686 buildbot when running
authorJeffrey Yasskin <jyasskin@google.com>
Thu, 18 Mar 2010 07:00:12 +0000 (07:00 +0000)
committerJeffrey Yasskin <jyasskin@google.com>
Thu, 18 Mar 2010 07:00:12 +0000 (07:00 +0000)
under valgrind:

==19577== Invalid free() / delete / delete[]
==19577==    at 0x4C9C866: free (vg_replace_malloc.c:325)
==19577==    by 0x5121104: ??? (in /lib/libc-2.10.2.so)
==19577==    by 0x4C97412: _vgnU_freeres (vg_preloaded.c:62)
==19577==    by 0x5041486: __run_exit_handlers (exit.c:93)
==19577==    by 0x50414FE: exit (exit.c:100)
==19577==    by 0x5028B5C: (below main) (libc-start.c:254)
==19577==  Address 0xffffffff is not stack'd, malloc'd or (recently) free'd
==19577==

Apparently this happens under certain versions of glibc, so valgrind provides
the --run-libc-freeres=no option to avoid calling freeres().  This may increase
the number of "still reachable" blocks valgrind reports, but we don't care
about those, while this error breaks the buildbots.

There are upstream bugs about this at
http://sourceware.org/bugzilla/show_bug.cgi?id=10610 and
http://bugs.kde.org/show_bug.cgi?id=167483, but they don't look likely to be
fixed.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98813 91177308-0d34-0410-b5e6-96231b3b80d8

utils/lit/lit/TestFormats.py
utils/lit/lit/TestRunner.py

index 6ab3f9c4626d2a8d6fbbda5d4c9b3d58a0c32fd3..33fd1c1d125ad7a9743546fb0a2b8cdf40f0ca92 100644 (file)
@@ -73,7 +73,7 @@ class GoogleTest(object):
 
         cmd = [testPath, '--gtest_filter=' + testName]
         if litConfig.useValgrind:
-            valgrindArgs = ['valgrind', '-q',
+            valgrindArgs = ['valgrind', '-q', '--run-libc-freeres=no',
                             '--tool=memcheck', '--trace-children=yes',
                             '--error-exitcode=123']
             valgrindArgs.extend(litConfig.valgrindArgs)
index d5bd01f89c66ca65a49baa559248902414660b21..2778469daa91a1c272b086d6ef61e707124ae84b 100644 (file)
@@ -253,7 +253,7 @@ def executeTclScriptInternal(test, litConfig, tmpBase, commands, cwd):
             return (Test.FAIL, "Tcl 'exec' parse error on: %r" % ln)
 
     if litConfig.useValgrind:
-        valgrindArgs = ['valgrind', '-q',
+        valgrindArgs = ['valgrind', '-q', '--run-libc-freeres=no',
                         '--tool=memcheck', '--trace-children=yes',
                         '--error-exitcode=123']
         valgrindArgs.extend(litConfig.valgrindArgs)
@@ -339,7 +339,7 @@ def executeScript(test, litConfig, tmpBase, commands, cwd):
         if litConfig.useValgrind:
             # FIXME: Running valgrind on sh is overkill. We probably could just
             # run on clang with no real loss.
-            valgrindArgs = ['valgrind', '-q',
+            valgrindArgs = ['valgrind', '-q', '--run-libc-freeres=no',
                             '--tool=memcheck', '--trace-children=yes',
                             '--error-exitcode=123']
             valgrindArgs.extend(litConfig.valgrindArgs)