summaryrefslogtreecommitdiff
path: root/misc/cgo/testso
diff options
context:
space:
mode:
Diffstat (limited to 'misc/cgo/testso')
-rw-r--r--misc/cgo/testso/cgoso_c.c5
-rw-r--r--misc/cgo/testso/cgoso_unix.go20
2 files changed, 25 insertions, 0 deletions
diff --git a/misc/cgo/testso/cgoso_c.c b/misc/cgo/testso/cgoso_c.c
index 27155c27f..7a38022b5 100644
--- a/misc/cgo/testso/cgoso_c.c
+++ b/misc/cgo/testso/cgoso_c.c
@@ -19,6 +19,11 @@ extern void goCallback(void);
void setCallback(void *f) { (void)f; }
#endif
+// OpenBSD and older Darwin lack TLS support
+#if !defined(__OpenBSD__) && !defined(__APPLE__)
+__thread int tlsvar = 12345;
+#endif
+
void sofunc(void)
{
goCallback();
diff --git a/misc/cgo/testso/cgoso_unix.go b/misc/cgo/testso/cgoso_unix.go
new file mode 100644
index 000000000..7d5444cd1
--- /dev/null
+++ b/misc/cgo/testso/cgoso_unix.go
@@ -0,0 +1,20 @@
+// 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.
+
+// +build dragonfly freebsd linux netbsd
+
+package cgosotest
+
+/*
+extern int __thread tlsvar;
+int *getTLS() { return &tlsvar; }
+*/
+import "C"
+
+func init() {
+ if v := *C.getTLS(); v != 12345 {
+ println("got", v)
+ panic("BAD TLS value")
+ }
+}