On Thu, Aug 24, 2017 at 3:19 AM, Uros Bizjak <[email protected]> wrote:
> Hello!
>
> Following carchive gotools tests fail in gccgo testsuite:
>
> FAIL: TestCgoCallbackGC
> FAIL: TestInstall
> FAIL: TestEarlySignalHandler
> FAIL: TestSignalForwarding
> FAIL: TestSignalForwardingExternal
> FAIL: TestOsSignal
> FAIL: TestSigaltstack
> FAIL: TestPIE
>
> The problem can be seen from the gotools log dump:
>
> === RUN TestInstall
> FAIL: TestInstall
> carchive_test.go:160: [gcc -fPIC -m64 -pthread
> -fmessage-length=0
> -fdebug-prefix-map=/tmp/go-build828417309=/tmp/go-build
> -gno-record-gcc-switches -funwind-tables -I pkg/gccgo_linux_amd64_fPIC
> -o ./testp1 main.c main_unix.c pkg/gccgo_linux_amd64_fPIC/liblibgo.a
> -lgo]
> carchive_test.go:162:
> pkg/gccgo_linux_amd64_fPIC/liblibgo.a(a.out.a.o): In function
> `__go_init_main':
> /tmp/go-build/libgo/_obj/_cgo_gotypes.go:3: undefined
> reference to `runtime.registerGCRoots'
> pkg/gccgo_linux_amd64_fPIC/liblibgo.a(a.out.a.o): In
> function `__go_init_main':
>
> /home/uros/gcc-build/gotools/carchive-test-dir/misc/cgo/testcarchive/src/libgo/libgo.go:18:
> undefined reference to `runtime.writeBarrier'
>
> /home/uros/gcc-build/gotools/carchive-test-dir/misc/cgo/testcarchive/src/libgo/libgo.go:18:
> undefined reference to `runtime.writebarrierptr'
> pkg/gccgo_linux_amd64_fPIC/liblibgo.a(a.out.a.o): In
> function `gostart':
>
> /home/uros/gcc-build/x86_64-pc-linux-gnu/libgo/../../../git/gcc/libgo/runtime/go-libmain.c:111:
> undefined reference to `runtime.schedinit'
>
> /home/uros/gcc-build/x86_64-pc-linux-gnu/libgo/../../../git/gcc/libgo/runtime/go-libmain.c:112:
> undefined reference to `runtime.main'
> collect2: error: ld returned 1 exit status
> carchive_test.go:163: exit status 1
>
> The compiler in carchive_test.go:160 is called with the following command:
>
> gcc -fPIC -m64 -pthread -fmessage-length=0
> -fdebug-prefix-map=/tmp/go-build828417309=/tmp/go-build
> -gno-record-gcc-switches -funwind-tables -I pkg/gccgo_linux_amd64_fPIC
> -o ./testp1 main.c main_unix.c pkg/gccgo_linux_amd64_fPIC/liblibgo.a
> -lgo
>
> Please note that with -lgo, the default system-wide libgo shared
> library is linked in. However, the test expects newly compiled library
> from the libgo build directory. Manually adding correct -L path to the
> above command builds functional executable.
>
> (The system-wide library in the above example is installed from the
> current gcc-7 branch).
Thanks. I have committed this patch which should fix the problem.
Bootstrapped and tested on x86_64-pc-linux-gnu.
Ian
2017-08-30 Ian Lance Taylor <[email protected]>
* configure.ac: Substitute GOC_FOR_TARGET and GCC_FOR_TARGET.
* Makefile.am (MOSTLYCLEANFILES): Add check-gcc.
(check-gccgo): Create via a temporary file.
(check-gcc): New target.
(CHECK_ENV): Set CC.
(ECHO_ENV): Report CC.
(check-go-tool): Depend on check-gcc.
(check-runtime, check-cgo-test, check-carchive-test): Likewise.
* configure, Makefile.in: Rebuild.
Index: configure.ac
===================================================================
--- configure.ac (revision 251533)
+++ configure.ac (working copy)
@@ -46,6 +46,11 @@ AC_PROG_INSTALL
AC_PROG_CC
AC_PROG_GO
+# These should be defined by the top-level configure.
+# Copy them into Makefile.
+AC_SUBST(GOC_FOR_TARGET)
+AC_SUBST(GCC_FOR_TARGET)
+
AM_CONDITIONAL(NATIVE, test "$host_alias" = "$target_alias")
dnl Test for -lsocket and -lnsl. Copied from libjava/configure.ac.
Index: Makefile.am
===================================================================
--- Makefile.am (revision 251533)
+++ Makefile.am (working copy)
@@ -109,7 +109,8 @@ s-zdefaultcc: Makefile
MOSTLYCLEANFILES = \
zdefaultcc.go s-zdefaultcc \
- check-gccgo gotools.head *-testlog gotools.sum gotools.log *.sent
+ check-gccgo check-gcc gotools.head *-testlog gotools.sum gotools.log \
+ *.sent
mostlyclean-local:
rm -rf check-go-dir check-runtime-dir cgo-test-dir carchive-test-dir
@@ -155,11 +156,22 @@ check-head:
# check-gccgo is a little shell script that executes gccgo with the
# options to pick up the newly built libgo.
check-gccgo: Makefile
- rm -f $@
- echo "#!/bin/sh" > $@
+ rm -f $@ [email protected]
+ echo "#!/bin/sh" > [email protected]
abs_libgodir=`cd $(libgodir) && $(PWD_COMMAND)`; \
- echo "$(GOCOMPILE)" '"$$@"' "-I $${abs_libgodir} -L $${abs_libgodir} -L
$${abs_libgodir}/.libs" >> $@
- chmod +x $@
+ echo "$(GOCOMPILE)" '"$$@"' "-I $${abs_libgodir} -L $${abs_libgodir} -L
$${abs_libgodir}/.libs" >> [email protected]
+ chmod +x [email protected]
+ mv -f [email protected] $@
+
+# check-gcc is a little shell script that executes the newly built gcc
+# with the options to pick up the newly built libgo.
+check-gcc: Makefile
+ rm -f $@ [email protected]
+ echo "#!/bin/sh" > [email protected]
+ abs_libgodir=`cd $(libgodir) && $(PWD_COMMAND)`; \
+ echo "$(GCC_FOR_TARGET)" '"$$@"' "-L $${abs_libgodir} -L
$${abs_libgodir}/.libs" >> [email protected]
+ chmod +x [email protected]
+ mv -f [email protected] $@
# CHECK_ENV sets up the environment to run the newly built go tool.
# If you change this, change ECHO_ENV, below.
@@ -168,6 +180,8 @@ CHECK_ENV = \
export PATH; \
GCCGO="$(abs_builddir)/check-gccgo"; \
export GCCGO; \
+ CC="$(abs_builddir)/check-gcc"; \
+ export CC; \
GCCGOTOOLDIR="$(abs_builddir)"; \
export GCCGOTOOLDIR; \
GO_TESTING_GOTOOLS=yes; \
@@ -180,10 +194,10 @@ CHECK_ENV = \
# ECHO_ENV is a variant of CHECK_ENV to put into a testlog file.
# It assumes that abs_libgodir is set.
-ECHO_ENV = PATH=`echo $(abs_builddir):$${PATH} | sed
's,::*,:,g;s,^:*,,;s,:*$$,,'` GCCGO='$(abs_builddir)/check-gccgo'
GCCGOTOOLDIR='$(abs_builddir)' GO_TESTING_GOTOOLS=yes LD_LIBRARY_PATH=`echo
$${abs_libgodir}/.libs:$${LD_LIBRARY_PATH} | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`
GOROOT=`echo $${abs_libgodir}`
+ECHO_ENV = PATH=`echo $(abs_builddir):$${PATH} | sed
's,::*,:,g;s,^:*,,;s,:*$$,,'` GCCGO='$(abs_builddir)/check-gccgo'
CC='$(abs_builddir)/check-gcc' GCCGOTOOLDIR='$(abs_builddir)'
GO_TESTING_GOTOOLS=yes LD_LIBRARY_PATH=`echo
$${abs_libgodir}/.libs:$${LD_LIBRARY_PATH} | sed 's,::*,:,g;s,^:*,,;s,:*$$,,'`
GOROOT=`echo $${abs_libgodir}`
# check-go-tools runs `go test cmd/go` in our environment.
-check-go-tool: go$(EXEEXT) cgo$(EXEEXT) check-head check-gccgo
+check-go-tool: go$(EXEEXT) cgo$(EXEEXT) check-head check-gccgo check-gcc
rm -rf check-go-dir cmd_go-testlog
$(MKDIR_P) check-go-dir/src/cmd/go
cp $(cmdsrcdir)/go/*.go check-go-dir/src/cmd/go/
@@ -203,7 +217,7 @@ check-go-tool: go$(EXEEXT) cgo$(EXEEXT)
# The runtime package is also tested as part of libgo,
# but the runtime tests use the go tool heavily, so testing
# here too will catch more problems.
-check-runtime: go$(EXEEXT) cgo$(EXEEXT) check-head check-gccgo
+check-runtime: go$(EXEEXT) cgo$(EXEEXT) check-head check-gccgo check-gcc
rm -rf check-runtime-dir runtime-testlog
$(MKDIR_P) check-runtime-dir
@abs_libgodir=`cd $(libgodir) && $(PWD_COMMAND)`; \
@@ -222,7 +236,7 @@ check-runtime: go$(EXEEXT) cgo$(EXEEXT)
grep '^--- ' runtime-testlog | sed -e 's/^--- \(.*\) ([^)]*)$$/\1/'
# check-cgo-test runs `go test misc/cgo/test` in our environment.
-check-cgo-test: go$(EXEEXT) cgo$(EXEEXT) check-head check-gccgo
+check-cgo-test: go$(EXEEXT) cgo$(EXEEXT) check-head check-gccgo check-gcc
rm -rf cgo-test-dir cgo-testlog
$(MKDIR_P) cgo-test-dir/misc/cgo
cp -r $(libgomiscdir)/cgo/test cgo-test-dir/misc/cgo/
@@ -236,7 +250,7 @@ check-cgo-test: go$(EXEEXT) cgo$(EXEEXT)
# check-carchive-test runs `go test misc/cgo/testcarchive/carchive_test.go`
# in our environment.
-check-carchive-test: go$(EXEEXT) cgo$(EXEEXT) check-head check-gccgo
+check-carchive-test: go$(EXEEXT) cgo$(EXEEXT) check-head check-gccgo check-gcc
rm -rf carchive-test-dir carchive-testlog
$(MKDIR_P) carchive-test-dir/misc/cgo
cp -r $(libgomiscdir)/cgo/testcarchive carchive-test-dir/misc/cgo/