re PR go/78978 (runtime/pprof FAILs on Solaris 2/x86)
authorIan Lance Taylor <ian@gcc.gnu.org>
Fri, 6 Jan 2017 16:04:01 +0000 (16:04 +0000)
committerIan Lance Taylor <ian@gcc.gnu.org>
Fri, 6 Jan 2017 16:04:01 +0000 (16:04 +0000)
PR go/78978
    libgo: build with -Wa,-nH if possible on Solaris

    By default the Solaris assembler records the required hardware
    capability in the object file.  This means that the AES hashing code
    breaks on systems that do not support AES, even though the code uses a
    runtime check to only actually invoke the AES instructions on systems
    that support it.  An earlier fix for the problem only fixed the shared
    library, not the static libgo.a.  Fix the problem for real by using an
    assembler option to not record the hardware capability.

    For GCC PR 78978.

    Patch by Rainer Orth.

    Reviewed-on: https://go-review.googlesource.com/34910

From-SVN: r244165

gcc/go/gofrontend/MERGE
libgo/Makefile.am
libgo/Makefile.in
libgo/configure
libgo/configure.ac
libgo/testsuite/Makefile.in

index 1efd7ee659c51e48942ffe8fa20f2f1e75555493..d42c54072a88c5dbdf00d77fa1088b6bbbb69927 100644 (file)
@@ -1,4 +1,4 @@
-dfe446c5a54ca0febabb81b542cc4e634c6f5c30
+eef0fb3b092dc22d9830cac15a536760da5d033a
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
index 1f5a0212a828dd96c0c1e93e03711d0552718dd6..93eaa9f2046b0f95390434bdf41a2de43625a1a2 100644 (file)
@@ -42,14 +42,12 @@ ACLOCAL_AMFLAGS = -I ./config -I ../config
 
 AM_CFLAGS = -fexceptions -fnon-call-exceptions -fplan9-extensions \
        $(SPLIT_STACK) $(WARN_CFLAGS) \
-       $(STRINGOPS_FLAG) $(OSCFLAGS) \
+       $(STRINGOPS_FLAG) $(HWCAP_CFLAGS) $(OSCFLAGS) \
        -I $(srcdir)/../libgcc -I $(srcdir)/../libbacktrace \
        -I $(MULTIBUILDTOP)../../gcc/include
 
-AM_LDFLAGS = $(HWCAP_LDFLAGS)
-
 if USING_SPLIT_STACK
-AM_LDFLAGS += -XCClinker $(SPLIT_STACK)
+AM_LDFLAGS = -XCClinker $(SPLIT_STACK)
 endif
 
 # Multilib support.
index a161fd7f2fa5c28261abc94cbd03dc4adf6caddf..424e41b6333d38b87da63b0ffaf913d1d639f982 100644 (file)
@@ -62,9 +62,8 @@ POST_UNINSTALL = :
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-@USING_SPLIT_STACK_TRUE@am__append_1 = -XCClinker $(SPLIT_STACK)
-@GOC_IS_LLGO_TRUE@am__append_2 = libgo-llgo.la libgobegin-llgo.a
-@GOC_IS_LLGO_FALSE@am__append_3 = libgo.la libgobegin.a
+@GOC_IS_LLGO_TRUE@am__append_1 = libgo-llgo.la libgobegin-llgo.a
+@GOC_IS_LLGO_FALSE@am__append_2 = libgo.la libgobegin.a
 subdir = .
 DIST_COMMON = README $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
        $(top_srcdir)/configure $(am__configure_deps) \
@@ -321,7 +320,7 @@ GO_SPLIT_STACK = @GO_SPLIT_STACK@
 GO_SYSCALL_OS_ARCH_FILE = @GO_SYSCALL_OS_ARCH_FILE@
 GO_SYSCALL_OS_FILE = @GO_SYSCALL_OS_FILE@
 GREP = @GREP@
-HWCAP_LDFLAGS = @HWCAP_LDFLAGS@
+HWCAP_CFLAGS = @HWCAP_CFLAGS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@
@@ -459,11 +458,11 @@ AM_CPPFLAGS = -I $(srcdir)/runtime $(LIBFFIINCS) $(PTHREAD_CFLAGS)
 ACLOCAL_AMFLAGS = -I ./config -I ../config
 AM_CFLAGS = -fexceptions -fnon-call-exceptions -fplan9-extensions \
        $(SPLIT_STACK) $(WARN_CFLAGS) \
-       $(STRINGOPS_FLAG) $(OSCFLAGS) \
+       $(STRINGOPS_FLAG) $(HWCAP_CFLAGS) $(OSCFLAGS) \
        -I $(srcdir)/../libgcc -I $(srcdir)/../libbacktrace \
        -I $(MULTIBUILDTOP)../../gcc/include
 
-AM_LDFLAGS = $(HWCAP_LDFLAGS) $(am__append_1)
+@USING_SPLIT_STACK_TRUE@AM_LDFLAGS = -XCClinker $(SPLIT_STACK)
 
 # Multilib support.
 MAKEOVERRIDES = 
@@ -1120,7 +1119,7 @@ CHECK_DEPS = $(toolexeclibgo_DATA) $(toolexeclibgoarchive_DATA) \
        $(toolexeclibgorpc_DATA) $(toolexeclibgoruntime_DATA) \
        $(toolexeclibgosync_DATA) $(toolexeclibgotesting_DATA) \
        $(toolexeclibgotext_DATA) $(toolexeclibgotexttemplate_DATA) \
