Skip to content

Commit ca5952a

Browse files
authored
Refactor SHADOW_STACK_SYSCALL check (#14575)
This fixes -Wundef warnings present where SHADOW_STACK_SYSCALL should be defined to value 0 and refactors the check with cache variable php_cv_have_shadow_stack_syscall. The SHADOW_STACK_SYSCALL CPP macro definition is removed from php_config.h in favor of a compilation definition on asm files and Zend engine files.
1 parent dd4e2ef commit ca5952a

File tree

1 file changed

+15
-14
lines changed

1 file changed

+15
-14
lines changed

configure.ac

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1322,9 +1322,9 @@ else
13221322
fiber_asm="no"
13231323
fi
13241324

1325-
dnl Check whether syscall to create shadow stack exists, should be a better way, but...
1326-
AC_CACHE_CHECK([whether syscall to create shadow stack exists], ac_cv_syscall_shadow_stack_exists,
1327-
[AC_RUN_IFELSE([AC_LANG_SOURCE([[
1325+
AC_CACHE_CHECK([whether syscall to create shadow stack exists],
1326+
[php_cv_have_shadow_stack_syscall],
1327+
[AC_RUN_IFELSE([AC_LANG_SOURCE([
13281328
#include <unistd.h>
13291329
#include <sys/mman.h>
13301330
int main(void) {
@@ -1334,18 +1334,19 @@ int main(void) {
13341334
munmap(base, 0x20000);
13351335
return 0;
13361336
}
1337-
else
1338-
return 1;
1337+
return 1;
13391338
}
1340-
]])], [ac_cv_syscall_shadow_stack_exists=yes], [ac_cv_syscall_shadow_stack_exists=no], [ac_cv_syscall_shadow_stack_exists=no])
1339+
])],
1340+
[php_cv_have_shadow_stack_syscall=yes],
1341+
[php_cv_have_shadow_stack_syscall=no],
1342+
[php_cv_have_shadow_stack_syscall=no])
13411343
])
1342-
if test "$ac_cv_syscall_shadow_stack_exists" = yes; then
1343-
AC_DEFINE([SHADOW_STACK_SYSCALL], 1, [ ])
1344-
# asm file can't see macro from AC_DEFINE, workaround this via cflag
1345-
fiber_asm_cflag="-DSHADOW_STACK_SYSCALL=1"
1346-
# if the syscall doesn't exist, we may block the final ELF from __PROPERTY_SHSTK
1347-
# via redefine macro as "-D__CET__=1"
1348-
fi
1344+
dnl The asm files can't see macro from AC_DEFINE, workaround this via cflag. If
1345+
dnl the syscall doesn't exist, we may block the final ELF from __PROPERTY_SHSTK
1346+
dnl via redefine macro as "-D__CET__=1".
1347+
AS_VAR_IF([php_cv_have_shadow_stack_syscall], [yes],
1348+
[fiber_asm_cflag="-DSHADOW_STACK_SYSCALL=1"],
1349+
[fiber_asm_cflag="-DSHADOW_STACK_SYSCALL=0"])
13491350

13501351
if test "$fiber_asm" = 'yes'; then
13511352
AC_MSG_CHECKING([for fiber switching context])
@@ -1776,7 +1777,7 @@ PHP_ADD_SOURCES(Zend, \
17761777
Optimizer/escape_analysis.c \
17771778
Optimizer/compact_vars.c \
17781779
Optimizer/zend_dump.c \
1779-
, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1)
1780+
, [-DZEND_ENABLE_STATIC_TSRMLS_CACHE=1 $fiber_asm_cflag])
17801781

17811782
PHP_ADD_MAKEFILE_FRAGMENT($abs_srcdir/scripts/Makefile.frag,$abs_srcdir/scripts,scripts)
17821783
PHP_ADD_MAKEFILE_FRAGMENT($abs_srcdir/Zend/Makefile.frag,$abs_srcdir/Zend,Zend)

0 commit comments

Comments
 (0)