summaryrefslogtreecommitdiffhomepage
path: root/pkg/safemem/seq_unsafe.go
diff options
context:
space:
mode:
authorJamie Liu <jamieliu@google.com>2021-02-17 17:39:24 -0800
committergVisor bot <gvisor-bot@google.com>2021-02-17 17:41:10 -0800
commitf051ec64639b83faabcfe766ff078072def3c2aa (patch)
tree892c0fc2f4fd4138299c3c0d5a5836a940a670b5 /pkg/safemem/seq_unsafe.go
parent4bc7daf91a0d9102fa477b199964e7db45066da1 (diff)
Add gohacks.Slice/StringHeader.
See https://github.com/golang/go/issues/19367 for rationale. Note that the upstream decision arrived at in that thread, while useful for some of our use cases, doesn't account for all of our SliceHeader use cases (we often use SliceHeader to extract pointers from slices in a way that avoids bounds checking and/or handles nil slices correctly) and also doesn't exist yet. PiperOrigin-RevId: 358071574
Diffstat (limited to 'pkg/safemem/seq_unsafe.go')
-rw-r--r--pkg/safemem/seq_unsafe.go7
1 files changed, 4 insertions, 3 deletions
diff --git a/pkg/safemem/seq_unsafe.go b/pkg/safemem/seq_unsafe.go
index fc4049eeb..b315b0e5a 100644
--- a/pkg/safemem/seq_unsafe.go
+++ b/pkg/safemem/seq_unsafe.go
@@ -17,9 +17,10 @@ package safemem
import (
"bytes"
"fmt"
- "reflect"
"syscall"
"unsafe"
+
+ "gvisor.dev/gvisor/pkg/gohacks"
)
// A BlockSeq represents a sequence of Blocks, each of which has non-zero
@@ -184,8 +185,8 @@ func (bs BlockSeq) Tail() BlockSeq {
return BlockSeq{}
}
var extSlice []Block
- extSliceHdr := (*reflect.SliceHeader)(unsafe.Pointer(&extSlice))
- extSliceHdr.Data = uintptr(bs.data)
+ extSliceHdr := (*gohacks.SliceHeader)(unsafe.Pointer(&extSlice))
+ extSliceHdr.Data = bs.data
extSliceHdr.Len = bs.length
extSliceHdr.Cap = bs.length
tailSlice := skipEmpty(extSlice[1:])