[PATCH] use -prefer-non-pic on x86-{freebsd,linux}
| From: | Joe Orton | Date: | Thu, 16 Sep 2004 09:39:00 +0000 |
| Subject: | [PATCH] use -prefer-non-pic on x86-{freebsd,linux} | ||
| Groups: | php.internals | ||
| Request: | Send a blank email to internals+get-12854@lists.php.net to get a copy of this message | ||
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 > $[@]'
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
])