This is Rasmus' patch but only enabled on platforms where it's known to
work.  Applies to HEAD: the apache2handler SAPI builds and loads a
shared extension OK like this on Linux/i686.  It looks like some people
preferred a configure flag for this and some preferred to do it by
default.  Consensus?

Index: configure.in
===================================================================
RCS file: /repository/php-src/configure.in,v
retrieving revision 1.516
diff -u -r1.516 configure.in
--- configure.in        21 Jul 2004 23:02:28 -0000      1.516
+++ configure.in        16 Sep 2004 09:26:39 -0000
@@ -1,4 +1,4 @@
-dnl ## $Id: configure.in,v 1.516 2004/07/21 23:02:28 edink Exp $ -*- sh -*-
+dnl ## $Id: configure.in,v 1.516 2004/07/21 23:02:28 edink Exp $ -*- autoconf -*-
 dnl ## Process this file with autoconf to produce a configure script.
 
 divert(1)
@@ -222,6 +222,19 @@
     CPPFLAGS="$CPPFLAGS -D_XPG_IV";;
 esac
 
+AC_MSG_CHECKING([whether to force non-PIC code in shared modules])
+# Disable PIC where it is known to be safe to do so,
+# to avoid the performance hit from the lost register
+case $host_alias in
+i?86-*-linux*|i?86-*-freebsd*)
+    force_nonpic=yes
+    ;;
+*)
+    force_nonpic=no
+    ;;
+esac
+AC_MSG_RESULT([$force_nonpic])
+
 
 dnl Include Zend and TSRM configurations.
 dnl -------------------------------------------------------------------------
@@ -860,8 +873,12 @@
     fi
 ;;
 shared)
+    if test $force_nonpic = yes; then
+        standard_libtool_flag='-prefer-non-pic'
+    else
+        standard_libtool_flag='-prefer-pic'
+    fi
     enable_static=no
-    standard_libtool_flag=-prefer-pic
     EXTRA_LDFLAGS="$EXTRA_LDFLAGS -avoid-version -module"
 ;;
 esac
Index: acinclude.m4
===================================================================
RCS file: /repository/php-src/acinclude.m4,v
retrieving revision 1.273
diff -u -r1.273 acinclude.m4
--- acinclude.m4        12 Sep 2004 06:35:51 -0000      1.273
+++ acinclude.m4        16 Sep 2004 09:26:39 -0000
@@ -772,11 +772,16 @@
   php_cxx_post=' && echo > [EMAIL PROTECTED]'
   php_lo=o
   
+  if test $force_nonpic = yes; then
+    shared_c_meta='$(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) -prefer-non-pic'
+    shared_cxx_meta='$(COMMON_FLAGS) $(CXXFLAGS_CLEAN) $(EXTRA_CXXFLAGS) 
-prefer-non-pic'
+  else
+    shared_c_meta='$(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) -prefer-pic'
+    shared_cxx_meta='$(COMMON_FLAGS) $(CXXFLAGS_CLEAN) $(EXTRA_CXXFLAGS) -prefer-pic'
+  fi
   shared_c_pre='$(LIBTOOL) --mode=compile $(CC)'
-  shared_c_meta='$(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) -prefer-pic'
   shared_c_post=
   shared_cxx_pre='$(LIBTOOL) --mode=compile $(CXX)'
-  shared_cxx_meta='$(COMMON_FLAGS) $(CXXFLAGS_CLEAN) $(EXTRA_CXXFLAGS) -prefer-pic'
   shared_cxx_post=
   shared_lo=lo
 
@@ -1158,12 +1163,17 @@
   install_modules="install-modules"
   PHP_MODULES="$PHP_MODULES \$(phplibdir)/$1.la"
   PHP_SUBST($2)
+  if test $force_nonpic = yes; then
+     php_shared_picflag="-prefer-non-pic"
+  else
+     php_shared_picflag="-prefer-pic"
+  fi
   cat >>Makefile.objects<<EOF
 \$(phplibdir)/$1.la: $3/$1.la
        \$(LIBTOOL) --mode=install cp $3/$1.la \$(phplibdir)
 
 $3/$1.la: \$($2) \$(translit($1,a-z_-,A-Z__)_SHARED_DEPENDENCIES)
-       \$(LIBTOOL) --mode=link ifelse($4,,[\$(CC)],[\$(CXX)]) \$(COMMON_FLAGS) 
\$(CFLAGS_CLEAN) \$(EXTRA_CFLAGS) \$(LDFLAGS) -o \[$]@ -export-dynamic -avoid-version 
-prefer-pic -module -rpath \$(phplibdir) \$(EXTRA_LDFLAGS) \$($2) 
\$(translit($1,a-z_-,A-Z__)_SHARED_LIBADD)
+       \$(LIBTOOL) --mode=link ifelse($4,,[\$(CC)],[\$(CXX)]) \$(COMMON_FLAGS) 
\$(CFLAGS_CLEAN) \$(EXTRA_CFLAGS) \$(LDFLAGS) -o \[$]@ -export-dynamic -avoid-version 
$php_shared_picflag -module -rpath \$(phplibdir) \$(EXTRA_LDFLAGS) \$($2) 
\$(translit($1,a-z_-,A-Z__)_SHARED_LIBADD)
 
 EOF
 ])

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

Reply via email to