libgo: If compiler can split-stack and linker can not, use -fno-split-stack.
If the compiler supports split-stack but we are using a gold linker that does not, as happens on PPC with current GCC but old gold, then we need to compile the Go code with -fno-split-stack to avoid a linker error avoid the inability to call from split-stack code to non-split-stack code. Reviewed-on: https://go-review.googlesource.com/14598 From-SVN: r227811
This commit is contained in:
parent
c8338173d7
commit
a2bf11d16a
|
@ -1,4 +1,4 @@
|
||||||
6f0ac34e139755c319368757fe2a093f1e5bde49
|
eac8b31fec761c8da0606a70ae0547ff0b12e8db
|
||||||
|
|
||||||
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.
|
||||||
|
|
|
@ -2074,7 +2074,7 @@ libnetgo_a_LIBADD = netgo.o
|
||||||
LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS))
|
LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS))
|
||||||
|
|
||||||
GOCFLAGS = $(CFLAGS)
|
GOCFLAGS = $(CFLAGS)
|
||||||
AM_GOCFLAGS = $(STRINGOPS_FLAG)
|
AM_GOCFLAGS = $(STRINGOPS_FLAG) $(GO_SPLIT_STACK)
|
||||||
GOCOMPILE = $(GOC) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_GOCFLAGS) $(GOCFLAGS)
|
GOCOMPILE = $(GOC) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_GOCFLAGS) $(GOCFLAGS)
|
||||||
|
|
||||||
LTGOCOMPILE = $(LIBTOOL) --tag GO --mode=compile $(GOC) $(INCLUDES) \
|
LTGOCOMPILE = $(LIBTOOL) --tag GO --mode=compile $(GOC) $(INCLUDES) \
|
||||||
|
|
|
@ -366,6 +366,7 @@ GOCFLAGS = $(CFLAGS)
|
||||||
GOOS = @GOOS@
|
GOOS = @GOOS@
|
||||||
GO_LIBCALL_OS_ARCH_FILE = @GO_LIBCALL_OS_ARCH_FILE@
|
GO_LIBCALL_OS_ARCH_FILE = @GO_LIBCALL_OS_ARCH_FILE@
|
||||||
GO_LIBCALL_OS_FILE = @GO_LIBCALL_OS_FILE@
|
GO_LIBCALL_OS_FILE = @GO_LIBCALL_OS_FILE@
|
||||||
|
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@
|
||||||
|
@ -2153,7 +2154,7 @@ libgolibbegin_a_CFLAGS = $(AM_CFLAGS) -fPIC
|
||||||
libnetgo_a_SOURCES = $(go_netgo_files)
|
libnetgo_a_SOURCES = $(go_netgo_files)
|
||||||
libnetgo_a_LIBADD = netgo.o
|
libnetgo_a_LIBADD = netgo.o
|
||||||
LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS))
|
LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags $(LDFLAGS))
|
||||||
AM_GOCFLAGS = $(STRINGOPS_FLAG)
|
AM_GOCFLAGS = $(STRINGOPS_FLAG) $(GO_SPLIT_STACK)
|
||||||
GOCOMPILE = $(GOC) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_GOCFLAGS) $(GOCFLAGS)
|
GOCOMPILE = $(GOC) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_GOCFLAGS) $(GOCFLAGS)
|
||||||
LTGOCOMPILE = $(LIBTOOL) --tag GO --mode=compile $(GOC) $(INCLUDES) \
|
LTGOCOMPILE = $(LIBTOOL) --tag GO --mode=compile $(GOC) $(INCLUDES) \
|
||||||
$(AM_GOCFLAGS) $(GOCFLAGS)
|
$(AM_GOCFLAGS) $(GOCFLAGS)
|
||||||
|
|
|
@ -620,6 +620,7 @@ NET_LIBS
|
||||||
MATH_LIBS
|
MATH_LIBS
|
||||||
GOC_IS_LLGO_FALSE
|
GOC_IS_LLGO_FALSE
|
||||||
GOC_IS_LLGO_TRUE
|
GOC_IS_LLGO_TRUE
|
||||||
|
GO_SPLIT_STACK
|
||||||
USING_SPLIT_STACK_FALSE
|
USING_SPLIT_STACK_FALSE
|
||||||
USING_SPLIT_STACK_TRUE
|
USING_SPLIT_STACK_TRUE
|
||||||
SPLIT_STACK
|
SPLIT_STACK
|
||||||
|
@ -11123,7 +11124,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 11126 "configure"
|
#line 11127 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
#if HAVE_DLFCN_H
|
#if HAVE_DLFCN_H
|
||||||
|
@ -11229,7 +11230,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 11232 "configure"
|
#line 11233 "configure"
|
||||||
#include "confdefs.h"
|
#include "confdefs.h"
|
||||||
|
|
||||||
#if HAVE_DLFCN_H
|
#if HAVE_DLFCN_H
|
||||||
|
@ -14050,6 +14051,13 @@ else
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
if test "$libgo_cv_c_split_stack_supported" = yes -a "$libgo_cv_c_linker_split_non_split" = no; then
|
||||||
|
GO_SPLIT_STACK=-fno-split-stack
|
||||||
|
else
|
||||||
|
GO_SPLIT_STACK=
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether linker supports split stack" >&5
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether linker supports split stack" >&5
|
||||||
$as_echo_n "checking whether linker supports split stack... " >&6; }
|
$as_echo_n "checking whether linker supports split stack... " >&6; }
|
||||||
if test "${libgo_cv_c_linker_supports_split_stack+set}" = set; then :
|
if test "${libgo_cv_c_linker_supports_split_stack+set}" = set; then :
|
||||||
|
|
|
@ -407,6 +407,15 @@ AC_SUBST(SPLIT_STACK)
|
||||||
AM_CONDITIONAL(USING_SPLIT_STACK,
|
AM_CONDITIONAL(USING_SPLIT_STACK,
|
||||||
test "$libgo_cv_c_split_stack_supported" = yes -a "$libgo_cv_c_linker_split_non_split" = yes)
|
test "$libgo_cv_c_split_stack_supported" = yes -a "$libgo_cv_c_linker_split_non_split" = yes)
|
||||||
|
|
||||||
|
dnl If the compiler supports split-stack but the linker does not, then
|
||||||
|
dnl we need to explicitly disable split-stack for Go.
|
||||||
|
if test "$libgo_cv_c_split_stack_supported" = yes -a "$libgo_cv_c_linker_split_non_split" = no; then
|
||||||
|
GO_SPLIT_STACK=-fno-split-stack
|
||||||
|
else
|
||||||
|
GO_SPLIT_STACK=
|
||||||
|
fi
|
||||||
|
AC_SUBST(GO_SPLIT_STACK)
|
||||||
|
|
||||||
dnl Check whether the linker does stack munging when calling from
|
dnl Check whether the linker does stack munging when calling from
|
||||||
dnl split-stack into non-split-stack code. We check this by looking
|
dnl split-stack into non-split-stack code. We check this by looking
|
||||||
dnl at the --help output. FIXME: This is only half right: it's
|
dnl at the --help output. FIXME: This is only half right: it's
|
||||||
|
|
|
@ -108,6 +108,7 @@ GOCFLAGS = @GOCFLAGS@
|
||||||
GOOS = @GOOS@
|
GOOS = @GOOS@
|
||||||
GO_LIBCALL_OS_ARCH_FILE = @GO_LIBCALL_OS_ARCH_FILE@
|
GO_LIBCALL_OS_ARCH_FILE = @GO_LIBCALL_OS_ARCH_FILE@
|
||||||
GO_LIBCALL_OS_FILE = @GO_LIBCALL_OS_FILE@
|
GO_LIBCALL_OS_FILE = @GO_LIBCALL_OS_FILE@
|
||||||
|
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@
|
||||||
|
|
Loading…
Reference in New Issue