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
This commit is contained in:
parent
8a123229ae
commit
08934aed39
@ -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.
|
||||
|
@ -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.
|
||||
|
@ -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.
|
||||
|
61
libgo/configure
vendored
61
libgo/configure
vendored
@ -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,32 +13932,24 @@ 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; }
|
||||
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; }
|
||||
|
||||
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_n "checking whether -fsplit-stack is supported... " >&6; }
|
||||
@ -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
|
||||
|
@ -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],
|
||||
|
@ -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@
|
||||
|
Loading…
Reference in New Issue
Block a user