[PATCH] Workaround some MSan bootstrap issues.

Evgeniy Stepanov eugenis at google.com
Thu Feb 14 01:11:53 PST 2013


  Weird. I removed this stack allocation code, and still no leak report from Valgrind.

  OK to land this (in 2 commits)?

Hi kcc, chapuni,

http://llvm-reviews.chandlerc.com/D402

CHANGE SINCE LAST DIFF
  http://llvm-reviews.chandlerc.com/D402?vs=967&id=977#toc

Files:
  unittests/Support/ManagedStatic.cpp
  lib/Support/Unix/Process.inc

Index: unittests/Support/ManagedStatic.cpp
===================================================================
--- unittests/Support/ManagedStatic.cpp
+++ unittests/Support/ManagedStatic.cpp
@@ -26,34 +26,16 @@
     *ms;
     return NULL;
   }
-
-  // Valgrind's leak checker complains glibc's stack allocation.
-  // To appease valgrind, we provide our own stack for each thread.
-  void *allocate_stack(pthread_attr_t &a, size_t n = 65536) {
-    void *stack = malloc(n);
-    pthread_attr_init(&a);
-#if defined(__linux__)
-    pthread_attr_setstack(&a, stack, n);
-#endif
-    return stack;
-  }
 }
 
 TEST(Initialize, MultipleThreads) {
   // Run this test under tsan: http://code.google.com/p/data-race-test/
-
-  pthread_attr_t a1, a2;
-  void *p1 = test1::allocate_stack(a1);
-  void *p2 = test1::allocate_stack(a2);
-
   llvm_start_multithreaded();
   pthread_t t1, t2;
-  pthread_create(&t1, &a1, test1::helper, NULL);
-  pthread_create(&t2, &a2, test1::helper, NULL);
+  pthread_create(&t1, NULL,  test1::helper, NULL);
+  pthread_create(&t2, NULL, test1::helper, NULL);
   pthread_join(t1, NULL);
   pthread_join(t2, NULL);
-  free(p1);
-  free(p2);
   llvm_stop_multithreaded();
 }
 #endif
Index: lib/Support/Unix/Process.inc
===================================================================
--- lib/Support/Unix/Process.inc
+++ lib/Support/Unix/Process.inc
@@ -224,6 +224,8 @@
 #if defined(HAVE_SYS_IOCTL_H) && defined(HAVE_TERMIOS_H)
   // Try to determine the width of the terminal.
   struct winsize ws;
+  // Zero-fill ws to avoid a false positive from MemorySanitizer.
+  memset(&ws, 0, sizeof(ws));
   if (ioctl(FileID, TIOCGWINSZ, &ws) == 0)
     Columns = ws.ws_col;
 #endif
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D402.2.patch
Type: text/x-patch
Size: 1699 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130214/43c5a3c5/attachment.bin>


More information about the llvm-commits mailing list