mirror of
https://github.com/rwinkhart/sys.git
synced 2026-09-04 08:07:19 -04:00
unix: add Readv, Writev, Preadv, Pwritev for OpenBSD
Add OpenBSD libc syscall wrappers for vectored I/O, and share the existing Darwin wrapper implementation and tests. Fixes golang/go#78049 Change-Id: Ie2743ef36a5cb73b05cc551c9c1108503f5992b6 Reviewed-on: https://go-review.googlesource.com/c/sys/+/771300 LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Cherry Mui <cherryyz@google.com> Reviewed-by: Ian Lance Taylor <iant@golang.org> Auto-Submit: Ian Lance Taylor <iant@golang.org> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
This commit is contained in:
committed by
Gopher Robot
parent
fb1facd76f
commit
04396e85d4
@@ -0,0 +1,95 @@
|
|||||||
|
// Copyright 2026 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build darwin || openbsd
|
||||||
|
|
||||||
|
package unix
|
||||||
|
|
||||||
|
import "unsafe"
|
||||||
|
|
||||||
|
// This small allocation gets stack allocated, which lets the
|
||||||
|
// common use case of len(iovs) <= minIovec avoid more expensive
|
||||||
|
// heap allocations.
|
||||||
|
const minIovec = 8
|
||||||
|
|
||||||
|
func appendBytes(vecs []Iovec, bs [][]byte) []Iovec {
|
||||||
|
for _, b := range bs {
|
||||||
|
var v Iovec
|
||||||
|
v.SetLen(len(b))
|
||||||
|
if len(b) > 0 {
|
||||||
|
v.Base = &b[0]
|
||||||
|
} else {
|
||||||
|
v.Base = (*byte)(unsafe.Pointer(&_zero))
|
||||||
|
}
|
||||||
|
vecs = append(vecs, v)
|
||||||
|
}
|
||||||
|
return vecs
|
||||||
|
}
|
||||||
|
|
||||||
|
func writevRacedetect(iovecs []Iovec, n int) {
|
||||||
|
if !raceenabled {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for i := 0; n > 0 && i < len(iovecs); i++ {
|
||||||
|
m := min(int(iovecs[i].Len), n)
|
||||||
|
n -= m
|
||||||
|
if m > 0 {
|
||||||
|
raceReadRange(unsafe.Pointer(iovecs[i].Base), m)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func readvRacedetect(iovecs []Iovec, n int, err error) {
|
||||||
|
if !raceenabled {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for i := 0; n > 0 && i < len(iovecs); i++ {
|
||||||
|
m := min(int(iovecs[i].Len), n)
|
||||||
|
n -= m
|
||||||
|
if m > 0 {
|
||||||
|
raceWriteRange(unsafe.Pointer(iovecs[i].Base), m)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err == nil {
|
||||||
|
raceAcquire(unsafe.Pointer(&ioSync))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func Readv(fd int, iovs [][]byte) (n int, err error) {
|
||||||
|
iovecs := make([]Iovec, 0, minIovec)
|
||||||
|
iovecs = appendBytes(iovecs, iovs)
|
||||||
|
n, err = readv(fd, iovecs)
|
||||||
|
readvRacedetect(iovecs, n, err)
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func Preadv(fd int, iovs [][]byte, offset int64) (n int, err error) {
|
||||||
|
iovecs := make([]Iovec, 0, minIovec)
|
||||||
|
iovecs = appendBytes(iovecs, iovs)
|
||||||
|
n, err = preadv(fd, iovecs, offset)
|
||||||
|
readvRacedetect(iovecs, n, err)
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func Writev(fd int, iovs [][]byte) (n int, err error) {
|
||||||
|
iovecs := make([]Iovec, 0, minIovec)
|
||||||
|
iovecs = appendBytes(iovecs, iovs)
|
||||||
|
if raceenabled {
|
||||||
|
raceReleaseMerge(unsafe.Pointer(&ioSync))
|
||||||
|
}
|
||||||
|
n, err = writev(fd, iovecs)
|
||||||
|
writevRacedetect(iovecs, n)
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func Pwritev(fd int, iovs [][]byte, offset int64) (n int, err error) {
|
||||||
|
iovecs := make([]Iovec, 0, minIovec)
|
||||||
|
iovecs = appendBytes(iovecs, iovs)
|
||||||
|
if raceenabled {
|
||||||
|
raceReleaseMerge(unsafe.Pointer(&ioSync))
|
||||||
|
}
|
||||||
|
n, err = pwritev(fd, iovecs, offset)
|
||||||
|
writevRacedetect(iovecs, n)
|
||||||
|
return n, err
|
||||||
|
}
|
||||||
@@ -0,0 +1,137 @@
|
|||||||
|
// Copyright 2026 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
//go:build darwin || openbsd
|
||||||
|
|
||||||
|
package unix_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"golang.org/x/sys/unix"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestWritevReadv(t *testing.T) {
|
||||||
|
r, w, err := os.Pipe()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
defer r.Close()
|
||||||
|
defer w.Close()
|
||||||
|
|
||||||
|
data := [][]byte{[]byte("hello"), []byte(", "), []byte("world")}
|
||||||
|
wn, err := unix.Writev(int(w.Fd()), data)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if wn != 12 {
|
||||||
|
t.Fatalf("Writev wrote %d bytes, want 12", wn)
|
||||||
|
}
|
||||||
|
w.Close()
|
||||||
|
|
||||||
|
buf1 := make([]byte, 5)
|
||||||
|
buf2 := make([]byte, 2)
|
||||||
|
buf3 := make([]byte, 5)
|
||||||
|
rn, err := unix.Readv(int(r.Fd()), [][]byte{buf1, buf2, buf3})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if rn != 12 {
|
||||||
|
t.Fatalf("Readv read %d bytes, want 12", rn)
|
||||||
|
}
|
||||||
|
if string(buf1) != "hello" || string(buf2) != ", " || string(buf3[:5]) != "world" {
|
||||||
|
t.Fatalf("Readv got %q %q %q, want %q %q %q",
|
||||||
|
buf1, buf2, buf3, "hello", ", ", "world")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestPwritevPreadv(t *testing.T) {
|
||||||
|
path := filepath.Join(t.TempDir(), "preadv_test")
|
||||||
|
f, err := os.Create(path)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
t.Cleanup(func() { f.Close() })
|
||||||
|
|
||||||
|
const off = 16
|
||||||
|
data := [][]byte{[]byte("foo"), []byte("bar")}
|
||||||
|
wn, err := unix.Pwritev(int(f.Fd()), data, off)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if wn != 6 {
|
||||||
|
t.Fatalf("Pwritev wrote %d bytes, want 6", wn)
|
||||||
|
}
|
||||||
|
|
||||||
|
got1 := make([]byte, 3)
|
||||||
|
got2 := make([]byte, 3)
|
||||||
|
rn, err := unix.Preadv(int(f.Fd()), [][]byte{got1, got2}, off)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if rn != 6 {
|
||||||
|
t.Fatalf("Preadv read %d bytes, want 6", rn)
|
||||||
|
}
|
||||||
|
if string(got1) != "foo" || string(got2) != "bar" {
|
||||||
|
t.Fatalf("Preadv got %q %q, want %q %q", got1, got2, "foo", "bar")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestPwritevOffset(t *testing.T) {
|
||||||
|
// Regression guard: off_t encoding must not overflow on large offsets.
|
||||||
|
// Mirrors the Linux test for golang.org/issues/57291.
|
||||||
|
path := filepath.Join(t.TempDir(), "offset_test")
|
||||||
|
f, err := os.Create(path)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
t.Cleanup(func() { f.Close() })
|
||||||
|
|
||||||
|
const off = 20
|
||||||
|
b := [][]byte{{byte(0)}}
|
||||||
|
n, err := unix.Pwritev(int(f.Fd()), b, off)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if n != 1 {
|
||||||
|
t.Fatalf("Pwritev wrote %d bytes, want 1", n)
|
||||||
|
}
|
||||||
|
info, err := f.Stat()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if want := int64(off + 1); info.Size() != want {
|
||||||
|
t.Fatalf("file size %d, want %d", info.Size(), want)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestWritevReadvAllocations(t *testing.T) {
|
||||||
|
// Verify no heap allocations when iovec count <= minIovec (8).
|
||||||
|
// Allocations in this path indicate a regression in the fast path.
|
||||||
|
f, err := os.Create(filepath.Join(t.TempDir(), "alloc_test"))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
t.Cleanup(func() { f.Close() })
|
||||||
|
|
||||||
|
iovs := make([][]byte, 8)
|
||||||
|
for i := range iovs {
|
||||||
|
iovs[i] = []byte{'A'}
|
||||||
|
}
|
||||||
|
|
||||||
|
check := func(name string, fn func()) {
|
||||||
|
t.Helper()
|
||||||
|
n := int(testing.AllocsPerRun(100, fn))
|
||||||
|
if n != 0 {
|
||||||
|
t.Errorf("%s: got %d allocations, want 0", name, n)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
check("Writev", func() { unix.Writev(int(f.Fd()), iovs) })
|
||||||
|
check("Pwritev", func() { unix.Pwritev(int(f.Fd()), iovs, 0) })
|
||||||
|
check("Readv", func() { unix.Readv(int(f.Fd()), iovs) })
|
||||||
|
check("Preadv", func() { unix.Preadv(int(f.Fd()), iovs, 0) })
|
||||||
|
}
|
||||||
@@ -602,95 +602,6 @@ func Connectx(fd int, srcIf uint32, srcAddr, dstAddr Sockaddr, associd SaeAssocI
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const minIovec = 8
|
|
||||||
|
|
||||||
func Readv(fd int, iovs [][]byte) (n int, err error) {
|
|
||||||
iovecs := make([]Iovec, 0, minIovec)
|
|
||||||
iovecs = appendBytes(iovecs, iovs)
|
|
||||||
n, err = readv(fd, iovecs)
|
|
||||||
readvRacedetect(iovecs, n, err)
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func Preadv(fd int, iovs [][]byte, offset int64) (n int, err error) {
|
|
||||||
iovecs := make([]Iovec, 0, minIovec)
|
|
||||||
iovecs = appendBytes(iovecs, iovs)
|
|
||||||
n, err = preadv(fd, iovecs, offset)
|
|
||||||
readvRacedetect(iovecs, n, err)
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func Writev(fd int, iovs [][]byte) (n int, err error) {
|
|
||||||
iovecs := make([]Iovec, 0, minIovec)
|
|
||||||
iovecs = appendBytes(iovecs, iovs)
|
|
||||||
if raceenabled {
|
|
||||||
raceReleaseMerge(unsafe.Pointer(&ioSync))
|
|
||||||
}
|
|
||||||
n, err = writev(fd, iovecs)
|
|
||||||
writevRacedetect(iovecs, n)
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func Pwritev(fd int, iovs [][]byte, offset int64) (n int, err error) {
|
|
||||||
iovecs := make([]Iovec, 0, minIovec)
|
|
||||||
iovecs = appendBytes(iovecs, iovs)
|
|
||||||
if raceenabled {
|
|
||||||
raceReleaseMerge(unsafe.Pointer(&ioSync))
|
|
||||||
}
|
|
||||||
n, err = pwritev(fd, iovecs, offset)
|
|
||||||
writevRacedetect(iovecs, n)
|
|
||||||
return n, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func appendBytes(vecs []Iovec, bs [][]byte) []Iovec {
|
|
||||||
for _, b := range bs {
|
|
||||||
var v Iovec
|
|
||||||
v.SetLen(len(b))
|
|
||||||
if len(b) > 0 {
|
|
||||||
v.Base = &b[0]
|
|
||||||
} else {
|
|
||||||
v.Base = (*byte)(unsafe.Pointer(&_zero))
|
|
||||||
}
|
|
||||||
vecs = append(vecs, v)
|
|
||||||
}
|
|
||||||
return vecs
|
|
||||||
}
|
|
||||||
|
|
||||||
func writevRacedetect(iovecs []Iovec, n int) {
|
|
||||||
if !raceenabled {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
for i := 0; n > 0 && i < len(iovecs); i++ {
|
|
||||||
m := int(iovecs[i].Len)
|
|
||||||
if m > n {
|
|
||||||
m = n
|
|
||||||
}
|
|
||||||
n -= m
|
|
||||||
if m > 0 {
|
|
||||||
raceReadRange(unsafe.Pointer(iovecs[i].Base), m)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func readvRacedetect(iovecs []Iovec, n int, err error) {
|
|
||||||
if !raceenabled {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
for i := 0; n > 0 && i < len(iovecs); i++ {
|
|
||||||
m := int(iovecs[i].Len)
|
|
||||||
if m > n {
|
|
||||||
m = n
|
|
||||||
}
|
|
||||||
n -= m
|
|
||||||
if m > 0 {
|
|
||||||
raceWriteRange(unsafe.Pointer(iovecs[i].Base), m)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if err == nil {
|
|
||||||
raceAcquire(unsafe.Pointer(&ioSync))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//sys connectx(fd int, endpoints *SaEndpoints, associd SaeAssocID, flags uint32, iov []Iovec, n *uintptr, connid *SaeConnID) (err error)
|
//sys connectx(fd int, endpoints *SaEndpoints, associd SaeAssocID, flags uint32, iov []Iovec, n *uintptr, connid *SaeConnID) (err error)
|
||||||
//sys sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error)
|
//sys sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error)
|
||||||
|
|
||||||
|
|||||||
@@ -300,6 +300,10 @@ func Uname(uname *Utsname) error {
|
|||||||
//sys Pathconf(path string, name int) (val int, err error)
|
//sys Pathconf(path string, name int) (val int, err error)
|
||||||
//sys pread(fd int, p []byte, offset int64) (n int, err error)
|
//sys pread(fd int, p []byte, offset int64) (n int, err error)
|
||||||
//sys pwrite(fd int, p []byte, offset int64) (n int, err error)
|
//sys pwrite(fd int, p []byte, offset int64) (n int, err error)
|
||||||
|
//sys readv(fd int, iovecs []Iovec) (n int, err error)
|
||||||
|
//sys writev(fd int, iovecs []Iovec) (n int, err error)
|
||||||
|
//sys preadv(fd int, iovecs []Iovec, offset int64) (n int, err error)
|
||||||
|
//sys pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error)
|
||||||
//sys read(fd int, p []byte) (n int, err error)
|
//sys read(fd int, p []byte) (n int, err error)
|
||||||
//sys Readlink(path string, buf []byte) (n int, err error)
|
//sys Readlink(path string, buf []byte) (n int, err error)
|
||||||
//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error)
|
//sys Readlinkat(dirfd int, path string, buf []byte) (n int, err error)
|
||||||
|
|||||||
@@ -1633,6 +1633,90 @@ var libc_pwrite_trampoline_addr uintptr
|
|||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func readv(fd int, iovecs []Iovec) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall(libc_readv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_readv_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_readv readv "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func writev(fd int, iovecs []Iovec) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall(libc_writev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_writev_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_writev writev "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func preadv(fd int, iovecs []Iovec, offset int64) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall6(libc_preadv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), uintptr(offset>>32), 0)
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_preadv_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_preadv preadv "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall6(libc_pwritev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), uintptr(offset>>32), 0)
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_pwritev_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_pwritev pwritev "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func read(fd int, p []byte) (n int, err error) {
|
func read(fd int, p []byte) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
|
|||||||
@@ -498,6 +498,26 @@ TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0
|
|||||||
GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $4
|
GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $4
|
||||||
DATA ·libc_pwrite_trampoline_addr(SB)/4, $libc_pwrite_trampoline<>(SB)
|
DATA ·libc_pwrite_trampoline_addr(SB)/4, $libc_pwrite_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_readv_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_readv(SB)
|
||||||
|
GLOBL ·libc_readv_trampoline_addr(SB), RODATA, $4
|
||||||
|
DATA ·libc_readv_trampoline_addr(SB)/4, $libc_readv_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_writev_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_writev(SB)
|
||||||
|
GLOBL ·libc_writev_trampoline_addr(SB), RODATA, $4
|
||||||
|
DATA ·libc_writev_trampoline_addr(SB)/4, $libc_writev_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_preadv_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_preadv(SB)
|
||||||
|
GLOBL ·libc_preadv_trampoline_addr(SB), RODATA, $4
|
||||||
|
DATA ·libc_preadv_trampoline_addr(SB)/4, $libc_preadv_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_pwritev_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_pwritev(SB)
|
||||||
|
GLOBL ·libc_pwritev_trampoline_addr(SB), RODATA, $4
|
||||||
|
DATA ·libc_pwritev_trampoline_addr(SB)/4, $libc_pwritev_trampoline<>(SB)
|
||||||
|
|
||||||
TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0
|
TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
JMP libc_read(SB)
|
JMP libc_read(SB)
|
||||||
GLOBL ·libc_read_trampoline_addr(SB), RODATA, $4
|
GLOBL ·libc_read_trampoline_addr(SB), RODATA, $4
|
||||||
|
|||||||
@@ -1633,6 +1633,90 @@ var libc_pwrite_trampoline_addr uintptr
|
|||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func readv(fd int, iovecs []Iovec) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall(libc_readv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_readv_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_readv readv "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func writev(fd int, iovecs []Iovec) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall(libc_writev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_writev_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_writev writev "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func preadv(fd int, iovecs []Iovec, offset int64) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall6(libc_preadv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0)
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_preadv_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_preadv preadv "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall6(libc_pwritev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0)
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_pwritev_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_pwritev pwritev "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func read(fd int, p []byte) (n int, err error) {
|
func read(fd int, p []byte) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
|
|||||||
@@ -498,6 +498,26 @@ TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0
|
|||||||
GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $8
|
GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $8
|
||||||
DATA ·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB)
|
DATA ·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_readv_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_readv(SB)
|
||||||
|
GLOBL ·libc_readv_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_readv_trampoline_addr(SB)/8, $libc_readv_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_writev_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_writev(SB)
|
||||||
|
GLOBL ·libc_writev_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_writev_trampoline_addr(SB)/8, $libc_writev_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_preadv_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_preadv(SB)
|
||||||
|
GLOBL ·libc_preadv_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_preadv_trampoline_addr(SB)/8, $libc_preadv_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_pwritev_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_pwritev(SB)
|
||||||
|
GLOBL ·libc_pwritev_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_pwritev_trampoline_addr(SB)/8, $libc_pwritev_trampoline<>(SB)
|
||||||
|
|
||||||
TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0
|
TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
JMP libc_read(SB)
|
JMP libc_read(SB)
|
||||||
GLOBL ·libc_read_trampoline_addr(SB), RODATA, $8
|
GLOBL ·libc_read_trampoline_addr(SB), RODATA, $8
|
||||||
|
|||||||
@@ -1633,6 +1633,90 @@ var libc_pwrite_trampoline_addr uintptr
|
|||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func readv(fd int, iovecs []Iovec) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall(libc_readv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_readv_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_readv readv "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func writev(fd int, iovecs []Iovec) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall(libc_writev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_writev_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_writev writev "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func preadv(fd int, iovecs []Iovec, offset int64) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall6(libc_preadv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), 0, uintptr(offset), uintptr(offset>>32))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_preadv_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_preadv preadv "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall6(libc_pwritev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), 0, uintptr(offset), uintptr(offset>>32))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_pwritev_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_pwritev pwritev "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func read(fd int, p []byte) (n int, err error) {
|
func read(fd int, p []byte) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
|
|||||||
@@ -498,6 +498,26 @@ TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0
|
|||||||
GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $4
|
GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $4
|
||||||
DATA ·libc_pwrite_trampoline_addr(SB)/4, $libc_pwrite_trampoline<>(SB)
|
DATA ·libc_pwrite_trampoline_addr(SB)/4, $libc_pwrite_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_readv_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_readv(SB)
|
||||||
|
GLOBL ·libc_readv_trampoline_addr(SB), RODATA, $4
|
||||||
|
DATA ·libc_readv_trampoline_addr(SB)/4, $libc_readv_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_writev_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_writev(SB)
|
||||||
|
GLOBL ·libc_writev_trampoline_addr(SB), RODATA, $4
|
||||||
|
DATA ·libc_writev_trampoline_addr(SB)/4, $libc_writev_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_preadv_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_preadv(SB)
|
||||||
|
GLOBL ·libc_preadv_trampoline_addr(SB), RODATA, $4
|
||||||
|
DATA ·libc_preadv_trampoline_addr(SB)/4, $libc_preadv_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_pwritev_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_pwritev(SB)
|
||||||
|
GLOBL ·libc_pwritev_trampoline_addr(SB), RODATA, $4
|
||||||
|
DATA ·libc_pwritev_trampoline_addr(SB)/4, $libc_pwritev_trampoline<>(SB)
|
||||||
|
|
||||||
TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0
|
TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
JMP libc_read(SB)
|
JMP libc_read(SB)
|
||||||
GLOBL ·libc_read_trampoline_addr(SB), RODATA, $4
|
GLOBL ·libc_read_trampoline_addr(SB), RODATA, $4
|
||||||
|
|||||||
@@ -1633,6 +1633,90 @@ var libc_pwrite_trampoline_addr uintptr
|
|||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func readv(fd int, iovecs []Iovec) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall(libc_readv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_readv_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_readv readv "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func writev(fd int, iovecs []Iovec) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall(libc_writev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_writev_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_writev writev "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func preadv(fd int, iovecs []Iovec, offset int64) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall6(libc_preadv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0)
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_preadv_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_preadv preadv "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall6(libc_pwritev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0)
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_pwritev_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_pwritev pwritev "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func read(fd int, p []byte) (n int, err error) {
|
func read(fd int, p []byte) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
|
|||||||
@@ -498,6 +498,26 @@ TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0
|
|||||||
GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $8
|
GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $8
|
||||||
DATA ·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB)
|
DATA ·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_readv_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_readv(SB)
|
||||||
|
GLOBL ·libc_readv_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_readv_trampoline_addr(SB)/8, $libc_readv_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_writev_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_writev(SB)
|
||||||
|
GLOBL ·libc_writev_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_writev_trampoline_addr(SB)/8, $libc_writev_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_preadv_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_preadv(SB)
|
||||||
|
GLOBL ·libc_preadv_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_preadv_trampoline_addr(SB)/8, $libc_preadv_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_pwritev_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_pwritev(SB)
|
||||||
|
GLOBL ·libc_pwritev_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_pwritev_trampoline_addr(SB)/8, $libc_pwritev_trampoline<>(SB)
|
||||||
|
|
||||||
TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0
|
TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
JMP libc_read(SB)
|
JMP libc_read(SB)
|
||||||
GLOBL ·libc_read_trampoline_addr(SB), RODATA, $8
|
GLOBL ·libc_read_trampoline_addr(SB), RODATA, $8
|
||||||
|
|||||||
@@ -1633,6 +1633,90 @@ var libc_pwrite_trampoline_addr uintptr
|
|||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func readv(fd int, iovecs []Iovec) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall(libc_readv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_readv_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_readv readv "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func writev(fd int, iovecs []Iovec) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall(libc_writev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_writev_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_writev writev "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func preadv(fd int, iovecs []Iovec, offset int64) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall6(libc_preadv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0)
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_preadv_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_preadv preadv "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall6(libc_pwritev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0)
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_pwritev_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_pwritev pwritev "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func read(fd int, p []byte) (n int, err error) {
|
func read(fd int, p []byte) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
|
|||||||
@@ -498,6 +498,26 @@ TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0
|
|||||||
GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $8
|
GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $8
|
||||||
DATA ·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB)
|
DATA ·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_readv_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_readv(SB)
|
||||||
|
GLOBL ·libc_readv_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_readv_trampoline_addr(SB)/8, $libc_readv_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_writev_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_writev(SB)
|
||||||
|
GLOBL ·libc_writev_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_writev_trampoline_addr(SB)/8, $libc_writev_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_preadv_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_preadv(SB)
|
||||||
|
GLOBL ·libc_preadv_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_preadv_trampoline_addr(SB)/8, $libc_preadv_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_pwritev_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_pwritev(SB)
|
||||||
|
GLOBL ·libc_pwritev_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_pwritev_trampoline_addr(SB)/8, $libc_pwritev_trampoline<>(SB)
|
||||||
|
|
||||||
TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0
|
TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
JMP libc_read(SB)
|
JMP libc_read(SB)
|
||||||
GLOBL ·libc_read_trampoline_addr(SB), RODATA, $8
|
GLOBL ·libc_read_trampoline_addr(SB), RODATA, $8
|
||||||
|
|||||||
@@ -1633,6 +1633,90 @@ var libc_pwrite_trampoline_addr uintptr
|
|||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func readv(fd int, iovecs []Iovec) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall(libc_readv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_readv_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_readv readv "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func writev(fd int, iovecs []Iovec) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall(libc_writev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_writev_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_writev writev "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func preadv(fd int, iovecs []Iovec, offset int64) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall6(libc_preadv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0)
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_preadv_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_preadv preadv "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall6(libc_pwritev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0)
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_pwritev_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_pwritev pwritev "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func read(fd int, p []byte) (n int, err error) {
|
func read(fd int, p []byte) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
|
|||||||
@@ -597,6 +597,30 @@ TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0
|
|||||||
GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $8
|
GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $8
|
||||||
DATA ·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB)
|
DATA ·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_readv_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
CALL libc_readv(SB)
|
||||||
|
RET
|
||||||
|
GLOBL ·libc_readv_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_readv_trampoline_addr(SB)/8, $libc_readv_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_writev_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
CALL libc_writev(SB)
|
||||||
|
RET
|
||||||
|
GLOBL ·libc_writev_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_writev_trampoline_addr(SB)/8, $libc_writev_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_preadv_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
CALL libc_preadv(SB)
|
||||||
|
RET
|
||||||
|
GLOBL ·libc_preadv_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_preadv_trampoline_addr(SB)/8, $libc_preadv_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_pwritev_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
CALL libc_pwritev(SB)
|
||||||
|
RET
|
||||||
|
GLOBL ·libc_pwritev_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_pwritev_trampoline_addr(SB)/8, $libc_pwritev_trampoline<>(SB)
|
||||||
|
|
||||||
TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0
|
TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
CALL libc_read(SB)
|
CALL libc_read(SB)
|
||||||
RET
|
RET
|
||||||
|
|||||||
@@ -1633,6 +1633,90 @@ var libc_pwrite_trampoline_addr uintptr
|
|||||||
|
|
||||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func readv(fd int, iovecs []Iovec) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall(libc_readv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_readv_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_readv readv "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func writev(fd int, iovecs []Iovec) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall(libc_writev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_writev_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_writev writev "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func preadv(fd int, iovecs []Iovec, offset int64) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall6(libc_preadv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0)
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_preadv_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_preadv preadv "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
|
func pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error) {
|
||||||
|
var _p0 unsafe.Pointer
|
||||||
|
if len(iovecs) > 0 {
|
||||||
|
_p0 = unsafe.Pointer(&iovecs[0])
|
||||||
|
} else {
|
||||||
|
_p0 = unsafe.Pointer(&_zero)
|
||||||
|
}
|
||||||
|
r0, _, e1 := syscall_syscall6(libc_pwritev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0)
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var libc_pwritev_trampoline_addr uintptr
|
||||||
|
|
||||||
|
//go:cgo_import_dynamic libc_pwritev pwritev "libc.so"
|
||||||
|
|
||||||
|
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||||
|
|
||||||
func read(fd int, p []byte) (n int, err error) {
|
func read(fd int, p []byte) (n int, err error) {
|
||||||
var _p0 unsafe.Pointer
|
var _p0 unsafe.Pointer
|
||||||
if len(p) > 0 {
|
if len(p) > 0 {
|
||||||
|
|||||||
@@ -498,6 +498,26 @@ TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0
|
|||||||
GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $8
|
GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $8
|
||||||
DATA ·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB)
|
DATA ·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_readv_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_readv(SB)
|
||||||
|
GLOBL ·libc_readv_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_readv_trampoline_addr(SB)/8, $libc_readv_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_writev_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_writev(SB)
|
||||||
|
GLOBL ·libc_writev_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_writev_trampoline_addr(SB)/8, $libc_writev_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_preadv_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_preadv(SB)
|
||||||
|
GLOBL ·libc_preadv_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_preadv_trampoline_addr(SB)/8, $libc_preadv_trampoline<>(SB)
|
||||||
|
|
||||||
|
TEXT libc_pwritev_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_pwritev(SB)
|
||||||
|
GLOBL ·libc_pwritev_trampoline_addr(SB), RODATA, $8
|
||||||
|
DATA ·libc_pwritev_trampoline_addr(SB)/8, $libc_pwritev_trampoline<>(SB)
|
||||||
|
|
||||||
TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0
|
TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0
|
||||||
JMP libc_read(SB)
|
JMP libc_read(SB)
|
||||||
GLOBL ·libc_read_trampoline_addr(SB), RODATA, $8
|
GLOBL ·libc_read_trampoline_addr(SB), RODATA, $8
|
||||||
|
|||||||
Reference in New Issue
Block a user