diff --git a/misc/cgo/nocgo/nocgo.go b/misc/cgo/nocgo/nocgo.go new file mode 100644 index 00000000000..00ae5e9c862 --- /dev/null +++ b/misc/cgo/nocgo/nocgo.go @@ -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 +} diff --git a/misc/cgo/nocgo/nocgo_test.go b/misc/cgo/nocgo/nocgo_test.go new file mode 100644 index 00000000000..45d247cf954 --- /dev/null +++ b/misc/cgo/nocgo/nocgo_test.go @@ -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) + } +} diff --git a/src/cmd/ld/lib.c b/src/cmd/ld/lib.c index 2975b2327ac..da6194e4ff0 100644 --- a/src/cmd/ld/lib.c +++ b/src/cmd/ld/lib.c @@ -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); diff --git a/src/run.bash b/src/run.bash index 4706c2bc4fd..76216ba0104 100755 --- a/src/run.bash +++ b/src/run.bash @@ -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