summaryrefslogtreecommitdiffhomepage
path: root/pkg/syncutil/memmove_unsafe.go
diff options
context:
space:
mode:
authorAdin Scannell <ascannell@google.com>2019-11-21 11:29:49 -0800
committergVisor bot <gvisor-bot@google.com>2019-11-21 11:41:30 -0800
commitc0f89eba6ebdec08460bd796fc62d6aef674d141 (patch)
tree38b35320dc70d55e0b83d221d5c45a404f8a6683 /pkg/syncutil/memmove_unsafe.go
parentb6a00aa375e674617f1914b90db5ddb222b5a04e (diff)
Import and structure cleanup.
PiperOrigin-RevId: 281795269
Diffstat (limited to 'pkg/syncutil/memmove_unsafe.go')
-rw-r--r--pkg/syncutil/memmove_unsafe.go28
1 files changed, 28 insertions, 0 deletions
diff --git a/pkg/syncutil/memmove_unsafe.go b/pkg/syncutil/memmove_unsafe.go
new file mode 100644
index 000000000..348675baa
--- /dev/null
+++ b/pkg/syncutil/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 syncutil
+
+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)
+}