#50140 [Fbk]: [PATCH] With default compilation option, php symbols are unresolved for nsapi
| From: | basantk@php.net | Date: | Tue, 17 Nov 2009 19:58:47 +0000 |
| Subject: | #50140 [Fbk]: [PATCH] With default compilation option, php symbols are unresolved for nsapi | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-144722@lists.php.net to get a copy of this message | ||
ID: 50140
Updated by: basantk@php.net
Reported By: basant dot kukreja at gmail dot com
Status: Feedback
Bug Type: iPlanet related
Operating System: Linux
PHP Version: 5.3SVN-2009-11-10 (SVN)
New Comment:
Here is the link to the patch (submitted in previous comments) :
http://bitbucket.org/basantk/phpbugs/raw/d3b5e6d6e344/php_gcc_nsapi_fix.txt
Previous Comments:
------------------------------------------------------------------------
[2009-11-11 17:39:51] basantk@php.net
Thanks Jani for your suggestion. Based on your suggestion, I have
revised the patch. Here is the new patch :
---------------------------------------------
Index: sapi/nsapi/nsapi.c
===================================================================
--- sapi/nsapi/nsapi.c (revision 290447)
+++ sapi/nsapi/nsapi.c (working copy)
@@ -67,6 +67,11 @@
* NSAPI includes
*/
#include "nsapi.h"
+/* fix for gcc4 visibility issue */
+#ifndef PHP_WIN32
+# undef NSAPI_PUBLIC
+# define NSAPI_PUBLIC PHPAPI
+#endif
#define NSLS_D struct nsapi_request_context *request_context
#define NSLS_DC , NSLS_D
-------------------------------------------
With this patch, when I preprocess the file, on linux I get following
for php5_init :
int __attribute__ ((visibility("default"))) php5_init(pblock *pb,
Session *sn, Request *rq)
-------------------------------------------
The above correctly export the symbols.
------------------------------------------------------------------------
[2009-11-11 12:35:11] jani@php.net
Check how this is fixed for Apache: sapi/apache2handler/php_apache.h
and search for "visibility". I think you should do that instead of using
any #pragma's.
------------------------------------------------------------------------
[2009-11-10 19:20:57] basantk@php.net
From nsapi.h :
#ifdef XP_UNIX
#define NSAPI_PUBLIC
...
It seems NSAPI_PUBLIC is expanded to empty string.
--------------------------------------------
When I expanded after preprocessing nsapi.c, here is what I got :
# 915 ".../php-src-5.3/sapi/nsapi/nsapi.c"
int php5_init(pblock *pb, Session *sn, Request *rq)
--------------------------------------
So we need to tell gcc to export the NSAPI_PUBLIC symbols.
------------------------------------------------------------------------
[2009-11-10 19:14:51] basantk@php.net
The previous patch didn't resolve the problem, here is what helped
resolved the issue. NSAPI_PUBLIC should have made the symbols public
but it seems it doesn't.
Index: sapi/nsapi/nsapi.c
===================================================================
--- sapi/nsapi/nsapi.c (revision 290447)
+++ sapi/nsapi/nsapi.c (working copy)
@@ -67,6 +67,7 @@
* NSAPI includes
*/
#include "nsapi.h"
+#pragma GCC visibility push(default)
#define NSLS_D struct nsapi_request_context *request_context
#define NSLS_DC , NSLS_D
------------------------------------------------------------------------
[2009-11-10 18:59:16] basantk@php.net
Here is the snipp from gcc man page :
<man gcc>
"
-fvisibility=default|internal|hidden|protected
...
For those adding visibility support to existing code, you may
find #pragma GCC visibility of
use. This works by you enclosing the declarations you wish
to set visibility for with (for
example) #pragma GCC visibility push(hidden) and #pragma GCC
visibility pop.
...
"
Pusing default visibility before including nsapi.h (and popping after)
would
help in compiling and loading php correctly with nsapi servers.
Here is the patch against recent php 5.3 svn
--------------------------------------------
Index: sapi/nsapi/nsapi.c
===================================================================
--- sapi/nsapi/nsapi.c (revision 290447)
+++ sapi/nsapi/nsapi.c (working copy)
@@ -66,7 +66,9 @@
/*
* NSAPI includes
*/
+#pragma GCC visibility push(default)
#include "nsapi.h"
+#pragma GCC visibility pop
#define NSLS_D struct nsapi_request_context *request_context
#define NSLS_DC , NSLS_D
--------------------------------------------
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/50140
--
Edit this bug report at http://bugs.php.net/?id=50140&edit=1