Update dependencies
This commit is contained in:
51
vendor/gvisor.dev/gvisor/pkg/gohacks/linkname_go113_unsafe.go
vendored
Normal file
51
vendor/gvisor.dev/gvisor/pkg/gohacks/linkname_go113_unsafe.go
vendored
Normal file
@@ -0,0 +1,51 @@
|
||||
// Copyright 2023 The gVisor Authors.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build go1.13
|
||||
|
||||
// //go:linkname directives type-checked by checklinkname. Any other
|
||||
// non-linkname assumptions outside the Go 1 compatibility guarantee should
|
||||
// have an accompanied vet check or version guard build tag.
|
||||
|
||||
// Package gohacks contains utilities for subverting the Go compiler.
|
||||
package gohacks
|
||||
|
||||
import (
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
// 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)
|
||||
|
||||
// Nanotime is runtime.nanotime.
|
||||
//
|
||||
//go:nosplit
|
||||
func Nanotime() int64 {
|
||||
return nanotime()
|
||||
}
|
||||
|
||||
//go:linkname nanotime runtime.nanotime
|
||||
//go:noescape
|
||||
func nanotime() int64
|
||||
34
vendor/gvisor.dev/gvisor/pkg/gohacks/noescape_unsafe.go
vendored
Normal file
34
vendor/gvisor.dev/gvisor/pkg/gohacks/noescape_unsafe.go
vendored
Normal file
@@ -0,0 +1,34 @@
|
||||
// Copyright 2023 The gVisor Authors.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package gohacks
|
||||
|
||||
import (
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
// Noescape hides a pointer from escape analysis. Noescape is the identity
|
||||
// function but escape analysis doesn't think the output depends on the input.
|
||||
// Noescape is inlined and currently compiles down to zero instructions.
|
||||
// USE CAREFULLY!
|
||||
//
|
||||
// Noescape is copy/pasted from Go's runtime/stubs.go:noescape(), and is valid
|
||||
// as of Go 1.20. It is possible that this approach stops working in future
|
||||
// versions of the toolchain, at which point `p` may still escape.
|
||||
//
|
||||
//go:nosplit
|
||||
func Noescape(p unsafe.Pointer) unsafe.Pointer {
|
||||
x := uintptr(p)
|
||||
return unsafe.Pointer(x ^ 0)
|
||||
}
|
||||
45
vendor/gvisor.dev/gvisor/pkg/gohacks/slice_go113_unsafe.go
vendored
Normal file
45
vendor/gvisor.dev/gvisor/pkg/gohacks/slice_go113_unsafe.go
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
// Copyright 2023 The gVisor Authors.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build go1.13 && !go1.20
|
||||
// +build go1.13,!go1.20
|
||||
|
||||
// TODO(go.dev/issue/8422): Remove this once Go 1.19 is no longer supported,
|
||||
// and update callers to use unsafe.Slice directly.
|
||||
|
||||
package gohacks
|
||||
|
||||
import (
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
// sliceHeader is equivalent to reflect.SliceHeader, but represents the pointer
|
||||
// to the underlying array as unsafe.Pointer rather than uintptr, allowing
|
||||
// sliceHeaders to be directly converted to slice objects.
|
||||
type sliceHeader struct {
|
||||
Data unsafe.Pointer
|
||||
Len int
|
||||
Cap int
|
||||
}
|
||||
|
||||
// Slice returns a slice whose underlying array starts at ptr an which length
|
||||
// and capacity are len.
|
||||
func Slice[T any](ptr *T, length int) []T {
|
||||
var s []T
|
||||
hdr := (*sliceHeader)(unsafe.Pointer(&s))
|
||||
hdr.Data = unsafe.Pointer(ptr)
|
||||
hdr.Len = length
|
||||
hdr.Cap = length
|
||||
return s
|
||||
}
|
||||
30
vendor/gvisor.dev/gvisor/pkg/gohacks/slice_go120_unsafe.go
vendored
Normal file
30
vendor/gvisor.dev/gvisor/pkg/gohacks/slice_go120_unsafe.go
vendored
Normal file
@@ -0,0 +1,30 @@
|
||||
// Copyright 2023 The gVisor Authors.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build go1.20
|
||||
|
||||
package gohacks
|
||||
|
||||
import (
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
// Slice returns a slice whose underlying array starts at ptr an which length
|
||||
// and capacity are len.
|
||||
//
|
||||
// Slice is a wrapper around unsafe.Slice. Prefer to use unsafe.Slice directly
|
||||
// if possible.
|
||||
func Slice[T any](ptr *T, length int) []T {
|
||||
return unsafe.Slice(ptr, length)
|
||||
}
|
||||
51
vendor/gvisor.dev/gvisor/pkg/gohacks/string_go113_unsafe.go
vendored
Normal file
51
vendor/gvisor.dev/gvisor/pkg/gohacks/string_go113_unsafe.go
vendored
Normal file
@@ -0,0 +1,51 @@
|
||||
// Copyright 2023 The gVisor Authors.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build go1.13 && !go1.20
|
||||
// +build go1.13,!go1.20
|
||||
|
||||
// TODO(go.dev/issue/8422): Remove this file once Go 1.19 is no longer
|
||||
// supported.
|
||||
|
||||
package gohacks
|
||||
|
||||
import (
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
// stringHeader is equivalent to reflect.StringHeader, but represents the
|
||||
// pointer to the underlying array as unsafe.Pointer rather than uintptr,
|
||||
// allowing StringHeaders to be directly converted to strings.
|
||||
type stringHeader struct {
|
||||
Data unsafe.Pointer
|
||||
Len int
|
||||
}
|
||||
|
||||
// ImmutableBytesFromString is equivalent to []byte(s), except that it uses the
|
||||
// same memory backing s instead of making a heap-allocated copy. This is only
|
||||
// valid if the returned slice is never mutated.
|
||||
func ImmutableBytesFromString(s string) []byte {
|
||||
shdr := (*stringHeader)(unsafe.Pointer(&s))
|
||||
return Slice((*byte)(shdr.Data), shdr.Len)
|
||||
}
|
||||
|
||||
// StringFromImmutableBytes is equivalent to string(bs), except that it uses
|
||||
// the same memory backing bs instead of making a heap-allocated copy. This is
|
||||
// only valid if bs is never mutated after StringFromImmutableBytes returns.
|
||||
func StringFromImmutableBytes(bs []byte) string {
|
||||
// This is cheaper than messing with StringHeader and SliceHeader, which as
|
||||
// of this writing produces many dead stores of zeroes. Compare
|
||||
// strings.Builder.String().
|
||||
return *(*string)(unsafe.Pointer(&bs))
|
||||
}
|
||||
39
vendor/gvisor.dev/gvisor/pkg/gohacks/string_go120_unsafe.go
vendored
Normal file
39
vendor/gvisor.dev/gvisor/pkg/gohacks/string_go120_unsafe.go
vendored
Normal file
@@ -0,0 +1,39 @@
|
||||
// Copyright 2023 The gVisor Authors.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build go1.20
|
||||
|
||||
package gohacks
|
||||
|
||||
import (
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
// ImmutableBytesFromString is equivalent to []byte(s), except that it uses the
|
||||
// same memory backing s instead of making a heap-allocated copy. This is only
|
||||
// valid if the returned slice is never mutated.
|
||||
func ImmutableBytesFromString(s string) []byte {
|
||||
b := unsafe.StringData(s)
|
||||
return unsafe.Slice(b, len(s))
|
||||
}
|
||||
|
||||
// StringFromImmutableBytes is equivalent to string(bs), except that it uses
|
||||
// the same memory backing bs instead of making a heap-allocated copy. This is
|
||||
// only valid if bs is never mutated after StringFromImmutableBytes returns.
|
||||
func StringFromImmutableBytes(bs []byte) string {
|
||||
if len(bs) == 0 {
|
||||
return ""
|
||||
}
|
||||
return unsafe.String(&bs[0], len(bs))
|
||||
}
|
||||
Reference in New Issue
Block a user