Backed out changeset 5bc7479ef4a1 (bug 1532502) for very frequent win asan failures with exit code 1
authorAndreea Pavel <apavel@mozilla.com>
Sat, 09 Mar 2019 22:34:50 +0200
changeset 521269 fc3a2f173e66
parent 521268 91d0c9066fd1
child 521270 72d3e9ad8d2c
push id10862
push userffxbld-merge
push dateMon, 11 Mar 2019 13:01:11 +0000
treeherdermozilla-beta@a2e7f5c935da [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
bugs1532502
milestone67.0a1
backs out5bc7479ef4a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Backed out changeset 5bc7479ef4a1 (bug 1532502) for very frequent win asan failures with exit code 1
build/build-clang/clang-win64.json
build/build-clang/r354836-unpoison-thread-stacks-callback.patch
build/build-clang/unpoison-thread-stacks.patch
--- a/build/build-clang/clang-win64.json
+++ b/build/build-clang/clang-win64.json
@@ -10,13 +10,13 @@
     "compiler_repo": "https://llvm.org/svn/llvm-project/compiler-rt/tags/RELEASE_800/rc3",
     "libcxx_repo": "https://llvm.org/svn/llvm-project/libcxx/tags/RELEASE_800/rc3",
     "python_path": "c:/mozilla-build/python/python.exe",
     "cc": "cl.exe",
     "cxx": "cl.exe",
     "ml": "ml64.exe",
     "patches": [
       "workaround-issue38586.patch",
-      "r354836-unpoison-thread-stacks-callback.patch",
+      "unpoison-thread-stacks.patch",
       "downgrade-mangling-error.patch",
       "loosen-msvc-detection.patch"
     ]
 }
deleted file mode 100644
--- a/build/build-clang/r354836-unpoison-thread-stacks-callback.patch
+++ /dev/null
@@ -1,34 +0,0 @@
-[winasan] Unpoison stack memory when threads exit (redux)
-
-This is a second attempt at r342652 using a TLS callback instead of an
-interceptor.
-
-In long-running builds we've seen some ASan complaints during thread creation
-that we suspect are due to leftover poisoning from previous threads whose
-stacks occupied that memory. This patch adds a callback that unpoisons the
-stack memory when a thread exits.
-
-Differential Revision: https://reviews.llvm.org/D58641
-
---- a/compiler-rt/lib/asan/asan_win.cc
-+++ b/compiler-rt/lib/asan/asan_win.cc
-@@ -354,6 +354,19 @@
-     unsigned long, void *) = asan_thread_init;
- #endif
- 
-+static void NTAPI asan_thread_exit(void *module, DWORD reason, void *reserved) {
-+  if (reason == DLL_THREAD_DETACH) {
-+    // Unpoison the thread's stack because the memory may be re-used.
-+    NT_TIB *tib = (NT_TIB *)NtCurrentTeb();
-+    uptr stackSize = (uptr)tib->StackBase - (uptr)tib->StackLimit;
-+    __asan_unpoison_memory_region(tib->StackLimit, stackSize);
-+  }
-+}
-+
-+#pragma section(".CRT$XLY", long, read)  // NOLINT
-+__declspec(allocate(".CRT$XLY")) void (NTAPI *__asan_tls_exit)(void *,
-+    unsigned long, void *) = asan_thread_exit;
-+
- WIN_FORCE_LINK(__asan_dso_reg_hook)
- 
- // }}}
new file mode 100644
--- /dev/null
+++ b/build/build-clang/unpoison-thread-stacks.patch
@@ -0,0 +1,34 @@
+[winasan] Unpoison the stack in NtTerminateThread
+
+In long-running builds we've seen some ASan complaints during thread creation that we suspect are due to leftover poisoning from previous threads whose stacks occupied that memory. This patch adds a hook that unpoisons the stack just before the NtTerminateThread syscall.
+
+Differential Revision: https://reviews.llvm.org/D52091
+
+--- a/compiler-rt/lib/asan/asan_win.cc	(revision 342651)
++++ b/compiler-rt/lib/asan/asan_win.cc	(revision 342652)
+@@ -154,6 +154,14 @@
+                             asan_thread_start, t, thr_flags, tid);
+ }
+ 
++INTERCEPTOR_WINAPI(void, NtTerminateThread, void *rcx) {
++  // Unpoison the terminating thread's stack because the memory may be re-used.
++  NT_TIB *tib = (NT_TIB *)NtCurrentTeb();
++  uptr stackSize = (uptr)tib->StackBase - (uptr)tib->StackLimit;
++  __asan_unpoison_memory_region(tib->StackLimit, stackSize);
++  return REAL(NtTerminateThread(rcx));
++}
++
+ // }}}
+ 
+ namespace __asan {
+@@ -169,7 +177,9 @@
+ 
+   ASAN_INTERCEPT_FUNC(CreateThread);
+   ASAN_INTERCEPT_FUNC(SetUnhandledExceptionFilter);
+-
++  CHECK(::__interception::OverrideFunction("NtTerminateThread",
++                                           (uptr)WRAP(NtTerminateThread),
++                                           (uptr *)&REAL(NtTerminateThread)));
+ #ifdef _WIN64
+   ASAN_INTERCEPT_FUNC(__C_specific_handler);
+ #else