Improved PHP binary size and startup speed with GCC4 visibility control (Nuno)

This commit is contained in:
Dmitry Stogov 2008-01-30 09:41:12 +00:00
parent 71efa394a6
commit 240fa244c3
25 changed files with 175 additions and 86 deletions

2
NEWS
View file

@ -57,6 +57,8 @@ PHP NEWS
- Removed the experimental RPL (master/slave) functions from mysqli. (Andrey)
- Improved PHP binary size and startup speed with GCC4 visibility control.
(Nuno)
- Improved engine stack implementation for better performance and stability.
(Dmitry)
- Improved php.ini handling: (Jani)

View file

@ -26,6 +26,8 @@
# else
# define TSRM_API __declspec(dllimport)
# endif
#elif defined(__GNUC__) && __GNUC__ >= 4
# define TSRM_API __attribute__ ((visibility("default")))
#else
# define TSRM_API
#endif

View file

@ -122,8 +122,10 @@ typedef unsigned short mode_t;
# else
# define CWD_API __declspec(dllimport)
# endif
#elif defined(__GNUC__) && __GNUC__ >= 4
# define CWD_API __attribute__ ((visibility("default")))
#else
#define CWD_API
# define CWD_API
#endif
#ifdef TSRM_WIN32

View file

@ -19,8 +19,14 @@
/* $Id$ */
#define ZEND_API
#define ZEND_DLEXPORT
#if defined(__GNUC__) && __GNUC__ >= 4
# define ZEND_API __attribute__ ((visibility("default")))
# define ZEND_DLEXPORT __attribute__ ((visibility("default")))
#else
# define ZEND_API
# define ZEND_DLEXPORT
#endif
#define ZEND_DLIMPORT
@TOP@

View file

@ -165,6 +165,14 @@ alpha*)
;;
esac
dnl activate some gcc specific optimizations for gcc >= 4
if test "$GCC" = "yes"; then
GCC_MAJOR_VERSION=`$CC --version | $SED -n '1s/[[^0-9]]*\([[0-9]]\+\)\.[[0-9]]\+\..*/\1/;1p'`
if test $GCC_MAJOR_VERSION -ge 4; then
CFLAGS="$CFLAGS -fvisibility=hidden"
fi
fi
case $host_alias in
*solaris*)
CPPFLAGS="$CPPFLAGS -D_POSIX_PTHREAD_SEMANTICS"

View file

@ -41,6 +41,8 @@ extern zend_module_entry bz2_module_entry;
# else
# define PHP_BZ2_API /* nothing special */
# endif
#elif defined(__GNUC__) && __GNUC__ >= 4
# define PHP_BZ2_API __attribute__ ((visibility("default")))
#else
# define PHP_BZ2_API
#endif

View file

@ -35,14 +35,19 @@ typedef struct _dom_object {
} dom_object;
#ifdef PHP_WIN32
#ifdef PHPAPI
#undef PHPAPI
#endif
#ifdef DOM_EXPORTS
#define PHPAPI __declspec(dllexport)
#else
#define PHPAPI __declspec(dllimport)
#endif /* DOM_EXPORTS */
# ifdef PHPAPI
# undef PHPAPI
# endif
# ifdef DOM_EXPORTS
# define PHPAPI __declspec(dllexport)
# else
# define PHPAPI __declspec(dllimport)
# endif /* DOM_EXPORTS */
#elif defined(__GNUC__) && __GNUC__ >= 4
# ifdef PHPAPI
# undef PHPAPI
# endif
# define PHPAPI __attribute__ ((visibility("default")))
#endif /* PHP_WIN32 */
#define PHP_DOM_EXPORT PHPAPI

View file

@ -51,9 +51,11 @@
#define PHP_GDIMG_TYPE_GD2PART 10
#ifdef PHP_WIN32
#define PHP_GD_API __declspec(dllexport)
# define PHP_GD_API __declspec(dllexport)
#elif defined(__GNUC__) && __GNUC__ >= 4
# define PHP_GD_API __attribute__ ((visibility("default")))
#else
#define PHP_GD_API
# define PHP_GD_API
#endif
PHPAPI extern const char php_sig_gif[3];

