github.com/MerlinKodo/gvisor@v0.0.0-20231110090155-957f62ecf90e/pkg/lisafs/lisafs_abi_autogen_unsafe.go (about) 1 // Automatically generated marshal implementation. See tools/go_marshal. 2 3 package lisafs 4 5 import ( 6 "github.com/MerlinKodo/gvisor/pkg/abi/linux" 7 "github.com/MerlinKodo/gvisor/pkg/gohacks" 8 "github.com/MerlinKodo/gvisor/pkg/hostarch" 9 "github.com/MerlinKodo/gvisor/pkg/marshal" 10 "io" 11 "reflect" 12 "runtime" 13 "unsafe" 14 ) 15 16 // Marshallable types used by this file. 17 var _ marshal.Marshallable = (*AcceptReq)(nil) 18 var _ marshal.Marshallable = (*BindAtResp)(nil) 19 var _ marshal.Marshallable = (*ChannelResp)(nil) 20 var _ marshal.Marshallable = (*ConnectReq)(nil) 21 var _ marshal.Marshallable = (*ErrorResp)(nil) 22 var _ marshal.Marshallable = (*FAllocateReq)(nil) 23 var _ marshal.Marshallable = (*FDID)(nil) 24 var _ marshal.Marshallable = (*FListXattrReq)(nil) 25 var _ marshal.Marshallable = (*FStatFSReq)(nil) 26 var _ marshal.Marshallable = (*FlushReq)(nil) 27 var _ marshal.Marshallable = (*GID)(nil) 28 var _ marshal.Marshallable = (*Getdents64Req)(nil) 29 var _ marshal.Marshallable = (*Inode)(nil) 30 var _ marshal.Marshallable = (*LinkAtResp)(nil) 31 var _ marshal.Marshallable = (*ListenReq)(nil) 32 var _ marshal.Marshallable = (*MID)(nil) 33 var _ marshal.Marshallable = (*MkdirAtResp)(nil) 34 var _ marshal.Marshallable = (*MknodAtResp)(nil) 35 var _ marshal.Marshallable = (*MsgDynamic)(nil) 36 var _ marshal.Marshallable = (*MsgSimple)(nil) 37 var _ marshal.Marshallable = (*OpenAtReq)(nil) 38 var _ marshal.Marshallable = (*OpenAtResp)(nil) 39 var _ marshal.Marshallable = (*OpenCreateAtResp)(nil) 40 var _ marshal.Marshallable = (*PReadReq)(nil) 41 var _ marshal.Marshallable = (*PWriteResp)(nil) 42 var _ marshal.Marshallable = (*ReadLinkAtReq)(nil) 43 var _ marshal.Marshallable = (*SetStatReq)(nil) 44 var _ marshal.Marshallable = (*SetStatResp)(nil) 45 var _ marshal.Marshallable = (*StatFS)(nil) 46 var _ marshal.Marshallable = (*StatReq)(nil) 47 var _ marshal.Marshallable = (*SymlinkAtResp)(nil) 48 var _ marshal.Marshallable = (*UID)(nil) 49 var _ marshal.Marshallable = (*channelHeader)(nil) 50 var _ marshal.Marshallable = (*createCommon)(nil) 51 var _ marshal.Marshallable = (*linux.FileMode)(nil) 52 var _ marshal.Marshallable = (*linux.Statx)(nil) 53 var _ marshal.Marshallable = (*linux.Timespec)(nil) 54 var _ marshal.Marshallable = (*sockHeader)(nil) 55 56 // SizeBytes implements marshal.Marshallable.SizeBytes. 57 func (c *channelHeader) SizeBytes() int { 58 return 2 + 59 (*MID)(nil).SizeBytes() 60 } 61 62 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 63 func (c *channelHeader) MarshalBytes(dst []byte) []byte { 64 dst = c.message.MarshalUnsafe(dst) 65 dst[0] = byte(c.numFDs) 66 dst = dst[1:] 67 // Padding: dst[:sizeof(uint8)] ~= uint8(0) 68 dst = dst[1:] 69 return dst 70 } 71 72 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 73 func (c *channelHeader) UnmarshalBytes(src []byte) []byte { 74 src = c.message.UnmarshalUnsafe(src) 75 c.numFDs = uint8(src[0]) 76 src = src[1:] 77 // Padding: var _ uint8 ~= src[:sizeof(uint8)] 78 src = src[1:] 79 return src 80 } 81 82 // Packed implements marshal.Marshallable.Packed. 83 //go:nosplit 84 func (c *channelHeader) Packed() bool { 85 return c.message.Packed() 86 } 87 88 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 89 func (c *channelHeader) MarshalUnsafe(dst []byte) []byte { 90 if c.message.Packed() { 91 size := c.SizeBytes() 92 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(c), uintptr(size)) 93 return dst[size:] 94 } 95 // Type channelHeader doesn't have a packed layout in memory, fallback to MarshalBytes. 96 return c.MarshalBytes(dst) 97 } 98 99 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 100 func (c *channelHeader) UnmarshalUnsafe(src []byte) []byte { 101 if c.message.Packed() { 102 size := c.SizeBytes() 103 gohacks.Memmove(unsafe.Pointer(c), unsafe.Pointer(&src[0]), uintptr(size)) 104 return src[size:] 105 } 106 // Type channelHeader doesn't have a packed layout in memory, fallback to UnmarshalBytes. 107 return c.UnmarshalBytes(src) 108 } 109 110 // CopyOutN implements marshal.Marshallable.CopyOutN. 111 func (c *channelHeader) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 112 if !c.message.Packed() { 113 // Type channelHeader doesn't have a packed layout in memory, fall back to MarshalBytes. 114 buf := cc.CopyScratchBuffer(c.SizeBytes()) // escapes: okay. 115 c.MarshalBytes(buf) // escapes: fallback. 116 return cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 117 } 118 119 // Construct a slice backed by dst's underlying memory. 120 var buf []byte 121 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 122 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(c))) 123 hdr.Len = c.SizeBytes() 124 hdr.Cap = c.SizeBytes() 125 126 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 127 // Since we bypassed the compiler's escape analysis, indicate that c 128 // must live until the use above. 129 runtime.KeepAlive(c) // escapes: replaced by intrinsic. 130 return length, err 131 } 132 133 // CopyOut implements marshal.Marshallable.CopyOut. 134 func (c *channelHeader) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 135 return c.CopyOutN(cc, addr, c.SizeBytes()) 136 } 137 138 // CopyInN implements marshal.Marshallable.CopyInN. 139 func (c *channelHeader) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 140 if !c.message.Packed() { 141 // Type channelHeader doesn't have a packed layout in memory, fall back to UnmarshalBytes. 142 buf := cc.CopyScratchBuffer(c.SizeBytes()) // escapes: okay. 143 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 144 // Unmarshal unconditionally. If we had a short copy-in, this results in a 145 // partially unmarshalled struct. 146 c.UnmarshalBytes(buf) // escapes: fallback. 147 return length, err 148 } 149 150 // Construct a slice backed by dst's underlying memory. 151 var buf []byte 152 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 153 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(c))) 154 hdr.Len = c.SizeBytes() 155 hdr.Cap = c.SizeBytes() 156 157 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 158 // Since we bypassed the compiler's escape analysis, indicate that c 159 // must live until the use above. 160 runtime.KeepAlive(c) // escapes: replaced by intrinsic. 161 return length, err 162 } 163 164 // CopyIn implements marshal.Marshallable.CopyIn. 165 func (c *channelHeader) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 166 return c.CopyInN(cc, addr, c.SizeBytes()) 167 } 168 169 // WriteTo implements io.WriterTo.WriteTo. 170 func (c *channelHeader) WriteTo(writer io.Writer) (int64, error) { 171 if !c.message.Packed() { 172 // Type channelHeader doesn't have a packed layout in memory, fall back to MarshalBytes. 173 buf := make([]byte, c.SizeBytes()) 174 c.MarshalBytes(buf) 175 length, err := writer.Write(buf) 176 return int64(length), err 177 } 178 179 // Construct a slice backed by dst's underlying memory. 180 var buf []byte 181 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 182 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(c))) 183 hdr.Len = c.SizeBytes() 184 hdr.Cap = c.SizeBytes() 185 186 length, err := writer.Write(buf) 187 // Since we bypassed the compiler's escape analysis, indicate that c 188 // must live until the use above. 189 runtime.KeepAlive(c) // escapes: replaced by intrinsic. 190 return int64(length), err 191 } 192 193 // SizeBytes implements marshal.Marshallable.SizeBytes. 194 //go:nosplit 195 func (f *FDID) SizeBytes() int { 196 return 8 197 } 198 199 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 200 func (f *FDID) MarshalBytes(dst []byte) []byte { 201 hostarch.ByteOrder.PutUint64(dst[:8], uint64(*f)) 202 return dst[8:] 203 } 204 205 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 206 func (f *FDID) UnmarshalBytes(src []byte) []byte { 207 *f = FDID(uint64(hostarch.ByteOrder.Uint64(src[:8]))) 208 return src[8:] 209 } 210 211 // Packed implements marshal.Marshallable.Packed. 212 //go:nosplit 213 func (f *FDID) Packed() bool { 214 // Scalar newtypes are always packed. 215 return true 216 } 217 218 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 219 func (f *FDID) MarshalUnsafe(dst []byte) []byte { 220 size := f.SizeBytes() 221 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(f), uintptr(size)) 222 return dst[size:] 223 } 224 225 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 226 func (f *FDID) UnmarshalUnsafe(src []byte) []byte { 227 size := f.SizeBytes() 228 gohacks.Memmove(unsafe.Pointer(f), unsafe.Pointer(&src[0]), uintptr(size)) 229 return src[size:] 230 } 231 232 // CopyOutN implements marshal.Marshallable.CopyOutN. 233 func (f *FDID) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 234 // Construct a slice backed by dst's underlying memory. 235 var buf []byte 236 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 237 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(f))) 238 hdr.Len = f.SizeBytes() 239 hdr.Cap = f.SizeBytes() 240 241 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 242 // Since we bypassed the compiler's escape analysis, indicate that f 243 // must live until the use above. 244 runtime.KeepAlive(f) // escapes: replaced by intrinsic. 245 return length, err 246 } 247 248 // CopyOut implements marshal.Marshallable.CopyOut. 249 func (f *FDID) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 250 return f.CopyOutN(cc, addr, f.SizeBytes()) 251 } 252 253 // CopyInN implements marshal.Marshallable.CopyInN. 254 func (f *FDID) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 255 // Construct a slice backed by dst's underlying memory. 256 var buf []byte 257 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 258 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(f))) 259 hdr.Len = f.SizeBytes() 260 hdr.Cap = f.SizeBytes() 261 262 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 263 // Since we bypassed the compiler's escape analysis, indicate that f 264 // must live until the use above. 265 runtime.KeepAlive(f) // escapes: replaced by intrinsic. 266 return length, err 267 } 268 269 // CopyIn implements marshal.Marshallable.CopyIn. 270 func (f *FDID) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 271 return f.CopyInN(cc, addr, f.SizeBytes()) 272 } 273 274 // WriteTo implements io.WriterTo.WriteTo. 275 func (f *FDID) WriteTo(writer io.Writer) (int64, error) { 276 // Construct a slice backed by dst's underlying memory. 277 var buf []byte 278 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 279 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(f))) 280 hdr.Len = f.SizeBytes() 281 hdr.Cap = f.SizeBytes() 282 283 length, err := writer.Write(buf) 284 // Since we bypassed the compiler's escape analysis, indicate that f 285 // must live until the use above. 286 runtime.KeepAlive(f) // escapes: replaced by intrinsic. 287 return int64(length), err 288 } 289 290 // CheckedMarshal implements marshal.CheckedMarshallable.CheckedMarshal. 291 func (f *FDID) CheckedMarshal(dst []byte) ([]byte, bool) { 292 size := f.SizeBytes() 293 if size > len(dst) { 294 return dst, false 295 } 296 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(f), uintptr(size)) 297 return dst[size:], true 298 } 299 300 // CheckedUnmarshal implements marshal.CheckedMarshallable.CheckedUnmarshal. 301 func (f *FDID) CheckedUnmarshal(src []byte) ([]byte, bool) { 302 size := f.SizeBytes() 303 if size > len(src) { 304 return src, false 305 } 306 gohacks.Memmove(unsafe.Pointer(f), unsafe.Pointer(&src[0]), uintptr(size)) 307 return src[size:], true 308 } 309 310 // CopyFDIDSliceIn copies in a slice of FDID objects from the task's memory. 311 func CopyFDIDSliceIn(cc marshal.CopyContext, addr hostarch.Addr, dst []FDID) (int, error) { 312 count := len(dst) 313 if count == 0 { 314 return 0, nil 315 } 316 size := (*FDID)(nil).SizeBytes() 317 318 ptr := unsafe.Pointer(&dst) 319 val := gohacks.Noescape(unsafe.Pointer((*reflect.SliceHeader)(ptr).Data)) 320 321 // Construct a slice backed by dst's underlying memory. 322 var buf []byte 323 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 324 hdr.Data = uintptr(val) 325 hdr.Len = size * count 326 hdr.Cap = size * count 327 328 length, err := cc.CopyInBytes(addr, buf) // escapes: okay. 329 // Since we bypassed the compiler's escape analysis, indicate that dst 330 // must live until the use above. 331 runtime.KeepAlive(dst) // escapes: replaced by intrinsic. 332 return length, err 333 } 334 335 // CopyFDIDSliceOut copies a slice of FDID objects to the task's memory. 336 func CopyFDIDSliceOut(cc marshal.CopyContext, addr hostarch.Addr, src []FDID) (int, error) { 337 count := len(src) 338 if count == 0 { 339 return 0, nil 340 } 341 size := (*FDID)(nil).SizeBytes() 342 343 ptr := unsafe.Pointer(&src) 344 val := gohacks.Noescape(unsafe.Pointer((*reflect.SliceHeader)(ptr).Data)) 345 346 // Construct a slice backed by dst's underlying memory. 347 var buf []byte 348 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 349 hdr.Data = uintptr(val) 350 hdr.Len = size * count 351 hdr.Cap = size * count 352 353 length, err := cc.CopyOutBytes(addr, buf) // escapes: okay. 354 // Since we bypassed the compiler's escape analysis, indicate that src 355 // must live until the use above. 356 runtime.KeepAlive(src) // escapes: replaced by intrinsic. 357 return length, err 358 } 359 360 // MarshalUnsafeFDIDSlice is like FDID.MarshalUnsafe, but for a []FDID. 361 func MarshalUnsafeFDIDSlice(src []FDID, dst []byte) []byte { 362 count := len(src) 363 if count == 0 { 364 return dst 365 } 366 size := (*FDID)(nil).SizeBytes() 367 368 buf := dst[:size*count] 369 gohacks.Memmove(unsafe.Pointer(&buf[0]), unsafe.Pointer(&src[0]), uintptr(len(buf))) 370 return dst[size*count:] 371 } 372 373 // UnmarshalUnsafeFDIDSlice is like FDID.UnmarshalUnsafe, but for a []FDID. 374 func UnmarshalUnsafeFDIDSlice(dst []FDID, src []byte) []byte { 375 count := len(dst) 376 if count == 0 { 377 return src 378 } 379 size := (*FDID)(nil).SizeBytes() 380 381 buf := src[:size*count] 382 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(&buf[0]), uintptr(len(buf))) 383 return src[size*count:] 384 } 385 386 // SizeBytes implements marshal.Marshallable.SizeBytes. 387 func (a *AcceptReq) SizeBytes() int { 388 return 0 + 389 (*FDID)(nil).SizeBytes() 390 } 391 392 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 393 func (a *AcceptReq) MarshalBytes(dst []byte) []byte { 394 dst = a.FD.MarshalUnsafe(dst) 395 return dst 396 } 397 398 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 399 func (a *AcceptReq) UnmarshalBytes(src []byte) []byte { 400 src = a.FD.UnmarshalUnsafe(src) 401 return src 402 } 403 404 // Packed implements marshal.Marshallable.Packed. 405 //go:nosplit 406 func (a *AcceptReq) Packed() bool { 407 return a.FD.Packed() 408 } 409 410 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 411 func (a *AcceptReq) MarshalUnsafe(dst []byte) []byte { 412 if a.FD.Packed() { 413 size := a.SizeBytes() 414 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(a), uintptr(size)) 415 return dst[size:] 416 } 417 // Type AcceptReq doesn't have a packed layout in memory, fallback to MarshalBytes. 418 return a.MarshalBytes(dst) 419 } 420 421 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 422 func (a *AcceptReq) UnmarshalUnsafe(src []byte) []byte { 423 if a.FD.Packed() { 424 size := a.SizeBytes() 425 gohacks.Memmove(unsafe.Pointer(a), unsafe.Pointer(&src[0]), uintptr(size)) 426 return src[size:] 427 } 428 // Type AcceptReq doesn't have a packed layout in memory, fallback to UnmarshalBytes. 429 return a.UnmarshalBytes(src) 430 } 431 432 // CopyOutN implements marshal.Marshallable.CopyOutN. 433 func (a *AcceptReq) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 434 if !a.FD.Packed() { 435 // Type AcceptReq doesn't have a packed layout in memory, fall back to MarshalBytes. 436 buf := cc.CopyScratchBuffer(a.SizeBytes()) // escapes: okay. 437 a.MarshalBytes(buf) // escapes: fallback. 438 return cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 439 } 440 441 // Construct a slice backed by dst's underlying memory. 442 var buf []byte 443 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 444 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(a))) 445 hdr.Len = a.SizeBytes() 446 hdr.Cap = a.SizeBytes() 447 448 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 449 // Since we bypassed the compiler's escape analysis, indicate that a 450 // must live until the use above. 451 runtime.KeepAlive(a) // escapes: replaced by intrinsic. 452 return length, err 453 } 454 455 // CopyOut implements marshal.Marshallable.CopyOut. 456 func (a *AcceptReq) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 457 return a.CopyOutN(cc, addr, a.SizeBytes()) 458 } 459 460 // CopyInN implements marshal.Marshallable.CopyInN. 461 func (a *AcceptReq) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 462 if !a.FD.Packed() { 463 // Type AcceptReq doesn't have a packed layout in memory, fall back to UnmarshalBytes. 464 buf := cc.CopyScratchBuffer(a.SizeBytes()) // escapes: okay. 465 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 466 // Unmarshal unconditionally. If we had a short copy-in, this results in a 467 // partially unmarshalled struct. 468 a.UnmarshalBytes(buf) // escapes: fallback. 469 return length, err 470 } 471 472 // Construct a slice backed by dst's underlying memory. 473 var buf []byte 474 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 475 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(a))) 476 hdr.Len = a.SizeBytes() 477 hdr.Cap = a.SizeBytes() 478 479 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 480 // Since we bypassed the compiler's escape analysis, indicate that a 481 // must live until the use above. 482 runtime.KeepAlive(a) // escapes: replaced by intrinsic. 483 return length, err 484 } 485 486 // CopyIn implements marshal.Marshallable.CopyIn. 487 func (a *AcceptReq) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 488 return a.CopyInN(cc, addr, a.SizeBytes()) 489 } 490 491 // WriteTo implements io.WriterTo.WriteTo. 492 func (a *AcceptReq) WriteTo(writer io.Writer) (int64, error) { 493 if !a.FD.Packed() { 494 // Type AcceptReq doesn't have a packed layout in memory, fall back to MarshalBytes. 495 buf := make([]byte, a.SizeBytes()) 496 a.MarshalBytes(buf) 497 length, err := writer.Write(buf) 498 return int64(length), err 499 } 500 501 // Construct a slice backed by dst's underlying memory. 502 var buf []byte 503 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 504 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(a))) 505 hdr.Len = a.SizeBytes() 506 hdr.Cap = a.SizeBytes() 507 508 length, err := writer.Write(buf) 509 // Since we bypassed the compiler's escape analysis, indicate that a 510 // must live until the use above. 511 runtime.KeepAlive(a) // escapes: replaced by intrinsic. 512 return int64(length), err 513 } 514 515 // CheckedMarshal implements marshal.CheckedMarshallable.CheckedMarshal. 516 func (a *AcceptReq) CheckedMarshal(dst []byte) ([]byte, bool) { 517 if a.SizeBytes() > len(dst) { 518 return dst, false 519 } 520 return a.MarshalUnsafe(dst), true 521 } 522 523 // CheckedUnmarshal implements marshal.CheckedMarshallable.CheckedUnmarshal. 524 func (a *AcceptReq) CheckedUnmarshal(src []byte) ([]byte, bool) { 525 if a.SizeBytes() > len(src) { 526 return src, false 527 } 528 return a.UnmarshalUnsafe(src), true 529 } 530 531 // SizeBytes implements marshal.Marshallable.SizeBytes. 532 func (b *BindAtResp) SizeBytes() int { 533 return 0 + 534 (*Inode)(nil).SizeBytes() + 535 (*FDID)(nil).SizeBytes() 536 } 537 538 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 539 func (b *BindAtResp) MarshalBytes(dst []byte) []byte { 540 dst = b.Child.MarshalUnsafe(dst) 541 dst = b.BoundSocketFD.MarshalUnsafe(dst) 542 return dst 543 } 544 545 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 546 func (b *BindAtResp) UnmarshalBytes(src []byte) []byte { 547 src = b.Child.UnmarshalUnsafe(src) 548 src = b.BoundSocketFD.UnmarshalUnsafe(src) 549 return src 550 } 551 552 // Packed implements marshal.Marshallable.Packed. 553 //go:nosplit 554 func (b *BindAtResp) Packed() bool { 555 return b.BoundSocketFD.Packed() && b.Child.Packed() 556 } 557 558 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 559 func (b *BindAtResp) MarshalUnsafe(dst []byte) []byte { 560 if b.BoundSocketFD.Packed() && b.Child.Packed() { 561 size := b.SizeBytes() 562 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(b), uintptr(size)) 563 return dst[size:] 564 } 565 // Type BindAtResp doesn't have a packed layout in memory, fallback to MarshalBytes. 566 return b.MarshalBytes(dst) 567 } 568 569 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 570 func (b *BindAtResp) UnmarshalUnsafe(src []byte) []byte { 571 if b.BoundSocketFD.Packed() && b.Child.Packed() { 572 size := b.SizeBytes() 573 gohacks.Memmove(unsafe.Pointer(b), unsafe.Pointer(&src[0]), uintptr(size)) 574 return src[size:] 575 } 576 // Type BindAtResp doesn't have a packed layout in memory, fallback to UnmarshalBytes. 577 return b.UnmarshalBytes(src) 578 } 579 580 // CopyOutN implements marshal.Marshallable.CopyOutN. 581 func (b *BindAtResp) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 582 if !b.BoundSocketFD.Packed() && b.Child.Packed() { 583 // Type BindAtResp doesn't have a packed layout in memory, fall back to MarshalBytes. 584 buf := cc.CopyScratchBuffer(b.SizeBytes()) // escapes: okay. 585 b.MarshalBytes(buf) // escapes: fallback. 586 return cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 587 } 588 589 // Construct a slice backed by dst's underlying memory. 590 var buf []byte 591 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 592 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(b))) 593 hdr.Len = b.SizeBytes() 594 hdr.Cap = b.SizeBytes() 595 596 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 597 // Since we bypassed the compiler's escape analysis, indicate that b 598 // must live until the use above. 599 runtime.KeepAlive(b) // escapes: replaced by intrinsic. 600 return length, err 601 } 602 603 // CopyOut implements marshal.Marshallable.CopyOut. 604 func (b *BindAtResp) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 605 return b.CopyOutN(cc, addr, b.SizeBytes()) 606 } 607 608 // CopyInN implements marshal.Marshallable.CopyInN. 609 func (b *BindAtResp) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 610 if !b.BoundSocketFD.Packed() && b.Child.Packed() { 611 // Type BindAtResp doesn't have a packed layout in memory, fall back to UnmarshalBytes. 612 buf := cc.CopyScratchBuffer(b.SizeBytes()) // escapes: okay. 613 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 614 // Unmarshal unconditionally. If we had a short copy-in, this results in a 615 // partially unmarshalled struct. 616 b.UnmarshalBytes(buf) // escapes: fallback. 617 return length, err 618 } 619 620 // Construct a slice backed by dst's underlying memory. 621 var buf []byte 622 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 623 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(b))) 624 hdr.Len = b.SizeBytes() 625 hdr.Cap = b.SizeBytes() 626 627 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 628 // Since we bypassed the compiler's escape analysis, indicate that b 629 // must live until the use above. 630 runtime.KeepAlive(b) // escapes: replaced by intrinsic. 631 return length, err 632 } 633 634 // CopyIn implements marshal.Marshallable.CopyIn. 635 func (b *BindAtResp) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 636 return b.CopyInN(cc, addr, b.SizeBytes()) 637 } 638 639 // WriteTo implements io.WriterTo.WriteTo. 640 func (b *BindAtResp) WriteTo(writer io.Writer) (int64, error) { 641 if !b.BoundSocketFD.Packed() && b.Child.Packed() { 642 // Type BindAtResp doesn't have a packed layout in memory, fall back to MarshalBytes. 643 buf := make([]byte, b.SizeBytes()) 644 b.MarshalBytes(buf) 645 length, err := writer.Write(buf) 646 return int64(length), err 647 } 648 649 // Construct a slice backed by dst's underlying memory. 650 var buf []byte 651 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 652 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(b))) 653 hdr.Len = b.SizeBytes() 654 hdr.Cap = b.SizeBytes() 655 656 length, err := writer.Write(buf) 657 // Since we bypassed the compiler's escape analysis, indicate that b 658 // must live until the use above. 659 runtime.KeepAlive(b) // escapes: replaced by intrinsic. 660 return int64(length), err 661 } 662 663 // CheckedMarshal implements marshal.CheckedMarshallable.CheckedMarshal. 664 func (b *BindAtResp) CheckedMarshal(dst []byte) ([]byte, bool) { 665 if b.SizeBytes() > len(dst) { 666 return dst, false 667 } 668 return b.MarshalUnsafe(dst), true 669 } 670 671 // CheckedUnmarshal implements marshal.CheckedMarshallable.CheckedUnmarshal. 672 func (b *BindAtResp) CheckedUnmarshal(src []byte) ([]byte, bool) { 673 if b.SizeBytes() > len(src) { 674 return src, false 675 } 676 return b.UnmarshalUnsafe(src), true 677 } 678 679 // SizeBytes implements marshal.Marshallable.SizeBytes. 680 func (c *ChannelResp) SizeBytes() int { 681 return 16 682 } 683 684 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 685 func (c *ChannelResp) MarshalBytes(dst []byte) []byte { 686 hostarch.ByteOrder.PutUint64(dst[:8], uint64(c.dataOffset)) 687 dst = dst[8:] 688 hostarch.ByteOrder.PutUint64(dst[:8], uint64(c.dataLength)) 689 dst = dst[8:] 690 return dst 691 } 692 693 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 694 func (c *ChannelResp) UnmarshalBytes(src []byte) []byte { 695 c.dataOffset = int64(hostarch.ByteOrder.Uint64(src[:8])) 696 src = src[8:] 697 c.dataLength = uint64(hostarch.ByteOrder.Uint64(src[:8])) 698 src = src[8:] 699 return src 700 } 701 702 // Packed implements marshal.Marshallable.Packed. 703 //go:nosplit 704 func (c *ChannelResp) Packed() bool { 705 return true 706 } 707 708 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 709 func (c *ChannelResp) MarshalUnsafe(dst []byte) []byte { 710 size := c.SizeBytes() 711 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(c), uintptr(size)) 712 return dst[size:] 713 } 714 715 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 716 func (c *ChannelResp) UnmarshalUnsafe(src []byte) []byte { 717 size := c.SizeBytes() 718 gohacks.Memmove(unsafe.Pointer(c), unsafe.Pointer(&src[0]), uintptr(size)) 719 return src[size:] 720 } 721 722 // CopyOutN implements marshal.Marshallable.CopyOutN. 723 func (c *ChannelResp) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 724 // Construct a slice backed by dst's underlying memory. 725 var buf []byte 726 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 727 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(c))) 728 hdr.Len = c.SizeBytes() 729 hdr.Cap = c.SizeBytes() 730 731 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 732 // Since we bypassed the compiler's escape analysis, indicate that c 733 // must live until the use above. 734 runtime.KeepAlive(c) // escapes: replaced by intrinsic. 735 return length, err 736 } 737 738 // CopyOut implements marshal.Marshallable.CopyOut. 739 func (c *ChannelResp) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 740 return c.CopyOutN(cc, addr, c.SizeBytes()) 741 } 742 743 // CopyInN implements marshal.Marshallable.CopyInN. 744 func (c *ChannelResp) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 745 // Construct a slice backed by dst's underlying memory. 746 var buf []byte 747 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 748 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(c))) 749 hdr.Len = c.SizeBytes() 750 hdr.Cap = c.SizeBytes() 751 752 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 753 // Since we bypassed the compiler's escape analysis, indicate that c 754 // must live until the use above. 755 runtime.KeepAlive(c) // escapes: replaced by intrinsic. 756 return length, err 757 } 758 759 // CopyIn implements marshal.Marshallable.CopyIn. 760 func (c *ChannelResp) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 761 return c.CopyInN(cc, addr, c.SizeBytes()) 762 } 763 764 // WriteTo implements io.WriterTo.WriteTo. 765 func (c *ChannelResp) WriteTo(writer io.Writer) (int64, error) { 766 // Construct a slice backed by dst's underlying memory. 767 var buf []byte 768 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 769 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(c))) 770 hdr.Len = c.SizeBytes() 771 hdr.Cap = c.SizeBytes() 772 773 length, err := writer.Write(buf) 774 // Since we bypassed the compiler's escape analysis, indicate that c 775 // must live until the use above. 776 runtime.KeepAlive(c) // escapes: replaced by intrinsic. 777 return int64(length), err 778 } 779 780 // CheckedMarshal implements marshal.CheckedMarshallable.CheckedMarshal. 781 func (c *ChannelResp) CheckedMarshal(dst []byte) ([]byte, bool) { 782 if c.SizeBytes() > len(dst) { 783 return dst, false 784 } 785 return c.MarshalUnsafe(dst), true 786 } 787 788 // CheckedUnmarshal implements marshal.CheckedMarshallable.CheckedUnmarshal. 789 func (c *ChannelResp) CheckedUnmarshal(src []byte) ([]byte, bool) { 790 if c.SizeBytes() > len(src) { 791 return src, false 792 } 793 return c.UnmarshalUnsafe(src), true 794 } 795 796 // SizeBytes implements marshal.Marshallable.SizeBytes. 797 func (c *ConnectReq) SizeBytes() int { 798 return 8 + 799 (*FDID)(nil).SizeBytes() 800 } 801 802 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 803 func (c *ConnectReq) MarshalBytes(dst []byte) []byte { 804 dst = c.FD.MarshalUnsafe(dst) 805 hostarch.ByteOrder.PutUint32(dst[:4], uint32(c.SockType)) 806 dst = dst[4:] 807 // Padding: dst[:sizeof(uint32)] ~= uint32(0) 808 dst = dst[4:] 809 return dst 810 } 811 812 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 813 func (c *ConnectReq) UnmarshalBytes(src []byte) []byte { 814 src = c.FD.UnmarshalUnsafe(src) 815 c.SockType = uint32(hostarch.ByteOrder.Uint32(src[:4])) 816 src = src[4:] 817 // Padding: var _ uint32 ~= src[:sizeof(uint32)] 818 src = src[4:] 819 return src 820 } 821 822 // Packed implements marshal.Marshallable.Packed. 823 //go:nosplit 824 func (c *ConnectReq) Packed() bool { 825 return c.FD.Packed() 826 } 827 828 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 829 func (c *ConnectReq) MarshalUnsafe(dst []byte) []byte { 830 if c.FD.Packed() { 831 size := c.SizeBytes() 832 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(c), uintptr(size)) 833 return dst[size:] 834 } 835 // Type ConnectReq doesn't have a packed layout in memory, fallback to MarshalBytes. 836 return c.MarshalBytes(dst) 837 } 838 839 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 840 func (c *ConnectReq) UnmarshalUnsafe(src []byte) []byte { 841 if c.FD.Packed() { 842 size := c.SizeBytes() 843 gohacks.Memmove(unsafe.Pointer(c), unsafe.Pointer(&src[0]), uintptr(size)) 844 return src[size:] 845 } 846 // Type ConnectReq doesn't have a packed layout in memory, fallback to UnmarshalBytes. 847 return c.UnmarshalBytes(src) 848 } 849 850 // CopyOutN implements marshal.Marshallable.CopyOutN. 851 func (c *ConnectReq) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 852 if !c.FD.Packed() { 853 // Type ConnectReq doesn't have a packed layout in memory, fall back to MarshalBytes. 854 buf := cc.CopyScratchBuffer(c.SizeBytes()) // escapes: okay. 855 c.MarshalBytes(buf) // escapes: fallback. 856 return cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 857 } 858 859 // Construct a slice backed by dst's underlying memory. 860 var buf []byte 861 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 862 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(c))) 863 hdr.Len = c.SizeBytes() 864 hdr.Cap = c.SizeBytes() 865 866 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 867 // Since we bypassed the compiler's escape analysis, indicate that c 868 // must live until the use above. 869 runtime.KeepAlive(c) // escapes: replaced by intrinsic. 870 return length, err 871 } 872 873 // CopyOut implements marshal.Marshallable.CopyOut. 874 func (c *ConnectReq) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 875 return c.CopyOutN(cc, addr, c.SizeBytes()) 876 } 877 878 // CopyInN implements marshal.Marshallable.CopyInN. 879 func (c *ConnectReq) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 880 if !c.FD.Packed() { 881 // Type ConnectReq doesn't have a packed layout in memory, fall back to UnmarshalBytes. 882 buf := cc.CopyScratchBuffer(c.SizeBytes()) // escapes: okay. 883 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 884 // Unmarshal unconditionally. If we had a short copy-in, this results in a 885 // partially unmarshalled struct. 886 c.UnmarshalBytes(buf) // escapes: fallback. 887 return length, err 888 } 889 890 // Construct a slice backed by dst's underlying memory. 891 var buf []byte 892 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 893 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(c))) 894 hdr.Len = c.SizeBytes() 895 hdr.Cap = c.SizeBytes() 896 897 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 898 // Since we bypassed the compiler's escape analysis, indicate that c 899 // must live until the use above. 900 runtime.KeepAlive(c) // escapes: replaced by intrinsic. 901 return length, err 902 } 903 904 // CopyIn implements marshal.Marshallable.CopyIn. 905 func (c *ConnectReq) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 906 return c.CopyInN(cc, addr, c.SizeBytes()) 907 } 908 909 // WriteTo implements io.WriterTo.WriteTo. 910 func (c *ConnectReq) WriteTo(writer io.Writer) (int64, error) { 911 if !c.FD.Packed() { 912 // Type ConnectReq doesn't have a packed layout in memory, fall back to MarshalBytes. 913 buf := make([]byte, c.SizeBytes()) 914 c.MarshalBytes(buf) 915 length, err := writer.Write(buf) 916 return int64(length), err 917 } 918 919 // Construct a slice backed by dst's underlying memory. 920 var buf []byte 921 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 922 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(c))) 923 hdr.Len = c.SizeBytes() 924 hdr.Cap = c.SizeBytes() 925 926 length, err := writer.Write(buf) 927 // Since we bypassed the compiler's escape analysis, indicate that c 928 // must live until the use above. 929 runtime.KeepAlive(c) // escapes: replaced by intrinsic. 930 return int64(length), err 931 } 932 933 // CheckedMarshal implements marshal.CheckedMarshallable.CheckedMarshal. 934 func (c *ConnectReq) CheckedMarshal(dst []byte) ([]byte, bool) { 935 if c.SizeBytes() > len(dst) { 936 return dst, false 937 } 938 return c.MarshalUnsafe(dst), true 939 } 940 941 // CheckedUnmarshal implements marshal.CheckedMarshallable.CheckedUnmarshal. 942 func (c *ConnectReq) CheckedUnmarshal(src []byte) ([]byte, bool) { 943 if c.SizeBytes() > len(src) { 944 return src, false 945 } 946 return c.UnmarshalUnsafe(src), true 947 } 948 949 // SizeBytes implements marshal.Marshallable.SizeBytes. 950 func (e *ErrorResp) SizeBytes() int { 951 return 4 952 } 953 954 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 955 func (e *ErrorResp) MarshalBytes(dst []byte) []byte { 956 hostarch.ByteOrder.PutUint32(dst[:4], uint32(e.errno)) 957 dst = dst[4:] 958 return dst 959 } 960 961 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 962 func (e *ErrorResp) UnmarshalBytes(src []byte) []byte { 963 e.errno = uint32(hostarch.ByteOrder.Uint32(src[:4])) 964 src = src[4:] 965 return src 966 } 967 968 // Packed implements marshal.Marshallable.Packed. 969 //go:nosplit 970 func (e *ErrorResp) Packed() bool { 971 return true 972 } 973 974 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 975 func (e *ErrorResp) MarshalUnsafe(dst []byte) []byte { 976 size := e.SizeBytes() 977 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(e), uintptr(size)) 978 return dst[size:] 979 } 980 981 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 982 func (e *ErrorResp) UnmarshalUnsafe(src []byte) []byte { 983 size := e.SizeBytes() 984 gohacks.Memmove(unsafe.Pointer(e), unsafe.Pointer(&src[0]), uintptr(size)) 985 return src[size:] 986 } 987 988 // CopyOutN implements marshal.Marshallable.CopyOutN. 989 func (e *ErrorResp) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 990 // Construct a slice backed by dst's underlying memory. 991 var buf []byte 992 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 993 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(e))) 994 hdr.Len = e.SizeBytes() 995 hdr.Cap = e.SizeBytes() 996 997 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 998 // Since we bypassed the compiler's escape analysis, indicate that e 999 // must live until the use above. 1000 runtime.KeepAlive(e) // escapes: replaced by intrinsic. 1001 return length, err 1002 } 1003 1004 // CopyOut implements marshal.Marshallable.CopyOut. 1005 func (e *ErrorResp) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 1006 return e.CopyOutN(cc, addr, e.SizeBytes()) 1007 } 1008 1009 // CopyInN implements marshal.Marshallable.CopyInN. 1010 func (e *ErrorResp) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 1011 // Construct a slice backed by dst's underlying memory. 1012 var buf []byte 1013 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 1014 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(e))) 1015 hdr.Len = e.SizeBytes() 1016 hdr.Cap = e.SizeBytes() 1017 1018 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 1019 // Since we bypassed the compiler's escape analysis, indicate that e 1020 // must live until the use above. 1021 runtime.KeepAlive(e) // escapes: replaced by intrinsic. 1022 return length, err 1023 } 1024 1025 // CopyIn implements marshal.Marshallable.CopyIn. 1026 func (e *ErrorResp) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 1027 return e.CopyInN(cc, addr, e.SizeBytes()) 1028 } 1029 1030 // WriteTo implements io.WriterTo.WriteTo. 1031 func (e *ErrorResp) WriteTo(writer io.Writer) (int64, error) { 1032 // Construct a slice backed by dst's underlying memory. 1033 var buf []byte 1034 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 1035 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(e))) 1036 hdr.Len = e.SizeBytes() 1037 hdr.Cap = e.SizeBytes() 1038 1039 length, err := writer.Write(buf) 1040 // Since we bypassed the compiler's escape analysis, indicate that e 1041 // must live until the use above. 1042 runtime.KeepAlive(e) // escapes: replaced by intrinsic. 1043 return int64(length), err 1044 } 1045 1046 // SizeBytes implements marshal.Marshallable.SizeBytes. 1047 func (a *FAllocateReq) SizeBytes() int { 1048 return 24 + 1049 (*FDID)(nil).SizeBytes() 1050 } 1051 1052 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 1053 func (a *FAllocateReq) MarshalBytes(dst []byte) []byte { 1054 dst = a.FD.MarshalUnsafe(dst) 1055 hostarch.ByteOrder.PutUint64(dst[:8], uint64(a.Mode)) 1056 dst = dst[8:] 1057 hostarch.ByteOrder.PutUint64(dst[:8], uint64(a.Offset)) 1058 dst = dst[8:] 1059 hostarch.ByteOrder.PutUint64(dst[:8], uint64(a.Length)) 1060 dst = dst[8:] 1061 return dst 1062 } 1063 1064 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 1065 func (a *FAllocateReq) UnmarshalBytes(src []byte) []byte { 1066 src = a.FD.UnmarshalUnsafe(src) 1067 a.Mode = uint64(hostarch.ByteOrder.Uint64(src[:8])) 1068 src = src[8:] 1069 a.Offset = uint64(hostarch.ByteOrder.Uint64(src[:8])) 1070 src = src[8:] 1071 a.Length = uint64(hostarch.ByteOrder.Uint64(src[:8])) 1072 src = src[8:] 1073 return src 1074 } 1075 1076 // Packed implements marshal.Marshallable.Packed. 1077 //go:nosplit 1078 func (a *FAllocateReq) Packed() bool { 1079 return a.FD.Packed() 1080 } 1081 1082 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 1083 func (a *FAllocateReq) MarshalUnsafe(dst []byte) []byte { 1084 if a.FD.Packed() { 1085 size := a.SizeBytes() 1086 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(a), uintptr(size)) 1087 return dst[size:] 1088 } 1089 // Type FAllocateReq doesn't have a packed layout in memory, fallback to MarshalBytes. 1090 return a.MarshalBytes(dst) 1091 } 1092 1093 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 1094 func (a *FAllocateReq) UnmarshalUnsafe(src []byte) []byte { 1095 if a.FD.Packed() { 1096 size := a.SizeBytes() 1097 gohacks.Memmove(unsafe.Pointer(a), unsafe.Pointer(&src[0]), uintptr(size)) 1098 return src[size:] 1099 } 1100 // Type FAllocateReq doesn't have a packed layout in memory, fallback to UnmarshalBytes. 1101 return a.UnmarshalBytes(src) 1102 } 1103 1104 // CopyOutN implements marshal.Marshallable.CopyOutN. 1105 func (a *FAllocateReq) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 1106 if !a.FD.Packed() { 1107 // Type FAllocateReq doesn't have a packed layout in memory, fall back to MarshalBytes. 1108 buf := cc.CopyScratchBuffer(a.SizeBytes()) // escapes: okay. 1109 a.MarshalBytes(buf) // escapes: fallback. 1110 return cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 1111 } 1112 1113 // Construct a slice backed by dst's underlying memory. 1114 var buf []byte 1115 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 1116 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(a))) 1117 hdr.Len = a.SizeBytes() 1118 hdr.Cap = a.SizeBytes() 1119 1120 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 1121 // Since we bypassed the compiler's escape analysis, indicate that a 1122 // must live until the use above. 1123 runtime.KeepAlive(a) // escapes: replaced by intrinsic. 1124 return length, err 1125 } 1126 1127 // CopyOut implements marshal.Marshallable.CopyOut. 1128 func (a *FAllocateReq) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 1129 return a.CopyOutN(cc, addr, a.SizeBytes()) 1130 } 1131 1132 // CopyInN implements marshal.Marshallable.CopyInN. 1133 func (a *FAllocateReq) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 1134 if !a.FD.Packed() { 1135 // Type FAllocateReq doesn't have a packed layout in memory, fall back to UnmarshalBytes. 1136 buf := cc.CopyScratchBuffer(a.SizeBytes()) // escapes: okay. 1137 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 1138 // Unmarshal unconditionally. If we had a short copy-in, this results in a 1139 // partially unmarshalled struct. 1140 a.UnmarshalBytes(buf) // escapes: fallback. 1141 return length, err 1142 } 1143 1144 // Construct a slice backed by dst's underlying memory. 1145 var buf []byte 1146 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 1147 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(a))) 1148 hdr.Len = a.SizeBytes() 1149 hdr.Cap = a.SizeBytes() 1150 1151 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 1152 // Since we bypassed the compiler's escape analysis, indicate that a 1153 // must live until the use above. 1154 runtime.KeepAlive(a) // escapes: replaced by intrinsic. 1155 return length, err 1156 } 1157 1158 // CopyIn implements marshal.Marshallable.CopyIn. 1159 func (a *FAllocateReq) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 1160 return a.CopyInN(cc, addr, a.SizeBytes()) 1161 } 1162 1163 // WriteTo implements io.WriterTo.WriteTo. 1164 func (a *FAllocateReq) WriteTo(writer io.Writer) (int64, error) { 1165 if !a.FD.Packed() { 1166 // Type FAllocateReq doesn't have a packed layout in memory, fall back to MarshalBytes. 1167 buf := make([]byte, a.SizeBytes()) 1168 a.MarshalBytes(buf) 1169 length, err := writer.Write(buf) 1170 return int64(length), err 1171 } 1172 1173 // Construct a slice backed by dst's underlying memory. 1174 var buf []byte 1175 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 1176 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(a))) 1177 hdr.Len = a.SizeBytes() 1178 hdr.Cap = a.SizeBytes() 1179 1180 length, err := writer.Write(buf) 1181 // Since we bypassed the compiler's escape analysis, indicate that a 1182 // must live until the use above. 1183 runtime.KeepAlive(a) // escapes: replaced by intrinsic. 1184 return int64(length), err 1185 } 1186 1187 // CheckedMarshal implements marshal.CheckedMarshallable.CheckedMarshal. 1188 func (a *FAllocateReq) CheckedMarshal(dst []byte) ([]byte, bool) { 1189 if a.SizeBytes() > len(dst) { 1190 return dst, false 1191 } 1192 return a.MarshalUnsafe(dst), true 1193 } 1194 1195 // CheckedUnmarshal implements marshal.CheckedMarshallable.CheckedUnmarshal. 1196 func (a *FAllocateReq) CheckedUnmarshal(src []byte) ([]byte, bool) { 1197 if a.SizeBytes() > len(src) { 1198 return src, false 1199 } 1200 return a.UnmarshalUnsafe(src), true 1201 } 1202 1203 // SizeBytes implements marshal.Marshallable.SizeBytes. 1204 func (l *FListXattrReq) SizeBytes() int { 1205 return 8 + 1206 (*FDID)(nil).SizeBytes() 1207 } 1208 1209 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 1210 func (l *FListXattrReq) MarshalBytes(dst []byte) []byte { 1211 dst = l.FD.MarshalUnsafe(dst) 1212 hostarch.ByteOrder.PutUint64(dst[:8], uint64(l.Size)) 1213 dst = dst[8:] 1214 return dst 1215 } 1216 1217 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 1218 func (l *FListXattrReq) UnmarshalBytes(src []byte) []byte { 1219 src = l.FD.UnmarshalUnsafe(src) 1220 l.Size = uint64(hostarch.ByteOrder.Uint64(src[:8])) 1221 src = src[8:] 1222 return src 1223 } 1224 1225 // Packed implements marshal.Marshallable.Packed. 1226 //go:nosplit 1227 func (l *FListXattrReq) Packed() bool { 1228 return l.FD.Packed() 1229 } 1230 1231 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 1232 func (l *FListXattrReq) MarshalUnsafe(dst []byte) []byte { 1233 if l.FD.Packed() { 1234 size := l.SizeBytes() 1235 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(l), uintptr(size)) 1236 return dst[size:] 1237 } 1238 // Type FListXattrReq doesn't have a packed layout in memory, fallback to MarshalBytes. 1239 return l.MarshalBytes(dst) 1240 } 1241 1242 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 1243 func (l *FListXattrReq) UnmarshalUnsafe(src []byte) []byte { 1244 if l.FD.Packed() { 1245 size := l.SizeBytes() 1246 gohacks.Memmove(unsafe.Pointer(l), unsafe.Pointer(&src[0]), uintptr(size)) 1247 return src[size:] 1248 } 1249 // Type FListXattrReq doesn't have a packed layout in memory, fallback to UnmarshalBytes. 1250 return l.UnmarshalBytes(src) 1251 } 1252 1253 // CopyOutN implements marshal.Marshallable.CopyOutN. 1254 func (l *FListXattrReq) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 1255 if !l.FD.Packed() { 1256 // Type FListXattrReq doesn't have a packed layout in memory, fall back to MarshalBytes. 1257 buf := cc.CopyScratchBuffer(l.SizeBytes()) // escapes: okay. 1258 l.MarshalBytes(buf) // escapes: fallback. 1259 return cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 1260 } 1261 1262 // Construct a slice backed by dst's underlying memory. 1263 var buf []byte 1264 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 1265 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(l))) 1266 hdr.Len = l.SizeBytes() 1267 hdr.Cap = l.SizeBytes() 1268 1269 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 1270 // Since we bypassed the compiler's escape analysis, indicate that l 1271 // must live until the use above. 1272 runtime.KeepAlive(l) // escapes: replaced by intrinsic. 1273 return length, err 1274 } 1275 1276 // CopyOut implements marshal.Marshallable.CopyOut. 1277 func (l *FListXattrReq) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 1278 return l.CopyOutN(cc, addr, l.SizeBytes()) 1279 } 1280 1281 // CopyInN implements marshal.Marshallable.CopyInN. 1282 func (l *FListXattrReq) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 1283 if !l.FD.Packed() { 1284 // Type FListXattrReq doesn't have a packed layout in memory, fall back to UnmarshalBytes. 1285 buf := cc.CopyScratchBuffer(l.SizeBytes()) // escapes: okay. 1286 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 1287 // Unmarshal unconditionally. If we had a short copy-in, this results in a 1288 // partially unmarshalled struct. 1289 l.UnmarshalBytes(buf) // escapes: fallback. 1290 return length, err 1291 } 1292 1293 // Construct a slice backed by dst's underlying memory. 1294 var buf []byte 1295 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 1296 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(l))) 1297 hdr.Len = l.SizeBytes() 1298 hdr.Cap = l.SizeBytes() 1299 1300 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 1301 // Since we bypassed the compiler's escape analysis, indicate that l 1302 // must live until the use above. 1303 runtime.KeepAlive(l) // escapes: replaced by intrinsic. 1304 return length, err 1305 } 1306 1307 // CopyIn implements marshal.Marshallable.CopyIn. 1308 func (l *FListXattrReq) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 1309 return l.CopyInN(cc, addr, l.SizeBytes()) 1310 } 1311 1312 // WriteTo implements io.WriterTo.WriteTo. 1313 func (l *FListXattrReq) WriteTo(writer io.Writer) (int64, error) { 1314 if !l.FD.Packed() { 1315 // Type FListXattrReq doesn't have a packed layout in memory, fall back to MarshalBytes. 1316 buf := make([]byte, l.SizeBytes()) 1317 l.MarshalBytes(buf) 1318 length, err := writer.Write(buf) 1319 return int64(length), err 1320 } 1321 1322 // Construct a slice backed by dst's underlying memory. 1323 var buf []byte 1324 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 1325 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(l))) 1326 hdr.Len = l.SizeBytes() 1327 hdr.Cap = l.SizeBytes() 1328 1329 length, err := writer.Write(buf) 1330 // Since we bypassed the compiler's escape analysis, indicate that l 1331 // must live until the use above. 1332 runtime.KeepAlive(l) // escapes: replaced by intrinsic. 1333 return int64(length), err 1334 } 1335 1336 // CheckedMarshal implements marshal.CheckedMarshallable.CheckedMarshal. 1337 func (l *FListXattrReq) CheckedMarshal(dst []byte) ([]byte, bool) { 1338 if l.SizeBytes() > len(dst) { 1339 return dst, false 1340 } 1341 return l.MarshalUnsafe(dst), true 1342 } 1343 1344 // CheckedUnmarshal implements marshal.CheckedMarshallable.CheckedUnmarshal. 1345 func (l *FListXattrReq) CheckedUnmarshal(src []byte) ([]byte, bool) { 1346 if l.SizeBytes() > len(src) { 1347 return src, false 1348 } 1349 return l.UnmarshalUnsafe(src), true 1350 } 1351 1352 // SizeBytes implements marshal.Marshallable.SizeBytes. 1353 func (s *FStatFSReq) SizeBytes() int { 1354 return 0 + 1355 (*FDID)(nil).SizeBytes() 1356 } 1357 1358 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 1359 func (s *FStatFSReq) MarshalBytes(dst []byte) []byte { 1360 dst = s.FD.MarshalUnsafe(dst) 1361 return dst 1362 } 1363 1364 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 1365 func (s *FStatFSReq) UnmarshalBytes(src []byte) []byte { 1366 src = s.FD.UnmarshalUnsafe(src) 1367 return src 1368 } 1369 1370 // Packed implements marshal.Marshallable.Packed. 1371 //go:nosplit 1372 func (s *FStatFSReq) Packed() bool { 1373 return s.FD.Packed() 1374 } 1375 1376 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 1377 func (s *FStatFSReq) MarshalUnsafe(dst []byte) []byte { 1378 if s.FD.Packed() { 1379 size := s.SizeBytes() 1380 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(s), uintptr(size)) 1381 return dst[size:] 1382 } 1383 // Type FStatFSReq doesn't have a packed layout in memory, fallback to MarshalBytes. 1384 return s.MarshalBytes(dst) 1385 } 1386 1387 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 1388 func (s *FStatFSReq) UnmarshalUnsafe(src []byte) []byte { 1389 if s.FD.Packed() { 1390 size := s.SizeBytes() 1391 gohacks.Memmove(unsafe.Pointer(s), unsafe.Pointer(&src[0]), uintptr(size)) 1392 return src[size:] 1393 } 1394 // Type FStatFSReq doesn't have a packed layout in memory, fallback to UnmarshalBytes. 1395 return s.UnmarshalBytes(src) 1396 } 1397 1398 // CopyOutN implements marshal.Marshallable.CopyOutN. 1399 func (s *FStatFSReq) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 1400 if !s.FD.Packed() { 1401 // Type FStatFSReq doesn't have a packed layout in memory, fall back to MarshalBytes. 1402 buf := cc.CopyScratchBuffer(s.SizeBytes()) // escapes: okay. 1403 s.MarshalBytes(buf) // escapes: fallback. 1404 return cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 1405 } 1406 1407 // Construct a slice backed by dst's underlying memory. 1408 var buf []byte 1409 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 1410 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(s))) 1411 hdr.Len = s.SizeBytes() 1412 hdr.Cap = s.SizeBytes() 1413 1414 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 1415 // Since we bypassed the compiler's escape analysis, indicate that s 1416 // must live until the use above. 1417 runtime.KeepAlive(s) // escapes: replaced by intrinsic. 1418 return length, err 1419 } 1420 1421 // CopyOut implements marshal.Marshallable.CopyOut. 1422 func (s *FStatFSReq) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 1423 return s.CopyOutN(cc, addr, s.SizeBytes()) 1424 } 1425 1426 // CopyInN implements marshal.Marshallable.CopyInN. 1427 func (s *FStatFSReq) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 1428 if !s.FD.Packed() { 1429 // Type FStatFSReq doesn't have a packed layout in memory, fall back to UnmarshalBytes. 1430 buf := cc.CopyScratchBuffer(s.SizeBytes()) // escapes: okay. 1431 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 1432 // Unmarshal unconditionally. If we had a short copy-in, this results in a 1433 // partially unmarshalled struct. 1434 s.UnmarshalBytes(buf) // escapes: fallback. 1435 return length, err 1436 } 1437 1438 // Construct a slice backed by dst's underlying memory. 1439 var buf []byte 1440 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 1441 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(s))) 1442 hdr.Len = s.SizeBytes() 1443 hdr.Cap = s.SizeBytes() 1444 1445 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 1446 // Since we bypassed the compiler's escape analysis, indicate that s 1447 // must live until the use above. 1448 runtime.KeepAlive(s) // escapes: replaced by intrinsic. 1449 return length, err 1450 } 1451 1452 // CopyIn implements marshal.Marshallable.CopyIn. 1453 func (s *FStatFSReq) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 1454 return s.CopyInN(cc, addr, s.SizeBytes()) 1455 } 1456 1457 // WriteTo implements io.WriterTo.WriteTo. 1458 func (s *FStatFSReq) WriteTo(writer io.Writer) (int64, error) { 1459 if !s.FD.Packed() { 1460 // Type FStatFSReq doesn't have a packed layout in memory, fall back to MarshalBytes. 1461 buf := make([]byte, s.SizeBytes()) 1462 s.MarshalBytes(buf) 1463 length, err := writer.Write(buf) 1464 return int64(length), err 1465 } 1466 1467 // Construct a slice backed by dst's underlying memory. 1468 var buf []byte 1469 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 1470 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(s))) 1471 hdr.Len = s.SizeBytes() 1472 hdr.Cap = s.SizeBytes() 1473 1474 length, err := writer.Write(buf) 1475 // Since we bypassed the compiler's escape analysis, indicate that s 1476 // must live until the use above. 1477 runtime.KeepAlive(s) // escapes: replaced by intrinsic. 1478 return int64(length), err 1479 } 1480 1481 // CheckedMarshal implements marshal.CheckedMarshallable.CheckedMarshal. 1482 func (s *FStatFSReq) CheckedMarshal(dst []byte) ([]byte, bool) { 1483 if s.SizeBytes() > len(dst) { 1484 return dst, false 1485 } 1486 return s.MarshalUnsafe(dst), true 1487 } 1488 1489 // CheckedUnmarshal implements marshal.CheckedMarshallable.CheckedUnmarshal. 1490 func (s *FStatFSReq) CheckedUnmarshal(src []byte) ([]byte, bool) { 1491 if s.SizeBytes() > len(src) { 1492 return src, false 1493 } 1494 return s.UnmarshalUnsafe(src), true 1495 } 1496 1497 // SizeBytes implements marshal.Marshallable.SizeBytes. 1498 func (f *FlushReq) SizeBytes() int { 1499 return 0 + 1500 (*FDID)(nil).SizeBytes() 1501 } 1502 1503 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 1504 func (f *FlushReq) MarshalBytes(dst []byte) []byte { 1505 dst = f.FD.MarshalUnsafe(dst) 1506 return dst 1507 } 1508 1509 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 1510 func (f *FlushReq) UnmarshalBytes(src []byte) []byte { 1511 src = f.FD.UnmarshalUnsafe(src) 1512 return src 1513 } 1514 1515 // Packed implements marshal.Marshallable.Packed. 1516 //go:nosplit 1517 func (f *FlushReq) Packed() bool { 1518 return f.FD.Packed() 1519 } 1520 1521 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 1522 func (f *FlushReq) MarshalUnsafe(dst []byte) []byte { 1523 if f.FD.Packed() { 1524 size := f.SizeBytes() 1525 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(f), uintptr(size)) 1526 return dst[size:] 1527 } 1528 // Type FlushReq doesn't have a packed layout in memory, fallback to MarshalBytes. 1529 return f.MarshalBytes(dst) 1530 } 1531 1532 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 1533 func (f *FlushReq) UnmarshalUnsafe(src []byte) []byte { 1534 if f.FD.Packed() { 1535 size := f.SizeBytes() 1536 gohacks.Memmove(unsafe.Pointer(f), unsafe.Pointer(&src[0]), uintptr(size)) 1537 return src[size:] 1538 } 1539 // Type FlushReq doesn't have a packed layout in memory, fallback to UnmarshalBytes. 1540 return f.UnmarshalBytes(src) 1541 } 1542 1543 // CopyOutN implements marshal.Marshallable.CopyOutN. 1544 func (f *FlushReq) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 1545 if !f.FD.Packed() { 1546 // Type FlushReq doesn't have a packed layout in memory, fall back to MarshalBytes. 1547 buf := cc.CopyScratchBuffer(f.SizeBytes()) // escapes: okay. 1548 f.MarshalBytes(buf) // escapes: fallback. 1549 return cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 1550 } 1551 1552 // Construct a slice backed by dst's underlying memory. 1553 var buf []byte 1554 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 1555 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(f))) 1556 hdr.Len = f.SizeBytes() 1557 hdr.Cap = f.SizeBytes() 1558 1559 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 1560 // Since we bypassed the compiler's escape analysis, indicate that f 1561 // must live until the use above. 1562 runtime.KeepAlive(f) // escapes: replaced by intrinsic. 1563 return length, err 1564 } 1565 1566 // CopyOut implements marshal.Marshallable.CopyOut. 1567 func (f *FlushReq) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 1568 return f.CopyOutN(cc, addr, f.SizeBytes()) 1569 } 1570 1571 // CopyInN implements marshal.Marshallable.CopyInN. 1572 func (f *FlushReq) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 1573 if !f.FD.Packed() { 1574 // Type FlushReq doesn't have a packed layout in memory, fall back to UnmarshalBytes. 1575 buf := cc.CopyScratchBuffer(f.SizeBytes()) // escapes: okay. 1576 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 1577 // Unmarshal unconditionally. If we had a short copy-in, this results in a 1578 // partially unmarshalled struct. 1579 f.UnmarshalBytes(buf) // escapes: fallback. 1580 return length, err 1581 } 1582 1583 // Construct a slice backed by dst's underlying memory. 1584 var buf []byte 1585 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 1586 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(f))) 1587 hdr.Len = f.SizeBytes() 1588 hdr.Cap = f.SizeBytes() 1589 1590 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 1591 // Since we bypassed the compiler's escape analysis, indicate that f 1592 // must live until the use above. 1593 runtime.KeepAlive(f) // escapes: replaced by intrinsic. 1594 return length, err 1595 } 1596 1597 // CopyIn implements marshal.Marshallable.CopyIn. 1598 func (f *FlushReq) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 1599 return f.CopyInN(cc, addr, f.SizeBytes()) 1600 } 1601 1602 // WriteTo implements io.WriterTo.WriteTo. 1603 func (f *FlushReq) WriteTo(writer io.Writer) (int64, error) { 1604 if !f.FD.Packed() { 1605 // Type FlushReq doesn't have a packed layout in memory, fall back to MarshalBytes. 1606 buf := make([]byte, f.SizeBytes()) 1607 f.MarshalBytes(buf) 1608 length, err := writer.Write(buf) 1609 return int64(length), err 1610 } 1611 1612 // Construct a slice backed by dst's underlying memory. 1613 var buf []byte 1614 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 1615 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(f))) 1616 hdr.Len = f.SizeBytes() 1617 hdr.Cap = f.SizeBytes() 1618 1619 length, err := writer.Write(buf) 1620 // Since we bypassed the compiler's escape analysis, indicate that f 1621 // must live until the use above. 1622 runtime.KeepAlive(f) // escapes: replaced by intrinsic. 1623 return int64(length), err 1624 } 1625 1626 // CheckedMarshal implements marshal.CheckedMarshallable.CheckedMarshal. 1627 func (f *FlushReq) CheckedMarshal(dst []byte) ([]byte, bool) { 1628 if f.SizeBytes() > len(dst) { 1629 return dst, false 1630 } 1631 return f.MarshalUnsafe(dst), true 1632 } 1633 1634 // CheckedUnmarshal implements marshal.CheckedMarshallable.CheckedUnmarshal. 1635 func (f *FlushReq) CheckedUnmarshal(src []byte) ([]byte, bool) { 1636 if f.SizeBytes() > len(src) { 1637 return src, false 1638 } 1639 return f.UnmarshalUnsafe(src), true 1640 } 1641 1642 // SizeBytes implements marshal.Marshallable.SizeBytes. 1643 //go:nosplit 1644 func (gid *GID) SizeBytes() int { 1645 return 4 1646 } 1647 1648 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 1649 func (gid *GID) MarshalBytes(dst []byte) []byte { 1650 hostarch.ByteOrder.PutUint32(dst[:4], uint32(*gid)) 1651 return dst[4:] 1652 } 1653 1654 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 1655 func (gid *GID) UnmarshalBytes(src []byte) []byte { 1656 *gid = GID(uint32(hostarch.ByteOrder.Uint32(src[:4]))) 1657 return src[4:] 1658 } 1659 1660 // Packed implements marshal.Marshallable.Packed. 1661 //go:nosplit 1662 func (gid *GID) Packed() bool { 1663 // Scalar newtypes are always packed. 1664 return true 1665 } 1666 1667 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 1668 func (gid *GID) MarshalUnsafe(dst []byte) []byte { 1669 size := gid.SizeBytes() 1670 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(gid), uintptr(size)) 1671 return dst[size:] 1672 } 1673 1674 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 1675 func (gid *GID) UnmarshalUnsafe(src []byte) []byte { 1676 size := gid.SizeBytes() 1677 gohacks.Memmove(unsafe.Pointer(gid), unsafe.Pointer(&src[0]), uintptr(size)) 1678 return src[size:] 1679 } 1680 1681 // CopyOutN implements marshal.Marshallable.CopyOutN. 1682 func (gid *GID) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 1683 // Construct a slice backed by dst's underlying memory. 1684 var buf []byte 1685 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 1686 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(gid))) 1687 hdr.Len = gid.SizeBytes() 1688 hdr.Cap = gid.SizeBytes() 1689 1690 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 1691 // Since we bypassed the compiler's escape analysis, indicate that gid 1692 // must live until the use above. 1693 runtime.KeepAlive(gid) // escapes: replaced by intrinsic. 1694 return length, err 1695 } 1696 1697 // CopyOut implements marshal.Marshallable.CopyOut. 1698 func (gid *GID) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 1699 return gid.CopyOutN(cc, addr, gid.SizeBytes()) 1700 } 1701 1702 // CopyInN implements marshal.Marshallable.CopyInN. 1703 func (gid *GID) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 1704 // Construct a slice backed by dst's underlying memory. 1705 var buf []byte 1706 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 1707 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(gid))) 1708 hdr.Len = gid.SizeBytes() 1709 hdr.Cap = gid.SizeBytes() 1710 1711 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 1712 // Since we bypassed the compiler's escape analysis, indicate that gid 1713 // must live until the use above. 1714 runtime.KeepAlive(gid) // escapes: replaced by intrinsic. 1715 return length, err 1716 } 1717 1718 // CopyIn implements marshal.Marshallable.CopyIn. 1719 func (gid *GID) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 1720 return gid.CopyInN(cc, addr, gid.SizeBytes()) 1721 } 1722 1723 // WriteTo implements io.WriterTo.WriteTo. 1724 func (gid *GID) WriteTo(writer io.Writer) (int64, error) { 1725 // Construct a slice backed by dst's underlying memory. 1726 var buf []byte 1727 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 1728 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(gid))) 1729 hdr.Len = gid.SizeBytes() 1730 hdr.Cap = gid.SizeBytes() 1731 1732 length, err := writer.Write(buf) 1733 // Since we bypassed the compiler's escape analysis, indicate that gid 1734 // must live until the use above. 1735 runtime.KeepAlive(gid) // escapes: replaced by intrinsic. 1736 return int64(length), err 1737 } 1738 1739 // SizeBytes implements marshal.Marshallable.SizeBytes. 1740 func (g *Getdents64Req) SizeBytes() int { 1741 return 8 + 1742 (*FDID)(nil).SizeBytes() 1743 } 1744 1745 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 1746 func (g *Getdents64Req) MarshalBytes(dst []byte) []byte { 1747 dst = g.DirFD.MarshalUnsafe(dst) 1748 hostarch.ByteOrder.PutUint32(dst[:4], uint32(g.Count)) 1749 dst = dst[4:] 1750 // Padding: dst[:sizeof(uint32)] ~= uint32(0) 1751 dst = dst[4:] 1752 return dst 1753 } 1754 1755 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 1756 func (g *Getdents64Req) UnmarshalBytes(src []byte) []byte { 1757 src = g.DirFD.UnmarshalUnsafe(src) 1758 g.Count = int32(hostarch.ByteOrder.Uint32(src[:4])) 1759 src = src[4:] 1760 // Padding: var _ uint32 ~= src[:sizeof(uint32)] 1761 src = src[4:] 1762 return src 1763 } 1764 1765 // Packed implements marshal.Marshallable.Packed. 1766 //go:nosplit 1767 func (g *Getdents64Req) Packed() bool { 1768 return g.DirFD.Packed() 1769 } 1770 1771 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 1772 func (g *Getdents64Req) MarshalUnsafe(dst []byte) []byte { 1773 if g.DirFD.Packed() { 1774 size := g.SizeBytes() 1775 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(g), uintptr(size)) 1776 return dst[size:] 1777 } 1778 // Type Getdents64Req doesn't have a packed layout in memory, fallback to MarshalBytes. 1779 return g.MarshalBytes(dst) 1780 } 1781 1782 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 1783 func (g *Getdents64Req) UnmarshalUnsafe(src []byte) []byte { 1784 if g.DirFD.Packed() { 1785 size := g.SizeBytes() 1786 gohacks.Memmove(unsafe.Pointer(g), unsafe.Pointer(&src[0]), uintptr(size)) 1787 return src[size:] 1788 } 1789 // Type Getdents64Req doesn't have a packed layout in memory, fallback to UnmarshalBytes. 1790 return g.UnmarshalBytes(src) 1791 } 1792 1793 // CopyOutN implements marshal.Marshallable.CopyOutN. 1794 func (g *Getdents64Req) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 1795 if !g.DirFD.Packed() { 1796 // Type Getdents64Req doesn't have a packed layout in memory, fall back to MarshalBytes. 1797 buf := cc.CopyScratchBuffer(g.SizeBytes()) // escapes: okay. 1798 g.MarshalBytes(buf) // escapes: fallback. 1799 return cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 1800 } 1801 1802 // Construct a slice backed by dst's underlying memory. 1803 var buf []byte 1804 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 1805 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(g))) 1806 hdr.Len = g.SizeBytes() 1807 hdr.Cap = g.SizeBytes() 1808 1809 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 1810 // Since we bypassed the compiler's escape analysis, indicate that g 1811 // must live until the use above. 1812 runtime.KeepAlive(g) // escapes: replaced by intrinsic. 1813 return length, err 1814 } 1815 1816 // CopyOut implements marshal.Marshallable.CopyOut. 1817 func (g *Getdents64Req) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 1818 return g.CopyOutN(cc, addr, g.SizeBytes()) 1819 } 1820 1821 // CopyInN implements marshal.Marshallable.CopyInN. 1822 func (g *Getdents64Req) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 1823 if !g.DirFD.Packed() { 1824 // Type Getdents64Req doesn't have a packed layout in memory, fall back to UnmarshalBytes. 1825 buf := cc.CopyScratchBuffer(g.SizeBytes()) // escapes: okay. 1826 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 1827 // Unmarshal unconditionally. If we had a short copy-in, this results in a 1828 // partially unmarshalled struct. 1829 g.UnmarshalBytes(buf) // escapes: fallback. 1830 return length, err 1831 } 1832 1833 // Construct a slice backed by dst's underlying memory. 1834 var buf []byte 1835 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 1836 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(g))) 1837 hdr.Len = g.SizeBytes() 1838 hdr.Cap = g.SizeBytes() 1839 1840 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 1841 // Since we bypassed the compiler's escape analysis, indicate that g 1842 // must live until the use above. 1843 runtime.KeepAlive(g) // escapes: replaced by intrinsic. 1844 return length, err 1845 } 1846 1847 // CopyIn implements marshal.Marshallable.CopyIn. 1848 func (g *Getdents64Req) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 1849 return g.CopyInN(cc, addr, g.SizeBytes()) 1850 } 1851 1852 // WriteTo implements io.WriterTo.WriteTo. 1853 func (g *Getdents64Req) WriteTo(writer io.Writer) (int64, error) { 1854 if !g.DirFD.Packed() { 1855 // Type Getdents64Req doesn't have a packed layout in memory, fall back to MarshalBytes. 1856 buf := make([]byte, g.SizeBytes()) 1857 g.MarshalBytes(buf) 1858 length, err := writer.Write(buf) 1859 return int64(length), err 1860 } 1861 1862 // Construct a slice backed by dst's underlying memory. 1863 var buf []byte 1864 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 1865 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(g))) 1866 hdr.Len = g.SizeBytes() 1867 hdr.Cap = g.SizeBytes() 1868 1869 length, err := writer.Write(buf) 1870 // Since we bypassed the compiler's escape analysis, indicate that g 1871 // must live until the use above. 1872 runtime.KeepAlive(g) // escapes: replaced by intrinsic. 1873 return int64(length), err 1874 } 1875 1876 // CheckedMarshal implements marshal.CheckedMarshallable.CheckedMarshal. 1877 func (g *Getdents64Req) CheckedMarshal(dst []byte) ([]byte, bool) { 1878 if g.SizeBytes() > len(dst) { 1879 return dst, false 1880 } 1881 return g.MarshalUnsafe(dst), true 1882 } 1883 1884 // CheckedUnmarshal implements marshal.CheckedMarshallable.CheckedUnmarshal. 1885 func (g *Getdents64Req) CheckedUnmarshal(src []byte) ([]byte, bool) { 1886 if g.SizeBytes() > len(src) { 1887 return src, false 1888 } 1889 return g.UnmarshalUnsafe(src), true 1890 } 1891 1892 // SizeBytes implements marshal.Marshallable.SizeBytes. 1893 func (i *Inode) SizeBytes() int { 1894 return 0 + 1895 (*FDID)(nil).SizeBytes() + 1896 (*linux.Statx)(nil).SizeBytes() 1897 } 1898 1899 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 1900 func (i *Inode) MarshalBytes(dst []byte) []byte { 1901 dst = i.ControlFD.MarshalUnsafe(dst) 1902 dst = i.Stat.MarshalUnsafe(dst) 1903 return dst 1904 } 1905 1906 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 1907 func (i *Inode) UnmarshalBytes(src []byte) []byte { 1908 src = i.ControlFD.UnmarshalUnsafe(src) 1909 src = i.Stat.UnmarshalUnsafe(src) 1910 return src 1911 } 1912 1913 // Packed implements marshal.Marshallable.Packed. 1914 //go:nosplit 1915 func (i *Inode) Packed() bool { 1916 return i.ControlFD.Packed() && i.Stat.Packed() 1917 } 1918 1919 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 1920 func (i *Inode) MarshalUnsafe(dst []byte) []byte { 1921 if i.ControlFD.Packed() && i.Stat.Packed() { 1922 size := i.SizeBytes() 1923 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(i), uintptr(size)) 1924 return dst[size:] 1925 } 1926 // Type Inode doesn't have a packed layout in memory, fallback to MarshalBytes. 1927 return i.MarshalBytes(dst) 1928 } 1929 1930 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 1931 func (i *Inode) UnmarshalUnsafe(src []byte) []byte { 1932 if i.ControlFD.Packed() && i.Stat.Packed() { 1933 size := i.SizeBytes() 1934 gohacks.Memmove(unsafe.Pointer(i), unsafe.Pointer(&src[0]), uintptr(size)) 1935 return src[size:] 1936 } 1937 // Type Inode doesn't have a packed layout in memory, fallback to UnmarshalBytes. 1938 return i.UnmarshalBytes(src) 1939 } 1940 1941 // CopyOutN implements marshal.Marshallable.CopyOutN. 1942 func (i *Inode) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 1943 if !i.ControlFD.Packed() && i.Stat.Packed() { 1944 // Type Inode doesn't have a packed layout in memory, fall back to MarshalBytes. 1945 buf := cc.CopyScratchBuffer(i.SizeBytes()) // escapes: okay. 1946 i.MarshalBytes(buf) // escapes: fallback. 1947 return cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 1948 } 1949 1950 // Construct a slice backed by dst's underlying memory. 1951 var buf []byte 1952 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 1953 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(i))) 1954 hdr.Len = i.SizeBytes() 1955 hdr.Cap = i.SizeBytes() 1956 1957 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 1958 // Since we bypassed the compiler's escape analysis, indicate that i 1959 // must live until the use above. 1960 runtime.KeepAlive(i) // escapes: replaced by intrinsic. 1961 return length, err 1962 } 1963 1964 // CopyOut implements marshal.Marshallable.CopyOut. 1965 func (i *Inode) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 1966 return i.CopyOutN(cc, addr, i.SizeBytes()) 1967 } 1968 1969 // CopyInN implements marshal.Marshallable.CopyInN. 1970 func (i *Inode) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 1971 if !i.ControlFD.Packed() && i.Stat.Packed() { 1972 // Type Inode doesn't have a packed layout in memory, fall back to UnmarshalBytes. 1973 buf := cc.CopyScratchBuffer(i.SizeBytes()) // escapes: okay. 1974 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 1975 // Unmarshal unconditionally. If we had a short copy-in, this results in a 1976 // partially unmarshalled struct. 1977 i.UnmarshalBytes(buf) // escapes: fallback. 1978 return length, err 1979 } 1980 1981 // Construct a slice backed by dst's underlying memory. 1982 var buf []byte 1983 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 1984 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(i))) 1985 hdr.Len = i.SizeBytes() 1986 hdr.Cap = i.SizeBytes() 1987 1988 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 1989 // Since we bypassed the compiler's escape analysis, indicate that i 1990 // must live until the use above. 1991 runtime.KeepAlive(i) // escapes: replaced by intrinsic. 1992 return length, err 1993 } 1994 1995 // CopyIn implements marshal.Marshallable.CopyIn. 1996 func (i *Inode) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 1997 return i.CopyInN(cc, addr, i.SizeBytes()) 1998 } 1999 2000 // WriteTo implements io.WriterTo.WriteTo. 2001 func (i *Inode) WriteTo(writer io.Writer) (int64, error) { 2002 if !i.ControlFD.Packed() && i.Stat.Packed() { 2003 // Type Inode doesn't have a packed layout in memory, fall back to MarshalBytes. 2004 buf := make([]byte, i.SizeBytes()) 2005 i.MarshalBytes(buf) 2006 length, err := writer.Write(buf) 2007 return int64(length), err 2008 } 2009 2010 // Construct a slice backed by dst's underlying memory. 2011 var buf []byte 2012 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 2013 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(i))) 2014 hdr.Len = i.SizeBytes() 2015 hdr.Cap = i.SizeBytes() 2016 2017 length, err := writer.Write(buf) 2018 // Since we bypassed the compiler's escape analysis, indicate that i 2019 // must live until the use above. 2020 runtime.KeepAlive(i) // escapes: replaced by intrinsic. 2021 return int64(length), err 2022 } 2023 2024 // CopyInodeSliceIn copies in a slice of Inode objects from the task's memory. 2025 func CopyInodeSliceIn(cc marshal.CopyContext, addr hostarch.Addr, dst []Inode) (int, error) { 2026 count := len(dst) 2027 if count == 0 { 2028 return 0, nil 2029 } 2030 size := (*Inode)(nil).SizeBytes() 2031 2032 if !dst[0].Packed() { 2033 // Type Inode doesn't have a packed layout in memory, fall back to UnmarshalBytes. 2034 buf := cc.CopyScratchBuffer(size * count) 2035 length, err := cc.CopyInBytes(addr, buf) 2036 2037 // Unmarshal as much as possible, even on error. First handle full objects. 2038 limit := length/size 2039 for idx := 0; idx < limit; idx++ { 2040 buf = dst[idx].UnmarshalBytes(buf) 2041 } 2042 2043 // Handle any final partial object. buf is guaranteed to be long enough for the 2044 // final element, but may not contain valid data for the entire range. This may 2045 // result in unmarshalling zero values for some parts of the object. 2046 if length%size != 0 { 2047 dst[limit].UnmarshalBytes(buf) 2048 } 2049 2050 return length, err 2051 } 2052 2053 ptr := unsafe.Pointer(&dst) 2054 val := gohacks.Noescape(unsafe.Pointer((*reflect.SliceHeader)(ptr).Data)) 2055 2056 // Construct a slice backed by dst's underlying memory. 2057 var buf []byte 2058 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 2059 hdr.Data = uintptr(val) 2060 hdr.Len = size * count 2061 hdr.Cap = size * count 2062 2063 length, err := cc.CopyInBytes(addr, buf) 2064 // Since we bypassed the compiler's escape analysis, indicate that dst 2065 // must live until the use above. 2066 runtime.KeepAlive(dst) // escapes: replaced by intrinsic. 2067 return length, err 2068 } 2069 2070 // CopyInodeSliceOut copies a slice of Inode objects to the task's memory. 2071 func CopyInodeSliceOut(cc marshal.CopyContext, addr hostarch.Addr, src []Inode) (int, error) { 2072 count := len(src) 2073 if count == 0 { 2074 return 0, nil 2075 } 2076 size := (*Inode)(nil).SizeBytes() 2077 2078 if !src[0].Packed() { 2079 // Type Inode doesn't have a packed layout in memory, fall back to MarshalBytes. 2080 buf := cc.CopyScratchBuffer(size * count) 2081 curBuf := buf 2082 for idx := 0; idx < count; idx++ { 2083 curBuf = src[idx].MarshalBytes(curBuf) 2084 } 2085 return cc.CopyOutBytes(addr, buf) 2086 } 2087 2088 ptr := unsafe.Pointer(&src) 2089 val := gohacks.Noescape(unsafe.Pointer((*reflect.SliceHeader)(ptr).Data)) 2090 2091 // Construct a slice backed by dst's underlying memory. 2092 var buf []byte 2093 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 2094 hdr.Data = uintptr(val) 2095 hdr.Len = size * count 2096 hdr.Cap = size * count 2097 2098 length, err := cc.CopyOutBytes(addr, buf) 2099 // Since we bypassed the compiler's escape analysis, indicate that src 2100 // must live until the use above. 2101 runtime.KeepAlive(src) // escapes: replaced by intrinsic. 2102 return length, err 2103 } 2104 2105 // MarshalUnsafeInodeSlice is like Inode.MarshalUnsafe, but for a []Inode. 2106 func MarshalUnsafeInodeSlice(src []Inode, dst []byte) []byte { 2107 count := len(src) 2108 if count == 0 { 2109 return dst 2110 } 2111 2112 if !src[0].Packed() { 2113 // Type Inode doesn't have a packed layout in memory, fall back to MarshalBytes. 2114 for idx := 0; idx < count; idx++ { 2115 dst = src[idx].MarshalBytes(dst) 2116 } 2117 return dst 2118 } 2119 2120 size := (*Inode)(nil).SizeBytes() 2121 buf := dst[:size*count] 2122 gohacks.Memmove(unsafe.Pointer(&buf[0]), unsafe.Pointer(&src[0]), uintptr(len(buf))) 2123 return dst[size*count:] 2124 } 2125 2126 // UnmarshalUnsafeInodeSlice is like Inode.UnmarshalUnsafe, but for a []Inode. 2127 func UnmarshalUnsafeInodeSlice(dst []Inode, src []byte) []byte { 2128 count := len(dst) 2129 if count == 0 { 2130 return src 2131 } 2132 2133 if !dst[0].Packed() { 2134 // Type Inode doesn't have a packed layout in memory, fall back to UnmarshalBytes. 2135 for idx := 0; idx < count; idx++ { 2136 src = dst[idx].UnmarshalBytes(src) 2137 } 2138 return src 2139 } 2140 2141 size := (*Inode)(nil).SizeBytes() 2142 buf := src[:size*count] 2143 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(&buf[0]), uintptr(len(buf))) 2144 return src[size*count:] 2145 } 2146 2147 // SizeBytes implements marshal.Marshallable.SizeBytes. 2148 func (l *LinkAtResp) SizeBytes() int { 2149 return 0 + 2150 (*Inode)(nil).SizeBytes() 2151 } 2152 2153 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 2154 func (l *LinkAtResp) MarshalBytes(dst []byte) []byte { 2155 dst = l.Link.MarshalUnsafe(dst) 2156 return dst 2157 } 2158 2159 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 2160 func (l *LinkAtResp) UnmarshalBytes(src []byte) []byte { 2161 src = l.Link.UnmarshalUnsafe(src) 2162 return src 2163 } 2164 2165 // Packed implements marshal.Marshallable.Packed. 2166 //go:nosplit 2167 func (l *LinkAtResp) Packed() bool { 2168 return l.Link.Packed() 2169 } 2170 2171 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 2172 func (l *LinkAtResp) MarshalUnsafe(dst []byte) []byte { 2173 if l.Link.Packed() { 2174 size := l.SizeBytes() 2175 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(l), uintptr(size)) 2176 return dst[size:] 2177 } 2178 // Type LinkAtResp doesn't have a packed layout in memory, fallback to MarshalBytes. 2179 return l.MarshalBytes(dst) 2180 } 2181 2182 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 2183 func (l *LinkAtResp) UnmarshalUnsafe(src []byte) []byte { 2184 if l.Link.Packed() { 2185 size := l.SizeBytes() 2186 gohacks.Memmove(unsafe.Pointer(l), unsafe.Pointer(&src[0]), uintptr(size)) 2187 return src[size:] 2188 } 2189 // Type LinkAtResp doesn't have a packed layout in memory, fallback to UnmarshalBytes. 2190 return l.UnmarshalBytes(src) 2191 } 2192 2193 // CopyOutN implements marshal.Marshallable.CopyOutN. 2194 func (l *LinkAtResp) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 2195 if !l.Link.Packed() { 2196 // Type LinkAtResp doesn't have a packed layout in memory, fall back to MarshalBytes. 2197 buf := cc.CopyScratchBuffer(l.SizeBytes()) // escapes: okay. 2198 l.MarshalBytes(buf) // escapes: fallback. 2199 return cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 2200 } 2201 2202 // Construct a slice backed by dst's underlying memory. 2203 var buf []byte 2204 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 2205 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(l))) 2206 hdr.Len = l.SizeBytes() 2207 hdr.Cap = l.SizeBytes() 2208 2209 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 2210 // Since we bypassed the compiler's escape analysis, indicate that l 2211 // must live until the use above. 2212 runtime.KeepAlive(l) // escapes: replaced by intrinsic. 2213 return length, err 2214 } 2215 2216 // CopyOut implements marshal.Marshallable.CopyOut. 2217 func (l *LinkAtResp) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 2218 return l.CopyOutN(cc, addr, l.SizeBytes()) 2219 } 2220 2221 // CopyInN implements marshal.Marshallable.CopyInN. 2222 func (l *LinkAtResp) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 2223 if !l.Link.Packed() { 2224 // Type LinkAtResp doesn't have a packed layout in memory, fall back to UnmarshalBytes. 2225 buf := cc.CopyScratchBuffer(l.SizeBytes()) // escapes: okay. 2226 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 2227 // Unmarshal unconditionally. If we had a short copy-in, this results in a 2228 // partially unmarshalled struct. 2229 l.UnmarshalBytes(buf) // escapes: fallback. 2230 return length, err 2231 } 2232 2233 // Construct a slice backed by dst's underlying memory. 2234 var buf []byte 2235 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 2236 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(l))) 2237 hdr.Len = l.SizeBytes() 2238 hdr.Cap = l.SizeBytes() 2239 2240 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 2241 // Since we bypassed the compiler's escape analysis, indicate that l 2242 // must live until the use above. 2243 runtime.KeepAlive(l) // escapes: replaced by intrinsic. 2244 return length, err 2245 } 2246 2247 // CopyIn implements marshal.Marshallable.CopyIn. 2248 func (l *LinkAtResp) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 2249 return l.CopyInN(cc, addr, l.SizeBytes()) 2250 } 2251 2252 // WriteTo implements io.WriterTo.WriteTo. 2253 func (l *LinkAtResp) WriteTo(writer io.Writer) (int64, error) { 2254 if !l.Link.Packed() { 2255 // Type LinkAtResp doesn't have a packed layout in memory, fall back to MarshalBytes. 2256 buf := make([]byte, l.SizeBytes()) 2257 l.MarshalBytes(buf) 2258 length, err := writer.Write(buf) 2259 return int64(length), err 2260 } 2261 2262 // Construct a slice backed by dst's underlying memory. 2263 var buf []byte 2264 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 2265 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(l))) 2266 hdr.Len = l.SizeBytes() 2267 hdr.Cap = l.SizeBytes() 2268 2269 length, err := writer.Write(buf) 2270 // Since we bypassed the compiler's escape analysis, indicate that l 2271 // must live until the use above. 2272 runtime.KeepAlive(l) // escapes: replaced by intrinsic. 2273 return int64(length), err 2274 } 2275 2276 // CheckedMarshal implements marshal.CheckedMarshallable.CheckedMarshal. 2277 func (l *LinkAtResp) CheckedMarshal(dst []byte) ([]byte, bool) { 2278 if l.SizeBytes() > len(dst) { 2279 return dst, false 2280 } 2281 return l.MarshalUnsafe(dst), true 2282 } 2283 2284 // CheckedUnmarshal implements marshal.CheckedMarshallable.CheckedUnmarshal. 2285 func (l *LinkAtResp) CheckedUnmarshal(src []byte) ([]byte, bool) { 2286 if l.SizeBytes() > len(src) { 2287 return src, false 2288 } 2289 return l.UnmarshalUnsafe(src), true 2290 } 2291 2292 // SizeBytes implements marshal.Marshallable.SizeBytes. 2293 func (l *ListenReq) SizeBytes() int { 2294 return 8 + 2295 (*FDID)(nil).SizeBytes() 2296 } 2297 2298 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 2299 func (l *ListenReq) MarshalBytes(dst []byte) []byte { 2300 dst = l.FD.MarshalUnsafe(dst) 2301 hostarch.ByteOrder.PutUint32(dst[:4], uint32(l.Backlog)) 2302 dst = dst[4:] 2303 // Padding: dst[:sizeof(uint32)] ~= uint32(0) 2304 dst = dst[4:] 2305 return dst 2306 } 2307 2308 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 2309 func (l *ListenReq) UnmarshalBytes(src []byte) []byte { 2310 src = l.FD.UnmarshalUnsafe(src) 2311 l.Backlog = int32(hostarch.ByteOrder.Uint32(src[:4])) 2312 src = src[4:] 2313 // Padding: var _ uint32 ~= src[:sizeof(uint32)] 2314 src = src[4:] 2315 return src 2316 } 2317 2318 // Packed implements marshal.Marshallable.Packed. 2319 //go:nosplit 2320 func (l *ListenReq) Packed() bool { 2321 return l.FD.Packed() 2322 } 2323 2324 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 2325 func (l *ListenReq) MarshalUnsafe(dst []byte) []byte { 2326 if l.FD.Packed() { 2327 size := l.SizeBytes() 2328 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(l), uintptr(size)) 2329 return dst[size:] 2330 } 2331 // Type ListenReq doesn't have a packed layout in memory, fallback to MarshalBytes. 2332 return l.MarshalBytes(dst) 2333 } 2334 2335 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 2336 func (l *ListenReq) UnmarshalUnsafe(src []byte) []byte { 2337 if l.FD.Packed() { 2338 size := l.SizeBytes() 2339 gohacks.Memmove(unsafe.Pointer(l), unsafe.Pointer(&src[0]), uintptr(size)) 2340 return src[size:] 2341 } 2342 // Type ListenReq doesn't have a packed layout in memory, fallback to UnmarshalBytes. 2343 return l.UnmarshalBytes(src) 2344 } 2345 2346 // CopyOutN implements marshal.Marshallable.CopyOutN. 2347 func (l *ListenReq) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 2348 if !l.FD.Packed() { 2349 // Type ListenReq doesn't have a packed layout in memory, fall back to MarshalBytes. 2350 buf := cc.CopyScratchBuffer(l.SizeBytes()) // escapes: okay. 2351 l.MarshalBytes(buf) // escapes: fallback. 2352 return cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 2353 } 2354 2355 // Construct a slice backed by dst's underlying memory. 2356 var buf []byte 2357 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 2358 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(l))) 2359 hdr.Len = l.SizeBytes() 2360 hdr.Cap = l.SizeBytes() 2361 2362 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 2363 // Since we bypassed the compiler's escape analysis, indicate that l 2364 // must live until the use above. 2365 runtime.KeepAlive(l) // escapes: replaced by intrinsic. 2366 return length, err 2367 } 2368 2369 // CopyOut implements marshal.Marshallable.CopyOut. 2370 func (l *ListenReq) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 2371 return l.CopyOutN(cc, addr, l.SizeBytes()) 2372 } 2373 2374 // CopyInN implements marshal.Marshallable.CopyInN. 2375 func (l *ListenReq) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 2376 if !l.FD.Packed() { 2377 // Type ListenReq doesn't have a packed layout in memory, fall back to UnmarshalBytes. 2378 buf := cc.CopyScratchBuffer(l.SizeBytes()) // escapes: okay. 2379 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 2380 // Unmarshal unconditionally. If we had a short copy-in, this results in a 2381 // partially unmarshalled struct. 2382 l.UnmarshalBytes(buf) // escapes: fallback. 2383 return length, err 2384 } 2385 2386 // Construct a slice backed by dst's underlying memory. 2387 var buf []byte 2388 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 2389 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(l))) 2390 hdr.Len = l.SizeBytes() 2391 hdr.Cap = l.SizeBytes() 2392 2393 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 2394 // Since we bypassed the compiler's escape analysis, indicate that l 2395 // must live until the use above. 2396 runtime.KeepAlive(l) // escapes: replaced by intrinsic. 2397 return length, err 2398 } 2399 2400 // CopyIn implements marshal.Marshallable.CopyIn. 2401 func (l *ListenReq) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 2402 return l.CopyInN(cc, addr, l.SizeBytes()) 2403 } 2404 2405 // WriteTo implements io.WriterTo.WriteTo. 2406 func (l *ListenReq) WriteTo(writer io.Writer) (int64, error) { 2407 if !l.FD.Packed() { 2408 // Type ListenReq doesn't have a packed layout in memory, fall back to MarshalBytes. 2409 buf := make([]byte, l.SizeBytes()) 2410 l.MarshalBytes(buf) 2411 length, err := writer.Write(buf) 2412 return int64(length), err 2413 } 2414 2415 // Construct a slice backed by dst's underlying memory. 2416 var buf []byte 2417 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 2418 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(l))) 2419 hdr.Len = l.SizeBytes() 2420 hdr.Cap = l.SizeBytes() 2421 2422 length, err := writer.Write(buf) 2423 // Since we bypassed the compiler's escape analysis, indicate that l 2424 // must live until the use above. 2425 runtime.KeepAlive(l) // escapes: replaced by intrinsic. 2426 return int64(length), err 2427 } 2428 2429 // CheckedMarshal implements marshal.CheckedMarshallable.CheckedMarshal. 2430 func (l *ListenReq) CheckedMarshal(dst []byte) ([]byte, bool) { 2431 if l.SizeBytes() > len(dst) { 2432 return dst, false 2433 } 2434 return l.MarshalUnsafe(dst), true 2435 } 2436 2437 // CheckedUnmarshal implements marshal.CheckedMarshallable.CheckedUnmarshal. 2438 func (l *ListenReq) CheckedUnmarshal(src []byte) ([]byte, bool) { 2439 if l.SizeBytes() > len(src) { 2440 return src, false 2441 } 2442 return l.UnmarshalUnsafe(src), true 2443 } 2444 2445 // SizeBytes implements marshal.Marshallable.SizeBytes. 2446 //go:nosplit 2447 func (m *MID) SizeBytes() int { 2448 return 2 2449 } 2450 2451 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 2452 func (m *MID) MarshalBytes(dst []byte) []byte { 2453 hostarch.ByteOrder.PutUint16(dst[:2], uint16(*m)) 2454 return dst[2:] 2455 } 2456 2457 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 2458 func (m *MID) UnmarshalBytes(src []byte) []byte { 2459 *m = MID(uint16(hostarch.ByteOrder.Uint16(src[:2]))) 2460 return src[2:] 2461 } 2462 2463 // Packed implements marshal.Marshallable.Packed. 2464 //go:nosplit 2465 func (m *MID) Packed() bool { 2466 // Scalar newtypes are always packed. 2467 return true 2468 } 2469 2470 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 2471 func (m *MID) MarshalUnsafe(dst []byte) []byte { 2472 size := m.SizeBytes() 2473 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(m), uintptr(size)) 2474 return dst[size:] 2475 } 2476 2477 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 2478 func (m *MID) UnmarshalUnsafe(src []byte) []byte { 2479 size := m.SizeBytes() 2480 gohacks.Memmove(unsafe.Pointer(m), unsafe.Pointer(&src[0]), uintptr(size)) 2481 return src[size:] 2482 } 2483 2484 // CopyOutN implements marshal.Marshallable.CopyOutN. 2485 func (m *MID) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 2486 // Construct a slice backed by dst's underlying memory. 2487 var buf []byte 2488 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 2489 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(m))) 2490 hdr.Len = m.SizeBytes() 2491 hdr.Cap = m.SizeBytes() 2492 2493 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 2494 // Since we bypassed the compiler's escape analysis, indicate that m 2495 // must live until the use above. 2496 runtime.KeepAlive(m) // escapes: replaced by intrinsic. 2497 return length, err 2498 } 2499 2500 // CopyOut implements marshal.Marshallable.CopyOut. 2501 func (m *MID) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 2502 return m.CopyOutN(cc, addr, m.SizeBytes()) 2503 } 2504 2505 // CopyInN implements marshal.Marshallable.CopyInN. 2506 func (m *MID) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 2507 // Construct a slice backed by dst's underlying memory. 2508 var buf []byte 2509 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 2510 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(m))) 2511 hdr.Len = m.SizeBytes() 2512 hdr.Cap = m.SizeBytes() 2513 2514 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 2515 // Since we bypassed the compiler's escape analysis, indicate that m 2516 // must live until the use above. 2517 runtime.KeepAlive(m) // escapes: replaced by intrinsic. 2518 return length, err 2519 } 2520 2521 // CopyIn implements marshal.Marshallable.CopyIn. 2522 func (m *MID) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 2523 return m.CopyInN(cc, addr, m.SizeBytes()) 2524 } 2525 2526 // WriteTo implements io.WriterTo.WriteTo. 2527 func (m *MID) WriteTo(writer io.Writer) (int64, error) { 2528 // Construct a slice backed by dst's underlying memory. 2529 var buf []byte 2530 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 2531 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(m))) 2532 hdr.Len = m.SizeBytes() 2533 hdr.Cap = m.SizeBytes() 2534 2535 length, err := writer.Write(buf) 2536 // Since we bypassed the compiler's escape analysis, indicate that m 2537 // must live until the use above. 2538 runtime.KeepAlive(m) // escapes: replaced by intrinsic. 2539 return int64(length), err 2540 } 2541 2542 // CopyMIDSliceIn copies in a slice of MID objects from the task's memory. 2543 func CopyMIDSliceIn(cc marshal.CopyContext, addr hostarch.Addr, dst []MID) (int, error) { 2544 count := len(dst) 2545 if count == 0 { 2546 return 0, nil 2547 } 2548 size := (*MID)(nil).SizeBytes() 2549 2550 ptr := unsafe.Pointer(&dst) 2551 val := gohacks.Noescape(unsafe.Pointer((*reflect.SliceHeader)(ptr).Data)) 2552 2553 // Construct a slice backed by dst's underlying memory. 2554 var buf []byte 2555 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 2556 hdr.Data = uintptr(val) 2557 hdr.Len = size * count 2558 hdr.Cap = size * count 2559 2560 length, err := cc.CopyInBytes(addr, buf) // escapes: okay. 2561 // Since we bypassed the compiler's escape analysis, indicate that dst 2562 // must live until the use above. 2563 runtime.KeepAlive(dst) // escapes: replaced by intrinsic. 2564 return length, err 2565 } 2566 2567 // CopyMIDSliceOut copies a slice of MID objects to the task's memory. 2568 func CopyMIDSliceOut(cc marshal.CopyContext, addr hostarch.Addr, src []MID) (int, error) { 2569 count := len(src) 2570 if count == 0 { 2571 return 0, nil 2572 } 2573 size := (*MID)(nil).SizeBytes() 2574 2575 ptr := unsafe.Pointer(&src) 2576 val := gohacks.Noescape(unsafe.Pointer((*reflect.SliceHeader)(ptr).Data)) 2577 2578 // Construct a slice backed by dst's underlying memory. 2579 var buf []byte 2580 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 2581 hdr.Data = uintptr(val) 2582 hdr.Len = size * count 2583 hdr.Cap = size * count 2584 2585 length, err := cc.CopyOutBytes(addr, buf) // escapes: okay. 2586 // Since we bypassed the compiler's escape analysis, indicate that src 2587 // must live until the use above. 2588 runtime.KeepAlive(src) // escapes: replaced by intrinsic. 2589 return length, err 2590 } 2591 2592 // MarshalUnsafeMIDSlice is like MID.MarshalUnsafe, but for a []MID. 2593 func MarshalUnsafeMIDSlice(src []MID, dst []byte) []byte { 2594 count := len(src) 2595 if count == 0 { 2596 return dst 2597 } 2598 size := (*MID)(nil).SizeBytes() 2599 2600 buf := dst[:size*count] 2601 gohacks.Memmove(unsafe.Pointer(&buf[0]), unsafe.Pointer(&src[0]), uintptr(len(buf))) 2602 return dst[size*count:] 2603 } 2604 2605 // UnmarshalUnsafeMIDSlice is like MID.UnmarshalUnsafe, but for a []MID. 2606 func UnmarshalUnsafeMIDSlice(dst []MID, src []byte) []byte { 2607 count := len(dst) 2608 if count == 0 { 2609 return src 2610 } 2611 size := (*MID)(nil).SizeBytes() 2612 2613 buf := src[:size*count] 2614 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(&buf[0]), uintptr(len(buf))) 2615 return src[size*count:] 2616 } 2617 2618 // SizeBytes implements marshal.Marshallable.SizeBytes. 2619 func (m *MkdirAtResp) SizeBytes() int { 2620 return 0 + 2621 (*Inode)(nil).SizeBytes() 2622 } 2623 2624 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 2625 func (m *MkdirAtResp) MarshalBytes(dst []byte) []byte { 2626 dst = m.ChildDir.MarshalUnsafe(dst) 2627 return dst 2628 } 2629 2630 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 2631 func (m *MkdirAtResp) UnmarshalBytes(src []byte) []byte { 2632 src = m.ChildDir.UnmarshalUnsafe(src) 2633 return src 2634 } 2635 2636 // Packed implements marshal.Marshallable.Packed. 2637 //go:nosplit 2638 func (m *MkdirAtResp) Packed() bool { 2639 return m.ChildDir.Packed() 2640 } 2641 2642 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 2643 func (m *MkdirAtResp) MarshalUnsafe(dst []byte) []byte { 2644 if m.ChildDir.Packed() { 2645 size := m.SizeBytes() 2646 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(m), uintptr(size)) 2647 return dst[size:] 2648 } 2649 // Type MkdirAtResp doesn't have a packed layout in memory, fallback to MarshalBytes. 2650 return m.MarshalBytes(dst) 2651 } 2652 2653 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 2654 func (m *MkdirAtResp) UnmarshalUnsafe(src []byte) []byte { 2655 if m.ChildDir.Packed() { 2656 size := m.SizeBytes() 2657 gohacks.Memmove(unsafe.Pointer(m), unsafe.Pointer(&src[0]), uintptr(size)) 2658 return src[size:] 2659 } 2660 // Type MkdirAtResp doesn't have a packed layout in memory, fallback to UnmarshalBytes. 2661 return m.UnmarshalBytes(src) 2662 } 2663 2664 // CopyOutN implements marshal.Marshallable.CopyOutN. 2665 func (m *MkdirAtResp) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 2666 if !m.ChildDir.Packed() { 2667 // Type MkdirAtResp doesn't have a packed layout in memory, fall back to MarshalBytes. 2668 buf := cc.CopyScratchBuffer(m.SizeBytes()) // escapes: okay. 2669 m.MarshalBytes(buf) // escapes: fallback. 2670 return cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 2671 } 2672 2673 // Construct a slice backed by dst's underlying memory. 2674 var buf []byte 2675 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 2676 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(m))) 2677 hdr.Len = m.SizeBytes() 2678 hdr.Cap = m.SizeBytes() 2679 2680 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 2681 // Since we bypassed the compiler's escape analysis, indicate that m 2682 // must live until the use above. 2683 runtime.KeepAlive(m) // escapes: replaced by intrinsic. 2684 return length, err 2685 } 2686 2687 // CopyOut implements marshal.Marshallable.CopyOut. 2688 func (m *MkdirAtResp) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 2689 return m.CopyOutN(cc, addr, m.SizeBytes()) 2690 } 2691 2692 // CopyInN implements marshal.Marshallable.CopyInN. 2693 func (m *MkdirAtResp) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 2694 if !m.ChildDir.Packed() { 2695 // Type MkdirAtResp doesn't have a packed layout in memory, fall back to UnmarshalBytes. 2696 buf := cc.CopyScratchBuffer(m.SizeBytes()) // escapes: okay. 2697 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 2698 // Unmarshal unconditionally. If we had a short copy-in, this results in a 2699 // partially unmarshalled struct. 2700 m.UnmarshalBytes(buf) // escapes: fallback. 2701 return length, err 2702 } 2703 2704 // Construct a slice backed by dst's underlying memory. 2705 var buf []byte 2706 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 2707 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(m))) 2708 hdr.Len = m.SizeBytes() 2709 hdr.Cap = m.SizeBytes() 2710 2711 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 2712 // Since we bypassed the compiler's escape analysis, indicate that m 2713 // must live until the use above. 2714 runtime.KeepAlive(m) // escapes: replaced by intrinsic. 2715 return length, err 2716 } 2717 2718 // CopyIn implements marshal.Marshallable.CopyIn. 2719 func (m *MkdirAtResp) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 2720 return m.CopyInN(cc, addr, m.SizeBytes()) 2721 } 2722 2723 // WriteTo implements io.WriterTo.WriteTo. 2724 func (m *MkdirAtResp) WriteTo(writer io.Writer) (int64, error) { 2725 if !m.ChildDir.Packed() { 2726 // Type MkdirAtResp doesn't have a packed layout in memory, fall back to MarshalBytes. 2727 buf := make([]byte, m.SizeBytes()) 2728 m.MarshalBytes(buf) 2729 length, err := writer.Write(buf) 2730 return int64(length), err 2731 } 2732 2733 // Construct a slice backed by dst's underlying memory. 2734 var buf []byte 2735 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 2736 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(m))) 2737 hdr.Len = m.SizeBytes() 2738 hdr.Cap = m.SizeBytes() 2739 2740 length, err := writer.Write(buf) 2741 // Since we bypassed the compiler's escape analysis, indicate that m 2742 // must live until the use above. 2743 runtime.KeepAlive(m) // escapes: replaced by intrinsic. 2744 return int64(length), err 2745 } 2746 2747 // CheckedMarshal implements marshal.CheckedMarshallable.CheckedMarshal. 2748 func (m *MkdirAtResp) CheckedMarshal(dst []byte) ([]byte, bool) { 2749 if m.SizeBytes() > len(dst) { 2750 return dst, false 2751 } 2752 return m.MarshalUnsafe(dst), true 2753 } 2754 2755 // CheckedUnmarshal implements marshal.CheckedMarshallable.CheckedUnmarshal. 2756 func (m *MkdirAtResp) CheckedUnmarshal(src []byte) ([]byte, bool) { 2757 if m.SizeBytes() > len(src) { 2758 return src, false 2759 } 2760 return m.UnmarshalUnsafe(src), true 2761 } 2762 2763 // SizeBytes implements marshal.Marshallable.SizeBytes. 2764 func (m *MknodAtResp) SizeBytes() int { 2765 return 0 + 2766 (*Inode)(nil).SizeBytes() 2767 } 2768 2769 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 2770 func (m *MknodAtResp) MarshalBytes(dst []byte) []byte { 2771 dst = m.Child.MarshalUnsafe(dst) 2772 return dst 2773 } 2774 2775 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 2776 func (m *MknodAtResp) UnmarshalBytes(src []byte) []byte { 2777 src = m.Child.UnmarshalUnsafe(src) 2778 return src 2779 } 2780 2781 // Packed implements marshal.Marshallable.Packed. 2782 //go:nosplit 2783 func (m *MknodAtResp) Packed() bool { 2784 return m.Child.Packed() 2785 } 2786 2787 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 2788 func (m *MknodAtResp) MarshalUnsafe(dst []byte) []byte { 2789 if m.Child.Packed() { 2790 size := m.SizeBytes() 2791 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(m), uintptr(size)) 2792 return dst[size:] 2793 } 2794 // Type MknodAtResp doesn't have a packed layout in memory, fallback to MarshalBytes. 2795 return m.MarshalBytes(dst) 2796 } 2797 2798 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 2799 func (m *MknodAtResp) UnmarshalUnsafe(src []byte) []byte { 2800 if m.Child.Packed() { 2801 size := m.SizeBytes() 2802 gohacks.Memmove(unsafe.Pointer(m), unsafe.Pointer(&src[0]), uintptr(size)) 2803 return src[size:] 2804 } 2805 // Type MknodAtResp doesn't have a packed layout in memory, fallback to UnmarshalBytes. 2806 return m.UnmarshalBytes(src) 2807 } 2808 2809 // CopyOutN implements marshal.Marshallable.CopyOutN. 2810 func (m *MknodAtResp) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 2811 if !m.Child.Packed() { 2812 // Type MknodAtResp doesn't have a packed layout in memory, fall back to MarshalBytes. 2813 buf := cc.CopyScratchBuffer(m.SizeBytes()) // escapes: okay. 2814 m.MarshalBytes(buf) // escapes: fallback. 2815 return cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 2816 } 2817 2818 // Construct a slice backed by dst's underlying memory. 2819 var buf []byte 2820 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 2821 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(m))) 2822 hdr.Len = m.SizeBytes() 2823 hdr.Cap = m.SizeBytes() 2824 2825 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 2826 // Since we bypassed the compiler's escape analysis, indicate that m 2827 // must live until the use above. 2828 runtime.KeepAlive(m) // escapes: replaced by intrinsic. 2829 return length, err 2830 } 2831 2832 // CopyOut implements marshal.Marshallable.CopyOut. 2833 func (m *MknodAtResp) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 2834 return m.CopyOutN(cc, addr, m.SizeBytes()) 2835 } 2836 2837 // CopyInN implements marshal.Marshallable.CopyInN. 2838 func (m *MknodAtResp) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 2839 if !m.Child.Packed() { 2840 // Type MknodAtResp doesn't have a packed layout in memory, fall back to UnmarshalBytes. 2841 buf := cc.CopyScratchBuffer(m.SizeBytes()) // escapes: okay. 2842 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 2843 // Unmarshal unconditionally. If we had a short copy-in, this results in a 2844 // partially unmarshalled struct. 2845 m.UnmarshalBytes(buf) // escapes: fallback. 2846 return length, err 2847 } 2848 2849 // Construct a slice backed by dst's underlying memory. 2850 var buf []byte 2851 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 2852 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(m))) 2853 hdr.Len = m.SizeBytes() 2854 hdr.Cap = m.SizeBytes() 2855 2856 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 2857 // Since we bypassed the compiler's escape analysis, indicate that m 2858 // must live until the use above. 2859 runtime.KeepAlive(m) // escapes: replaced by intrinsic. 2860 return length, err 2861 } 2862 2863 // CopyIn implements marshal.Marshallable.CopyIn. 2864 func (m *MknodAtResp) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 2865 return m.CopyInN(cc, addr, m.SizeBytes()) 2866 } 2867 2868 // WriteTo implements io.WriterTo.WriteTo. 2869 func (m *MknodAtResp) WriteTo(writer io.Writer) (int64, error) { 2870 if !m.Child.Packed() { 2871 // Type MknodAtResp doesn't have a packed layout in memory, fall back to MarshalBytes. 2872 buf := make([]byte, m.SizeBytes()) 2873 m.MarshalBytes(buf) 2874 length, err := writer.Write(buf) 2875 return int64(length), err 2876 } 2877 2878 // Construct a slice backed by dst's underlying memory. 2879 var buf []byte 2880 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 2881 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(m))) 2882 hdr.Len = m.SizeBytes() 2883 hdr.Cap = m.SizeBytes() 2884 2885 length, err := writer.Write(buf) 2886 // Since we bypassed the compiler's escape analysis, indicate that m 2887 // must live until the use above. 2888 runtime.KeepAlive(m) // escapes: replaced by intrinsic. 2889 return int64(length), err 2890 } 2891 2892 // CheckedMarshal implements marshal.CheckedMarshallable.CheckedMarshal. 2893 func (m *MknodAtResp) CheckedMarshal(dst []byte) ([]byte, bool) { 2894 if m.SizeBytes() > len(dst) { 2895 return dst, false 2896 } 2897 return m.MarshalUnsafe(dst), true 2898 } 2899 2900 // CheckedUnmarshal implements marshal.CheckedMarshallable.CheckedUnmarshal. 2901 func (m *MknodAtResp) CheckedUnmarshal(src []byte) ([]byte, bool) { 2902 if m.SizeBytes() > len(src) { 2903 return src, false 2904 } 2905 return m.UnmarshalUnsafe(src), true 2906 } 2907 2908 // SizeBytes implements marshal.Marshallable.SizeBytes. 2909 func (o *OpenAtReq) SizeBytes() int { 2910 return 8 + 2911 (*FDID)(nil).SizeBytes() 2912 } 2913 2914 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 2915 func (o *OpenAtReq) MarshalBytes(dst []byte) []byte { 2916 dst = o.FD.MarshalUnsafe(dst) 2917 hostarch.ByteOrder.PutUint32(dst[:4], uint32(o.Flags)) 2918 dst = dst[4:] 2919 // Padding: dst[:sizeof(uint32)] ~= uint32(0) 2920 dst = dst[4:] 2921 return dst 2922 } 2923 2924 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 2925 func (o *OpenAtReq) UnmarshalBytes(src []byte) []byte { 2926 src = o.FD.UnmarshalUnsafe(src) 2927 o.Flags = uint32(hostarch.ByteOrder.Uint32(src[:4])) 2928 src = src[4:] 2929 // Padding: var _ uint32 ~= src[:sizeof(uint32)] 2930 src = src[4:] 2931 return src 2932 } 2933 2934 // Packed implements marshal.Marshallable.Packed. 2935 //go:nosplit 2936 func (o *OpenAtReq) Packed() bool { 2937 return o.FD.Packed() 2938 } 2939 2940 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 2941 func (o *OpenAtReq) MarshalUnsafe(dst []byte) []byte { 2942 if o.FD.Packed() { 2943 size := o.SizeBytes() 2944 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(o), uintptr(size)) 2945 return dst[size:] 2946 } 2947 // Type OpenAtReq doesn't have a packed layout in memory, fallback to MarshalBytes. 2948 return o.MarshalBytes(dst) 2949 } 2950 2951 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 2952 func (o *OpenAtReq) UnmarshalUnsafe(src []byte) []byte { 2953 if o.FD.Packed() { 2954 size := o.SizeBytes() 2955 gohacks.Memmove(unsafe.Pointer(o), unsafe.Pointer(&src[0]), uintptr(size)) 2956 return src[size:] 2957 } 2958 // Type OpenAtReq doesn't have a packed layout in memory, fallback to UnmarshalBytes. 2959 return o.UnmarshalBytes(src) 2960 } 2961 2962 // CopyOutN implements marshal.Marshallable.CopyOutN. 2963 func (o *OpenAtReq) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 2964 if !o.FD.Packed() { 2965 // Type OpenAtReq doesn't have a packed layout in memory, fall back to MarshalBytes. 2966 buf := cc.CopyScratchBuffer(o.SizeBytes()) // escapes: okay. 2967 o.MarshalBytes(buf) // escapes: fallback. 2968 return cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 2969 } 2970 2971 // Construct a slice backed by dst's underlying memory. 2972 var buf []byte 2973 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 2974 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(o))) 2975 hdr.Len = o.SizeBytes() 2976 hdr.Cap = o.SizeBytes() 2977 2978 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 2979 // Since we bypassed the compiler's escape analysis, indicate that o 2980 // must live until the use above. 2981 runtime.KeepAlive(o) // escapes: replaced by intrinsic. 2982 return length, err 2983 } 2984 2985 // CopyOut implements marshal.Marshallable.CopyOut. 2986 func (o *OpenAtReq) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 2987 return o.CopyOutN(cc, addr, o.SizeBytes()) 2988 } 2989 2990 // CopyInN implements marshal.Marshallable.CopyInN. 2991 func (o *OpenAtReq) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 2992 if !o.FD.Packed() { 2993 // Type OpenAtReq doesn't have a packed layout in memory, fall back to UnmarshalBytes. 2994 buf := cc.CopyScratchBuffer(o.SizeBytes()) // escapes: okay. 2995 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 2996 // Unmarshal unconditionally. If we had a short copy-in, this results in a 2997 // partially unmarshalled struct. 2998 o.UnmarshalBytes(buf) // escapes: fallback. 2999 return length, err 3000 } 3001 3002 // Construct a slice backed by dst's underlying memory. 3003 var buf []byte 3004 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 3005 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(o))) 3006 hdr.Len = o.SizeBytes() 3007 hdr.Cap = o.SizeBytes() 3008 3009 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 3010 // Since we bypassed the compiler's escape analysis, indicate that o 3011 // must live until the use above. 3012 runtime.KeepAlive(o) // escapes: replaced by intrinsic. 3013 return length, err 3014 } 3015 3016 // CopyIn implements marshal.Marshallable.CopyIn. 3017 func (o *OpenAtReq) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 3018 return o.CopyInN(cc, addr, o.SizeBytes()) 3019 } 3020 3021 // WriteTo implements io.WriterTo.WriteTo. 3022 func (o *OpenAtReq) WriteTo(writer io.Writer) (int64, error) { 3023 if !o.FD.Packed() { 3024 // Type OpenAtReq doesn't have a packed layout in memory, fall back to MarshalBytes. 3025 buf := make([]byte, o.SizeBytes()) 3026 o.MarshalBytes(buf) 3027 length, err := writer.Write(buf) 3028 return int64(length), err 3029 } 3030 3031 // Construct a slice backed by dst's underlying memory. 3032 var buf []byte 3033 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 3034 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(o))) 3035 hdr.Len = o.SizeBytes() 3036 hdr.Cap = o.SizeBytes() 3037 3038 length, err := writer.Write(buf) 3039 // Since we bypassed the compiler's escape analysis, indicate that o 3040 // must live until the use above. 3041 runtime.KeepAlive(o) // escapes: replaced by intrinsic. 3042 return int64(length), err 3043 } 3044 3045 // CheckedMarshal implements marshal.CheckedMarshallable.CheckedMarshal. 3046 func (o *OpenAtReq) CheckedMarshal(dst []byte) ([]byte, bool) { 3047 if o.SizeBytes() > len(dst) { 3048 return dst, false 3049 } 3050 return o.MarshalUnsafe(dst), true 3051 } 3052 3053 // CheckedUnmarshal implements marshal.CheckedMarshallable.CheckedUnmarshal. 3054 func (o *OpenAtReq) CheckedUnmarshal(src []byte) ([]byte, bool) { 3055 if o.SizeBytes() > len(src) { 3056 return src, false 3057 } 3058 return o.UnmarshalUnsafe(src), true 3059 } 3060 3061 // SizeBytes implements marshal.Marshallable.SizeBytes. 3062 func (o *OpenAtResp) SizeBytes() int { 3063 return 0 + 3064 (*FDID)(nil).SizeBytes() 3065 } 3066 3067 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 3068 func (o *OpenAtResp) MarshalBytes(dst []byte) []byte { 3069 dst = o.OpenFD.MarshalUnsafe(dst) 3070 return dst 3071 } 3072 3073 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 3074 func (o *OpenAtResp) UnmarshalBytes(src []byte) []byte { 3075 src = o.OpenFD.UnmarshalUnsafe(src) 3076 return src 3077 } 3078 3079 // Packed implements marshal.Marshallable.Packed. 3080 //go:nosplit 3081 func (o *OpenAtResp) Packed() bool { 3082 return o.OpenFD.Packed() 3083 } 3084 3085 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 3086 func (o *OpenAtResp) MarshalUnsafe(dst []byte) []byte { 3087 if o.OpenFD.Packed() { 3088 size := o.SizeBytes() 3089 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(o), uintptr(size)) 3090 return dst[size:] 3091 } 3092 // Type OpenAtResp doesn't have a packed layout in memory, fallback to MarshalBytes. 3093 return o.MarshalBytes(dst) 3094 } 3095 3096 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 3097 func (o *OpenAtResp) UnmarshalUnsafe(src []byte) []byte { 3098 if o.OpenFD.Packed() { 3099 size := o.SizeBytes() 3100 gohacks.Memmove(unsafe.Pointer(o), unsafe.Pointer(&src[0]), uintptr(size)) 3101 return src[size:] 3102 } 3103 // Type OpenAtResp doesn't have a packed layout in memory, fallback to UnmarshalBytes. 3104 return o.UnmarshalBytes(src) 3105 } 3106 3107 // CopyOutN implements marshal.Marshallable.CopyOutN. 3108 func (o *OpenAtResp) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 3109 if !o.OpenFD.Packed() { 3110 // Type OpenAtResp doesn't have a packed layout in memory, fall back to MarshalBytes. 3111 buf := cc.CopyScratchBuffer(o.SizeBytes()) // escapes: okay. 3112 o.MarshalBytes(buf) // escapes: fallback. 3113 return cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 3114 } 3115 3116 // Construct a slice backed by dst's underlying memory. 3117 var buf []byte 3118 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 3119 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(o))) 3120 hdr.Len = o.SizeBytes() 3121 hdr.Cap = o.SizeBytes() 3122 3123 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 3124 // Since we bypassed the compiler's escape analysis, indicate that o 3125 // must live until the use above. 3126 runtime.KeepAlive(o) // escapes: replaced by intrinsic. 3127 return length, err 3128 } 3129 3130 // CopyOut implements marshal.Marshallable.CopyOut. 3131 func (o *OpenAtResp) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 3132 return o.CopyOutN(cc, addr, o.SizeBytes()) 3133 } 3134 3135 // CopyInN implements marshal.Marshallable.CopyInN. 3136 func (o *OpenAtResp) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 3137 if !o.OpenFD.Packed() { 3138 // Type OpenAtResp doesn't have a packed layout in memory, fall back to UnmarshalBytes. 3139 buf := cc.CopyScratchBuffer(o.SizeBytes()) // escapes: okay. 3140 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 3141 // Unmarshal unconditionally. If we had a short copy-in, this results in a 3142 // partially unmarshalled struct. 3143 o.UnmarshalBytes(buf) // escapes: fallback. 3144 return length, err 3145 } 3146 3147 // Construct a slice backed by dst's underlying memory. 3148 var buf []byte 3149 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 3150 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(o))) 3151 hdr.Len = o.SizeBytes() 3152 hdr.Cap = o.SizeBytes() 3153 3154 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 3155 // Since we bypassed the compiler's escape analysis, indicate that o 3156 // must live until the use above. 3157 runtime.KeepAlive(o) // escapes: replaced by intrinsic. 3158 return length, err 3159 } 3160 3161 // CopyIn implements marshal.Marshallable.CopyIn. 3162 func (o *OpenAtResp) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 3163 return o.CopyInN(cc, addr, o.SizeBytes()) 3164 } 3165 3166 // WriteTo implements io.WriterTo.WriteTo. 3167 func (o *OpenAtResp) WriteTo(writer io.Writer) (int64, error) { 3168 if !o.OpenFD.Packed() { 3169 // Type OpenAtResp doesn't have a packed layout in memory, fall back to MarshalBytes. 3170 buf := make([]byte, o.SizeBytes()) 3171 o.MarshalBytes(buf) 3172 length, err := writer.Write(buf) 3173 return int64(length), err 3174 } 3175 3176 // Construct a slice backed by dst's underlying memory. 3177 var buf []byte 3178 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 3179 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(o))) 3180 hdr.Len = o.SizeBytes() 3181 hdr.Cap = o.SizeBytes() 3182 3183 length, err := writer.Write(buf) 3184 // Since we bypassed the compiler's escape analysis, indicate that o 3185 // must live until the use above. 3186 runtime.KeepAlive(o) // escapes: replaced by intrinsic. 3187 return int64(length), err 3188 } 3189 3190 // CheckedMarshal implements marshal.CheckedMarshallable.CheckedMarshal. 3191 func (o *OpenAtResp) CheckedMarshal(dst []byte) ([]byte, bool) { 3192 if o.SizeBytes() > len(dst) { 3193 return dst, false 3194 } 3195 return o.MarshalUnsafe(dst), true 3196 } 3197 3198 // CheckedUnmarshal implements marshal.CheckedMarshallable.CheckedUnmarshal. 3199 func (o *OpenAtResp) CheckedUnmarshal(src []byte) ([]byte, bool) { 3200 if o.SizeBytes() > len(src) { 3201 return src, false 3202 } 3203 return o.UnmarshalUnsafe(src), true 3204 } 3205 3206 // SizeBytes implements marshal.Marshallable.SizeBytes. 3207 func (o *OpenCreateAtResp) SizeBytes() int { 3208 return 0 + 3209 (*Inode)(nil).SizeBytes() + 3210 (*FDID)(nil).SizeBytes() 3211 } 3212 3213 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 3214 func (o *OpenCreateAtResp) MarshalBytes(dst []byte) []byte { 3215 dst = o.Child.MarshalUnsafe(dst) 3216 dst = o.NewFD.MarshalUnsafe(dst) 3217 return dst 3218 } 3219 3220 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 3221 func (o *OpenCreateAtResp) UnmarshalBytes(src []byte) []byte { 3222 src = o.Child.UnmarshalUnsafe(src) 3223 src = o.NewFD.UnmarshalUnsafe(src) 3224 return src 3225 } 3226 3227 // Packed implements marshal.Marshallable.Packed. 3228 //go:nosplit 3229 func (o *OpenCreateAtResp) Packed() bool { 3230 return o.Child.Packed() && o.NewFD.Packed() 3231 } 3232 3233 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 3234 func (o *OpenCreateAtResp) MarshalUnsafe(dst []byte) []byte { 3235 if o.Child.Packed() && o.NewFD.Packed() { 3236 size := o.SizeBytes() 3237 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(o), uintptr(size)) 3238 return dst[size:] 3239 } 3240 // Type OpenCreateAtResp doesn't have a packed layout in memory, fallback to MarshalBytes. 3241 return o.MarshalBytes(dst) 3242 } 3243 3244 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 3245 func (o *OpenCreateAtResp) UnmarshalUnsafe(src []byte) []byte { 3246 if o.Child.Packed() && o.NewFD.Packed() { 3247 size := o.SizeBytes() 3248 gohacks.Memmove(unsafe.Pointer(o), unsafe.Pointer(&src[0]), uintptr(size)) 3249 return src[size:] 3250 } 3251 // Type OpenCreateAtResp doesn't have a packed layout in memory, fallback to UnmarshalBytes. 3252 return o.UnmarshalBytes(src) 3253 } 3254 3255 // CopyOutN implements marshal.Marshallable.CopyOutN. 3256 func (o *OpenCreateAtResp) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 3257 if !o.Child.Packed() && o.NewFD.Packed() { 3258 // Type OpenCreateAtResp doesn't have a packed layout in memory, fall back to MarshalBytes. 3259 buf := cc.CopyScratchBuffer(o.SizeBytes()) // escapes: okay. 3260 o.MarshalBytes(buf) // escapes: fallback. 3261 return cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 3262 } 3263 3264 // Construct a slice backed by dst's underlying memory. 3265 var buf []byte 3266 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 3267 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(o))) 3268 hdr.Len = o.SizeBytes() 3269 hdr.Cap = o.SizeBytes() 3270 3271 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 3272 // Since we bypassed the compiler's escape analysis, indicate that o 3273 // must live until the use above. 3274 runtime.KeepAlive(o) // escapes: replaced by intrinsic. 3275 return length, err 3276 } 3277 3278 // CopyOut implements marshal.Marshallable.CopyOut. 3279 func (o *OpenCreateAtResp) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 3280 return o.CopyOutN(cc, addr, o.SizeBytes()) 3281 } 3282 3283 // CopyInN implements marshal.Marshallable.CopyInN. 3284 func (o *OpenCreateAtResp) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 3285 if !o.Child.Packed() && o.NewFD.Packed() { 3286 // Type OpenCreateAtResp doesn't have a packed layout in memory, fall back to UnmarshalBytes. 3287 buf := cc.CopyScratchBuffer(o.SizeBytes()) // escapes: okay. 3288 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 3289 // Unmarshal unconditionally. If we had a short copy-in, this results in a 3290 // partially unmarshalled struct. 3291 o.UnmarshalBytes(buf) // escapes: fallback. 3292 return length, err 3293 } 3294 3295 // Construct a slice backed by dst's underlying memory. 3296 var buf []byte 3297 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 3298 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(o))) 3299 hdr.Len = o.SizeBytes() 3300 hdr.Cap = o.SizeBytes() 3301 3302 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 3303 // Since we bypassed the compiler's escape analysis, indicate that o 3304 // must live until the use above. 3305 runtime.KeepAlive(o) // escapes: replaced by intrinsic. 3306 return length, err 3307 } 3308 3309 // CopyIn implements marshal.Marshallable.CopyIn. 3310 func (o *OpenCreateAtResp) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 3311 return o.CopyInN(cc, addr, o.SizeBytes()) 3312 } 3313 3314 // WriteTo implements io.WriterTo.WriteTo. 3315 func (o *OpenCreateAtResp) WriteTo(writer io.Writer) (int64, error) { 3316 if !o.Child.Packed() && o.NewFD.Packed() { 3317 // Type OpenCreateAtResp doesn't have a packed layout in memory, fall back to MarshalBytes. 3318 buf := make([]byte, o.SizeBytes()) 3319 o.MarshalBytes(buf) 3320 length, err := writer.Write(buf) 3321 return int64(length), err 3322 } 3323 3324 // Construct a slice backed by dst's underlying memory. 3325 var buf []byte 3326 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 3327 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(o))) 3328 hdr.Len = o.SizeBytes() 3329 hdr.Cap = o.SizeBytes() 3330 3331 length, err := writer.Write(buf) 3332 // Since we bypassed the compiler's escape analysis, indicate that o 3333 // must live until the use above. 3334 runtime.KeepAlive(o) // escapes: replaced by intrinsic. 3335 return int64(length), err 3336 } 3337 3338 // CheckedMarshal implements marshal.CheckedMarshallable.CheckedMarshal. 3339 func (o *OpenCreateAtResp) CheckedMarshal(dst []byte) ([]byte, bool) { 3340 if o.SizeBytes() > len(dst) { 3341 return dst, false 3342 } 3343 return o.MarshalUnsafe(dst), true 3344 } 3345 3346 // CheckedUnmarshal implements marshal.CheckedMarshallable.CheckedUnmarshal. 3347 func (o *OpenCreateAtResp) CheckedUnmarshal(src []byte) ([]byte, bool) { 3348 if o.SizeBytes() > len(src) { 3349 return src, false 3350 } 3351 return o.UnmarshalUnsafe(src), true 3352 } 3353 3354 // SizeBytes implements marshal.Marshallable.SizeBytes. 3355 func (r *PReadReq) SizeBytes() int { 3356 return 16 + 3357 (*FDID)(nil).SizeBytes() 3358 } 3359 3360 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 3361 func (r *PReadReq) MarshalBytes(dst []byte) []byte { 3362 hostarch.ByteOrder.PutUint64(dst[:8], uint64(r.Offset)) 3363 dst = dst[8:] 3364 dst = r.FD.MarshalUnsafe(dst) 3365 hostarch.ByteOrder.PutUint32(dst[:4], uint32(r.Count)) 3366 dst = dst[4:] 3367 // Padding: dst[:sizeof(uint32)] ~= uint32(0) 3368 dst = dst[4:] 3369 return dst 3370 } 3371 3372 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 3373 func (r *PReadReq) UnmarshalBytes(src []byte) []byte { 3374 r.Offset = uint64(hostarch.ByteOrder.Uint64(src[:8])) 3375 src = src[8:] 3376 src = r.FD.UnmarshalUnsafe(src) 3377 r.Count = uint32(hostarch.ByteOrder.Uint32(src[:4])) 3378 src = src[4:] 3379 // Padding: var _ uint32 ~= src[:sizeof(uint32)] 3380 src = src[4:] 3381 return src 3382 } 3383 3384 // Packed implements marshal.Marshallable.Packed. 3385 //go:nosplit 3386 func (r *PReadReq) Packed() bool { 3387 return r.FD.Packed() 3388 } 3389 3390 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 3391 func (r *PReadReq) MarshalUnsafe(dst []byte) []byte { 3392 if r.FD.Packed() { 3393 size := r.SizeBytes() 3394 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(r), uintptr(size)) 3395 return dst[size:] 3396 } 3397 // Type PReadReq doesn't have a packed layout in memory, fallback to MarshalBytes. 3398 return r.MarshalBytes(dst) 3399 } 3400 3401 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 3402 func (r *PReadReq) UnmarshalUnsafe(src []byte) []byte { 3403 if r.FD.Packed() { 3404 size := r.SizeBytes() 3405 gohacks.Memmove(unsafe.Pointer(r), unsafe.Pointer(&src[0]), uintptr(size)) 3406 return src[size:] 3407 } 3408 // Type PReadReq doesn't have a packed layout in memory, fallback to UnmarshalBytes. 3409 return r.UnmarshalBytes(src) 3410 } 3411 3412 // CopyOutN implements marshal.Marshallable.CopyOutN. 3413 func (r *PReadReq) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 3414 if !r.FD.Packed() { 3415 // Type PReadReq doesn't have a packed layout in memory, fall back to MarshalBytes. 3416 buf := cc.CopyScratchBuffer(r.SizeBytes()) // escapes: okay. 3417 r.MarshalBytes(buf) // escapes: fallback. 3418 return cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 3419 } 3420 3421 // Construct a slice backed by dst's underlying memory. 3422 var buf []byte 3423 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 3424 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(r))) 3425 hdr.Len = r.SizeBytes() 3426 hdr.Cap = r.SizeBytes() 3427 3428 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 3429 // Since we bypassed the compiler's escape analysis, indicate that r 3430 // must live until the use above. 3431 runtime.KeepAlive(r) // escapes: replaced by intrinsic. 3432 return length, err 3433 } 3434 3435 // CopyOut implements marshal.Marshallable.CopyOut. 3436 func (r *PReadReq) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 3437 return r.CopyOutN(cc, addr, r.SizeBytes()) 3438 } 3439 3440 // CopyInN implements marshal.Marshallable.CopyInN. 3441 func (r *PReadReq) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 3442 if !r.FD.Packed() { 3443 // Type PReadReq doesn't have a packed layout in memory, fall back to UnmarshalBytes. 3444 buf := cc.CopyScratchBuffer(r.SizeBytes()) // escapes: okay. 3445 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 3446 // Unmarshal unconditionally. If we had a short copy-in, this results in a 3447 // partially unmarshalled struct. 3448 r.UnmarshalBytes(buf) // escapes: fallback. 3449 return length, err 3450 } 3451 3452 // Construct a slice backed by dst's underlying memory. 3453 var buf []byte 3454 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 3455 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(r))) 3456 hdr.Len = r.SizeBytes() 3457 hdr.Cap = r.SizeBytes() 3458 3459 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 3460 // Since we bypassed the compiler's escape analysis, indicate that r 3461 // must live until the use above. 3462 runtime.KeepAlive(r) // escapes: replaced by intrinsic. 3463 return length, err 3464 } 3465 3466 // CopyIn implements marshal.Marshallable.CopyIn. 3467 func (r *PReadReq) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 3468 return r.CopyInN(cc, addr, r.SizeBytes()) 3469 } 3470 3471 // WriteTo implements io.WriterTo.WriteTo. 3472 func (r *PReadReq) WriteTo(writer io.Writer) (int64, error) { 3473 if !r.FD.Packed() { 3474 // Type PReadReq doesn't have a packed layout in memory, fall back to MarshalBytes. 3475 buf := make([]byte, r.SizeBytes()) 3476 r.MarshalBytes(buf) 3477 length, err := writer.Write(buf) 3478 return int64(length), err 3479 } 3480 3481 // Construct a slice backed by dst's underlying memory. 3482 var buf []byte 3483 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 3484 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(r))) 3485 hdr.Len = r.SizeBytes() 3486 hdr.Cap = r.SizeBytes() 3487 3488 length, err := writer.Write(buf) 3489 // Since we bypassed the compiler's escape analysis, indicate that r 3490 // must live until the use above. 3491 runtime.KeepAlive(r) // escapes: replaced by intrinsic. 3492 return int64(length), err 3493 } 3494 3495 // CheckedMarshal implements marshal.CheckedMarshallable.CheckedMarshal. 3496 func (r *PReadReq) CheckedMarshal(dst []byte) ([]byte, bool) { 3497 if r.SizeBytes() > len(dst) { 3498 return dst, false 3499 } 3500 return r.MarshalUnsafe(dst), true 3501 } 3502 3503 // CheckedUnmarshal implements marshal.CheckedMarshallable.CheckedUnmarshal. 3504 func (r *PReadReq) CheckedUnmarshal(src []byte) ([]byte, bool) { 3505 if r.SizeBytes() > len(src) { 3506 return src, false 3507 } 3508 return r.UnmarshalUnsafe(src), true 3509 } 3510 3511 // SizeBytes implements marshal.Marshallable.SizeBytes. 3512 func (w *PWriteResp) SizeBytes() int { 3513 return 8 3514 } 3515 3516 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 3517 func (w *PWriteResp) MarshalBytes(dst []byte) []byte { 3518 hostarch.ByteOrder.PutUint64(dst[:8], uint64(w.Count)) 3519 dst = dst[8:] 3520 return dst 3521 } 3522 3523 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 3524 func (w *PWriteResp) UnmarshalBytes(src []byte) []byte { 3525 w.Count = uint64(hostarch.ByteOrder.Uint64(src[:8])) 3526 src = src[8:] 3527 return src 3528 } 3529 3530 // Packed implements marshal.Marshallable.Packed. 3531 //go:nosplit 3532 func (w *PWriteResp) Packed() bool { 3533 return true 3534 } 3535 3536 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 3537 func (w *PWriteResp) MarshalUnsafe(dst []byte) []byte { 3538 size := w.SizeBytes() 3539 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(w), uintptr(size)) 3540 return dst[size:] 3541 } 3542 3543 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 3544 func (w *PWriteResp) UnmarshalUnsafe(src []byte) []byte { 3545 size := w.SizeBytes() 3546 gohacks.Memmove(unsafe.Pointer(w), unsafe.Pointer(&src[0]), uintptr(size)) 3547 return src[size:] 3548 } 3549 3550 // CopyOutN implements marshal.Marshallable.CopyOutN. 3551 func (w *PWriteResp) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 3552 // Construct a slice backed by dst's underlying memory. 3553 var buf []byte 3554 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 3555 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(w))) 3556 hdr.Len = w.SizeBytes() 3557 hdr.Cap = w.SizeBytes() 3558 3559 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 3560 // Since we bypassed the compiler's escape analysis, indicate that w 3561 // must live until the use above. 3562 runtime.KeepAlive(w) // escapes: replaced by intrinsic. 3563 return length, err 3564 } 3565 3566 // CopyOut implements marshal.Marshallable.CopyOut. 3567 func (w *PWriteResp) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 3568 return w.CopyOutN(cc, addr, w.SizeBytes()) 3569 } 3570 3571 // CopyInN implements marshal.Marshallable.CopyInN. 3572 func (w *PWriteResp) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 3573 // Construct a slice backed by dst's underlying memory. 3574 var buf []byte 3575 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 3576 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(w))) 3577 hdr.Len = w.SizeBytes() 3578 hdr.Cap = w.SizeBytes() 3579 3580 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 3581 // Since we bypassed the compiler's escape analysis, indicate that w 3582 // must live until the use above. 3583 runtime.KeepAlive(w) // escapes: replaced by intrinsic. 3584 return length, err 3585 } 3586 3587 // CopyIn implements marshal.Marshallable.CopyIn. 3588 func (w *PWriteResp) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 3589 return w.CopyInN(cc, addr, w.SizeBytes()) 3590 } 3591 3592 // WriteTo implements io.WriterTo.WriteTo. 3593 func (w *PWriteResp) WriteTo(writer io.Writer) (int64, error) { 3594 // Construct a slice backed by dst's underlying memory. 3595 var buf []byte 3596 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 3597 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(w))) 3598 hdr.Len = w.SizeBytes() 3599 hdr.Cap = w.SizeBytes() 3600 3601 length, err := writer.Write(buf) 3602 // Since we bypassed the compiler's escape analysis, indicate that w 3603 // must live until the use above. 3604 runtime.KeepAlive(w) // escapes: replaced by intrinsic. 3605 return int64(length), err 3606 } 3607 3608 // CheckedMarshal implements marshal.CheckedMarshallable.CheckedMarshal. 3609 func (w *PWriteResp) CheckedMarshal(dst []byte) ([]byte, bool) { 3610 if w.SizeBytes() > len(dst) { 3611 return dst, false 3612 } 3613 return w.MarshalUnsafe(dst), true 3614 } 3615 3616 // CheckedUnmarshal implements marshal.CheckedMarshallable.CheckedUnmarshal. 3617 func (w *PWriteResp) CheckedUnmarshal(src []byte) ([]byte, bool) { 3618 if w.SizeBytes() > len(src) { 3619 return src, false 3620 } 3621 return w.UnmarshalUnsafe(src), true 3622 } 3623 3624 // SizeBytes implements marshal.Marshallable.SizeBytes. 3625 func (r *ReadLinkAtReq) SizeBytes() int { 3626 return 0 + 3627 (*FDID)(nil).SizeBytes() 3628 } 3629 3630 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 3631 func (r *ReadLinkAtReq) MarshalBytes(dst []byte) []byte { 3632 dst = r.FD.MarshalUnsafe(dst) 3633 return dst 3634 } 3635 3636 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 3637 func (r *ReadLinkAtReq) UnmarshalBytes(src []byte) []byte { 3638 src = r.FD.UnmarshalUnsafe(src) 3639 return src 3640 } 3641 3642 // Packed implements marshal.Marshallable.Packed. 3643 //go:nosplit 3644 func (r *ReadLinkAtReq) Packed() bool { 3645 return r.FD.Packed() 3646 } 3647 3648 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 3649 func (r *ReadLinkAtReq) MarshalUnsafe(dst []byte) []byte { 3650 if r.FD.Packed() { 3651 size := r.SizeBytes() 3652 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(r), uintptr(size)) 3653 return dst[size:] 3654 } 3655 // Type ReadLinkAtReq doesn't have a packed layout in memory, fallback to MarshalBytes. 3656 return r.MarshalBytes(dst) 3657 } 3658 3659 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 3660 func (r *ReadLinkAtReq) UnmarshalUnsafe(src []byte) []byte { 3661 if r.FD.Packed() { 3662 size := r.SizeBytes() 3663 gohacks.Memmove(unsafe.Pointer(r), unsafe.Pointer(&src[0]), uintptr(size)) 3664 return src[size:] 3665 } 3666 // Type ReadLinkAtReq doesn't have a packed layout in memory, fallback to UnmarshalBytes. 3667 return r.UnmarshalBytes(src) 3668 } 3669 3670 // CopyOutN implements marshal.Marshallable.CopyOutN. 3671 func (r *ReadLinkAtReq) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 3672 if !r.FD.Packed() { 3673 // Type ReadLinkAtReq doesn't have a packed layout in memory, fall back to MarshalBytes. 3674 buf := cc.CopyScratchBuffer(r.SizeBytes()) // escapes: okay. 3675 r.MarshalBytes(buf) // escapes: fallback. 3676 return cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 3677 } 3678 3679 // Construct a slice backed by dst's underlying memory. 3680 var buf []byte 3681 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 3682 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(r))) 3683 hdr.Len = r.SizeBytes() 3684 hdr.Cap = r.SizeBytes() 3685 3686 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 3687 // Since we bypassed the compiler's escape analysis, indicate that r 3688 // must live until the use above. 3689 runtime.KeepAlive(r) // escapes: replaced by intrinsic. 3690 return length, err 3691 } 3692 3693 // CopyOut implements marshal.Marshallable.CopyOut. 3694 func (r *ReadLinkAtReq) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 3695 return r.CopyOutN(cc, addr, r.SizeBytes()) 3696 } 3697 3698 // CopyInN implements marshal.Marshallable.CopyInN. 3699 func (r *ReadLinkAtReq) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 3700 if !r.FD.Packed() { 3701 // Type ReadLinkAtReq doesn't have a packed layout in memory, fall back to UnmarshalBytes. 3702 buf := cc.CopyScratchBuffer(r.SizeBytes()) // escapes: okay. 3703 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 3704 // Unmarshal unconditionally. If we had a short copy-in, this results in a 3705 // partially unmarshalled struct. 3706 r.UnmarshalBytes(buf) // escapes: fallback. 3707 return length, err 3708 } 3709 3710 // Construct a slice backed by dst's underlying memory. 3711 var buf []byte 3712 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 3713 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(r))) 3714 hdr.Len = r.SizeBytes() 3715 hdr.Cap = r.SizeBytes() 3716 3717 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 3718 // Since we bypassed the compiler's escape analysis, indicate that r 3719 // must live until the use above. 3720 runtime.KeepAlive(r) // escapes: replaced by intrinsic. 3721 return length, err 3722 } 3723 3724 // CopyIn implements marshal.Marshallable.CopyIn. 3725 func (r *ReadLinkAtReq) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 3726 return r.CopyInN(cc, addr, r.SizeBytes()) 3727 } 3728 3729 // WriteTo implements io.WriterTo.WriteTo. 3730 func (r *ReadLinkAtReq) WriteTo(writer io.Writer) (int64, error) { 3731 if !r.FD.Packed() { 3732 // Type ReadLinkAtReq doesn't have a packed layout in memory, fall back to MarshalBytes. 3733 buf := make([]byte, r.SizeBytes()) 3734 r.MarshalBytes(buf) 3735 length, err := writer.Write(buf) 3736 return int64(length), err 3737 } 3738 3739 // Construct a slice backed by dst's underlying memory. 3740 var buf []byte 3741 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 3742 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(r))) 3743 hdr.Len = r.SizeBytes() 3744 hdr.Cap = r.SizeBytes() 3745 3746 length, err := writer.Write(buf) 3747 // Since we bypassed the compiler's escape analysis, indicate that r 3748 // must live until the use above. 3749 runtime.KeepAlive(r) // escapes: replaced by intrinsic. 3750 return int64(length), err 3751 } 3752 3753 // CheckedMarshal implements marshal.CheckedMarshallable.CheckedMarshal. 3754 func (r *ReadLinkAtReq) CheckedMarshal(dst []byte) ([]byte, bool) { 3755 if r.SizeBytes() > len(dst) { 3756 return dst, false 3757 } 3758 return r.MarshalUnsafe(dst), true 3759 } 3760 3761 // CheckedUnmarshal implements marshal.CheckedMarshallable.CheckedUnmarshal. 3762 func (r *ReadLinkAtReq) CheckedUnmarshal(src []byte) ([]byte, bool) { 3763 if r.SizeBytes() > len(src) { 3764 return src, false 3765 } 3766 return r.UnmarshalUnsafe(src), true 3767 } 3768 3769 // SizeBytes implements marshal.Marshallable.SizeBytes. 3770 func (s *SetStatReq) SizeBytes() int { 3771 return 16 + 3772 (*FDID)(nil).SizeBytes() + 3773 (*UID)(nil).SizeBytes() + 3774 (*GID)(nil).SizeBytes() + 3775 (*linux.Timespec)(nil).SizeBytes() + 3776 (*linux.Timespec)(nil).SizeBytes() 3777 } 3778 3779 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 3780 func (s *SetStatReq) MarshalBytes(dst []byte) []byte { 3781 dst = s.FD.MarshalUnsafe(dst) 3782 hostarch.ByteOrder.PutUint32(dst[:4], uint32(s.Mask)) 3783 dst = dst[4:] 3784 hostarch.ByteOrder.PutUint32(dst[:4], uint32(s.Mode)) 3785 dst = dst[4:] 3786 dst = s.UID.MarshalUnsafe(dst) 3787 dst = s.GID.MarshalUnsafe(dst) 3788 hostarch.ByteOrder.PutUint64(dst[:8], uint64(s.Size)) 3789 dst = dst[8:] 3790 dst = s.Atime.MarshalUnsafe(dst) 3791 dst = s.Mtime.MarshalUnsafe(dst) 3792 return dst 3793 } 3794 3795 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 3796 func (s *SetStatReq) UnmarshalBytes(src []byte) []byte { 3797 src = s.FD.UnmarshalUnsafe(src) 3798 s.Mask = uint32(hostarch.ByteOrder.Uint32(src[:4])) 3799 src = src[4:] 3800 s.Mode = uint32(hostarch.ByteOrder.Uint32(src[:4])) 3801 src = src[4:] 3802 src = s.UID.UnmarshalUnsafe(src) 3803 src = s.GID.UnmarshalUnsafe(src) 3804 s.Size = uint64(hostarch.ByteOrder.Uint64(src[:8])) 3805 src = src[8:] 3806 src = s.Atime.UnmarshalUnsafe(src) 3807 src = s.Mtime.UnmarshalUnsafe(src) 3808 return src 3809 } 3810 3811 // Packed implements marshal.Marshallable.Packed. 3812 //go:nosplit 3813 func (s *SetStatReq) Packed() bool { 3814 return s.Atime.Packed() && s.FD.Packed() && s.GID.Packed() && s.Mtime.Packed() && s.UID.Packed() 3815 } 3816 3817 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 3818 func (s *SetStatReq) MarshalUnsafe(dst []byte) []byte { 3819 if s.Atime.Packed() && s.FD.Packed() && s.GID.Packed() && s.Mtime.Packed() && s.UID.Packed() { 3820 size := s.SizeBytes() 3821 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(s), uintptr(size)) 3822 return dst[size:] 3823 } 3824 // Type SetStatReq doesn't have a packed layout in memory, fallback to MarshalBytes. 3825 return s.MarshalBytes(dst) 3826 } 3827 3828 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 3829 func (s *SetStatReq) UnmarshalUnsafe(src []byte) []byte { 3830 if s.Atime.Packed() && s.FD.Packed() && s.GID.Packed() && s.Mtime.Packed() && s.UID.Packed() { 3831 size := s.SizeBytes() 3832 gohacks.Memmove(unsafe.Pointer(s), unsafe.Pointer(&src[0]), uintptr(size)) 3833 return src[size:] 3834 } 3835 // Type SetStatReq doesn't have a packed layout in memory, fallback to UnmarshalBytes. 3836 return s.UnmarshalBytes(src) 3837 } 3838 3839 // CopyOutN implements marshal.Marshallable.CopyOutN. 3840 func (s *SetStatReq) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 3841 if !s.Atime.Packed() && s.FD.Packed() && s.GID.Packed() && s.Mtime.Packed() && s.UID.Packed() { 3842 // Type SetStatReq doesn't have a packed layout in memory, fall back to MarshalBytes. 3843 buf := cc.CopyScratchBuffer(s.SizeBytes()) // escapes: okay. 3844 s.MarshalBytes(buf) // escapes: fallback. 3845 return cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 3846 } 3847 3848 // Construct a slice backed by dst's underlying memory. 3849 var buf []byte 3850 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 3851 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(s))) 3852 hdr.Len = s.SizeBytes() 3853 hdr.Cap = s.SizeBytes() 3854 3855 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 3856 // Since we bypassed the compiler's escape analysis, indicate that s 3857 // must live until the use above. 3858 runtime.KeepAlive(s) // escapes: replaced by intrinsic. 3859 return length, err 3860 } 3861 3862 // CopyOut implements marshal.Marshallable.CopyOut. 3863 func (s *SetStatReq) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 3864 return s.CopyOutN(cc, addr, s.SizeBytes()) 3865 } 3866 3867 // CopyInN implements marshal.Marshallable.CopyInN. 3868 func (s *SetStatReq) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 3869 if !s.Atime.Packed() && s.FD.Packed() && s.GID.Packed() && s.Mtime.Packed() && s.UID.Packed() { 3870 // Type SetStatReq doesn't have a packed layout in memory, fall back to UnmarshalBytes. 3871 buf := cc.CopyScratchBuffer(s.SizeBytes()) // escapes: okay. 3872 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 3873 // Unmarshal unconditionally. If we had a short copy-in, this results in a 3874 // partially unmarshalled struct. 3875 s.UnmarshalBytes(buf) // escapes: fallback. 3876 return length, err 3877 } 3878 3879 // Construct a slice backed by dst's underlying memory. 3880 var buf []byte 3881 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 3882 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(s))) 3883 hdr.Len = s.SizeBytes() 3884 hdr.Cap = s.SizeBytes() 3885 3886 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 3887 // Since we bypassed the compiler's escape analysis, indicate that s 3888 // must live until the use above. 3889 runtime.KeepAlive(s) // escapes: replaced by intrinsic. 3890 return length, err 3891 } 3892 3893 // CopyIn implements marshal.Marshallable.CopyIn. 3894 func (s *SetStatReq) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 3895 return s.CopyInN(cc, addr, s.SizeBytes()) 3896 } 3897 3898 // WriteTo implements io.WriterTo.WriteTo. 3899 func (s *SetStatReq) WriteTo(writer io.Writer) (int64, error) { 3900 if !s.Atime.Packed() && s.FD.Packed() && s.GID.Packed() && s.Mtime.Packed() && s.UID.Packed() { 3901 // Type SetStatReq doesn't have a packed layout in memory, fall back to MarshalBytes. 3902 buf := make([]byte, s.SizeBytes()) 3903 s.MarshalBytes(buf) 3904 length, err := writer.Write(buf) 3905 return int64(length), err 3906 } 3907 3908 // Construct a slice backed by dst's underlying memory. 3909 var buf []byte 3910 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 3911 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(s))) 3912 hdr.Len = s.SizeBytes() 3913 hdr.Cap = s.SizeBytes() 3914 3915 length, err := writer.Write(buf) 3916 // Since we bypassed the compiler's escape analysis, indicate that s 3917 // must live until the use above. 3918 runtime.KeepAlive(s) // escapes: replaced by intrinsic. 3919 return int64(length), err 3920 } 3921 3922 // CheckedMarshal implements marshal.CheckedMarshallable.CheckedMarshal. 3923 func (s *SetStatReq) CheckedMarshal(dst []byte) ([]byte, bool) { 3924 if s.SizeBytes() > len(dst) { 3925 return dst, false 3926 } 3927 return s.MarshalUnsafe(dst), true 3928 } 3929 3930 // CheckedUnmarshal implements marshal.CheckedMarshallable.CheckedUnmarshal. 3931 func (s *SetStatReq) CheckedUnmarshal(src []byte) ([]byte, bool) { 3932 if s.SizeBytes() > len(src) { 3933 return src, false 3934 } 3935 return s.UnmarshalUnsafe(src), true 3936 } 3937 3938 // SizeBytes implements marshal.Marshallable.SizeBytes. 3939 func (s *SetStatResp) SizeBytes() int { 3940 return 8 3941 } 3942 3943 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 3944 func (s *SetStatResp) MarshalBytes(dst []byte) []byte { 3945 hostarch.ByteOrder.PutUint32(dst[:4], uint32(s.FailureMask)) 3946 dst = dst[4:] 3947 hostarch.ByteOrder.PutUint32(dst[:4], uint32(s.FailureErrNo)) 3948 dst = dst[4:] 3949 return dst 3950 } 3951 3952 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 3953 func (s *SetStatResp) UnmarshalBytes(src []byte) []byte { 3954 s.FailureMask = uint32(hostarch.ByteOrder.Uint32(src[:4])) 3955 src = src[4:] 3956 s.FailureErrNo = uint32(hostarch.ByteOrder.Uint32(src[:4])) 3957 src = src[4:] 3958 return src 3959 } 3960 3961 // Packed implements marshal.Marshallable.Packed. 3962 //go:nosplit 3963 func (s *SetStatResp) Packed() bool { 3964 return true 3965 } 3966 3967 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 3968 func (s *SetStatResp) MarshalUnsafe(dst []byte) []byte { 3969 size := s.SizeBytes() 3970 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(s), uintptr(size)) 3971 return dst[size:] 3972 } 3973 3974 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 3975 func (s *SetStatResp) UnmarshalUnsafe(src []byte) []byte { 3976 size := s.SizeBytes() 3977 gohacks.Memmove(unsafe.Pointer(s), unsafe.Pointer(&src[0]), uintptr(size)) 3978 return src[size:] 3979 } 3980 3981 // CopyOutN implements marshal.Marshallable.CopyOutN. 3982 func (s *SetStatResp) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 3983 // Construct a slice backed by dst's underlying memory. 3984 var buf []byte 3985 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 3986 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(s))) 3987 hdr.Len = s.SizeBytes() 3988 hdr.Cap = s.SizeBytes() 3989 3990 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 3991 // Since we bypassed the compiler's escape analysis, indicate that s 3992 // must live until the use above. 3993 runtime.KeepAlive(s) // escapes: replaced by intrinsic. 3994 return length, err 3995 } 3996 3997 // CopyOut implements marshal.Marshallable.CopyOut. 3998 func (s *SetStatResp) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 3999 return s.CopyOutN(cc, addr, s.SizeBytes()) 4000 } 4001 4002 // CopyInN implements marshal.Marshallable.CopyInN. 4003 func (s *SetStatResp) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 4004 // Construct a slice backed by dst's underlying memory. 4005 var buf []byte 4006 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 4007 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(s))) 4008 hdr.Len = s.SizeBytes() 4009 hdr.Cap = s.SizeBytes() 4010 4011 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 4012 // Since we bypassed the compiler's escape analysis, indicate that s 4013 // must live until the use above. 4014 runtime.KeepAlive(s) // escapes: replaced by intrinsic. 4015 return length, err 4016 } 4017 4018 // CopyIn implements marshal.Marshallable.CopyIn. 4019 func (s *SetStatResp) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 4020 return s.CopyInN(cc, addr, s.SizeBytes()) 4021 } 4022 4023 // WriteTo implements io.WriterTo.WriteTo. 4024 func (s *SetStatResp) WriteTo(writer io.Writer) (int64, error) { 4025 // Construct a slice backed by dst's underlying memory. 4026 var buf []byte 4027 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 4028 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(s))) 4029 hdr.Len = s.SizeBytes() 4030 hdr.Cap = s.SizeBytes() 4031 4032 length, err := writer.Write(buf) 4033 // Since we bypassed the compiler's escape analysis, indicate that s 4034 // must live until the use above. 4035 runtime.KeepAlive(s) // escapes: replaced by intrinsic. 4036 return int64(length), err 4037 } 4038 4039 // CheckedMarshal implements marshal.CheckedMarshallable.CheckedMarshal. 4040 func (s *SetStatResp) CheckedMarshal(dst []byte) ([]byte, bool) { 4041 if s.SizeBytes() > len(dst) { 4042 return dst, false 4043 } 4044 return s.MarshalUnsafe(dst), true 4045 } 4046 4047 // CheckedUnmarshal implements marshal.CheckedMarshallable.CheckedUnmarshal. 4048 func (s *SetStatResp) CheckedUnmarshal(src []byte) ([]byte, bool) { 4049 if s.SizeBytes() > len(src) { 4050 return src, false 4051 } 4052 return s.UnmarshalUnsafe(src), true 4053 } 4054 4055 // SizeBytes implements marshal.Marshallable.SizeBytes. 4056 func (s *StatFS) SizeBytes() int { 4057 return 64 4058 } 4059 4060 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 4061 func (s *StatFS) MarshalBytes(dst []byte) []byte { 4062 hostarch.ByteOrder.PutUint64(dst[:8], uint64(s.Type)) 4063 dst = dst[8:] 4064 hostarch.ByteOrder.PutUint64(dst[:8], uint64(s.BlockSize)) 4065 dst = dst[8:] 4066 hostarch.ByteOrder.PutUint64(dst[:8], uint64(s.Blocks)) 4067 dst = dst[8:] 4068 hostarch.ByteOrder.PutUint64(dst[:8], uint64(s.BlocksFree)) 4069 dst = dst[8:] 4070 hostarch.ByteOrder.PutUint64(dst[:8], uint64(s.BlocksAvailable)) 4071 dst = dst[8:] 4072 hostarch.ByteOrder.PutUint64(dst[:8], uint64(s.Files)) 4073 dst = dst[8:] 4074 hostarch.ByteOrder.PutUint64(dst[:8], uint64(s.FilesFree)) 4075 dst = dst[8:] 4076 hostarch.ByteOrder.PutUint64(dst[:8], uint64(s.NameLength)) 4077 dst = dst[8:] 4078 return dst 4079 } 4080 4081 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 4082 func (s *StatFS) UnmarshalBytes(src []byte) []byte { 4083 s.Type = uint64(hostarch.ByteOrder.Uint64(src[:8])) 4084 src = src[8:] 4085 s.BlockSize = int64(hostarch.ByteOrder.Uint64(src[:8])) 4086 src = src[8:] 4087 s.Blocks = uint64(hostarch.ByteOrder.Uint64(src[:8])) 4088 src = src[8:] 4089 s.BlocksFree = uint64(hostarch.ByteOrder.Uint64(src[:8])) 4090 src = src[8:] 4091 s.BlocksAvailable = uint64(hostarch.ByteOrder.Uint64(src[:8])) 4092 src = src[8:] 4093 s.Files = uint64(hostarch.ByteOrder.Uint64(src[:8])) 4094 src = src[8:] 4095 s.FilesFree = uint64(hostarch.ByteOrder.Uint64(src[:8])) 4096 src = src[8:] 4097 s.NameLength = uint64(hostarch.ByteOrder.Uint64(src[:8])) 4098 src = src[8:] 4099 return src 4100 } 4101 4102 // Packed implements marshal.Marshallable.Packed. 4103 //go:nosplit 4104 func (s *StatFS) Packed() bool { 4105 return true 4106 } 4107 4108 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 4109 func (s *StatFS) MarshalUnsafe(dst []byte) []byte { 4110 size := s.SizeBytes() 4111 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(s), uintptr(size)) 4112 return dst[size:] 4113 } 4114 4115 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 4116 func (s *StatFS) UnmarshalUnsafe(src []byte) []byte { 4117 size := s.SizeBytes() 4118 gohacks.Memmove(unsafe.Pointer(s), unsafe.Pointer(&src[0]), uintptr(size)) 4119 return src[size:] 4120 } 4121 4122 // CopyOutN implements marshal.Marshallable.CopyOutN. 4123 func (s *StatFS) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 4124 // Construct a slice backed by dst's underlying memory. 4125 var buf []byte 4126 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 4127 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(s))) 4128 hdr.Len = s.SizeBytes() 4129 hdr.Cap = s.SizeBytes() 4130 4131 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 4132 // Since we bypassed the compiler's escape analysis, indicate that s 4133 // must live until the use above. 4134 runtime.KeepAlive(s) // escapes: replaced by intrinsic. 4135 return length, err 4136 } 4137 4138 // CopyOut implements marshal.Marshallable.CopyOut. 4139 func (s *StatFS) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 4140 return s.CopyOutN(cc, addr, s.SizeBytes()) 4141 } 4142 4143 // CopyInN implements marshal.Marshallable.CopyInN. 4144 func (s *StatFS) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 4145 // Construct a slice backed by dst's underlying memory. 4146 var buf []byte 4147 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 4148 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(s))) 4149 hdr.Len = s.SizeBytes() 4150 hdr.Cap = s.SizeBytes() 4151 4152 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 4153 // Since we bypassed the compiler's escape analysis, indicate that s 4154 // must live until the use above. 4155 runtime.KeepAlive(s) // escapes: replaced by intrinsic. 4156 return length, err 4157 } 4158 4159 // CopyIn implements marshal.Marshallable.CopyIn. 4160 func (s *StatFS) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 4161 return s.CopyInN(cc, addr, s.SizeBytes()) 4162 } 4163 4164 // WriteTo implements io.WriterTo.WriteTo. 4165 func (s *StatFS) WriteTo(writer io.Writer) (int64, error) { 4166 // Construct a slice backed by dst's underlying memory. 4167 var buf []byte 4168 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 4169 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(s))) 4170 hdr.Len = s.SizeBytes() 4171 hdr.Cap = s.SizeBytes() 4172 4173 length, err := writer.Write(buf) 4174 // Since we bypassed the compiler's escape analysis, indicate that s 4175 // must live until the use above. 4176 runtime.KeepAlive(s) // escapes: replaced by intrinsic. 4177 return int64(length), err 4178 } 4179 4180 // CheckedMarshal implements marshal.CheckedMarshallable.CheckedMarshal. 4181 func (s *StatFS) CheckedMarshal(dst []byte) ([]byte, bool) { 4182 if s.SizeBytes() > len(dst) { 4183 return dst, false 4184 } 4185 return s.MarshalUnsafe(dst), true 4186 } 4187 4188 // CheckedUnmarshal implements marshal.CheckedMarshallable.CheckedUnmarshal. 4189 func (s *StatFS) CheckedUnmarshal(src []byte) ([]byte, bool) { 4190 if s.SizeBytes() > len(src) { 4191 return src, false 4192 } 4193 return s.UnmarshalUnsafe(src), true 4194 } 4195 4196 // SizeBytes implements marshal.Marshallable.SizeBytes. 4197 func (s *StatReq) SizeBytes() int { 4198 return 0 + 4199 (*FDID)(nil).SizeBytes() 4200 } 4201 4202 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 4203 func (s *StatReq) MarshalBytes(dst []byte) []byte { 4204 dst = s.FD.MarshalUnsafe(dst) 4205 return dst 4206 } 4207 4208 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 4209 func (s *StatReq) UnmarshalBytes(src []byte) []byte { 4210 src = s.FD.UnmarshalUnsafe(src) 4211 return src 4212 } 4213 4214 // Packed implements marshal.Marshallable.Packed. 4215 //go:nosplit 4216 func (s *StatReq) Packed() bool { 4217 return s.FD.Packed() 4218 } 4219 4220 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 4221 func (s *StatReq) MarshalUnsafe(dst []byte) []byte { 4222 if s.FD.Packed() { 4223 size := s.SizeBytes() 4224 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(s), uintptr(size)) 4225 return dst[size:] 4226 } 4227 // Type StatReq doesn't have a packed layout in memory, fallback to MarshalBytes. 4228 return s.MarshalBytes(dst) 4229 } 4230 4231 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 4232 func (s *StatReq) UnmarshalUnsafe(src []byte) []byte { 4233 if s.FD.Packed() { 4234 size := s.SizeBytes() 4235 gohacks.Memmove(unsafe.Pointer(s), unsafe.Pointer(&src[0]), uintptr(size)) 4236 return src[size:] 4237 } 4238 // Type StatReq doesn't have a packed layout in memory, fallback to UnmarshalBytes. 4239 return s.UnmarshalBytes(src) 4240 } 4241 4242 // CopyOutN implements marshal.Marshallable.CopyOutN. 4243 func (s *StatReq) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 4244 if !s.FD.Packed() { 4245 // Type StatReq doesn't have a packed layout in memory, fall back to MarshalBytes. 4246 buf := cc.CopyScratchBuffer(s.SizeBytes()) // escapes: okay. 4247 s.MarshalBytes(buf) // escapes: fallback. 4248 return cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 4249 } 4250 4251 // Construct a slice backed by dst's underlying memory. 4252 var buf []byte 4253 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 4254 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(s))) 4255 hdr.Len = s.SizeBytes() 4256 hdr.Cap = s.SizeBytes() 4257 4258 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 4259 // Since we bypassed the compiler's escape analysis, indicate that s 4260 // must live until the use above. 4261 runtime.KeepAlive(s) // escapes: replaced by intrinsic. 4262 return length, err 4263 } 4264 4265 // CopyOut implements marshal.Marshallable.CopyOut. 4266 func (s *StatReq) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 4267 return s.CopyOutN(cc, addr, s.SizeBytes()) 4268 } 4269 4270 // CopyInN implements marshal.Marshallable.CopyInN. 4271 func (s *StatReq) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 4272 if !s.FD.Packed() { 4273 // Type StatReq doesn't have a packed layout in memory, fall back to UnmarshalBytes. 4274 buf := cc.CopyScratchBuffer(s.SizeBytes()) // escapes: okay. 4275 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 4276 // Unmarshal unconditionally. If we had a short copy-in, this results in a 4277 // partially unmarshalled struct. 4278 s.UnmarshalBytes(buf) // escapes: fallback. 4279 return length, err 4280 } 4281 4282 // Construct a slice backed by dst's underlying memory. 4283 var buf []byte 4284 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 4285 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(s))) 4286 hdr.Len = s.SizeBytes() 4287 hdr.Cap = s.SizeBytes() 4288 4289 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 4290 // Since we bypassed the compiler's escape analysis, indicate that s 4291 // must live until the use above. 4292 runtime.KeepAlive(s) // escapes: replaced by intrinsic. 4293 return length, err 4294 } 4295 4296 // CopyIn implements marshal.Marshallable.CopyIn. 4297 func (s *StatReq) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 4298 return s.CopyInN(cc, addr, s.SizeBytes()) 4299 } 4300 4301 // WriteTo implements io.WriterTo.WriteTo. 4302 func (s *StatReq) WriteTo(writer io.Writer) (int64, error) { 4303 if !s.FD.Packed() { 4304 // Type StatReq doesn't have a packed layout in memory, fall back to MarshalBytes. 4305 buf := make([]byte, s.SizeBytes()) 4306 s.MarshalBytes(buf) 4307 length, err := writer.Write(buf) 4308 return int64(length), err 4309 } 4310 4311 // Construct a slice backed by dst's underlying memory. 4312 var buf []byte 4313 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 4314 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(s))) 4315 hdr.Len = s.SizeBytes() 4316 hdr.Cap = s.SizeBytes() 4317 4318 length, err := writer.Write(buf) 4319 // Since we bypassed the compiler's escape analysis, indicate that s 4320 // must live until the use above. 4321 runtime.KeepAlive(s) // escapes: replaced by intrinsic. 4322 return int64(length), err 4323 } 4324 4325 // CheckedMarshal implements marshal.CheckedMarshallable.CheckedMarshal. 4326 func (s *StatReq) CheckedMarshal(dst []byte) ([]byte, bool) { 4327 if s.SizeBytes() > len(dst) { 4328 return dst, false 4329 } 4330 return s.MarshalUnsafe(dst), true 4331 } 4332 4333 // CheckedUnmarshal implements marshal.CheckedMarshallable.CheckedUnmarshal. 4334 func (s *StatReq) CheckedUnmarshal(src []byte) ([]byte, bool) { 4335 if s.SizeBytes() > len(src) { 4336 return src, false 4337 } 4338 return s.UnmarshalUnsafe(src), true 4339 } 4340 4341 // SizeBytes implements marshal.Marshallable.SizeBytes. 4342 func (s *SymlinkAtResp) SizeBytes() int { 4343 return 0 + 4344 (*Inode)(nil).SizeBytes() 4345 } 4346 4347 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 4348 func (s *SymlinkAtResp) MarshalBytes(dst []byte) []byte { 4349 dst = s.Symlink.MarshalUnsafe(dst) 4350 return dst 4351 } 4352 4353 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 4354 func (s *SymlinkAtResp) UnmarshalBytes(src []byte) []byte { 4355 src = s.Symlink.UnmarshalUnsafe(src) 4356 return src 4357 } 4358 4359 // Packed implements marshal.Marshallable.Packed. 4360 //go:nosplit 4361 func (s *SymlinkAtResp) Packed() bool { 4362 return s.Symlink.Packed() 4363 } 4364 4365 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 4366 func (s *SymlinkAtResp) MarshalUnsafe(dst []byte) []byte { 4367 if s.Symlink.Packed() { 4368 size := s.SizeBytes() 4369 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(s), uintptr(size)) 4370 return dst[size:] 4371 } 4372 // Type SymlinkAtResp doesn't have a packed layout in memory, fallback to MarshalBytes. 4373 return s.MarshalBytes(dst) 4374 } 4375 4376 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 4377 func (s *SymlinkAtResp) UnmarshalUnsafe(src []byte) []byte { 4378 if s.Symlink.Packed() { 4379 size := s.SizeBytes() 4380 gohacks.Memmove(unsafe.Pointer(s), unsafe.Pointer(&src[0]), uintptr(size)) 4381 return src[size:] 4382 } 4383 // Type SymlinkAtResp doesn't have a packed layout in memory, fallback to UnmarshalBytes. 4384 return s.UnmarshalBytes(src) 4385 } 4386 4387 // CopyOutN implements marshal.Marshallable.CopyOutN. 4388 func (s *SymlinkAtResp) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 4389 if !s.Symlink.Packed() { 4390 // Type SymlinkAtResp doesn't have a packed layout in memory, fall back to MarshalBytes. 4391 buf := cc.CopyScratchBuffer(s.SizeBytes()) // escapes: okay. 4392 s.MarshalBytes(buf) // escapes: fallback. 4393 return cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 4394 } 4395 4396 // Construct a slice backed by dst's underlying memory. 4397 var buf []byte 4398 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 4399 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(s))) 4400 hdr.Len = s.SizeBytes() 4401 hdr.Cap = s.SizeBytes() 4402 4403 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 4404 // Since we bypassed the compiler's escape analysis, indicate that s 4405 // must live until the use above. 4406 runtime.KeepAlive(s) // escapes: replaced by intrinsic. 4407 return length, err 4408 } 4409 4410 // CopyOut implements marshal.Marshallable.CopyOut. 4411 func (s *SymlinkAtResp) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 4412 return s.CopyOutN(cc, addr, s.SizeBytes()) 4413 } 4414 4415 // CopyInN implements marshal.Marshallable.CopyInN. 4416 func (s *SymlinkAtResp) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 4417 if !s.Symlink.Packed() { 4418 // Type SymlinkAtResp doesn't have a packed layout in memory, fall back to UnmarshalBytes. 4419 buf := cc.CopyScratchBuffer(s.SizeBytes()) // escapes: okay. 4420 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 4421 // Unmarshal unconditionally. If we had a short copy-in, this results in a 4422 // partially unmarshalled struct. 4423 s.UnmarshalBytes(buf) // escapes: fallback. 4424 return length, err 4425 } 4426 4427 // Construct a slice backed by dst's underlying memory. 4428 var buf []byte 4429 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 4430 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(s))) 4431 hdr.Len = s.SizeBytes() 4432 hdr.Cap = s.SizeBytes() 4433 4434 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 4435 // Since we bypassed the compiler's escape analysis, indicate that s 4436 // must live until the use above. 4437 runtime.KeepAlive(s) // escapes: replaced by intrinsic. 4438 return length, err 4439 } 4440 4441 // CopyIn implements marshal.Marshallable.CopyIn. 4442 func (s *SymlinkAtResp) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 4443 return s.CopyInN(cc, addr, s.SizeBytes()) 4444 } 4445 4446 // WriteTo implements io.WriterTo.WriteTo. 4447 func (s *SymlinkAtResp) WriteTo(writer io.Writer) (int64, error) { 4448 if !s.Symlink.Packed() { 4449 // Type SymlinkAtResp doesn't have a packed layout in memory, fall back to MarshalBytes. 4450 buf := make([]byte, s.SizeBytes()) 4451 s.MarshalBytes(buf) 4452 length, err := writer.Write(buf) 4453 return int64(length), err 4454 } 4455 4456 // Construct a slice backed by dst's underlying memory. 4457 var buf []byte 4458 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 4459 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(s))) 4460 hdr.Len = s.SizeBytes() 4461 hdr.Cap = s.SizeBytes() 4462 4463 length, err := writer.Write(buf) 4464 // Since we bypassed the compiler's escape analysis, indicate that s 4465 // must live until the use above. 4466 runtime.KeepAlive(s) // escapes: replaced by intrinsic. 4467 return int64(length), err 4468 } 4469 4470 // CheckedMarshal implements marshal.CheckedMarshallable.CheckedMarshal. 4471 func (s *SymlinkAtResp) CheckedMarshal(dst []byte) ([]byte, bool) { 4472 if s.SizeBytes() > len(dst) { 4473 return dst, false 4474 } 4475 return s.MarshalUnsafe(dst), true 4476 } 4477 4478 // CheckedUnmarshal implements marshal.CheckedMarshallable.CheckedUnmarshal. 4479 func (s *SymlinkAtResp) CheckedUnmarshal(src []byte) ([]byte, bool) { 4480 if s.SizeBytes() > len(src) { 4481 return src, false 4482 } 4483 return s.UnmarshalUnsafe(src), true 4484 } 4485 4486 // SizeBytes implements marshal.Marshallable.SizeBytes. 4487 //go:nosplit 4488 func (uid *UID) SizeBytes() int { 4489 return 4 4490 } 4491 4492 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 4493 func (uid *UID) MarshalBytes(dst []byte) []byte { 4494 hostarch.ByteOrder.PutUint32(dst[:4], uint32(*uid)) 4495 return dst[4:] 4496 } 4497 4498 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 4499 func (uid *UID) UnmarshalBytes(src []byte) []byte { 4500 *uid = UID(uint32(hostarch.ByteOrder.Uint32(src[:4]))) 4501 return src[4:] 4502 } 4503 4504 // Packed implements marshal.Marshallable.Packed. 4505 //go:nosplit 4506 func (uid *UID) Packed() bool { 4507 // Scalar newtypes are always packed. 4508 return true 4509 } 4510 4511 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 4512 func (uid *UID) MarshalUnsafe(dst []byte) []byte { 4513 size := uid.SizeBytes() 4514 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(uid), uintptr(size)) 4515 return dst[size:] 4516 } 4517 4518 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 4519 func (uid *UID) UnmarshalUnsafe(src []byte) []byte { 4520 size := uid.SizeBytes() 4521 gohacks.Memmove(unsafe.Pointer(uid), unsafe.Pointer(&src[0]), uintptr(size)) 4522 return src[size:] 4523 } 4524 4525 // CopyOutN implements marshal.Marshallable.CopyOutN. 4526 func (uid *UID) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 4527 // Construct a slice backed by dst's underlying memory. 4528 var buf []byte 4529 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 4530 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(uid))) 4531 hdr.Len = uid.SizeBytes() 4532 hdr.Cap = uid.SizeBytes() 4533 4534 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 4535 // Since we bypassed the compiler's escape analysis, indicate that uid 4536 // must live until the use above. 4537 runtime.KeepAlive(uid) // escapes: replaced by intrinsic. 4538 return length, err 4539 } 4540 4541 // CopyOut implements marshal.Marshallable.CopyOut. 4542 func (uid *UID) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 4543 return uid.CopyOutN(cc, addr, uid.SizeBytes()) 4544 } 4545 4546 // CopyInN implements marshal.Marshallable.CopyInN. 4547 func (uid *UID) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 4548 // Construct a slice backed by dst's underlying memory. 4549 var buf []byte 4550 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 4551 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(uid))) 4552 hdr.Len = uid.SizeBytes() 4553 hdr.Cap = uid.SizeBytes() 4554 4555 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 4556 // Since we bypassed the compiler's escape analysis, indicate that uid 4557 // must live until the use above. 4558 runtime.KeepAlive(uid) // escapes: replaced by intrinsic. 4559 return length, err 4560 } 4561 4562 // CopyIn implements marshal.Marshallable.CopyIn. 4563 func (uid *UID) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 4564 return uid.CopyInN(cc, addr, uid.SizeBytes()) 4565 } 4566 4567 // WriteTo implements io.WriterTo.WriteTo. 4568 func (uid *UID) WriteTo(writer io.Writer) (int64, error) { 4569 // Construct a slice backed by dst's underlying memory. 4570 var buf []byte 4571 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 4572 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(uid))) 4573 hdr.Len = uid.SizeBytes() 4574 hdr.Cap = uid.SizeBytes() 4575 4576 length, err := writer.Write(buf) 4577 // Since we bypassed the compiler's escape analysis, indicate that uid 4578 // must live until the use above. 4579 runtime.KeepAlive(uid) // escapes: replaced by intrinsic. 4580 return int64(length), err 4581 } 4582 4583 // SizeBytes implements marshal.Marshallable.SizeBytes. 4584 func (c *createCommon) SizeBytes() int { 4585 return 6 + 4586 (*FDID)(nil).SizeBytes() + 4587 (*UID)(nil).SizeBytes() + 4588 (*GID)(nil).SizeBytes() + 4589 (*linux.FileMode)(nil).SizeBytes() 4590 } 4591 4592 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 4593 func (c *createCommon) MarshalBytes(dst []byte) []byte { 4594 dst = c.DirFD.MarshalUnsafe(dst) 4595 dst = c.UID.MarshalUnsafe(dst) 4596 dst = c.GID.MarshalUnsafe(dst) 4597 dst = c.Mode.MarshalUnsafe(dst) 4598 // Padding: dst[:sizeof(uint16)] ~= uint16(0) 4599 dst = dst[2:] 4600 // Padding: dst[:sizeof(uint32)] ~= uint32(0) 4601 dst = dst[4:] 4602 return dst 4603 } 4604 4605 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 4606 func (c *createCommon) UnmarshalBytes(src []byte) []byte { 4607 src = c.DirFD.UnmarshalUnsafe(src) 4608 src = c.UID.UnmarshalUnsafe(src) 4609 src = c.GID.UnmarshalUnsafe(src) 4610 src = c.Mode.UnmarshalUnsafe(src) 4611 // Padding: var _ uint16 ~= src[:sizeof(uint16)] 4612 src = src[2:] 4613 // Padding: var _ uint32 ~= src[:sizeof(uint32)] 4614 src = src[4:] 4615 return src 4616 } 4617 4618 // Packed implements marshal.Marshallable.Packed. 4619 //go:nosplit 4620 func (c *createCommon) Packed() bool { 4621 return c.DirFD.Packed() && c.GID.Packed() && c.Mode.Packed() && c.UID.Packed() 4622 } 4623 4624 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 4625 func (c *createCommon) MarshalUnsafe(dst []byte) []byte { 4626 if c.DirFD.Packed() && c.GID.Packed() && c.Mode.Packed() && c.UID.Packed() { 4627 size := c.SizeBytes() 4628 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(c), uintptr(size)) 4629 return dst[size:] 4630 } 4631 // Type createCommon doesn't have a packed layout in memory, fallback to MarshalBytes. 4632 return c.MarshalBytes(dst) 4633 } 4634 4635 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 4636 func (c *createCommon) UnmarshalUnsafe(src []byte) []byte { 4637 if c.DirFD.Packed() && c.GID.Packed() && c.Mode.Packed() && c.UID.Packed() { 4638 size := c.SizeBytes() 4639 gohacks.Memmove(unsafe.Pointer(c), unsafe.Pointer(&src[0]), uintptr(size)) 4640 return src[size:] 4641 } 4642 // Type createCommon doesn't have a packed layout in memory, fallback to UnmarshalBytes. 4643 return c.UnmarshalBytes(src) 4644 } 4645 4646 // CopyOutN implements marshal.Marshallable.CopyOutN. 4647 func (c *createCommon) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 4648 if !c.DirFD.Packed() && c.GID.Packed() && c.Mode.Packed() && c.UID.Packed() { 4649 // Type createCommon doesn't have a packed layout in memory, fall back to MarshalBytes. 4650 buf := cc.CopyScratchBuffer(c.SizeBytes()) // escapes: okay. 4651 c.MarshalBytes(buf) // escapes: fallback. 4652 return cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 4653 } 4654 4655 // Construct a slice backed by dst's underlying memory. 4656 var buf []byte 4657 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 4658 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(c))) 4659 hdr.Len = c.SizeBytes() 4660 hdr.Cap = c.SizeBytes() 4661 4662 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 4663 // Since we bypassed the compiler's escape analysis, indicate that c 4664 // must live until the use above. 4665 runtime.KeepAlive(c) // escapes: replaced by intrinsic. 4666 return length, err 4667 } 4668 4669 // CopyOut implements marshal.Marshallable.CopyOut. 4670 func (c *createCommon) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 4671 return c.CopyOutN(cc, addr, c.SizeBytes()) 4672 } 4673 4674 // CopyInN implements marshal.Marshallable.CopyInN. 4675 func (c *createCommon) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 4676 if !c.DirFD.Packed() && c.GID.Packed() && c.Mode.Packed() && c.UID.Packed() { 4677 // Type createCommon doesn't have a packed layout in memory, fall back to UnmarshalBytes. 4678 buf := cc.CopyScratchBuffer(c.SizeBytes()) // escapes: okay. 4679 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 4680 // Unmarshal unconditionally. If we had a short copy-in, this results in a 4681 // partially unmarshalled struct. 4682 c.UnmarshalBytes(buf) // escapes: fallback. 4683 return length, err 4684 } 4685 4686 // Construct a slice backed by dst's underlying memory. 4687 var buf []byte 4688 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 4689 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(c))) 4690 hdr.Len = c.SizeBytes() 4691 hdr.Cap = c.SizeBytes() 4692 4693 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 4694 // Since we bypassed the compiler's escape analysis, indicate that c 4695 // must live until the use above. 4696 runtime.KeepAlive(c) // escapes: replaced by intrinsic. 4697 return length, err 4698 } 4699 4700 // CopyIn implements marshal.Marshallable.CopyIn. 4701 func (c *createCommon) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 4702 return c.CopyInN(cc, addr, c.SizeBytes()) 4703 } 4704 4705 // WriteTo implements io.WriterTo.WriteTo. 4706 func (c *createCommon) WriteTo(writer io.Writer) (int64, error) { 4707 if !c.DirFD.Packed() && c.GID.Packed() && c.Mode.Packed() && c.UID.Packed() { 4708 // Type createCommon doesn't have a packed layout in memory, fall back to MarshalBytes. 4709 buf := make([]byte, c.SizeBytes()) 4710 c.MarshalBytes(buf) 4711 length, err := writer.Write(buf) 4712 return int64(length), err 4713 } 4714 4715 // Construct a slice backed by dst's underlying memory. 4716 var buf []byte 4717 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 4718 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(c))) 4719 hdr.Len = c.SizeBytes() 4720 hdr.Cap = c.SizeBytes() 4721 4722 length, err := writer.Write(buf) 4723 // Since we bypassed the compiler's escape analysis, indicate that c 4724 // must live until the use above. 4725 runtime.KeepAlive(c) // escapes: replaced by intrinsic. 4726 return int64(length), err 4727 } 4728 4729 // Packed implements marshal.Marshallable.Packed. 4730 //go:nosplit 4731 func (m *MsgDynamic) Packed() bool { 4732 // Type MsgDynamic is dynamic so it might have slice/string headers. Hence, it is not packed. 4733 return false 4734 } 4735 4736 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 4737 func (m *MsgDynamic) MarshalUnsafe(dst []byte) []byte { 4738 // Type MsgDynamic doesn't have a packed layout in memory, fallback to MarshalBytes. 4739 return m.MarshalBytes(dst) 4740 } 4741 4742 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 4743 func (m *MsgDynamic) UnmarshalUnsafe(src []byte) []byte { 4744 // Type MsgDynamic doesn't have a packed layout in memory, fallback to UnmarshalBytes. 4745 return m.UnmarshalBytes(src) 4746 } 4747 4748 // CopyOutN implements marshal.Marshallable.CopyOutN. 4749 //go:nosplit 4750 func (m *MsgDynamic) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 4751 // Type MsgDynamic doesn't have a packed layout in memory, fall back to MarshalBytes. 4752 buf := cc.CopyScratchBuffer(m.SizeBytes()) // escapes: okay. 4753 m.MarshalBytes(buf) // escapes: fallback. 4754 return cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 4755 } 4756 4757 // CopyOut implements marshal.Marshallable.CopyOut. 4758 func (m *MsgDynamic) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 4759 return m.CopyOutN(cc, addr, m.SizeBytes()) 4760 } 4761 4762 // CopyInN implements marshal.Marshallable.CopyInN. 4763 //go:nosplit 4764 func (m *MsgDynamic) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 4765 // Type MsgDynamic doesn't have a packed layout in memory, fall back to UnmarshalBytes. 4766 buf := cc.CopyScratchBuffer(m.SizeBytes()) // escapes: okay. 4767 length, err := cc.CopyInBytes(addr, buf) // escapes: okay. 4768 // Unmarshal unconditionally. If we had a short copy-in, this results in a 4769 // partially unmarshalled struct. 4770 m.UnmarshalBytes(buf) // escapes: fallback. 4771 return length, err 4772 } 4773 4774 // CopyIn implements marshal.Marshallable.CopyIn. 4775 func (m *MsgDynamic) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 4776 return m.CopyInN(cc, addr, m.SizeBytes()) 4777 } 4778 4779 // WriteTo implements io.WriterTo.WriteTo. 4780 func (m *MsgDynamic) WriteTo(writer io.Writer) (int64, error) { 4781 // Type MsgDynamic doesn't have a packed layout in memory, fall back to MarshalBytes. 4782 buf := make([]byte, m.SizeBytes()) 4783 m.MarshalBytes(buf) 4784 length, err := writer.Write(buf) 4785 return int64(length), err 4786 } 4787 4788 // SizeBytes implements marshal.Marshallable.SizeBytes. 4789 func (m *MsgSimple) SizeBytes() int { 4790 return 16 4791 } 4792 4793 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 4794 func (m *MsgSimple) MarshalBytes(dst []byte) []byte { 4795 hostarch.ByteOrder.PutUint16(dst[:2], uint16(m.A)) 4796 dst = dst[2:] 4797 hostarch.ByteOrder.PutUint16(dst[:2], uint16(m.B)) 4798 dst = dst[2:] 4799 hostarch.ByteOrder.PutUint32(dst[:4], uint32(m.C)) 4800 dst = dst[4:] 4801 hostarch.ByteOrder.PutUint64(dst[:8], uint64(m.D)) 4802 dst = dst[8:] 4803 return dst 4804 } 4805 4806 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 4807 func (m *MsgSimple) UnmarshalBytes(src []byte) []byte { 4808 m.A = uint16(hostarch.ByteOrder.Uint16(src[:2])) 4809 src = src[2:] 4810 m.B = uint16(hostarch.ByteOrder.Uint16(src[:2])) 4811 src = src[2:] 4812 m.C = uint32(hostarch.ByteOrder.Uint32(src[:4])) 4813 src = src[4:] 4814 m.D = uint64(hostarch.ByteOrder.Uint64(src[:8])) 4815 src = src[8:] 4816 return src 4817 } 4818 4819 // Packed implements marshal.Marshallable.Packed. 4820 //go:nosplit 4821 func (m *MsgSimple) Packed() bool { 4822 return true 4823 } 4824 4825 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 4826 func (m *MsgSimple) MarshalUnsafe(dst []byte) []byte { 4827 size := m.SizeBytes() 4828 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(m), uintptr(size)) 4829 return dst[size:] 4830 } 4831 4832 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 4833 func (m *MsgSimple) UnmarshalUnsafe(src []byte) []byte { 4834 size := m.SizeBytes() 4835 gohacks.Memmove(unsafe.Pointer(m), unsafe.Pointer(&src[0]), uintptr(size)) 4836 return src[size:] 4837 } 4838 4839 // CopyOutN implements marshal.Marshallable.CopyOutN. 4840 func (m *MsgSimple) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 4841 // Construct a slice backed by dst's underlying memory. 4842 var buf []byte 4843 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 4844 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(m))) 4845 hdr.Len = m.SizeBytes() 4846 hdr.Cap = m.SizeBytes() 4847 4848 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 4849 // Since we bypassed the compiler's escape analysis, indicate that m 4850 // must live until the use above. 4851 runtime.KeepAlive(m) // escapes: replaced by intrinsic. 4852 return length, err 4853 } 4854 4855 // CopyOut implements marshal.Marshallable.CopyOut. 4856 func (m *MsgSimple) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 4857 return m.CopyOutN(cc, addr, m.SizeBytes()) 4858 } 4859 4860 // CopyInN implements marshal.Marshallable.CopyInN. 4861 func (m *MsgSimple) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 4862 // Construct a slice backed by dst's underlying memory. 4863 var buf []byte 4864 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 4865 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(m))) 4866 hdr.Len = m.SizeBytes() 4867 hdr.Cap = m.SizeBytes() 4868 4869 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 4870 // Since we bypassed the compiler's escape analysis, indicate that m 4871 // must live until the use above. 4872 runtime.KeepAlive(m) // escapes: replaced by intrinsic. 4873 return length, err 4874 } 4875 4876 // CopyIn implements marshal.Marshallable.CopyIn. 4877 func (m *MsgSimple) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 4878 return m.CopyInN(cc, addr, m.SizeBytes()) 4879 } 4880 4881 // WriteTo implements io.WriterTo.WriteTo. 4882 func (m *MsgSimple) WriteTo(writer io.Writer) (int64, error) { 4883 // Construct a slice backed by dst's underlying memory. 4884 var buf []byte 4885 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 4886 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(m))) 4887 hdr.Len = m.SizeBytes() 4888 hdr.Cap = m.SizeBytes() 4889 4890 length, err := writer.Write(buf) 4891 // Since we bypassed the compiler's escape analysis, indicate that m 4892 // must live until the use above. 4893 runtime.KeepAlive(m) // escapes: replaced by intrinsic. 4894 return int64(length), err 4895 } 4896 4897 // CopyMsg1SliceIn copies in a slice of MsgSimple objects from the task's memory. 4898 func CopyMsg1SliceIn(cc marshal.CopyContext, addr hostarch.Addr, dst []MsgSimple) (int, error) { 4899 count := len(dst) 4900 if count == 0 { 4901 return 0, nil 4902 } 4903 size := (*MsgSimple)(nil).SizeBytes() 4904 4905 ptr := unsafe.Pointer(&dst) 4906 val := gohacks.Noescape(unsafe.Pointer((*reflect.SliceHeader)(ptr).Data)) 4907 4908 // Construct a slice backed by dst's underlying memory. 4909 var buf []byte 4910 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 4911 hdr.Data = uintptr(val) 4912 hdr.Len = size * count 4913 hdr.Cap = size * count 4914 4915 length, err := cc.CopyInBytes(addr, buf) 4916 // Since we bypassed the compiler's escape analysis, indicate that dst 4917 // must live until the use above. 4918 runtime.KeepAlive(dst) // escapes: replaced by intrinsic. 4919 return length, err 4920 } 4921 4922 // CopyMsg1SliceOut copies a slice of MsgSimple objects to the task's memory. 4923 func CopyMsg1SliceOut(cc marshal.CopyContext, addr hostarch.Addr, src []MsgSimple) (int, error) { 4924 count := len(src) 4925 if count == 0 { 4926 return 0, nil 4927 } 4928 size := (*MsgSimple)(nil).SizeBytes() 4929 4930 ptr := unsafe.Pointer(&src) 4931 val := gohacks.Noescape(unsafe.Pointer((*reflect.SliceHeader)(ptr).Data)) 4932 4933 // Construct a slice backed by dst's underlying memory. 4934 var buf []byte 4935 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 4936 hdr.Data = uintptr(val) 4937 hdr.Len = size * count 4938 hdr.Cap = size * count 4939 4940 length, err := cc.CopyOutBytes(addr, buf) 4941 // Since we bypassed the compiler's escape analysis, indicate that src 4942 // must live until the use above. 4943 runtime.KeepAlive(src) // escapes: replaced by intrinsic. 4944 return length, err 4945 } 4946 4947 // MarshalUnsafeMsg1Slice is like MsgSimple.MarshalUnsafe, but for a []MsgSimple. 4948 func MarshalUnsafeMsg1Slice(src []MsgSimple, dst []byte) []byte { 4949 count := len(src) 4950 if count == 0 { 4951 return dst 4952 } 4953 4954 size := (*MsgSimple)(nil).SizeBytes() 4955 buf := dst[:size*count] 4956 gohacks.Memmove(unsafe.Pointer(&buf[0]), unsafe.Pointer(&src[0]), uintptr(len(buf))) 4957 return dst[size*count:] 4958 } 4959 4960 // UnmarshalUnsafeMsg1Slice is like MsgSimple.UnmarshalUnsafe, but for a []MsgSimple. 4961 func UnmarshalUnsafeMsg1Slice(dst []MsgSimple, src []byte) []byte { 4962 count := len(dst) 4963 if count == 0 { 4964 return src 4965 } 4966 4967 size := (*MsgSimple)(nil).SizeBytes() 4968 buf := src[:size*count] 4969 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(&buf[0]), uintptr(len(buf))) 4970 return src[size*count:] 4971 } 4972 4973 // SizeBytes implements marshal.Marshallable.SizeBytes. 4974 func (s *sockHeader) SizeBytes() int { 4975 return 6 + 4976 (*MID)(nil).SizeBytes() 4977 } 4978 4979 // MarshalBytes implements marshal.Marshallable.MarshalBytes. 4980 func (s *sockHeader) MarshalBytes(dst []byte) []byte { 4981 hostarch.ByteOrder.PutUint32(dst[:4], uint32(s.payloadLen)) 4982 dst = dst[4:] 4983 dst = s.message.MarshalUnsafe(dst) 4984 // Padding: dst[:sizeof(uint16)] ~= uint16(0) 4985 dst = dst[2:] 4986 return dst 4987 } 4988 4989 // UnmarshalBytes implements marshal.Marshallable.UnmarshalBytes. 4990 func (s *sockHeader) UnmarshalBytes(src []byte) []byte { 4991 s.payloadLen = uint32(hostarch.ByteOrder.Uint32(src[:4])) 4992 src = src[4:] 4993 src = s.message.UnmarshalUnsafe(src) 4994 // Padding: var _ uint16 ~= src[:sizeof(uint16)] 4995 src = src[2:] 4996 return src 4997 } 4998 4999 // Packed implements marshal.Marshallable.Packed. 5000 //go:nosplit 5001 func (s *sockHeader) Packed() bool { 5002 return s.message.Packed() 5003 } 5004 5005 // MarshalUnsafe implements marshal.Marshallable.MarshalUnsafe. 5006 func (s *sockHeader) MarshalUnsafe(dst []byte) []byte { 5007 if s.message.Packed() { 5008 size := s.SizeBytes() 5009 gohacks.Memmove(unsafe.Pointer(&dst[0]), unsafe.Pointer(s), uintptr(size)) 5010 return dst[size:] 5011 } 5012 // Type sockHeader doesn't have a packed layout in memory, fallback to MarshalBytes. 5013 return s.MarshalBytes(dst) 5014 } 5015 5016 // UnmarshalUnsafe implements marshal.Marshallable.UnmarshalUnsafe. 5017 func (s *sockHeader) UnmarshalUnsafe(src []byte) []byte { 5018 if s.message.Packed() { 5019 size := s.SizeBytes() 5020 gohacks.Memmove(unsafe.Pointer(s), unsafe.Pointer(&src[0]), uintptr(size)) 5021 return src[size:] 5022 } 5023 // Type sockHeader doesn't have a packed layout in memory, fallback to UnmarshalBytes. 5024 return s.UnmarshalBytes(src) 5025 } 5026 5027 // CopyOutN implements marshal.Marshallable.CopyOutN. 5028 func (s *sockHeader) CopyOutN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 5029 if !s.message.Packed() { 5030 // Type sockHeader doesn't have a packed layout in memory, fall back to MarshalBytes. 5031 buf := cc.CopyScratchBuffer(s.SizeBytes()) // escapes: okay. 5032 s.MarshalBytes(buf) // escapes: fallback. 5033 return cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 5034 } 5035 5036 // Construct a slice backed by dst's underlying memory. 5037 var buf []byte 5038 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 5039 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(s))) 5040 hdr.Len = s.SizeBytes() 5041 hdr.Cap = s.SizeBytes() 5042 5043 length, err := cc.CopyOutBytes(addr, buf[:limit]) // escapes: okay. 5044 // Since we bypassed the compiler's escape analysis, indicate that s 5045 // must live until the use above. 5046 runtime.KeepAlive(s) // escapes: replaced by intrinsic. 5047 return length, err 5048 } 5049 5050 // CopyOut implements marshal.Marshallable.CopyOut. 5051 func (s *sockHeader) CopyOut(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 5052 return s.CopyOutN(cc, addr, s.SizeBytes()) 5053 } 5054 5055 // CopyInN implements marshal.Marshallable.CopyInN. 5056 func (s *sockHeader) CopyInN(cc marshal.CopyContext, addr hostarch.Addr, limit int) (int, error) { 5057 if !s.message.Packed() { 5058 // Type sockHeader doesn't have a packed layout in memory, fall back to UnmarshalBytes. 5059 buf := cc.CopyScratchBuffer(s.SizeBytes()) // escapes: okay. 5060 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 5061 // Unmarshal unconditionally. If we had a short copy-in, this results in a 5062 // partially unmarshalled struct. 5063 s.UnmarshalBytes(buf) // escapes: fallback. 5064 return length, err 5065 } 5066 5067 // Construct a slice backed by dst's underlying memory. 5068 var buf []byte 5069 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 5070 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(s))) 5071 hdr.Len = s.SizeBytes() 5072 hdr.Cap = s.SizeBytes() 5073 5074 length, err := cc.CopyInBytes(addr, buf[:limit]) // escapes: okay. 5075 // Since we bypassed the compiler's escape analysis, indicate that s 5076 // must live until the use above. 5077 runtime.KeepAlive(s) // escapes: replaced by intrinsic. 5078 return length, err 5079 } 5080 5081 // CopyIn implements marshal.Marshallable.CopyIn. 5082 func (s *sockHeader) CopyIn(cc marshal.CopyContext, addr hostarch.Addr) (int, error) { 5083 return s.CopyInN(cc, addr, s.SizeBytes()) 5084 } 5085 5086 // WriteTo implements io.WriterTo.WriteTo. 5087 func (s *sockHeader) WriteTo(writer io.Writer) (int64, error) { 5088 if !s.message.Packed() { 5089 // Type sockHeader doesn't have a packed layout in memory, fall back to MarshalBytes. 5090 buf := make([]byte, s.SizeBytes()) 5091 s.MarshalBytes(buf) 5092 length, err := writer.Write(buf) 5093 return int64(length), err 5094 } 5095 5096 // Construct a slice backed by dst's underlying memory. 5097 var buf []byte 5098 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&buf)) 5099 hdr.Data = uintptr(gohacks.Noescape(unsafe.Pointer(s))) 5100 hdr.Len = s.SizeBytes() 5101 hdr.Cap = s.SizeBytes() 5102 5103 length, err := writer.Write(buf) 5104 // Since we bypassed the compiler's escape analysis, indicate that s 5105 // must live until the use above. 5106 runtime.KeepAlive(s) // escapes: replaced by intrinsic. 5107 return int64(length), err 5108 } 5109