libgo: only build syscall test with -static if it works
Test whether -static works, and use it if possible.
This time for sure.
For https://gcc.gnu.org/PR95061
Change-Id: Ia3f8916422e53c26dab94502423282559c92aae7
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/234024
Reviewed-by: Cherry Zhang <cherryyz@google.com>
diff --git a/libgo/Makefile.am b/libgo/Makefile.am
index 0bbe54c..5b18072 100644
--- a/libgo/Makefile.am
+++ b/libgo/Makefile.am
@@ -967,8 +967,8 @@
# Also use -fno-inline to get better results from the memory profiler.
runtime_pprof_check_GOCFLAGS = -static-libgo -fno-inline
-if LIBGO_IS_LINUX
-# Use -static for the syscall tests, because otherwise when
+if HAVE_STATIC_LINK
+# Use -static for the syscall tests if possible, because otherwise when
# running as root the re-execs ignore LD_LIBRARY_PATH.
syscall_check_GOCFLAGS = -static
endif
diff --git a/libgo/Makefile.in b/libgo/Makefile.in
index 982253d..b2712eb 100644
--- a/libgo/Makefile.in
+++ b/libgo/Makefile.in
@@ -1105,9 +1105,9 @@
# Also use -fno-inline to get better results from the memory profiler.
runtime_pprof_check_GOCFLAGS = -static-libgo -fno-inline
-# Use -static for the syscall tests, because otherwise when
+# Use -static for the syscall tests if possible, because otherwise when
# running as root the re-execs ignore LD_LIBRARY_PATH.
-@LIBGO_IS_LINUX_TRUE@syscall_check_GOCFLAGS = -static
+@HAVE_STATIC_LINK_TRUE@syscall_check_GOCFLAGS = -static
extra_go_files_runtime_internal_sys = version.go
extra_go_files_internal_cpu = cpugen.go
extra_go_files_golang_org_x_sys_cpu = gcpugen.go
diff --git a/libgo/configure b/libgo/configure
index 2f78739..2a9c7e6 100755
--- a/libgo/configure
+++ b/libgo/configure
@@ -633,6 +633,8 @@
am__EXEEXT_TRUE
LTLIBOBJS
LIBOBJS
+HAVE_STATIC_LINK_FALSE
+HAVE_STATIC_LINK_TRUE
HAVE_STAT_TIMESPEC_FALSE
HAVE_STAT_TIMESPEC_TRUE
STRUCT_EPOLL_EVENT_FD_OFFSET
@@ -11490,7 +11492,7 @@
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11493 "configure"
+#line 11495 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -11596,7 +11598,7 @@
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
-#line 11599 "configure"
+#line 11601 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@@ -15788,6 +15790,44 @@
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -static is supported" >&5
+$as_echo_n "checking whether -static is supported... " >&6; }
+if ${libgo_cv_ld_static+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ LDFLAGS_hold=$LDFLAGS
+LDFLAGS="$LDFLAGS -static"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main ()
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+ libgo_cv_ld_static=yes
+else
+ libgo_cv_ld_static=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+LDFLAGS=$LDFLAGS_hold
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libgo_cv_ld_static" >&5
+$as_echo "$libgo_cv_ld_static" >&6; }
+ if test "$libgo_cv_ld_static" = yes; then
+ HAVE_STATIC_LINK_TRUE=
+ HAVE_STATIC_LINK_FALSE='#'
+else
+ HAVE_STATIC_LINK_TRUE='#'
+ HAVE_STATIC_LINK_FALSE=
+fi
+
+
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
@@ -16108,6 +16148,10 @@
as_fn_error $? "conditional \"HAVE_STAT_TIMESPEC\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${HAVE_STATIC_LINK_TRUE}" && test -z "${HAVE_STATIC_LINK_FALSE}"; then
+ as_fn_error $? "conditional \"HAVE_STATIC_LINK\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
: "${CONFIG_STATUS=./config.status}"
ac_write_fail=0
diff --git a/libgo/configure.ac b/libgo/configure.ac
index f800d44..235d867 100644
--- a/libgo/configure.ac
+++ b/libgo/configure.ac
@@ -881,6 +881,17 @@
[Define if your assembler supports AES instructions.])
fi
+dnl Test whether the linker supports the -static option.
+AC_CACHE_CHECK([whether -static is supported],
+[libgo_cv_ld_static],
+[LDFLAGS_hold=$LDFLAGS
+LDFLAGS="$LDFLAGS -static"
+AC_LINK_IFELSE([AC_LANG_PROGRAM(,)],
+[libgo_cv_ld_static=yes],
+[libgo_cv_ld_static=no])
+LDFLAGS=$LDFLAGS_hold])
+AM_CONDITIONAL(HAVE_STATIC_LINK, test "$libgo_cv_ld_static" = yes)
+
AC_CACHE_SAVE
if test ${multilib} = yes; then