From a768cd7996ed43316247121771bc644afab02d0a Mon Sep 17 00:00:00 2001 From: Etienne Bergeron Date: Fri, 23 Sep 2016 14:07:47 +0000 Subject: [PATCH] [asan] Fix incorrect SEH symbol mangling on win64. Summary: The ASAN unittests are failing (check-asan-dynamic) due to an incorrect symbol name: ``` LINK : error LNK2001: unresolved external symbol ___asan_seh_interceptor ``` On win64, the linker is not adding an extra underscore. This was correctly fixed in the same file for other uses. After that patch, most of the unittests are passing, but some related to SEH needs to be fixed. ``` Failing Tests (4): AddressSanitizer-x86_64-windows-dynamic :: TestCases/Windows/dll_intercept_memchr.cc AddressSanitizer-x86_64-windows-dynamic :: TestCases/Windows/dll_intercept_memcpy_indirect.cc AddressSanitizer-x86_64-windows-dynamic :: TestCases/Windows/dll_seh.cc AddressSanitizer-x86_64-windows-dynamic :: TestCases/Windows/seh.cc Expected Passes : 339 Passes With Retry : 3 Expected Failures : 16 Unsupported Tests : 152 Unexpected Failures: 4 ``` Reviewers: rnk, kcc, majnemer Subscribers: majnemer, chrisha, cfe-commits Differential Revision: https://reviews.llvm.org/D24841 llvm-svn: 282251 --- clang/lib/Driver/Tools.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 0cfcf4a..f630222 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -10235,7 +10235,10 @@ void visualstudio::Linker::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back(TC.getCompilerRTArgString(Args, Lib)); // Make sure the dynamic runtime thunk is not optimized out at link time // to ensure proper SEH handling. - CmdArgs.push_back(Args.MakeArgString("-include:___asan_seh_interceptor")); + CmdArgs.push_back(Args.MakeArgString( + TC.getArch() == llvm::Triple::x86 + ? "-include:___asan_seh_interceptor" + : "-include:__asan_seh_interceptor")); } else if (DLL) { CmdArgs.push_back(TC.getCompilerRTArgString(Args, "asan_dll_thunk")); } else { -- 2.7.4