summaryrefslogtreecommitdiffhomepage
path: root/pkg/sync/memmove_unsafe.go
diff options
context:
space:
mode:
authorgVisor bot <gvisor-bot@google.com>2020-01-10 06:14:54 +0000
committergVisor bot <gvisor-bot@google.com>2020-01-10 06:14:54 +0000
commitd09b1da02d67a8a51f1b41e0a8e9026218ffa20a (patch)
treeb32df508ac0b9087e3319a1d2b33dfbb86db8ad1 /pkg/sync/memmove_unsafe.go
parentaca2ac5c956a7542eebf50806b0e0171c8caa816 (diff)
parent27500d529f7fb87eef8812278fd1bbca67bcba72 (diff)
Merge release-20191213.0-96-g27500d5 (automated)
Diffstat (limited to 'pkg/sync/memmove_unsafe.go')
-rwxr-xr-xpkg/sync/memmove_unsafe.go28
1 files changed, 28 insertions, 0 deletions
diff --git a/pkg/sync/memmove_unsafe.go b/pkg/sync/memmove_unsafe.go
new file mode 100755
index 000000000..ad4a3a37e
--- /dev/null
+++ b/pkg/sync/memmove_unsafe.go
@@ -0,0 +1,28 @@
+// Copyright 2019 The gVisor Authors.
+//
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build go1.12
+// +build !go1.15
+
+// Check go:linkname function signatures when updating Go version.
+
+package sync
+
+import (
+ "unsafe"
+)
+
+//go:linkname memmove runtime.memmove
+//go:noescape
+func memmove(to, from unsafe.Pointer, n uintptr)
+
+// Memmove is exported for SeqAtomicLoad/SeqAtomicTryLoad<T>, which can't
+// define it because go_generics can't update the go:linkname annotation.
+// Furthermore, go:linkname silently doesn't work if the local name is exported
+// (this is of course undocumented), which is why this indirection is
+// necessary.
+func Memmove(to, from unsafe.Pointer, n uintptr) {
+ memmove(to, from, n)
+}