Summary: ASan needs to initialize before ucrtbase.dll so that it can intercept all of its heap allocations. New versions of dbghelp.dll depend on ucrtbase.dll, which means both of those DLLs will initialize before the dynamic ASan runtime. By lazily loading dbghelp.dll with LoadLibrary, we avoid the issue. Eventually, I would like to remove our dbghelp.dll dependency in favor of always using llvm-symbolizer.exe, but this seems like an acceptable interim solution. Fixes PR30903 Reviewers: etienneb Subscribers: kubabrecka, mgorny, llvm-commits Differential Revision: https://reviews.llvm.org/D26473 llvm-svn: 286848
19 lines
643 B
C++
19 lines
643 B
C++
// Build an executable with ASan, then extract the DLLs that it depends on.
|
|
// RUN: %clang_cl_asan %s -Fe%t.exe
|
|
// RUN: llvm-readobj -coff-imports %t.exe | grep Name: | sed -e 's/ *Name: *//' > %t
|
|
//
|
|
// Make sure the binary doesn't depend on dbghelp directly.
|
|
// RUN: not grep dbghelp.dll %t
|
|
//
|
|
// Make sure any clang_rt DLLs it depends on don't depend on dbghelp. In the
|
|
// static build, there won't be any clang_rt DLLs.
|
|
// RUN: not grep cl""ang_rt %t || \
|
|
// RUN: grep cl""ang_rt %t | xargs which | \
|
|
// RUN: xargs llvm-readobj -coff-imports | not grep dbghelp.dll %t
|
|
|
|
extern "C" int puts(const char *);
|
|
|
|
int main() {
|
|
puts("main");
|
|
}
|