This is not an OSX specific issue, it's a symbol leakage issue that can break potentially any library that uses that feature of gcc. I just happened to notice it on OSX.

Better to rename our symbols to avoid conflict.

--Wez.

On Nov 7, 2007, at 2:48 AM, Dmitry Stogov wrote:

May be it is better to just define always_inline as inline on OSX.
Something like:

#if defined(__GNUC__) && !defined(OSX)
...

Thanks. Dmitry.

-----Original Message-----
From: Wez Furlong [mailto:[EMAIL PROTECTED]
Sent: Wednesday, November 07, 2007 7:43 AM
To: internals@lists.php.net
Subject: [PHP-DEV] zend.h breaks system headers on OSX in PHP 5.3


The system headers on OSX use __attribute__((always_inline)) and
zend.h defines always_inline to something else, breaking the build
when the compiler tries to resolve that attribute name.

A solution is to prefix the defines used in the engine with zend or
ZEND or other similar namespacing token, which I thought was our
standard practice, considering everything else in there has a prefix.

If there have been other similar changes elsewhere, they should also
be fixed

--Wez.

Index: zend.h
===================================================================
RCS file: /repository/ZendEngine2/zend.h,v
retrieving revision 1.293.2.11.2.9.2.9
diff -u -p -r1.293.2.11.2.9.2.9 zend.h
--- zend.h      2 Nov 2007 19:40:37 -0000       1.293.2.11.2.9.2.9
+++ zend.h      7 Nov 2007 04:36:01 -0000
@@ -324,42 +324,42 @@ struct _zval_struct {
 #define Z_SET_ISREF_TO(z, isref)       Z_SET_ISREF_TO_P(&(z), isref)

 #if defined(__GNUC__)
-#define always_inline inline __attribute__((always_inline))
+#define zend_always_inline inline __attribute__((always_inline))
 #elif defined(_MSC_VER)
-#define always_inline __forceinline
+#define zend_always_inline __forceinline
 #else
-#define always_inline inline
+#define zend_always_inline inline
 #endif

-static always_inline zend_uint zval_refcount_p(zval* pz) {
+static zend_always_inline zend_uint zval_refcount_p(zval* pz) {
        return pz->refcount__gc;
 }

-static always_inline zend_uint zval_set_refcount_p(zval* pz,
zend_uint rc) {
+static zend_always_inline zend_uint zval_set_refcount_p(zval* pz,
zend_uint rc) {
        return pz->refcount__gc = rc;
 }

-static always_inline zend_uint zval_addref_p(zval* pz) {
+static zend_always_inline zend_uint zval_addref_p(zval* pz) {
        return ++pz->refcount__gc;
 }

-static always_inline zend_uint zval_delref_p(zval* pz) {
+static zend_always_inline zend_uint zval_delref_p(zval* pz) {
        return --pz->refcount__gc;
 }

-static always_inline zend_bool zval_isref_p(zval* pz) {
+static zend_always_inline zend_bool zval_isref_p(zval* pz) {
        return pz->is_ref__gc;
 }

-static always_inline zend_bool zval_set_isref_p(zval* pz) {
+static zend_always_inline zend_bool zval_set_isref_p(zval* pz) {
        return pz->is_ref__gc = 1;
 }

-static always_inline zend_bool zval_unset_isref_p(zval* pz) {
+static zend_always_inline zend_bool zval_unset_isref_p(zval* pz) {
        return pz->is_ref__gc = 0;
 }

-static always_inline zend_bool zval_set_isref_to_p(zval* pz,
zend_bool isref) {
+static zend_always_inline zend_bool zval_set_isref_to_p(zval* pz,
zend_bool isref) {
        return pz->is_ref__gc = isref;
 }

--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php



--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to