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

Timur Iskhodzhanov timurrrr at google.com
Mon Apr 6 06:43:17 PDT 2015


How?  (Please keep in mind both slash and backslash might occur in the same
path string)

сб, 4 апр. 2015 г. в 0:56, Alexey Samsonov <vonosmas at gmail.com>:

> 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/20150406/a3e9df6e/attachment.html>


More information about the llvm-commits mailing list