From 07037eeb43ca1e0ac2802e3a1492cecf869c63c6 Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Thu, 8 Mar 2012 00:17:27 +0000 Subject: [PATCH] Fix .ctors/.dtors header configure test for bootstrapping. --- ChangeLog | 8 ++++++++ aclocal.m4 | 14 ++++++++++++++ configure | 41 ++++++++++++++++++++++------------------- configure.in | 25 +++++++++---------------- 4 files changed, 53 insertions(+), 35 deletions(-) diff --git a/ChangeLog b/ChangeLog index d5b96fb828..80e2040204 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2012-03-08 Joseph Myers + + * aclocal.m4 (LIBC_TRY_LINK_STATIC): New macro. + * configure.in (libc_cv_preinit_array): Use LIBC_TRY_LINK_STATIC. + (libc_cv_ctors_header): Likewise. Use asm ("") instead of calling + puts. + * configure: Regenerated. + 2012-03-07 Joseph Myers * sysdeps/i386/configure.in (cpuid.h): Use AC_CHECK_HEADER with no diff --git a/aclocal.m4 b/aclocal.m4 index dafa97244d..02ff9bc359 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -113,3 +113,17 @@ AC_CACHE_CHECK(whether $LD is GNU ld, libc_cv_prog_ld_gnu, [LIBC_PROG_FOO_GNU($LD, libc_cv_prog_ld_gnu=yes, libc_cv_prog_ld_gnu=no)]) gnu_ld=$libc_cv_prog_ld_gnu ]) + +dnl Run a static link test with -nostdlib -nostartfiles. +dnl LIBC_TRY_LINK_STATIC([code], [action-if-true], [action-if-false]) +AC_DEFUN([LIBC_TRY_LINK_STATIC], +[cat > conftest.c <&AS_MESSAGE_LOG_FD])], + [$2], [$3]) +rm -f conftest*]) diff --git a/configure b/configure index 7c5acce6bc..f415389a34 100755 --- a/configure +++ b/configure @@ -5999,17 +5999,19 @@ else cat > conftest.c <&5 (eval $ac_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; } -then + test $ac_status = 0; }; }; then : if $READELF -S conftest | fgrep INIT_ARRAY > /dev/null; then libc_cv_initfini_array=yes else @@ -6019,6 +6021,7 @@ else libc_cv_initfini_array=no fi rm -f conftest* + fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_initfini_array" >&5 $as_echo "$libc_cv_initfini_array" >&6; } @@ -6032,21 +6035,22 @@ if ${libc_cv_ctors_header+:} false; then : $as_echo_n "(cached) " >&6 else libc_cv_ctors_header=yes - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ + cat > conftest.c <&5 + (eval $ac_try) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : if $READELF -WS conftest$ac_exeext | $AWK ' { gsub(/\[ */, "[") } $2 == ".ctors" || $2 == ".dtors" { @@ -6068,8 +6072,7 @@ else as_fn_error $? "missing __attribute__ ((constructor)) support??" "$LINENO" 5 fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext +rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_ctors_header" >&5 diff --git a/configure.in b/configure.in index 7ebeba4df8..ee9e3d8eb4 100644 --- a/configure.in +++ b/configure.in @@ -1349,24 +1349,17 @@ fi AC_CACHE_CHECK(for .preinit_array/.init_array/.fini_array support, libc_cv_initfini_array, [dnl -cat > conftest.c <&AS_MESSAGE_LOG_FD]) -then - if $READELF -S conftest | fgrep INIT_ARRAY > /dev/null; then +], + [if $READELF -S conftest | fgrep INIT_ARRAY > /dev/null; then libc_cv_initfini_array=yes else libc_cv_initfini_array=no - fi -else - libc_cv_initfini_array=no -fi -rm -f conftest*]) + fi], + [libc_cv_initfini_array=no]) +]) if test $libc_cv_initfini_array != yes; then AC_MSG_ERROR([Need linker with .init_array/.fini_array support.]) fi @@ -1374,9 +1367,9 @@ fi AC_CACHE_CHECK(whether to use .ctors/.dtors header and trailer, libc_cv_ctors_header, [dnl libc_cv_ctors_header=yes - AC_TRY_LINK([], [ -__attribute__ ((constructor)) void ctor (void) { puts("ctor"); } -__attribute__ ((destructor)) void dtor (void) { puts("dtor"); } + LIBC_TRY_LINK_STATIC([ +__attribute__ ((constructor)) void ctor (void) { asm (""); } +__attribute__ ((destructor)) void dtor (void) { asm (""); } ], [dnl AS_IF([$READELF -WS conftest$ac_exeext | $AWK '