From patchwork Sat Nov 20 12:04:59 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Anthony Green X-Patchwork-Id: 72350 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 574081007D2 for ; Sat, 20 Nov 2010 23:05:31 +1100 (EST) Received: (qmail 31271 invoked by alias); 20 Nov 2010 12:05:28 -0000 Received: (qmail 31258 invoked by uid 22791); 20 Nov 2010 12:05:26 -0000 X-SWARE-Spam-Status: No, hits=-1.9 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_NONE X-Spam-Check-By: sourceware.org Received: from smtpauth17.prod.mesa1.secureserver.net (HELO smtpauth17.prod.mesa1.secureserver.net) (64.202.165.29) by sourceware.org (qpsmtpd/0.43rc1) with SMTP; Sat, 20 Nov 2010 12:05:20 +0000 Received: (qmail 2806 invoked from network); 20 Nov 2010 11:51:56 -0000 Received: from unknown (99.226.51.89) by smtpauth17.prod.mesa1.secureserver.net (64.202.165.29) with ESMTP; 20 Nov 2010 11:51:56 -0000 Message-ID: <4CE7B96B.5060701@moxielogic.com> Date: Sat, 20 Nov 2010 07:04:59 -0500 From: Anthony Green User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.12) Gecko/20101027 Thunderbird/3.1.6 MIME-Version: 1.0 To: gcc-patches@gcc.gnu.org Subject: Re: [Patch, libiberty] Fix build regression References: <20101119150936.aaa2c6acbe2fcbd4897bea2c255aade5.1782f6e79d.wbe@email03.secureserver.net> <20101120062101.GE30736@gmx.de> In-Reply-To: <20101120062101.GE30736@gmx.de> 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 On 11/20/2010 1:21 AM, Ralf Wildenhues wrote: > * Anthony Green wrote on Fri, Nov 19, 2010 at 11:09:36PM CET: >> This patch fixes a recent libiberty build regression discussed in this >> thread: >> http://gcc.gnu.org/ml/gcc-patches/2010-11/msg01998.html >> >> If we know we aren't going to be able to build executables, simply emit >> a warning saying that we can't link (instead of exiting with an error), >> and mention that we're assuming prctl does not exist for this target. >> >> Ok to commit? > > A better fix is to actually allow the answer to the test to be correct > even in the no-link case. For that, cache the test result. It may then > be useful to move the test to a more appropriate place, such as after > the code that sets all the cache variables based on $host in the no-link > case. That way port maintainers can enter the right answers for this > test there, and if not given users can still configure toplevel with > .../configure target_configargs=libiberty_cv_prctl_PR_SET_NAME=yes Thanks Ralf. However last night on #gcc Ian questioned why this is a link test in the first place. Why not just check headers instead? I've attached a revised patch based on header checking. Ok to commit? AG 2010-11-19 Anthony Green * configure.ac: Turn PR_SET_NAME link test into a test for sys/prctl.h. * configure, config.in: Rebuilt. * setproctitle.c: Test for HAVE_SYS_PRCTL_H. (setproctitle) Test for PR_SET_NAME definition. Index: libiberty/configure.ac =================================================================== --- libiberty/configure.ac (revision 166973) +++ libiberty/configure.ac (working copy) @@ -246,7 +246,7 @@ # It's OK to check for header files. Although the compiler may not be # able to link anything, it had better be able to at least compile # something. -AC_CHECK_HEADERS(sys/file.h sys/param.h limits.h stdlib.h malloc.h string.h unistd.h strings.h sys/time.h time.h sys/resource.h sys/stat.h sys/mman.h fcntl.h alloca.h sys/pstat.h sys/sysmp.h sys/sysinfo.h machine/hal_sysinfo.h sys/table.h sys/sysctl.h sys/systemcfg.h stdint.h stdio_ext.h process.h) +AC_CHECK_HEADERS(sys/file.h sys/param.h limits.h stdlib.h malloc.h string.h unistd.h strings.h sys/time.h time.h sys/resource.h sys/stat.h sys/mman.h fcntl.h alloca.h sys/pstat.h sys/sysmp.h sys/sysinfo.h machine/hal_sysinfo.h sys/table.h sys/sysctl.h sys/systemcfg.h stdint.h stdio_ext.h process.h sys/prctl.h) AC_HEADER_SYS_WAIT AC_HEADER_TIME @@ -538,16 +538,6 @@ AC_SUBST(CHECK) AC_SUBST(target_header_dir) -# check for prctl PR_SET_NAME -AC_LINK_IFELSE([AC_LANG_SOURCE([[ -#include -int main() -{ - return (prctl(PR_SET_NAME, "foo") == 0) ? 0 : 1; -} -]])], AC_DEFINE(HAVE_PRCTL_SET_NAME, 1, - [Define if you have prctl PR_SET_NAME])) - case "${host}" in *-*-cygwin* | *-*-mingw*) AC_DEFINE(HAVE_SYS_ERRLIST) Index: libiberty/setproctitle.c =================================================================== --- libiberty/setproctitle.c (revision 166973) +++ libiberty/setproctitle.c (working copy) @@ -20,7 +20,7 @@ #ifdef HAVE_CONFIG_H #include "config.h" #endif -#ifdef HAVE_PRCTL_SET_NAME +#ifdef HAVE_SYS_PRCTL_H #include #endif #include "ansidecl.h" @@ -39,7 +39,7 @@ void setproctitle (const char *name ATTRIBUTE_UNUSED, ...) { -#ifdef HAVE_PRCTL_SET_NAME +#ifdef PR_SET_NAME /* On Linux this sets the top visible "comm", but not necessarily the name visible in ps. */ prctl (PR_SET_NAME, name); Index: libiberty/config.in =================================================================== --- libiberty/config.in (revision 166973) +++ libiberty/config.in (working copy) @@ -169,9 +169,6 @@ /* Define to 1 if you have the `on_exit' function. */ #undef HAVE_ON_EXIT -/* Define if you have prctl PR_SET_NAME */ -#undef HAVE_PRCTL_SET_NAME - /* Define to 1 if you have the header file. */ #undef HAVE_PROCESS_H @@ -304,6 +301,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PARAM_H +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_PRCTL_H + /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PSTAT_H Index: libiberty/configure =================================================================== --- libiberty/configure (revision 166973) +++ libiberty/configure (working copy) @@ -4895,7 +4895,7 @@ # It's OK to check for header files. Although the compiler may not be # able to link anything, it had better be able to at least compile # something. -for ac_header in sys/file.h sys/param.h limits.h stdlib.h malloc.h string.h unistd.h strings.h sys/time.h time.h sys/resource.h sys/stat.h sys/mman.h fcntl.h alloca.h sys/pstat.h sys/sysmp.h sys/sysinfo.h machine/hal_sysinfo.h sys/table.h sys/sysctl.h sys/systemcfg.h stdint.h stdio_ext.h process.h +for ac_header in sys/file.h sys/param.h limits.h stdlib.h malloc.h string.h unistd.h strings.h sys/time.h time.h sys/resource.h sys/stat.h sys/mman.h fcntl.h alloca.h sys/pstat.h sys/sysmp.h sys/sysinfo.h machine/hal_sysinfo.h sys/table.h sys/sysctl.h sys/systemcfg.h stdint.h stdio_ext.h process.h sys/prctl.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_preproc "$LINENO" "$ac_header" "$as_ac_Header" @@ -5719,28 +5719,6 @@ -# check for prctl PR_SET_NAME -if test x$gcc_no_link = xyes; then - as_fn_error "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5 -fi -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -#include -int main() -{ - return (prctl(PR_SET_NAME, "foo") == 0) ? 0 : 1; -} - -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - -$as_echo "#define HAVE_PRCTL_SET_NAME 1" >>confdefs.h - -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext - case "${host}" in *-*-cygwin* | *-*-mingw*) $as_echo "#define HAVE_SYS_ERRLIST 1" >>confdefs.h