aboutsummaryrefslogtreecommitdiff
path: root/src/pkg/runtime/lfstack.c
diff options
context:
space:
mode:
authorAram Hăvărneanu <aram@mgk.ro>2014-01-17 17:58:10 +1300
committerJoel Sing <jsing@google.com>2014-01-17 17:58:10 +1300
commita46b43493154bf3c59ce634ee9557a0b273de5ce (patch)
tree7ee539162b796ceb2188659aa6d2947f26e2f461 /src/pkg/runtime/lfstack.c
parentf8225bdb350f5c7d249f8ed090cf7543901612fa (diff)
downloadgo-a46b43493154bf3c59ce634ee9557a0b273de5ce.tar.xz
runtime: add support for GOOS=solaris
R=alex.brainman, dave, jsing, gobot, rsc CC=golang-codereviews https://golang.org/cl/35990043
Diffstat (limited to 'src/pkg/runtime/lfstack.c')
-rw-r--r--src/pkg/runtime/lfstack.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/pkg/runtime/lfstack.c b/src/pkg/runtime/lfstack.c
index 140384d3dc..e94f360c24 100644
--- a/src/pkg/runtime/lfstack.c
+++ b/src/pkg/runtime/lfstack.c
@@ -17,6 +17,20 @@
#define PTR_MASK ((1ull<<PTR_BITS)-1)
#define CNT_MASK (0ull-1)
+#ifdef _64BIT
+#ifdef GOOS_solaris
+// SPARC64 and Solaris on AMD64 uses all 64 bits of virtual addresses.
+// Use low-order three bits as ABA counter.
+// http://docs.oracle.com/cd/E19120-01/open.solaris/816-5138/6mba6ua5p/index.html
+#undef PTR_BITS
+#undef CNT_MASK
+#undef PTR_MASK
+#define PTR_BITS 0
+#define CNT_MASK 7
+#define PTR_MASK ((0ull-1)<<3)
+#endif
+#endif
+
void
runtime·lfstackpush(uint64 *head, LFNode *node)
{