View file

@ -100,9 +100,11 @@ extern zend_module_entry hash_module_entry;
#define phpext_hash_ptr &hash_module_entry
#ifdef PHP_WIN32
#define PHP_HASH_API __declspec(dllexport)
# define PHP_HASH_API __declspec(dllexport)
#elif defined(__GNUC__) && __GNUC__ >= 4
# define PHP_HASH_API __attribute__ ((visibility("default")))
#else
#define PHP_HASH_API
# define PHP_HASH_API
#endif
#ifdef ZTS

View file

@ -23,13 +23,15 @@
#define PHP_ICONV_H
#ifdef PHP_WIN32
#ifdef PHP_ICONV_EXPORTS
#define PHP_ICONV_API __declspec(dllexport)
# ifdef PHP_ICONV_EXPORTS
# define PHP_ICONV_API __declspec(dllexport)
# else
# define PHP_ICONV_API __declspec(dllimport)
# endif
#elif defined(__GNUC__) && __GNUC__ >= 4
# define PHP_ICONV_API __attribute__ ((visibility("default")))
#else
#define PHP_ICONV_API __declspec(dllimport)
#endif
#else
#define PHP_ICONV_API
# define PHP_ICONV_API
#endif
#ifdef PHP_ATOM_INC

View file

@ -27,9 +27,11 @@ extern zend_module_entry libxml_module_entry;
#define libxml_module_ptr &libxml_module_entry
#ifdef PHP_WIN32
#define PHP_LIBXML_API __declspec(dllexport)
# define PHP_LIBXML_API __declspec(dllexport)
#elif defined(__GNUC__) && __GNUC__ >= 4
# define PHP_LIBXML_API __attribute__ ((visibility("default")))
#else
#define PHP_LIBXML_API
# define PHP_LIBXML_API
#endif
#include "ext/standard/php_smart_str.h"

View file

@ -60,6 +60,9 @@
# else
# define MBSTRING_API /* nothing special */
# endif
#elif defined(__GNUC__) && __GNUC__ >= 4
# undef MBSTRING_API
# define MBSTRING_API __attribute__ ((visibility("default")))
#else
# undef MBSTRING_API
# define MBSTRING_API /* nothing special */

View file

