cmd/ld: really import runtime/cgo for external link

Fixes #8032.

LGTM=rsc
R=rsc
CC=golang-codereviews
https://golang.org/cl/95580043
This commit is contained in:
Ian Lance Taylor 2014-05-20 21:36:50 -07:00
parent 80f0a7df26
commit f85600859d
4 changed files with 41 additions and 0 deletions

22
misc/cgo/nocgo/nocgo.go Normal file
View File

@ -0,0 +1,22 @@
// Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Test that -static works when not using cgo. This test is in
// misc/cgo to take advantage of the testing framework support for
// when -static is expected to work.
package nocgo
func NoCgo() int {
c := make(chan int)
// The test is run with external linking, which means that
// goroutines will be created via the runtime/cgo package.
// Make sure that works.
go func() {
c <- 42
}()
return <-c
}

View File

@ -0,0 +1,14 @@
// Copyright 2014 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package nocgo
import "testing"
func TestNop(t *testing.T) {
i := NoCgo()
if i != 42 {
t.Errorf("got %d, want %d", i, 42)
}
}

View File

@ -205,6 +205,8 @@ loadlib(void)
// whether to initialize the TLS. So give it one. This could
// be handled differently but it's an unusual case.
loadinternal("runtime/cgo");
if(i < ctxt->libraryp)
objfile(ctxt->library[i].file, ctxt->library[i].pkg);
// Pretend that we really imported the package.
s = linklookup(ctxt, "go.importpath.runtime/cgo.", 0);

View File

@ -145,6 +145,9 @@ dragonfly-386 | dragonfly-amd64 | freebsd-386 | freebsd-amd64 | freebsd-arm | li
echo "No support for static linking found (lacks libc.a?), skip cgo static linking test."
else
go test -ldflags '-linkmode=external -extldflags "-static -pthread"' ../testtls || exit 1
go test ../nocgo || exit 1
go test -ldflags '-linkmode=external' ../nocgo || exit 1
go test -ldflags '-linkmode=external -extldflags "-static -pthread"' ../nocgo || exit 1
fi
;;
esac