mirror of
https://github.com/1dot13/source.git
synced 2026-08-26 14:30:26 +02:00
Add AddressSanitizer support for clang-cl builds
Select the clang-cl-asan CMake preset (RelWithDebInfo, clang-cl, ADDRESS_SANITIZER=ON) to instrument first-party code with AddressSanitizer. The wiring lives in cmake/AddressSanitizer.cmake; SANITIZERS.md tells how to add the clang-cl tools, build, and read the report. Details: - Add the clang-cl-asan preset so the asan build is one selection in Visual Studio, and a base for a CMakeUserPresets.json to inherit. - Instrument first-party code only; the vendored libraries keep default flags. - Use the release CRT and disable MSVC-STL container annotations, so instrumented and un-instrumented TUs stay compatible. - Pass /bigobj to the TUs asan inflates past the COFF section cap. - Link the asan runtime for clang-cl (lld-link does not infer it). - Stub Bink into the exe: retail binkw32.dll cannot load in an asan process (its image base is the 32-bit shadow), so compile no-op exports instead. - Route the asan report to gamedir/asan.report.<pid>, since every app is a WIN32 GUI app with no console to receive the default stderr report. - Opt functions with 32-bit inline __asm out of instrumentation with cmake/asan-ignorelist.txt, one function at a time (asan reserves a register the asm needs). The rest of each translation unit stays instrumented. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
committed by
majcosta
co-authored by
Claude Opus 4.8
parent
69764e4459
commit
1bed0047ea
+20
-1
@@ -51,11 +51,30 @@
|
||||
"cacheVariables": {
|
||||
"CMAKE_BUILD_TYPE": "Release"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "clang-cl-asan",
|
||||
"inherits": "base",
|
||||
"displayName": "clang-cl RelWithDebInfo (AddressSanitizer)",
|
||||
"description": "AddressSanitizer build. Needs the C++ Clang tools for Windows component; see SANITIZERS.md.",
|
||||
"vendor": {
|
||||
"microsoft.com/VisualStudioSettings/CMake/1.0": {
|
||||
"hostOS": [ "Windows" ],
|
||||
"intelliSenseMode": "windows-clang-x86"
|
||||
}
|
||||
},
|
||||
"cacheVariables": {
|
||||
"CMAKE_BUILD_TYPE": "RelWithDebInfo",
|
||||
"CMAKE_C_COMPILER": "clang-cl",
|
||||
"CMAKE_CXX_COMPILER": "clang-cl",
|
||||
"ADDRESS_SANITIZER": "ON"
|
||||
}
|
||||
}
|
||||
],
|
||||
"buildPresets": [
|
||||
{ "name": "msvc-relwithdebinfo", "configurePreset": "msvc-relwithdebinfo" },
|
||||
{ "name": "msvc-debug", "configurePreset": "msvc-debug" },
|
||||
{ "name": "msvc-release", "configurePreset": "msvc-release" }
|
||||
{ "name": "msvc-release", "configurePreset": "msvc-release" },
|
||||
{ "name": "clang-cl-asan", "configurePreset": "clang-cl-asan" }
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user