From 72f8dbb31295e4e5633a9033c6d91a45d102c485 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Wed, 24 Nov 2021 20:43:30 +0300 Subject: [PATCH] Fixed bug #81634 (ZEND_ENABLE_STATIC_TSRMLS_CACHE produces extensionswith the STATIC_TLS flag) --- TSRM/TSRM.h | 8 ++++++-- Zend/zend.c | 2 +- Zend/zend.h | 4 ++++ build/php.m4 | 2 +- win32/build/confutils.js | 2 +- 5 files changed, 13 insertions(+), 5 deletions(-) diff --git a/TSRM/TSRM.h b/TSRM/TSRM.h index 188ed29f0bc..941d5022266 100644 --- a/TSRM/TSRM.h +++ b/TSRM/TSRM.h @@ -167,8 +167,10 @@ TSRM_API const char *tsrm_api_name(void); #define TSRMG_BULK_STATIC(id, type) ((type) (*((void ***) TSRMLS_CACHE))[TSRM_UNSHUFFLE_RSRC_ID(id)]) #define TSRMG_FAST_STATIC(offset, type, element) (TSRMG_FAST_BULK_STATIC(offset, type)->element) #define TSRMG_FAST_BULK_STATIC(offset, type) ((type) (((char*) TSRMLS_CACHE)+(offset))) -#define TSRMLS_CACHE_EXTERN() extern TSRM_TLS void *TSRMLS_CACHE TSRM_TLS_MODEL_ATTR; -#define TSRMLS_CACHE_DEFINE() TSRM_TLS void *TSRMLS_CACHE TSRM_TLS_MODEL_ATTR = NULL; +#define TSRMLS_MAIN_CACHE_EXTERN() extern TSRM_TLS void *TSRMLS_CACHE TSRM_TLS_MODEL_ATTR; +#define TSRMLS_MAIN_CACHE_DEFINE() TSRM_TLS void *TSRMLS_CACHE TSRM_TLS_MODEL_ATTR = NULL; +#define TSRMLS_CACHE_EXTERN() extern TSRM_TLS void *TSRMLS_CACHE; +#define TSRMLS_CACHE_DEFINE() TSRM_TLS void *TSRMLS_CACHE = NULL; #define TSRMLS_CACHE_UPDATE() TSRMLS_CACHE = tsrm_get_ls_cache() #define TSRMLS_CACHE _tsrm_ls_cache @@ -182,6 +184,8 @@ TSRM_API const char *tsrm_api_name(void); #define tsrm_env_unlock() #define TSRMG_STATIC(id, type, element) +#define TSRMLS_MAIN_CACHE_EXTERN() +#define TSRMLS_MAIN_CACHE_DEFINE() #define TSRMLS_CACHE_EXTERN() #define TSRMLS_CACHE_DEFINE() #define TSRMLS_CACHE_UPDATE() diff --git a/Zend/zend.c b/Zend/zend.c index b5339c4f87a..6951465d1f9 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -50,7 +50,7 @@ static HashTable *global_class_table = NULL; static HashTable *global_constants_table = NULL; static HashTable *global_auto_globals_table = NULL; static HashTable *global_persistent_list = NULL; -ZEND_TSRMLS_CACHE_DEFINE() +TSRMLS_MAIN_CACHE_DEFINE() # define GLOBAL_FUNCTION_TABLE global_function_table # define GLOBAL_CLASS_TABLE global_class_table # define GLOBAL_CONSTANTS_TABLE global_constants_table diff --git a/Zend/zend.h b/Zend/zend.h index eeacc91eb0a..db7d075d505 100644 --- a/Zend/zend.h +++ b/Zend/zend.h @@ -69,7 +69,11 @@ #define ZEND_TSRMLS_CACHE #endif +#ifndef ZEND_COMPILE_DL_EXT +TSRMLS_MAIN_CACHE_EXTERN() +#else ZEND_TSRMLS_CACHE_EXTERN() +#endif struct _zend_serialize_data; struct _zend_unserialize_data; diff --git a/build/php.m4 b/build/php.m4 index 3af2b8b72d4..4f64f669eb9 100644 --- a/build/php.m4 +++ b/build/php.m4 @@ -935,7 +935,7 @@ dnl ---------------------------------------------- Static module if test "$3" = "shared" || test "$3" = "yes"; then dnl ---------------------------------------------- Shared module [PHP_]translit($1,a-z_-,A-Z__)[_SHARED]=yes - PHP_ADD_SOURCES_X($ext_dir,$2,$ac_extra,shared_objects_$1,yes) + PHP_ADD_SOURCES_X($ext_dir,$2,$ac_extra -DZEND_COMPILE_DL_EXT=1,shared_objects_$1,yes) PHP_SHARED_MODULE($1,shared_objects_$1, $ext_builddir, $6, $7) AC_DEFINE_UNQUOTED([COMPILE_DL_]translit($1,a-z_-,A-Z__), 1, Whether to build $1 as dynamic module) fi diff --git a/win32/build/confutils.js b/win32/build/confutils.js index 01c76b0e1e8..1a2dfe43b4c 100644 --- a/win32/build/confutils.js +++ b/win32/build/confutils.js @@ -1432,7 +1432,7 @@ function EXTENSION(extname, file_list, shared, cflags, dllname, obj_dir) if (shared) { STDOUT.WriteLine("Enabling extension " + extname_for_printing + " [shared]"); - cflags = "/D COMPILE_DL_" + EXT + " /D " + EXT + "_EXPORTS=1 " + cflags; + cflags = "/D ZEND_COMPILE_DL_EXT=1 /D COMPILE_DL_" + EXT + " /D " + EXT + "_EXPORTS=1 " + cflags; ADD_FLAG("CFLAGS_PHP", "/D COMPILE_DL_" + EXT); } else { STDOUT.WriteLine("Enabling extension " + extname_for_printing);