mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Support --enable-sanitizer for MSVC builds
While it is already possible to enable ASan for MSVC (assuming Visual Studio 2019 16.10 or later) by passing `/fsanitizer=address` in the `CFLAGS`, it is only usable if `ZEND_DEBUG` is also enabled; otherwise there are `STATUS_BACK_STACK` errors all the time. Since it makes some sense to combine ASan instrumentation with debug assertions enabled anyway (typical for fuzzing), we support the configure option `--enable-sanitizer`, which is already supported for Clang builds, also for MSVC builds. Note that MSVC supports only ASan for now; contrary to Clang which additionally supports UBSan on Windows. Since ASan reports can be pretty useless without debug symbol information, we require such builds to also produce PDBs (i.e. `--enable-debug-pack`), but forbid actual debug builds (for performance reasons, and because the way it is implemented it would not make sense; that was already an issue with Clang builds with sanitizers enabled). Closes GH-16999.
This commit is contained in:
parent
d18b7220a1
commit
c9cc89cd8e
3 changed files with 25 additions and 4 deletions
|
@ -1246,6 +1246,8 @@ function SAPI(sapiname, file_list, makefiletarget, cflags, obj_dir)
|
|||
if (PHP_SANITIZER == "yes") {
|
||||
if (CLANG_TOOLSET) {
|
||||
add_asan_opts("CFLAGS_" + SAPI, "LIBS_" + SAPI, (is_lib ? "ARFLAGS_" : "LDFLAGS_") + SAPI);
|
||||
} else if (VS_TOOLSET) {
|
||||
ADD_FLAG("CFLAGS", "/fsanitize=address");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3442,8 +3444,12 @@ function toolset_setup_build_mode()
|
|||
ADD_FLAG("LDFLAGS", "/incremental:no /debug /opt:ref,icf");
|
||||
}
|
||||
ADD_FLAG("CFLAGS", "/LD /MD");
|
||||
if (PHP_SANITIZER == "yes" && CLANG_TOOLSET) {
|
||||
ADD_FLAG("CFLAGS", "/Od /D NDebug /D NDEBUG /D ZEND_WIN32_NEVER_INLINE /D ZEND_DEBUG=0");
|
||||
if (PHP_SANITIZER == "yes") {
|
||||
if (VS_TOOLSET) {
|
||||
ADD_FLAG("CFLAGS", "/Ox /U NDebug /U NDEBUG /D ZEND_DEBUG=1");
|
||||
} else if (CLANG_TOOLSET) {
|
||||
ADD_FLAG("CFLAGS", "/Od /D NDebug /D NDEBUG /D ZEND_WIN32_NEVER_INLINE /D ZEND_DEBUG=0");
|
||||
}
|
||||
} else {
|
||||
// Equivalent to Release_TSInline build -> best optimization
|
||||
ADD_FLAG("CFLAGS", "/Ox /D NDebug /D NDEBUG /GF /D ZEND_DEBUG=0");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue