From patchwork Tue Oct 26 17:53:23 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ralf Wildenhues X-Patchwork-Id: 69271 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) by ozlabs.org (Postfix) with SMTP id 15B37B70D1 for ; Wed, 27 Oct 2010 04:53:48 +1100 (EST) Received: (qmail 20333 invoked by alias); 26 Oct 2010 17:53:40 -0000 Received: (qmail 20294 invoked by uid 22791); 26 Oct 2010 17:53:35 -0000 X-SWARE-Spam-Status: No, hits=-1.8 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, RCVD_IN_DNSWL_NONE X-Spam-Check-By: sourceware.org Received: from mailout-de.gmx.net (HELO mail.gmx.net) (213.165.64.22) by sourceware.org (qpsmtpd/0.43rc1) with SMTP; Tue, 26 Oct 2010 17:53:27 +0000 Received: (qmail invoked by alias); 26 Oct 2010 17:53:24 -0000 Received: from xdsl-89-0-147-4.netcologne.de (EHLO localhost.localdomain) [89.0.147.4] by mail.gmx.net (mp054) with SMTP; 26 Oct 2010 19:53:24 +0200 Received: from ralf by localhost.localdomain with local (Exim 4.69) (envelope-from ) id 1PAni7-0003SH-RV; Tue, 26 Oct 2010 19:53:23 +0200 Date: Tue, 26 Oct 2010 19:53:23 +0200 From: Ralf Wildenhues To: Jan Hubicka Cc: gcc-patches@gcc.gnu.org, autoconf@gnu.org Subject: Re: Use resolution file, autoconf help needed Message-ID: <20101026175323.GA13279@gmx.de> Mail-Followup-To: Jan Hubicka , gcc-patches@gcc.gnu.org, autoconf@gnu.org References: <20101026152550.GB11809@kam.mff.cuni.cz> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20101026152550.GB11809@kam.mff.cuni.cz> User-Agent: Mutt/1.5.20 (2010-08-04) X-IsSubscribed: yes Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Delivered-To: mailing list gcc-patches@gcc.gnu.org Hello Jan, * Jan Hubicka wrote on Tue, Oct 26, 2010 at 05:25:51PM CEST: > this patch makes GCC to use LDPR_PREVAILING_DEF_IRONLY. Plugin > specification says that all symbols resolved as > LDPR_PREVAILING_DEF_IRONLY can be removed by the compiler and thus we > can bring them local. The patch unfortunately breaks libiberty > configure since we start to make whole program assumptions by default > when we know that nothing dynamically binds that leads to optimizing: > > char pstat_getstatic (); > char (*f) () = pstat_getstatic; > int > main () > { > return f != pstat_getstatic; > } > > Here we first bring F local, then prove it is read only and the nfold > f != pstat_getstatic to false. This makes autoconf to conclude that > getstatic is available. > > We need to fix the testcase generation by i.e. using volatile var or > by using test that just calls the function. I filled in autoconf bug, > but it probably won't be fixed upstream for this stage 1. > > This is pretty important feature, so I spoke with Richard and we > concluded that probably we should work around in our autoconf by > providing our definition of AC_CHECK_FUNC. I am not sure how to do > that however, would be there some good soul who can help me? I already wrote on the bug-autoconf list that this has been fixed in upstream Autoconf 2.60 already. I looked more closely now. The problem is purely libiberty-specific. It still has an old hunk overriding AC_LANG_FUNC_LINK_TRY(C) in libiberty/aclocal.m4 (from at a time where it was an improvement over what Autoconf had). Just delete that hunk, run autoconf in libiberty, be done with it. Below is the full diff, feel free to squash in with your patch. Sorry for not seeing that sooner. Cheers, Ralf libiberty/ChangeLog: 2010-10-26 Ralf Wildenhues * aclocal.m4 (AC_LANG_FUNC_LINK_TRY(C)): Delete. * configure: Regenerate. diff --git a/libiberty/aclocal.m4 b/libiberty/aclocal.m4 index 5d050cb..f2091c9 100644 --- a/libiberty/aclocal.m4 +++ b/libiberty/aclocal.m4 @@ -172,52 +172,3 @@ AC_DEFINE_UNQUOTED(STACK_DIRECTION, $ac_cv_c_stack_direction, STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown]) ]) - -# AC_LANG_FUNC_LINK_TRY(C)(FUNCTION) -# ---------------------------------- -# Don't include because on OSF/1 3.0 it includes -# which includes which contains a -# prototype for select. Similarly for bzero. -# -# This test used to merely assign f=$1 in main(), but that was -# optimized away by HP unbundled cc A.05.36 for ia64 under +O3, -# presumably on the basis that there's no need to do that store if the -# program is about to exit. Conversely, the AIX linker optimizes an -# unused external declaration that initializes f=$1. So this test -# program has both an external initialization of f, and a use of f in -# main that affects the exit status. -# -m4_define([AC_LANG_FUNC_LINK_TRY(C)], -[AC_LANG_PROGRAM( -[/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $1 (); below. - Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. Under hpux, - including includes and causes problems - checking for functions defined therein. */ -#if defined (__STDC__) && !defined (_HPUX_SOURCE) -# include -#else -# include -#endif -/* Override any gcc2 internal prototype to avoid an error. */ -#ifdef __cplusplus -extern "C" -{ -#endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $1 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$1) || defined (__stub___$1) -choke me -#else -char (*f) () = $1; -#endif -#ifdef __cplusplus -} -#endif -], [return f != $1;])]) - diff --git a/libiberty/configure b/libiberty/configure index 7579000..142c81c 100755 --- a/libiberty/configure +++ b/libiberty/configure @@ -1844,41 +1844,41 @@ else fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since - exists even on freestanding compilers. Under hpux, - including includes and causes problems - checking for functions defined therein. */ -#if defined (__STDC__) && !defined (_HPUX_SOURCE) + exists even on freestanding compilers. */ + +#ifdef __STDC__ # include #else # include #endif -/* Override any gcc2 internal prototype to avoid an error. */ + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" -{ #endif -/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ -#if defined (__stub_$2) || defined (__stub___$2) +#if defined __stub_$2 || defined __stub___$2 choke me -#else -char (*f) () = $2; -#endif -#ifdef __cplusplus -} #endif int main () { -return f != $2; +return $2 (); ; return 0; }