Re: [PATCH] use -prefer-non-pic on x86-{freebsd,linux}
| From: | Rasmus Lerdorf | Date: | Thu, 16 Sep 2004 14:54:02 +0000 |
| Subject: | Re: [PATCH] use -prefer-non-pic on x86-{freebsd,linux} | ||
| References: | 1 2 3 4 5 6 7 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-12868@lists.php.net to get a copy of this message | ||
Makes sense to me.
On Thu, 16 Sep 2004, Joe Orton wrote:
> On Thu, Sep 16, 2004 at 06:31:56AM -0700, Rasmus Lerdorf wrote:
> > On Thu, 16 Sep 2004, Joe Orton wrote:
> >
> > > On Thu, Sep 16, 2004 at 12:39:39PM +0200, Sascha Schumann wrote:
> > > > The point is that the current behaviour needs to be retained
> > > > for installations which would be negatively affected by your
> > > > patch. Building non-PIC as default is ok, if a switch is
> > > > provided to build PIC.
> > >
> > > Ah, gotcha. Any preference as to flag name? --disable-non-pic would be
> > > an obvious choice, confusing double negative though.
> >
> > There is already a --without-pic/--with-pic flag that just doesn't work.
> > I'd key it off of that.
>
> It doesn't work because PHP prevents AC_PROG_LIBTOOL from interpreting
> it by doing "unset with_pic".
>
> So one solution would be to remove that hack and in the case where
> --with-pic or --without-pic is passed to configure, never explicitly
> specify a pic "preference" to the libtool script. And make the default
> as if "--without-pic" was passed in the x86* whitelist.
>
> 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 14:07:03 -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,21 @@
> CPPFLAGS="$CPPFLAGS -D_XPG_IV";;
> esac
>
> +# Disable PIC mode by default where it is known to be safe to do so,
> +# to avoid the performance hit from the lost register
> +AC_MSG_CHECKING([whether to force non-PIC code in shared modules])
> +case $host_alias in
> +i?86-*-linux*|i?86-*-freebsd*)
> + if test "${with_pic+set}" != "set"; then
> + with_pic=no
> + AC_MSG_RESULT(yes)
> + else
> + AC_MSG_RESULT(no)
> + fi
> + ;;
> +*) AC_MSG_RESULT(no) ;;
> +esac
> +
>
> dnl Include Zend and TSRM configurations.
> dnl -------------------------------------------------------------------------
> @@ -850,7 +865,6 @@
>
> enable_shared=yes
> enable_static=yes
> -unset with_pic
>
> case $php_build_target in
> program|static)
> @@ -861,7 +875,9 @@
> ;;
> shared)
> enable_static=no
> - standard_libtool_flag=-prefer-pic
> + if test "${with_pic+set}" != set; then
> + standard_libtool_flag='-prefer-pic'
> + fi
> 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 14:07:03 -0000
> @@ -772,11 +772,16 @@
> php_cxx_post=' && echo > $[@]'
> php_lo=o
>
> + if test "${with_pic+set}" = set; then
> + shared_c_meta='$(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS)'
> + shared_cxx_meta='$(COMMON_FLAGS) $(CXXFLAGS_CLEAN) $(EXTRA_CXXFLAGS)'
> + 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,15 @@
> install_modules="install-modules"
> PHP_MODULES="$PHP_MODULES \$(phplibdir)/$1.la"
> PHP_SUBST($2)
> + if test ${with_pic+set} != set; then
> + 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
>