Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:12867 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 97307 invoked by uid 1010); 16 Sep 2004 14:19:29 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 96412 invoked from network); 16 Sep 2004 14:19:12 -0000 Received: from unknown (HELO mx1.redhat.com) (66.187.233.31) by pb1.pair.com with SMTP; 16 Sep 2004 14:19:12 -0000 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254]) by mx1.redhat.com (8.12.11/8.12.10) with ESMTP id i8GEJCB2013487 for ; Thu, 16 Sep 2004 10:19:12 -0400 Received: from radish.cambridge.redhat.com (radish.cambridge.redhat.com [172.16.18.90]) by int-mx1.corp.redhat.com (8.11.6/8.11.6) with ESMTP id i8GEJBr17757 for ; Thu, 16 Sep 2004 10:19:11 -0400 Received: from radish.cambridge.redhat.com (localhost.localdomain [127.0.0.1]) by radish.cambridge.redhat.com (8.12.10/8.12.7) with ESMTP id i8GEJANE014400 for ; Thu, 16 Sep 2004 15:19:10 +0100 Received: (from jorton@localhost) by radish.cambridge.redhat.com (8.12.10/8.12.10/Submit) id i8GEJA0B014399 for internals@lists.php.net; Thu, 16 Sep 2004 15:19:10 +0100 Date: Thu, 16 Sep 2004 15:19:10 +0100 To: internals@lists.php.net Message-ID: <20040916141910.GA14389@redhat.com> Mail-Followup-To: internals@lists.php.net References: <20040916093900.GA6842@redhat.com> <20040916101531.GA6809@redhat.com> <20040916104604.GB6809@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.4.1i Subject: Re: [PHP-DEV] [PATCH] use -prefer-non-pic on x86-{freebsd,linux} From: jorton@redhat.com (Joe Orton) 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<