<div dir="ltr">How?  (Please keep in mind both slash and backslash might occur in the same path string)<br></div><br><div class="gmail_quote">сб, 4 апр. 2015 г. в 0:56, Alexey Samsonov <<a href="mailto:vonosmas@gmail.com">vonosmas@gmail.com</a>>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Apr 2, 2015 at 7:48 AM, Timur Iskhodzhanov <span dir="ltr"><<a href="mailto:timurrrr@google.com" target="_blank">timurrrr@google.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: timurrrr<br>
Date: Thu Apr  2 09:48:08 2015<br>
New Revision: 233918<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=233918&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=233918&view=rev</a><br>
Log:<br>
[ASan/Win] Minor improvements towards enabling coverage<br>
<br>
Modified:<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_libcdep.cc<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_libcdep.cc<br>
    compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc?rev=233918&r1=233917&r2=233918&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc?rev=233918&r1=233917&r2=233918&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc Thu Apr  2 09:48:08 2015<br>
@@ -219,8 +219,15 @@ const char *StripPathPrefix(const char *<br>
 const char *StripModuleName(const char *module) {<br>
   if (module == 0)<br>
     return 0;<br>
-  if (const char *slash_pos = internal_strrchr(module, '/'))<br>
+  if (SANITIZER_WINDOWS) {<br>
+    // On Windows, both slash and backslash are possible.<br>
+    // Pick the one that goes last.<br>
+    if (const char *bslash_pos = internal_strrchr(module, '\\'))<br>
+      return StripModuleName(bslash_pos + 1);<br>
+  }<br>
+  if (const char *slash_pos = internal_strrchr(module, '/')) {<br>
     return slash_pos + 1;<br>
+  }<br></blockquote><div><br></div></div></div></div><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div>Please use IsPathSeparator() function here instead.</div></div></div></div><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
   return module;<br>
 }<br>
<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_libcdep.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_libcdep.cc?rev=233918&r1=233917&r2=233918&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_libcdep.cc?rev=233918&r1=233917&r2=233918&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_libcdep.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_libcdep.cc Thu Apr  2 09:48:08 2015<br>
@@ -113,12 +113,13 @@ void BackgroundThread(void *arg) {<br>
 }<br>
<br>
 void MaybeStartBackgroudThread() {<br>
-  if (!SANITIZER_LINUX) return;  // Need to implement/test on other platforms.<br>
+#if SANITIZER_LINUX  // Need to implement/test on other platforms.<br>
   // Start the background thread if one of the rss limits is given.<br>
   if (!common_flags()->hard_rss_limit_mb &&<br>
       !common_flags()->soft_rss_limit_mb) return;<br>
   if (!&real_pthread_create) return;  // Can't spawn the thread anyway.<br>
   internal_start_thread(BackgroundThread, nullptr);<br>
+#endif<br>
 }<br>
<br>
 }  // namespace __sanitizer<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_libcdep.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_libcdep.cc?rev=233918&r1=233917&r2=233918&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_libcdep.cc?rev=233918&r1=233917&r2=233918&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_libcdep.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_libcdep.cc Thu Apr  2 09:48:08 2015<br>
@@ -834,9 +834,7 @@ void InitializeCoverage(bool enabled, co<br>
   coverage_dir = dir;<br>
   coverage_data.Init();<br>
   if (enabled) coverage_data.Enable();<br>
-#if !SANITIZER_WINDOWS<br>
   if (!common_flags()->coverage_direct) Atexit(__sanitizer_cov_dump);<br>
-#endif<br>
 }<br>
<br>
 void ReInitializeCoverage(bool enabled, const char *dir) {<br>
<br>
Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc?rev=233918&r1=233917&r2=233918&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc?rev=233918&r1=233917&r2=233918&view=diff</a><br>
==============================================================================<br>
--- compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc (original)<br>
+++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc Thu Apr  2 09:48:08 2015<br>
@@ -353,9 +353,26 @@ uptr GetListOfModules(LoadedModule *modu<br>
 };<br>
<br>
 #ifndef SANITIZER_GO<br>
+// We can't use atexit() directly at __asan_init time as the CRT is not fully<br>
+// initialized at this point.  Place the functions into a vector and use<br>
+// atexit() as soon as it is ready for use (i.e. after .CRT$XIC initializers).<br>
+InternalMmapVectorNoCtor<void (*)(void)> atexit_functions;<br>
+<br>
 int Atexit(void (*function)(void)) {<br>
-  return atexit(function);<br>
+  atexit_functions.push_back(function);<br>
+  return 0;<br>
+}<br>
+<br>
+static int RunAtexit() {<br>
+  int ret = 0;<br>
+  for (uptr i = 0; i < atexit_functions.size(); ++i) {<br>
+    ret |= atexit(atexit_functions[i]);<br>
+  }<br>
+  return ret;<br>
 }<br>
+<br>
+#pragma section(".CRT$XID", long, read)  // NOLINT<br>
+static __declspec(allocate(".CRT$XID")) int (*__run_atexit)() = RunAtexit;<br>
 #endif<br>
<br>
 // ------------------ sanitizer_libc.h<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu" target="_blank">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</blockquote></div></div></div><div dir="ltr"><div class="gmail_extra"><br><br clear="all"><div><br></div>-- <br><div><div dir="ltr">Alexey Samsonov<br><a href="mailto:vonosmas@gmail.com" target="_blank">vonosmas@gmail.com</a></div></div>
</div></div></blockquote></div>