From 59bffbcceee522cdfe631087997135e1be52aeb2 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Mon, 4 Nov 2013 15:05:34 +0100 Subject: PHP 5.5 test build opcache with phar build shared https://github.com/zendtech/ZendOptimizerPlus/issues/147 --- php-5.4.0-dlopen.patch | 6 +-- php-wip.patch | 110 ++++++++++++++++++++----------------------------- php55.spec | 10 +++-- 3 files changed, 54 insertions(+), 72 deletions(-) diff --git a/php-5.4.0-dlopen.patch b/php-5.4.0-dlopen.patch index 10d3f2b..c2b0e40 100644 --- a/php-5.4.0-dlopen.patch +++ b/php-5.4.0-dlopen.patch @@ -5,13 +5,13 @@ # if defined(RTLD_GROUP) && defined(RTLD_WORLD) && defined(RTLD_PARENT) -# define DL_LOAD(libname) dlopen(libname, RTLD_LAZY | RTLD_GLOBAL | RTLD_GROUP | RTLD_WORLD | RTLD_PARENT) -+# define DL_LOAD(libname) dlopen(libname, (strstr(libname, "opcache") ? RTLD_LAZY : RTLD_NOW) | RTLD_GLOBAL | RTLD_GROUP | RTLD_WORLD | RTLD_PARENT) ++# define DL_LOAD(libname) dlopen(libname, RTLD_NOW | RTLD_GLOBAL | RTLD_GROUP | RTLD_WORLD | RTLD_PARENT) # elif defined(RTLD_DEEPBIND) -# define DL_LOAD(libname) dlopen(libname, RTLD_LAZY | RTLD_GLOBAL | RTLD_DEEPBIND) -+# define DL_LOAD(libname) dlopen(libname, (strstr(libname, "opcache") ? RTLD_LAZY : RTLD_NOW) | RTLD_GLOBAL | RTLD_DEEPBIND) ++# define DL_LOAD(libname) dlopen(libname, RTLD_NOW | RTLD_GLOBAL | RTLD_DEEPBIND) # else -# define DL_LOAD(libname) dlopen(libname, RTLD_LAZY | RTLD_GLOBAL) -+# define DL_LOAD(libname) dlopen(libname, (strstr(libname, "opcache") ? RTLD_LAZY : RTLD_NOW) | RTLD_GLOBAL) ++# define DL_LOAD(libname) dlopen(libname, RTLD_NOW | RTLD_GLOBAL) # endif # define DL_UNLOAD dlclose # if defined(DLSYM_NEEDS_UNDERSCORE) diff --git a/php-wip.patch b/php-wip.patch index 6aee5a9..d6e5131 100644 --- a/php-wip.patch +++ b/php-wip.patch @@ -1,69 +1,47 @@ -diff --git a/Zend/zend_exceptions.c b/Zend/zend_exceptions.c -index 14ae75e..c7f157c 100644 ---- a/Zend/zend_exceptions.c -+++ b/Zend/zend_exceptions.c -@@ -560,7 +560,7 @@ ZEND_METHOD(exception, getPrevious) - RETURN_ZVAL(previous, 1, 0); +diff -up php-5.5.6RC1/ext/opcache/ZendAccelerator.c.wip php-5.5.6RC1/ext/opcache/ZendAccelerator.c +--- php-5.5.6RC1/ext/opcache/ZendAccelerator.c.wip 2013-10-29 12:09:06.000000000 +0100 ++++ php-5.5.6RC1/ext/opcache/ZendAccelerator.c 2013-11-04 14:23:59.395722970 +0100 +@@ -145,9 +145,33 @@ static inline int is_cacheable_stream_pa + memcmp(filename, "phar://", sizeof("phar://") - 1) == 0; } --int zend_spprintf(char **message, int max_len, char *format, ...) /* {{{ */ -+int zend_spprintf(char **message, int max_len, const char *format, ...) /* {{{ */ ++#ifdef COMPILE_DL_PHAR ++static typeof(phar_resolve_alias) *opcache_phar_resolve_alias; ++#else ++# define opcache_phar_resolve_alias phar_resolve_alias ++#endif ++ + static inline int is_phar_relative_alias_path(const char *filename, char **alias, int *alias_len) { - va_list arg; - int len; -@@ -732,7 +732,7 @@ ZEND_API zend_class_entry *zend_get_error_exception(TSRMLS_D) /* {{{ */ - } - /* }}} */ - --ZEND_API zval * zend_throw_exception(zend_class_entry *exception_ce, char *message, long code TSRMLS_DC) /* {{{ */ -+ZEND_API zval * zend_throw_exception(zend_class_entry *exception_ce, const char *message, long code TSRMLS_DC) /* {{{ */ - { - zval *ex; - -@@ -760,7 +760,7 @@ ZEND_API zval * zend_throw_exception(zend_class_entry *exception_ce, char *messa - } - /* }}} */ - --ZEND_API zval * zend_throw_exception_ex(zend_class_entry *exception_ce, long code TSRMLS_DC, char *format, ...) /* {{{ */ -+ZEND_API zval * zend_throw_exception_ex(zend_class_entry *exception_ce, long code TSRMLS_DC, const char *format, ...) /* {{{ */ - { - va_list arg; - char *message; -@@ -775,7 +775,7 @@ ZEND_API zval * zend_throw_exception_ex(zend_class_entry *exception_ce, long cod - } - /* }}} */ - --ZEND_API zval * zend_throw_error_exception(zend_class_entry *exception_ce, char *message, long code, int severity TSRMLS_DC) /* {{{ */ -+ZEND_API zval * zend_throw_error_exception(zend_class_entry *exception_ce, const char *message, long code, int severity TSRMLS_DC) /* {{{ */ - { - zval *ex = zend_throw_exception(exception_ce, message, code TSRMLS_CC); - zend_update_property_long(default_exception_ce, ex, "severity", sizeof("severity")-1, severity TSRMLS_CC); -diff --git a/Zend/zend_exceptions.h b/Zend/zend_exceptions.h -index 8263353..81c8a1f 100644 ---- a/Zend/zend_exceptions.h -+++ b/Zend/zend_exceptions.h -@@ -40,12 +40,12 @@ ZEND_API void zend_register_default_classes(TSRMLS_D); - - /* exception_ce NULL or zend_exception_get_default() or a derived class - * message NULL or the message of the exception */ --ZEND_API zval * zend_throw_exception(zend_class_entry *exception_ce, char *message, long code TSRMLS_DC); --ZEND_API zval * zend_throw_exception_ex(zend_class_entry *exception_ce, long code TSRMLS_DC, char *format, ...); -+ZEND_API zval * zend_throw_exception(zend_class_entry *exception_ce, const char *message, long code TSRMLS_DC); -+ZEND_API zval * zend_throw_exception_ex(zend_class_entry *exception_ce, long code TSRMLS_DC, const char *format, ...); - ZEND_API void zend_throw_exception_object(zval *exception TSRMLS_DC); - ZEND_API void zend_clear_exception(TSRMLS_D); - --ZEND_API zval * zend_throw_error_exception(zend_class_entry *exception_ce, char *message, long code, int severity TSRMLS_DC); -+ZEND_API zval * zend_throw_error_exception(zend_class_entry *exception_ce, const char *message, long code, int severity TSRMLS_DC); - - extern ZEND_API void (*zend_throw_exception_hook)(zval *ex TSRMLS_DC); - -@@ -53,7 +53,7 @@ extern ZEND_API void (*zend_throw_exception_hook)(zval *ex TSRMLS_DC); - ZEND_API void zend_exception_error(zval *exception, int severity TSRMLS_DC); - - /* do not export, in php it's available thru spprintf directly */ --int zend_spprintf(char **message, int max_len, char *format, ...); -+int zend_spprintf(char **message, int max_len, const char *format, ...); - - END_EXTERN_C() - +- if (memcmp(filename, "phar://", sizeof("phar://") - 1) == 0 ++#ifdef COMPILE_DL_PHAR ++ static int pharloaded = -1; ++ ++ /* Only once, retrieve phar_resolve_alias from phar module if loaded */ ++ if (pharloaded < 0) { ++ zend_module_entry *phar; ++ ++ if (zend_hash_find(&module_registry, "phar", 5, (void**)&phar) == SUCCESS) { ++ opcache_phar_resolve_alias = DL_FETCH_SYMBOL(phar->handle, "phar_resolve_alias"); ++ pharloaded = (opcache_phar_resolve_alias ? 1 : 0); ++ } else { ++ pharloaded = 0; ++ } ++ } ++ if (pharloaded && ++#else ++ if ( ++#endif ++ memcmp(filename, "phar://", sizeof("phar://") - 1) == 0 + && filename[sizeof("phar://") - 1] != '\0' && filename[sizeof("phar://") - 1] != '/') { + char *slash; + *alias = (char*)filename + sizeof("phar://") - 1; +@@ -1056,7 +1080,7 @@ char *accel_make_persistent_key_ex(zend_ + if (is_phar_relative_alias_path(file_handle->filename, &alias, &alias_len)) { + char *phar_path; + int phar_path_len; +- if (phar_resolve_alias(alias, alias_len, &phar_path, &phar_path_len TSRMLS_CC) == SUCCESS) { ++ if (opcache_phar_resolve_alias(alias, alias_len, &phar_path, &phar_path_len TSRMLS_CC) == SUCCESS) { + int filename_len = strlen(file_handle->filename); + memcpy(ZCG(key), "phar://", sizeof("phar://") -1); + memcpy(ZCG(key) + sizeof("phar://") - 1, phar_path, phar_path_len); diff --git a/php55.spec b/php55.spec index 4d55f2e..88224ed 100644 --- a/php55.spec +++ b/php55.spec @@ -100,7 +100,7 @@ Summary: PHP scripting language for creating dynamic web sites Name: php Version: 5.5.6 %if 0%{?snapdate:1}%{?rcver:1} -Release: 0.3.%{?snapdate}%{?rcver}%{?dist} +Release: 0.4.%{?snapdate}%{?rcver}%{?dist} %else Release: 2%{?dist} %endif @@ -167,7 +167,7 @@ Patch47: php-5.4.9-phpinfo.patch Patch91: php-5.3.7-oci8conf.patch # WIP -#Patch99: php-wip.patch +Patch99: php-wip.patch BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) @@ -872,7 +872,7 @@ rm -rf ext/json %patch91 -p1 -b .remi-oci8 # wip patches -#patch99 -p1 -b .wip +%patch99 -p1 -b .wip # Prevent %%doc confusion over LICENSE files cp Zend/LICENSE Zend/ZEND_LICENSE @@ -1841,6 +1841,10 @@ fi %changelog +* Mon Nov 4 2013 Remi Collet 5.5.6-0.4.RC1 +- test build opcache with phar build shared + https://github.com/zendtech/ZendOptimizerPlus/issues/147 + * Mon Nov 4 2013 Remi Collet 5.5.6-0.3.RC1 - build phar shared, opcache loaded with RTLD_LAZY -- cgit