@@ -982,6 +982,16 @@ PHP_ARG_ENABLE([memory-sanitizer],,
982
982
[ Enable memory sanitizer (clang only)] ) ] ,
983
983
[ no] ,
984
984
[ no] )
985
+ PHP_ARG_ENABLE([ address-sanitizer] ,,
986
+ [ AS_HELP_STRING ( [ --enable-address-sanitizer] ,
987
+ [ Enable address sanitizer] ) ] ,
988
+ [ no] ,
989
+ [ no] )
990
+ PHP_ARG_ENABLE([ undefined-sanitizer] ,,
991
+ [ AS_HELP_STRING ( [ --enable-undefined-sanitizer] ,
992
+ [ Enable undefined sanitizer] ) ] ,
993
+ [ no] ,
994
+ [ no] )
985
995
986
996
dnl Extension configuration.
987
997
dnl ----------------------------------------------------------------------------
@@ -1372,10 +1382,38 @@ if test "$PHP_WERROR" = "yes"; then
1372
1382
CXXFLAGS="$CXXFLAGS -Werror"
1373
1383
fi
1374
1384
1385
+ if test "$PHP_MEMORY_SANITIZER" = "yes" &&
1386
+ test "$PHP_ADDRESS_SANITIZER" = "yes"; then
1387
+ AC_MSG_ERROR ( [ MemorySanitizer and AddressSanitizer are mutually exclusive] )
1388
+ fi
1389
+
1375
1390
dnl Enable -fsanitize=memory late, because interceptors may break linking detection.
1376
1391
if test "$PHP_MEMORY_SANITIZER" = "yes"; then
1377
- CFLAGS="$CFLAGS -fsanitize=memory -fsanitize-memory-track-origins"
1378
- CXXFLAGS="$CXXFLAGS -fsanitize=memory -fsanitize-memory-track-origins"
1392
+ AX_CHECK_COMPILE_FLAG ( [ -fsanitize=memory -fsanitize-memory-track-origins] , [
1393
+ CFLAGS="$CFLAGS -fsanitize=memory -fsanitize-memory-track-origins"
1394
+ CXXFLAGS="$CXXFLAGS -fsanitize=memory -fsanitize-memory-track-origins"
1395
+ ] , [ AC_MSG_ERROR ( [ MemorySanitizer is not available] ) ] )
1396
+ fi
1397
+
1398
+ if test "$PHP_ADDRESS_SANITIZER" = "yes"; then
1399
+ AX_CHECK_COMPILE_FLAG ( [ -fsanitize=address] , [
1400
+ CFLAGS="$CFLAGS -fsanitize=address -DZEND_TRACK_ARENA_ALLOC"
1401
+ CXXFLAGS="$CXXFLAGS -fsanitize=address -DZEND_TRACK_ARENA_ALLOC"
1402
+ ] , [ AC_MSG_ERROR ( [ AddressSanitizer is not available] ) ] )
1403
+ fi
1404
+
1405
+ if test "$PHP_UNDEFINED_SANITIZER" = "yes"; then
1406
+ AX_CHECK_COMPILE_FLAG ( [ -fsanitize=undefined] , [
1407
+ CFLAGS="$CFLAGS -fsanitize=undefined"
1408
+ CXXFLAGS="$CXXFLAGS -fsanitize=undefined"
1409
+ ] , [ AC_MSG_ERROR ( [ UndefinedBehaviorSanitizer is not available] ) ] )
1410
+ fi
1411
+
1412
+ if test "$PHP_MEMORY_SANITIZER" = "yes" ||
1413
+ test "$PHP_ADDRESS_SANITIZER" = "yes" ||
1414
+ test "$PHP_UNDEFINED_SANITIZER" = "yes"; then
1415
+ CFLAGS="$CFLAGS -fno-omit-frame-pointer"
1416
+ CXXFLAGS="$CXXFLAGS -fno-omit-frame-pointer"
1379
1417
fi
1380
1418
1381
1419
dnl
0 commit comments