summaryrefslogtreecommitdiffhomepage
path: root/pkg/gohacks
diff options
context:
space:
mode:
authorgVisor bot <gvisor-bot@google.com>2021-04-14 18:37:19 +0000
committergVisor bot <gvisor-bot@google.com>2021-04-14 18:37:19 +0000
commitca506c33c1f00c4e57f640340178007a813d3454 (patch)
tree52ef7111534dd020c5d026c3acc026769b863ecf /pkg/gohacks
parent3a197f66df7303d3bc89e89beeed02f22debda98 (diff)
parent5c1052b6bb2658208f1afaf423aeac98f30235c1 (diff)
Merge release-20210408.0-30-g5c1052b6b (automated)
Diffstat (limited to 'pkg/gohacks')
-rw-r--r--pkg/gohacks/gohacks_unsafe.go14
1 files changed, 14 insertions, 0 deletions
diff --git a/pkg/gohacks/gohacks_unsafe.go b/pkg/gohacks/gohacks_unsafe.go
index 10bbb1f58..374aac2b4 100644
--- a/pkg/gohacks/gohacks_unsafe.go
+++ b/pkg/gohacks/gohacks_unsafe.go
@@ -75,3 +75,17 @@ func StringFromImmutableBytes(bs []byte) string {
// strings.Builder.String().
return *(*string)(unsafe.Pointer(&bs))
}
+
+// Note that go:linkname silently doesn't work if the local name is exported,
+// necessitating an indirection for exported functions.
+
+// Memmove is runtime.memmove, exported for SeqAtomicLoad/SeqAtomicTryLoad<T>.
+//
+//go:nosplit
+func Memmove(to, from unsafe.Pointer, n uintptr) {
+ memmove(to, from, n)
+}
+
+//go:linkname memmove runtime.memmove
+//go:noescape
+func memmove(to, from unsafe.Pointer, n uintptr)