[compiler-rt] r233918 - [ASan/Win] Minor improvements towards enabling coverage

Alexey Samsonov vonosmas at gmail.com
Fri Apr 3 14:56:25 PDT 2015


On Thu, Apr 2, 2015 at 7:48 AM, Timur Iskhodzhanov <timurrrr at google.com>
wrote:

> Author: timurrrr
> Date: Thu Apr  2 09:48:08 2015
> New Revision: 233918
>
> URL: http://llvm.org/viewvc/llvm-project?rev=233918&view=rev
> Log:
> [ASan/Win] Minor improvements towards enabling coverage
>
> Modified:
>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc
>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_libcdep.cc
>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_libcdep.cc
>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc
>
> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc?rev=233918&r1=233917&r2=233918&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc (original)
> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common.cc Thu Apr  2
> 09:48:08 2015
> @@ -219,8 +219,15 @@ const char *StripPathPrefix(const char *
>  const char *StripModuleName(const char *module) {
>    if (module == 0)
>      return 0;
> -  if (const char *slash_pos = internal_strrchr(module, '/'))
> +  if (SANITIZER_WINDOWS) {
> +    // On Windows, both slash and backslash are possible.
> +    // Pick the one that goes last.
> +    if (const char *bslash_pos = internal_strrchr(module, '\\'))
> +      return StripModuleName(bslash_pos + 1);
> +  }
> +  if (const char *slash_pos = internal_strrchr(module, '/')) {
>      return slash_pos + 1;
> +  }
>

Please use IsPathSeparator() function here instead.


>    return module;
>  }
>
>
> Modified:
> compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_libcdep.cc
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_libcdep.cc?rev=233918&r1=233917&r2=233918&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_libcdep.cc
> (original)
> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_libcdep.cc Thu
> Apr  2 09:48:08 2015
> @@ -113,12 +113,13 @@ void BackgroundThread(void *arg) {
>  }
>
>  void MaybeStartBackgroudThread() {
> -  if (!SANITIZER_LINUX) return;  // Need to implement/test on other
> platforms.
> +#if SANITIZER_LINUX  // Need to implement/test on other platforms.
>    // Start the background thread if one of the rss limits is given.
>    if (!common_flags()->hard_rss_limit_mb &&
>        !common_flags()->soft_rss_limit_mb) return;
>    if (!&real_pthread_create) return;  // Can't spawn the thread anyway.
>    internal_start_thread(BackgroundThread, nullptr);
> +#endif
>  }
>
>  }  // namespace __sanitizer
>
> Modified:
> compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_libcdep.cc
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_libcdep.cc?rev=233918&r1=233917&r2=233918&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_libcdep.cc
> (original)
> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_coverage_libcdep.cc
> Thu Apr  2 09:48:08 2015
> @@ -834,9 +834,7 @@ void InitializeCoverage(bool enabled, co
>    coverage_dir = dir;
>    coverage_data.Init();
>    if (enabled) coverage_data.Enable();
> -#if !SANITIZER_WINDOWS
>    if (!common_flags()->coverage_direct) Atexit(__sanitizer_cov_dump);
> -#endif
>  }
>
>  void ReInitializeCoverage(bool enabled, const char *dir) {
>
> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc?rev=233918&r1=233917&r2=233918&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc (original)
> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_win.cc Thu Apr  2
> 09:48:08 2015
> @@ -353,9 +353,26 @@ uptr GetListOfModules(LoadedModule *modu
>  };
>
>  #ifndef SANITIZER_GO
> +// We can't use atexit() directly at __asan_init time as the CRT is not
> fully
> +// initialized at this point.  Place the functions into a vector and use
> +// atexit() as soon as it is ready for use (i.e. after .CRT$XIC
> initializers).
> +InternalMmapVectorNoCtor<void (*)(void)> atexit_functions;
> +
>  int Atexit(void (*function)(void)) {
> -  return atexit(function);
> +  atexit_functions.push_back(function);
> +  return 0;
> +}
> +
> +static int RunAtexit() {
> +  int ret = 0;
> +  for (uptr i = 0; i < atexit_functions.size(); ++i) {
> +    ret |= atexit(atexit_functions[i]);
> +  }
> +  return ret;
>  }
> +
> +#pragma section(".CRT$XID", long, read)  // NOLINT
> +static __declspec(allocate(".CRT$XID")) int (*__run_atexit)() = RunAtexit;
>  #endif
>
>  // ------------------ sanitizer_libc.h
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>



-- 
Alexey Samsonov
vonosmas at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150403/697d5909/attachment.html>


More information about the llvm-commits mailing list