@ -145,7 +145,11 @@ typedef struct {
#define L64(x) x##i64
typedef __int64 my_longlong;
#else
#define PHP_MYSQLI_API
# if defined(__GNUC__) && __GNUC__ >= 4
# define PHP_MYSQLI_API __attribute__ ((visibility("default")))
# else
# define PHP_MYSQLI_API
# endif
#define MYSQLI_LLU_SPEC "%llu"
#define MYSQLI_LL_SPEC "%lld"
#define L64(x) x##LL

View file

@ -38,6 +38,8 @@ extern zend_module_entry pdo_module_entry;
# else
# define PDO_API /* nothing special */
# endif
#elif defined(__GNUC__) && __GNUC__ >= 4
# define PDO_API __attribute__ ((visibility("default")))
#else
# define PDO_API /* nothing special */
#endif

View file

@ -42,7 +42,11 @@ extern zend_module_entry pgsql_module_entry;
#endif
#else
#include <libpq/libpq-fs.h>
#define PHP_PGSQL_API /* nothing special */
# if defined(__GNUC__) && __GNUC__ >= 4
# define PHP_PGSQL_API __attribute__ ((visibility("default")))
# else
# define PHP_PGSQL_API
# endif
#endif
#ifdef HAVE_PG_CONFIG_H

View file

@ -7,9 +7,11 @@ extern zend_module_entry extname_module_entry;
#define phpext_extname_ptr &extname_module_entry
#ifdef PHP_WIN32
#define PHP_EXTNAME_API __declspec(dllexport)
# define PHP_EXTNAME_API __declspec(dllexport)
#elif defined(__GNUC__) && __GNUC__ >= 4
# define PHP_EXTNAME_API __attribute__ ((visibility("default")))
#else
#define PHP_EXTNAME_API
# define PHP_EXTNAME_API
#endif
#ifdef ZTS

View file

@ -39,6 +39,8 @@ extern zend_module_entry spl_module_entry;
# else
# define SPL_API /* nothing */
# endif
#elif defined(__GNUC__) && __GNUC__ >= 4
# define SPL_API __attribute__ ((visibility("default")))
#else
# define SPL_API
#endif

View file

@ -41,14 +41,16 @@
/* #defines that rename all zip_ functions and structs */
#include "zip_alias.h"
#ifdef PHP_WIN32
#include "zip_win32.h"
# include "zip_win32.h"
# ifdef PHP_ZIP_EXPORTS
# define PHPZIPAPI __declspec(dllexport)
# else
# define PHPZIPAPI
# endif
#elif defined(__GNUC__) && __GNUC__ >= 4
# define PHPZIPAPI __attribute__ ((visibility("default")))
#else
#define PHPZIPAPI
# define PHPZIPAPI
#endif
BEGIN_EXTERN_C()
#include <sys/types.h>

View file

@ -39,8 +39,10 @@
# else
# define SAPI_API __declspec(dllimport)
# endif
#elif defined(__GNUC__) && __GNUC__ >= 4
# define SAPI_API __attribute__ ((visibility("default")))
#else
#define SAPI_API
# define SAPI_API
#endif
#undef shutdown

View file

@ -45,17 +45,22 @@
#define PHP_DEBUG ZEND_DEBUG
#ifdef PHP_WIN32
#include "tsrm_win32.h"
#include "win95nt.h"
# include "tsrm_win32.h"
# include "win95nt.h"
# ifdef PHP_EXPORTS
# define PHPAPI __declspec(dllexport)
# else
# define PHPAPI __declspec(dllimport)
# endif
#define PHP_DIR_SEPARATOR '\\'
#define PHP_EOL "\r\n"
# define PHP_DIR_SEPARATOR '\\'
# define PHP_EOL "\r\n"
#else
#define PHPAPI
# if defined(__GNUC__) && __GNUC__ >= 4
# define PHPAPI __attribute__ ((visibility("default")))
# else
# define PHPAPI
# endif
#define THREAD_LS
#define PHP_DIR_SEPARATOR '/'
#if defined(__MacOSX__)

View file

@ -44,6 +44,12 @@ extern php_apache_info_struct php_apache_info;
#define AP(v) (php_apache_info.v)
#endif
/* fix for gcc4 visibility patch */
#ifndef PHP_WIN32
# undef MODULE_VAR_EXPORT
# define MODULE_VAR_EXPORT PHPAPI
#endif
#endif /* MOD_PHP5_H */
/*

View file

@ -74,4 +74,10 @@ static long php_apache_fteller_stream(void * TSRMLS_DC);
#define APR_ARRAY_FOREACH_CLOSE() }}
/* fix for gcc4 visibility patch */
#ifndef PHP_WIN32
# undef AP_MODULE_DECLARE_DATA
# define AP_MODULE_DECLARE_DATA PHPAPI
#endif
#endif /* PHP_APACHE_H */

View file

@ -82,5 +82,10 @@ extern php_apache2_info_struct php_apache2_info;
#define AP2(v) (php_apache2_info.v)
#endif
/* fix for gcc4 visibility patch */
#ifndef PHP_WIN32
# undef AP_MODULE_DECLARE_DATA
# define AP_MODULE_DECLARE_DATA PHPAPI
#endif
#endif /* PHP_APACHE_H */

View file

@ -71,6 +71,13 @@ extern php_apache_info_struct php_apache_info;
#define AP_LOGGING 10
#define AP_CLEANUP 11
/* fix for gcc4 visibility patch */
#ifndef PHP_WIN32
# undef MODULE_VAR_EXPORT
# define MODULE_VAR_EXPORT PHPAPI
#endif
#endif /* MOD_PHP5_H */
/*

View file

@ -9,8 +9,12 @@
# define MODULE_API __declspec(dllimport)
# endif
#else
# define far
# if defined(__GNUC__) && __GNUC__ >= 4
# define MODULE_API __attribute__ ((visibility("default")))
# else
# define MODULE_API
# endif
# define far
typedef int BOOL;
typedef void far *LPVOID;