Patchwork [libiberty] Fix build regression

login
register
mail settings
Submitter Anthony Green
Date Nov. 20, 2010, 12:04 p.m.
Message ID <4CE7B96B.5060701@moxielogic.com>
Download mbox | patch
Permalink /patch/72350/
State New
Headers show

Comments

Anthony Green - Nov. 20, 2010, 12:04 p.m.
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  <green@moxielogic.com>

	* 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.
Ralf Wildenhues - Nov. 20, 2010, 12:11 p.m.
* Anthony Green wrote on Sat, Nov 20, 2010 at 01:04:59PM CET:
> 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?

That looks fairly safe, and the idea seems good to me too.
OK if it works (you can run 'make configure-libiberty' on a system with
and one without the header to find out quickly).

Thanks,
Ralf

> 2010-11-19  Anthony Green  <green@moxielogic.com>
> 
> 	* 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.
Anthony Green - Nov. 21, 2010, 3:30 a.m.
On 11/20/2010 7:11 AM, Ralf Wildenhues wrote:
> * Anthony Green wrote on Sat, Nov 20, 2010 at 01:04:59PM CET:
>> 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?
>
> That looks fairly safe, and the idea seems good to me too.
> OK if it works (you can run 'make configure-libiberty' on a system with
> and one without the header to find out quickly).

Tested and committed.  Thanks!

AG



>
> Thanks,
> Ralf
>
>> 2010-11-19  Anthony Green<green@moxielogic.com>
>>
>> 	* 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.

Patch

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 <sys/prctl.h>
-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 <sys/prctl.h>
 #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 <process.h> header file. */
 #undef HAVE_PROCESS_H
 
@@ -304,6 +301,9 @@ 
 /* Define to 1 if you have the <sys/param.h> header file. */
 #undef HAVE_SYS_PARAM_H
 
+/* Define to 1 if you have the <sys/prctl.h> header file. */
+#undef HAVE_SYS_PRCTL_H
+
 /* Define to 1 if you have the <sys/pstat.h> 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 <sys/prctl.h>
-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