Commit 08934aed by Ian Lance Taylor

re PR go/78978 (runtime/pprof FAILs on Solaris 2/x86)

	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
parent 8a123229
dfe446c5a54ca0febabb81b542cc4e634c6f5c30 eef0fb3b092dc22d9830cac15a536760da5d033a
The first line of this file holds the git revision number of the last The first line of this file holds the git revision number of the last
merge done from the gofrontend repository. merge done from the gofrontend repository.
...@@ -42,14 +42,12 @@ ACLOCAL_AMFLAGS = -I ./config -I ../config ...@@ -42,14 +42,12 @@ ACLOCAL_AMFLAGS = -I ./config -I ../config
AM_CFLAGS = -fexceptions -fnon-call-exceptions -fplan9-extensions \ AM_CFLAGS = -fexceptions -fnon-call-exceptions -fplan9-extensions \
$(SPLIT_STACK) $(WARN_CFLAGS) \ $(SPLIT_STACK) $(WARN_CFLAGS) \
$(STRINGOPS_FLAG) $(OSCFLAGS) \ $(STRINGOPS_FLAG) $(HWCAP_CFLAGS) $(OSCFLAGS) \
-I $(srcdir)/../libgcc -I $(srcdir)/../libbacktrace \ -I $(srcdir)/../libgcc -I $(srcdir)/../libbacktrace \
-I $(MULTIBUILDTOP)../../gcc/include -I $(MULTIBUILDTOP)../../gcc/include
AM_LDFLAGS = $(HWCAP_LDFLAGS)
if USING_SPLIT_STACK if USING_SPLIT_STACK
AM_LDFLAGS += -XCClinker $(SPLIT_STACK) AM_LDFLAGS = -XCClinker $(SPLIT_STACK)
endif endif
# Multilib support. # Multilib support.
......
...@@ -62,9 +62,8 @@ POST_UNINSTALL = : ...@@ -62,9 +62,8 @@ POST_UNINSTALL = :
build_triplet = @build@ build_triplet = @build@
host_triplet = @host@ host_triplet = @host@
target_triplet = @target@ target_triplet = @target@
@USING_SPLIT_STACK_TRUE@am__append_1 = -XCClinker $(SPLIT_STACK) @GOC_IS_LLGO_TRUE@am__append_1 = libgo-llgo.la libgobegin-llgo.a
@GOC_IS_LLGO_TRUE@am__append_2 = libgo-llgo.la libgobegin-llgo.a @GOC_IS_LLGO_FALSE@am__append_2 = libgo.la libgobegin.a
@GOC_IS_LLGO_FALSE@am__append_3 = libgo.la libgobegin.a
subdir = . subdir = .
DIST_COMMON = README $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ DIST_COMMON = README $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/configure $(am__configure_deps) \ $(top_srcdir)/configure $(am__configure_deps) \
...@@ -321,7 +320,7 @@ GO_SPLIT_STACK = @GO_SPLIT_STACK@ ...@@ -321,7 +320,7 @@ GO_SPLIT_STACK = @GO_SPLIT_STACK@
GO_SYSCALL_OS_ARCH_FILE = @GO_SYSCALL_OS_ARCH_FILE@ GO_SYSCALL_OS_ARCH_FILE = @GO_SYSCALL_OS_ARCH_FILE@
GO_SYSCALL_OS_FILE = @GO_SYSCALL_OS_FILE@ GO_SYSCALL_OS_FILE = @GO_SYSCALL_OS_FILE@
GREP = @GREP@ GREP = @GREP@
HWCAP_LDFLAGS = @HWCAP_LDFLAGS@ HWCAP_CFLAGS = @HWCAP_CFLAGS@
INSTALL = @INSTALL@ INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@ INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
...@@ -459,11 +458,11 @@ AM_CPPFLAGS = -I $(srcdir)/runtime $(LIBFFIINCS) $(PTHREAD_CFLAGS) ...@@ -459,11 +458,11 @@ AM_CPPFLAGS = -I $(srcdir)/runtime $(LIBFFIINCS) $(PTHREAD_CFLAGS)
ACLOCAL_AMFLAGS = -I ./config -I ../config ACLOCAL_AMFLAGS = -I ./config -I ../config
AM_CFLAGS = -fexceptions -fnon-call-exceptions -fplan9-extensions \ AM_CFLAGS = -fexceptions -fnon-call-exceptions -fplan9-extensions \
$(SPLIT_STACK) $(WARN_CFLAGS) \ $(SPLIT_STACK) $(WARN_CFLAGS) \
$(STRINGOPS_FLAG) $(OSCFLAGS) \ $(STRINGOPS_FLAG) $(HWCAP_CFLAGS) $(OSCFLAGS) \
-I $(srcdir)/../libgcc -I $(srcdir)/../libbacktrace \ -I $(srcdir)/../libgcc -I $(srcdir)/../libbacktrace \
-I $(MULTIBUILDTOP)../../gcc/include -I $(MULTIBUILDTOP)../../gcc/include
AM_LDFLAGS = $(HWCAP_LDFLAGS) $(am__append_1) @USING_SPLIT_STACK_TRUE@AM_LDFLAGS = -XCClinker $(SPLIT_STACK)
# Multilib support. # Multilib support.
MAKEOVERRIDES = MAKEOVERRIDES =
...@@ -1120,7 +1119,7 @@ CHECK_DEPS = $(toolexeclibgo_DATA) $(toolexeclibgoarchive_DATA) \ ...@@ -1120,7 +1119,7 @@ CHECK_DEPS = $(toolexeclibgo_DATA) $(toolexeclibgoarchive_DATA) \
$(toolexeclibgorpc_DATA) $(toolexeclibgoruntime_DATA) \ $(toolexeclibgorpc_DATA) $(toolexeclibgoruntime_DATA) \
$(toolexeclibgosync_DATA) $(toolexeclibgotesting_DATA) \ $(toolexeclibgosync_DATA) $(toolexeclibgotesting_DATA) \
$(toolexeclibgotext_DATA) $(toolexeclibgotexttemplate_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 # Pass -ffp-contract=off, or 386-specific options, when building the
# math package. MATH_FLAG is defined in configure.ac. # math package. MATH_FLAG is defined in configure.ac.
......
...@@ -624,9 +624,7 @@ GO_SPLIT_STACK ...@@ -624,9 +624,7 @@ GO_SPLIT_STACK
USING_SPLIT_STACK_FALSE USING_SPLIT_STACK_FALSE
USING_SPLIT_STACK_TRUE USING_SPLIT_STACK_TRUE
SPLIT_STACK SPLIT_STACK
HAVE_HWCAP_FALSE HWCAP_CFLAGS
HAVE_HWCAP_TRUE
HWCAP_LDFLAGS
OSCFLAGS OSCFLAGS
GO_SYSCALL_OS_ARCH_FILE GO_SYSCALL_OS_ARCH_FILE
GO_SYSCALL_OS_FILE GO_SYSCALL_OS_FILE
...@@ -11106,7 +11104,7 @@ else ...@@ -11106,7 +11104,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF cat > conftest.$ac_ext <<_LT_EOF
#line 11109 "configure" #line 11107 "configure"
#include "confdefs.h" #include "confdefs.h"
#if HAVE_DLFCN_H #if HAVE_DLFCN_H
...@@ -11212,7 +11210,7 @@ else ...@@ -11212,7 +11210,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF cat > conftest.$ac_ext <<_LT_EOF
#line 11215 "configure" #line 11213 "configure"
#include "confdefs.h" #include "confdefs.h"
#if HAVE_DLFCN_H #if HAVE_DLFCN_H
...@@ -13912,15 +13910,18 @@ esac ...@@ -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" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for as that supports -Wa,-nH" >&5
LDFLAGS="$LFLAGS -mclear-hwcap" $as_echo_n "checking for as that supports -Wa,-nH... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
{ $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
/* end confdefs.h. */ /* end confdefs.h. */
int int
...@@ -13931,31 +13932,23 @@ return 0; ...@@ -13931,31 +13932,23 @@ return 0;
return 0; return 0;
} }
_ACEOF _ACEOF
if ac_fn_c_try_link "$LINENO"; then : if ac_fn_c_try_compile "$LINENO"; then :
ac_hwcap_ldflags=yes ac_hwcap_flags=yes
else else
ac_hwcap_ldflags=no ac_hwcap_flags=no
fi fi
rm -f core conftest.err conftest.$ac_objext \ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
conftest$ac_exeext conftest.$ac_ext if test "$ac_hwcap_flags" = "yes"; then
if test "$ac_hwcap_ldflags" = "yes"; then HWCAP_CFLAGS="-Wa,-nH $HWCAP_CFLAGS"
HWCAP_LDFLAGS="-mclear-hwcap $HWCAP_LDFLAGS" fi
fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_hwcap_flags" >&5
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_hwcap_ldflags" >&5 $as_echo "$ac_hwcap_flags" >&6; }
$as_echo "$ac_hwcap_ldflags" >&6; }
LDFLAGS="$ac_save_LDFLAGS"
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 { $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 ...@@ -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. as_fn_error "conditional \"LIBGO_IS_BSD\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5 Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi 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 if test -z "${USING_SPLIT_STACK_TRUE}" && test -z "${USING_SPLIT_STACK_FALSE}"; then
as_fn_error "conditional \"USING_SPLIT_STACK\" was never defined. as_fn_error "conditional \"USING_SPLIT_STACK\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5 Usually this means the macro was only invoked conditionally." "$LINENO" 5
......
...@@ -421,8 +421,8 @@ case "$target" in ...@@ -421,8 +421,8 @@ case "$target" in
esac esac
AC_SUBST(OSCFLAGS) AC_SUBST(OSCFLAGS)
dnl Check linker hardware capability support. dnl Check if assembler supports disabling hardware capability support.
GCC_CHECK_LINKER_HWCAP GCC_CHECK_ASSEMBLER_HWCAP
dnl Use -fsplit-stack when compiling C code if available. dnl Use -fsplit-stack when compiling C code if available.
AC_CACHE_CHECK([whether -fsplit-stack is supported], AC_CACHE_CHECK([whether -fsplit-stack is supported],
......
...@@ -124,7 +124,7 @@ GO_SPLIT_STACK = @GO_SPLIT_STACK@ ...@@ -124,7 +124,7 @@ GO_SPLIT_STACK = @GO_SPLIT_STACK@
GO_SYSCALL_OS_ARCH_FILE = @GO_SYSCALL_OS_ARCH_FILE@ GO_SYSCALL_OS_ARCH_FILE = @GO_SYSCALL_OS_ARCH_FILE@
GO_SYSCALL_OS_FILE = @GO_SYSCALL_OS_FILE@ GO_SYSCALL_OS_FILE = @GO_SYSCALL_OS_FILE@
GREP = @GREP@ GREP = @GREP@
HWCAP_LDFLAGS = @HWCAP_LDFLAGS@ HWCAP_CFLAGS = @HWCAP_CFLAGS@
INSTALL = @INSTALL@ INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@ INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_PROGRAM = @INSTALL_PROGRAM@
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment