diff --git a/libgo/Makefile.am b/libgo/Makefile.am
index 3eccadb..d139d78 100644
--- a/libgo/Makefile.am
+++ b/libgo/Makefile.am
@@ -837,7 +837,8 @@
$(golangorg_x_sys_cpu_gccgo_x86_lo)
libgo_ldflags = \
- -version-info $(libtool_VERSION) $(PTHREAD_CFLAGS) $(AM_LDFLAGS)
+ -version-info $(libtool_VERSION) $(PTHREAD_CFLAGS) $(AM_LDFLAGS) \
+ $(OSLDFLAGS)
libgo_libadd = \
$(libgo_go_objs) ../libbacktrace/libbacktrace.la \
diff --git a/libgo/Makefile.in b/libgo/Makefile.in
index 0a2b7ee..6e194d0 100644
--- a/libgo/Makefile.in
+++ b/libgo/Makefile.in
@@ -453,6 +453,7 @@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OSCFLAGS = @OSCFLAGS@
+OSLDFLAGS = @OSLDFLAGS@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
@@ -972,7 +973,8 @@
$(golangorg_x_sys_cpu_gccgo_x86_lo)
libgo_ldflags = \
- -version-info $(libtool_VERSION) $(PTHREAD_CFLAGS) $(AM_LDFLAGS)
+ -version-info $(libtool_VERSION) $(PTHREAD_CFLAGS) $(AM_LDFLAGS) \
+ $(OSLDFLAGS)
libgo_libadd = \
$(libgo_go_objs) ../libbacktrace/libbacktrace.la \
diff --git a/libgo/configure b/libgo/configure
index b1a2228..a46e48b 100755
--- a/libgo/configure
+++ b/libgo/configure
@@ -658,6 +658,7 @@
USING_SPLIT_STACK_FALSE
USING_SPLIT_STACK_TRUE
SPLIT_STACK
+OSLDFLAGS
HWCAP_CFLAGS
OSCFLAGS
GO_SYSCALL_OS_ARCH_FILE
@@ -11547,7 +11548,7 @@
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11550 "configure"
+#line 11551 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11653,7 +11654,7 @@
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11656 "configure"
+#line 11657 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -14457,6 +14458,15 @@
+case "$target" in
+ *86*-*-solaris2.*)
+ # Link with -shared-libgcc on Solaris 11+/x86 as a workaround for
+ # PR go/64900.
+ OSLDFLAGS="-Wc,-shared-libgcc"
+ ;;
+esac
+
+
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -fsplit-stack is supported" >&5
$as_echo_n "checking whether -fsplit-stack is supported... " >&6; }
if ${libgo_cv_c_split_stack_supported+:} false; then :
diff --git a/libgo/configure.ac b/libgo/configure.ac
index 0b05551..aba4f8a 100644
--- a/libgo/configure.ac
+++ b/libgo/configure.ac
@@ -442,6 +442,15 @@
dnl Check if assembler supports disabling hardware capability support.
GCC_CHECK_ASSEMBLER_HWCAP
+case "$target" in
+ *86*-*-solaris2.*)
+ # Link with -shared-libgcc on Solaris 11+/x86 as a workaround for
+ # PR go/64900.
+ OSLDFLAGS="-Wc,-shared-libgcc"
+ ;;
+esac
+AC_SUBST(OSLDFLAGS)
+
dnl Use -fsplit-stack when compiling C code if available.
AC_CACHE_CHECK([whether -fsplit-stack is supported],
[libgo_cv_c_split_stack_supported],
diff --git a/libgo/testsuite/Makefile.in b/libgo/testsuite/Makefile.in
index 7c2e2e6..0b5e726 100644
--- a/libgo/testsuite/Makefile.in
+++ b/libgo/testsuite/Makefile.in
@@ -202,6 +202,7 @@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OSCFLAGS = @OSCFLAGS@
+OSLDFLAGS = @OSLDFLAGS@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@