-       $(toolexeclibgounicode_DATA) $(am__append_2) $(am__append_3)
+       $(toolexeclibgounicode_DATA) $(am__append_1) $(am__append_2)
 
 # Pass -ffp-contract=off, or 386-specific options, when building the
 # math package.  MATH_FLAG is defined in configure.ac.
index 2cd390859bb16ad6c7873644a2fa91d03e5a3451..06532d3089156989030244ed66abc6c2d4359637 100755 (executable)
@@ -624,9 +624,7 @@ GO_SPLIT_STACK
 USING_SPLIT_STACK_FALSE
 USING_SPLIT_STACK_TRUE
 SPLIT_STACK
-HAVE_HWCAP_FALSE
-HAVE_HWCAP_TRUE
-HWCAP_LDFLAGS
+HWCAP_CFLAGS
 OSCFLAGS
 GO_SYSCALL_OS_ARCH_FILE
 GO_SYSCALL_OS_FILE
@@ -11106,7 +11104,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11109 "configure"
+#line 11107 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -11212,7 +11210,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 11215 "configure"
+#line 11213 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -13912,15 +13910,18 @@ esac
 
 
 
-  test -z "$HWCAP_LDFLAGS" && HWCAP_LDFLAGS=''
+  test -z "$HWCAP_CFLAGS" && HWCAP_CFLAGS=''
 
+  # Restrict the test to Solaris, other assemblers (e.g. AIX as) have -nH
+  # with a different meaning.
+  case ${target_os} in
+    solaris2*)
+      ac_save_CFLAGS="$CFLAGS"
+      CFLAGS="$CFLAGS -Wa,-nH"
 
-  ac_save_LDFLAGS="$LDFLAGS"
-  LDFLAGS="$LFLAGS -mclear-hwcap"
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -mclear-hwcap" >&5
-$as_echo_n "checking for -mclear-hwcap... " >&6; }
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for as that supports -Wa,-nH" >&5
+$as_echo_n "checking for as that supports -Wa,-nH... " >&6; }
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
 int
@@ -13931,31 +13932,23 @@ return 0;
   return 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_hwcap_ldflags=yes
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hwcap_flags=yes
 else
-  ac_hwcap_ldflags=no
+  ac_hwcap_flags=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-  if test "$ac_hwcap_ldflags" = "yes"; then
-    HWCAP_LDFLAGS="-mclear-hwcap $HWCAP_LDFLAGS"
-  fi
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_hwcap_ldflags" >&5
-$as_echo "$ac_hwcap_ldflags" >&6; }
-
-  LDFLAGS="$ac_save_LDFLAGS"
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      if test "$ac_hwcap_flags" = "yes"; then
+       HWCAP_CFLAGS="-Wa,-nH $HWCAP_CFLAGS"
+      fi
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_hwcap_flags" >&5
+$as_echo "$ac_hwcap_flags" >&6; }
 
+      CFLAGS="$ac_save_CFLAGS"
+      ;;
+  esac
 
 
-   if test $ac_hwcap_ldflags != no; then
-  HAVE_HWCAP_TRUE=
-  HAVE_HWCAP_FALSE='#'
-else
-  HAVE_HWCAP_TRUE='#'
-  HAVE_HWCAP_FALSE=
-fi
-
 
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -fsplit-stack is supported" >&5
@@ -15764,10 +15757,6 @@ if test -z "${LIBGO_IS_BSD_TRUE}" && test -z "${LIBGO_IS_BSD_FALSE}"; then
   as_fn_error "conditional \"LIBGO_IS_BSD\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
-if test -z "${HAVE_HWCAP_TRUE}" && test -z "${HAVE_HWCAP_FALSE}"; then
-  as_fn_error "conditional \"HAVE_HWCAP\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
 if test -z "${USING_SPLIT_STACK_TRUE}" && test -z "${USING_SPLIT_STACK_FALSE}"; then
   as_fn_error "conditional \"USING_SPLIT_STACK\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
index a3267308ed1a7e1d75ceb1c5bef5602c592b7cba..6deafda68f14de5b4e5d5abe9284ac0a1a116b05 100644 (file)
@@ -421,8 +421,8 @@ case "$target" in
 esac
 AC_SUBST(OSCFLAGS)
 
-dnl Check linker hardware capability support.
-GCC_CHECK_LINKER_HWCAP
+dnl Check if assembler supports disabling hardware capability support.
+GCC_CHECK_ASSEMBLER_HWCAP
 
 dnl Use -fsplit-stack when compiling C code if available.
 AC_CACHE_CHECK([whether -fsplit-stack is supported],
index f059021ee48c91b943a777141c9f4439e103e17e..79da1c91ff6901e57d9befef535938e9b198a333 100644 (file)
@@ -124,7 +124,7 @@ GO_SPLIT_STACK = @GO_SPLIT_STACK@
 GO_SYSCALL_OS_ARCH_FILE = @GO_SYSCALL_OS_ARCH_FILE@
 GO_SYSCALL_OS_FILE = @GO_SYSCALL_OS_FILE@
 GREP = @GREP@
-HWCAP_LDFLAGS = @HWCAP_LDFLAGS@
+HWCAP_CFLAGS = @HWCAP_CFLAGS@
 INSTALL = @INSTALL@
 INSTALL_DATA = @INSTALL_DATA@
 INSTALL_PROGRAM = @INSTALL_PROGRAM@