chore(deps): update module golang.org/x/sys to v0.49.0 #938
@@ -152,7 +152,7 @@ require (
|
||||
github.com/stretchr/testify v1.12.1
|
||||
github.com/theupdateframework/notary v0.7.0 // indirect
|
||||
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect
|
||||
golang.org/x/sys v0.48.0
|
||||
golang.org/x/sys v0.49.0
|
||||
)
|
||||
|
||||
replace github.com/docker/cli v28.4.0+incompatible => git.coopcloud.tech/toolshed/docker-cli v28.5.3-0.20260202112816-30df2d0b3a00+incompatible
|
||||
|
||||
@@ -1136,8 +1136,8 @@ golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBc
|
||||
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.48.0 h1:bbX/i/6MgT9BVLM9RT1thmxL04yeTAhbEz4SyadbXoo=
|
||||
golang.org/x/sys v0.48.0/go.mod h1:hNLxWAXmnKAxqDtdwIYC4bM9oQPEecfsnNMuSxOs3og=
|
||||
golang.org/x/sys v0.49.0 h1:XbzkgYJHdqh/8m2Uu0W/dQv8nktxx4BFHp1M0gROTXA=
|
||||
golang.org/x/sys v0.49.0/go.mod h1:hNLxWAXmnKAxqDtdwIYC4bM9oQPEecfsnNMuSxOs3og=
|
||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||
|
||||
+3
-3
@@ -3,16 +3,16 @@ kind: pipeline
|
||||
name: coopcloud.tech/tagcmp
|
||||
steps:
|
||||
- name: gofmt
|
||||
image: golang:1.27
|
||||
image: golang:1.26
|
||||
commands:
|
||||
- test -z "$(gofmt -l .)"
|
||||
|
||||
- name: go build
|
||||
image: golang:1.27
|
||||
image: golang:1.26
|
||||
commands:
|
||||
- go build -v .
|
||||
|
||||
- name: go test
|
||||
image: golang:1.27
|
||||
image: golang:1.26
|
||||
commands:
|
||||
- go test . -cover
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
FROM golang:1.27@sha256:e0174e51e81218523251d85d248a90d24c3d5e81543b4f07a5d66229397db190
|
||||
FROM golang:1.26@sha256:f96cc555eb8db430159a3aa6797cd5bae561945b7b0fe7d0e284c63a3b291609
|
||||
|
||||
ENV GOOS=linux
|
||||
ENV GOARCH=arm
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
FROM golang:1.27@sha256:e0174e51e81218523251d85d248a90d24c3d5e81543b4f07a5d66229397db190
|
||||
FROM golang:1.26@sha256:f96cc555eb8db430159a3aa6797cd5bae561945b7b0fe7d0e284c63a3b291609
|
||||
|
||||
ENV GOOS=linux
|
||||
ENV GOARCH=arm64
|
||||
|
||||
+5
@@ -61,7 +61,11 @@ var X86 struct {
|
||||
HasBMI2 bool // Bit manipulation instruction set 2
|
||||
HasCX16 bool // Compare and exchange 16 Bytes
|
||||
HasERMS bool // Enhanced REP for MOVSB and STOSB
|
||||
HasF16C bool // 16-bit floating-point conversion instructions
|
||||
HasFMA bool // Fused-multiply-add instructions
|
||||
HasLAHF bool // LAHF/SAHF available in 64-bit mode
|
||||
HasLZCNT bool // Leading zeros count instruction
|
||||
HasMOVBE bool // Move data after byte swap
|
||||
HasOSXSAVE bool // OS supports XSAVE/XRESTOR for saving/restoring XMM registers.
|
||||
HasPCLMULQDQ bool // PCLMULQDQ instruction - most often used for AES-GCM
|
||||
HasPOPCNT bool // Hamming weight instruction POPCNT.
|
||||
@@ -75,6 +79,7 @@ var X86 struct {
|
||||
HasAVXIFMA bool // Advanced vector extension Integer Fused Multiply Add
|
||||
HasAVXVNNI bool // Advanced vector extension Vector Neural Network Instructions
|
||||
HasAVXVNNIInt8 bool // Advanced vector extension Vector Neural Network Int8 instructions
|
||||
HasXSAVE bool // XSAVE/XRSTOR/XSETBV/XGETBV instructions (hardware support; see also HasOSXSAVE)
|
||||
_ CacheLinePad
|
||||
}
|
||||
|
||||
|
||||
+23
@@ -43,7 +43,11 @@ func initOptions() {
|
||||
{Name: "bmi2", Feature: &X86.HasBMI2},
|
||||
{Name: "cx16", Feature: &X86.HasCX16},
|
||||
{Name: "erms", Feature: &X86.HasERMS},
|
||||
{Name: "f16c", Feature: &X86.HasF16C},
|
||||
{Name: "fma", Feature: &X86.HasFMA},
|
||||
{Name: "lahf", Feature: &X86.HasLAHF},
|
||||
{Name: "lzcnt", Feature: &X86.HasLZCNT},
|
||||
{Name: "movbe", Feature: &X86.HasMOVBE},
|
||||
{Name: "osxsave", Feature: &X86.HasOSXSAVE},
|
||||
{Name: "pclmulqdq", Feature: &X86.HasPCLMULQDQ},
|
||||
{Name: "popcnt", Feature: &X86.HasPOPCNT},
|
||||
@@ -56,6 +60,7 @@ func initOptions() {
|
||||
{Name: "avxifma", Feature: &X86.HasAVXIFMA},
|
||||
{Name: "avxvnni", Feature: &X86.HasAVXVNNI},
|
||||
{Name: "avxvnniint8", Feature: &X86.HasAVXVNNIInt8},
|
||||
{Name: "xsave", Feature: &X86.HasXSAVE},
|
||||
|
||||
// These capabilities should always be enabled on amd64:
|
||||
{Name: "sse2", Feature: &X86.HasSSE2, Required: runtime.GOARCH == "amd64"},
|
||||
@@ -83,10 +88,13 @@ func archInit() {
|
||||
cpuid_AVX512VPOPCNTDQ = 1 << 14
|
||||
cpuid_SSE41 = 1 << 19
|
||||
cpuid_SSE42 = 1 << 20
|
||||
cpuid_MOVBE = 1 << 22
|
||||
cpuid_POPCNT = 1 << 23
|
||||
cpuid_AES = 1 << 25
|
||||
cpuid_XSAVE = 1 << 26
|
||||
cpuid_OSXSAVE = 1 << 27
|
||||
cpuid_AVX = 1 << 28
|
||||
cpuid_F16C = 1 << 29
|
||||
|
||||
// "Extended Feature Flag" bits returned in EBX for CPUID EAX=0x7 ECX=0x0
|
||||
cpuid_BMI1 = 1 << 3
|
||||
@@ -110,6 +118,9 @@ func archInit() {
|
||||
|
||||
// edx bits
|
||||
cpuid_FSRM = 1 << 4
|
||||
// ecx bits for CPUID 0x80000001
|
||||
cpuid_LAHF = 1 << 0
|
||||
cpuid_LZCNT = 1 << 5
|
||||
// edx bits for CPUID 0x80000001
|
||||
cpuid_RDTSCP = 1 << 27
|
||||
)
|
||||
@@ -158,9 +169,21 @@ func archInit() {
|
||||
X86.HasSSE42 = isSet(ecx1, cpuid_SSE42)
|
||||
X86.HasPOPCNT = isSet(ecx1, cpuid_POPCNT)
|
||||
X86.HasAES = isSet(ecx1, cpuid_AES)
|
||||
X86.HasXSAVE = isSet(ecx1, cpuid_XSAVE)
|
||||
X86.HasOSXSAVE = isSet(ecx1, cpuid_OSXSAVE)
|
||||
X86.HasF16C = isSet(ecx1, cpuid_F16C)
|
||||
X86.HasMOVBE = isSet(ecx1, cpuid_MOVBE)
|
||||
X86.HasRDRAND = isSet(ecx1, cpuid_RDRAND)
|
||||
|
||||
// Extended processor info and feature bits, under the separate extended
|
||||
// (0x8000_0000-prefixed) leaf hierarchy, so maxID (the basic leaf count)
|
||||
// doesn't gate it.
|
||||
if maxExtID, _, _, _ := cpuid(0x80000000, 0); maxExtID >= 0x80000001 {
|
||||
_, _, ecxExt1, _ := cpuid(0x80000001, 0)
|
||||
X86.HasLAHF = isSet(ecxExt1, cpuid_LAHF)
|
||||
X86.HasLZCNT = isSet(ecxExt1, cpuid_LZCNT)
|
||||
}
|
||||
|
||||
var osSupportsAVX, osSupportsAVX512 bool
|
||||
// For XGETBV, OSXSAVE bit is required and sufficient.
|
||||
if X86.HasOSXSAVE {
|
||||
|
||||
+20
@@ -13,6 +13,16 @@
|
||||
// Just jump to package syscall's implementation for all these functions.
|
||||
// The runtime may know about them.
|
||||
|
||||
TEXT ·Syscall(SB),NOSPLIT,$0-56
|
||||
MOVD $syscall·Syscall(SB), R31
|
||||
MOVD R31, CTR
|
||||
JMP (CTR)
|
||||
|
||||
TEXT ·Syscall6(SB),NOSPLIT,$0-80
|
||||
MOVD $syscall·Syscall6(SB), R31
|
||||
MOVD R31, CTR
|
||||
JMP (CTR)
|
||||
|
||||
TEXT ·SyscallNoError(SB),NOSPLIT,$0-48
|
||||
BL runtime·entersyscall(SB)
|
||||
MOVD a1+8(FP), R3
|
||||
@@ -28,6 +38,16 @@ TEXT ·SyscallNoError(SB),NOSPLIT,$0-48
|
||||
BL runtime·exitsyscall(SB)
|
||||
RET
|
||||
|
||||
TEXT ·RawSyscall(SB),NOSPLIT,$0-56
|
||||
MOVD $syscall·RawSyscall(SB), R31
|
||||
MOVD R31, CTR
|
||||
JMP (CTR)
|
||||
|
||||
TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
|
||||
MOVD $syscall·RawSyscall6(SB), R31
|
||||
MOVD R31, CTR
|
||||
JMP (CTR)
|
||||
|
||||
TEXT ·RawSyscallNoError(SB),NOSPLIT,$0-48
|
||||
MOVD a1+8(FP), R3
|
||||
MOVD a2+16(FP), R4
|
||||
|
||||
+48
@@ -0,0 +1,48 @@
|
||||
// Copyright 2026 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build linux && sparc64 && gc
|
||||
|
||||
#include "textflag.h"
|
||||
|
||||
//
|
||||
// System calls for sparc64, Linux
|
||||
//
|
||||
|
||||
// Just jump to package syscall's implementation for all these functions.
|
||||
// The runtime may know about them.
|
||||
|
||||
TEXT ·Syscall(SB), NOSPLIT, $0-56
|
||||
JMP syscall·Syscall(SB)
|
||||
|
||||
TEXT ·Syscall6(SB), NOSPLIT, $0-80
|
||||
JMP syscall·Syscall6(SB)
|
||||
|
||||
TEXT ·SyscallNoError(SB), NOSPLIT, $0-48
|
||||
CALL runtime·entersyscall(SB)
|
||||
MOVD trap+0(FP), R1 // syscall entry
|
||||
MOVD a1+8(FP), R8
|
||||
MOVD a2+16(FP), R9
|
||||
MOVD a3+24(FP), R10
|
||||
TA $0x6d
|
||||
MOVD R8, r1+32(FP)
|
||||
MOVD R9, r2+40(FP)
|
||||
CALL runtime·exitsyscall(SB)
|
||||
RET
|
||||
|
||||
TEXT ·RawSyscall(SB), NOSPLIT, $0-56
|
||||
JMP syscall·RawSyscall(SB)
|
||||
|
||||
TEXT ·RawSyscall6(SB), NOSPLIT, $0-80
|
||||
JMP syscall·RawSyscall6(SB)
|
||||
|
||||
TEXT ·RawSyscallNoError(SB), NOSPLIT, $0-48
|
||||
MOVD trap+0(FP), R1 // syscall entry
|
||||
MOVD a1+8(FP), R8
|
||||
MOVD a2+16(FP), R9
|
||||
MOVD a3+24(FP), R10
|
||||
TA $0x6d
|
||||
MOVD R8, r1+32(FP)
|
||||
MOVD R9, r2+40(FP)
|
||||
RET
|
||||
+4
-186
@@ -30,21 +30,8 @@
|
||||
#define SVC_LOAD BYTE $0x0A; BYTE $0x08 // SVC 08 LOAD
|
||||
#define SVC_DELETE BYTE $0x0A; BYTE $0x09 // SVC 09 DELETE
|
||||
|
||||
DATA zosLibVec<>(SB)/8, $0
|
||||
GLOBL zosLibVec<>(SB), NOPTR, $8
|
||||
|
||||
TEXT ·initZosLibVec(SB), NOSPLIT|NOFRAME, $0-0
|
||||
MOVW PSALAA, R8
|
||||
MOVD LCA64(R8), R8
|
||||
MOVD CAA(R8), R8
|
||||
MOVD EDCHPXV(R8), R8
|
||||
MOVD R8, zosLibVec<>(SB)
|
||||
RET
|
||||
|
||||
TEXT ·GetZosLibVec(SB), NOSPLIT|NOFRAME, $0-0
|
||||
MOVD zosLibVec<>(SB), R8
|
||||
MOVD R8, ret+0(FP)
|
||||
RET
|
||||
JMP runtime·GetZosLibVec(SB)
|
||||
|
||||
TEXT ·clearErrno(SB), NOSPLIT, $0-0
|
||||
BL addrerrno<>(SB)
|
||||
@@ -160,163 +147,13 @@ TEXT ·gettid(SB), NOSPLIT, $0
|
||||
// errno and errno2 is retrieved
|
||||
//
|
||||
TEXT ·CallLeFuncWithErr(SB), NOSPLIT, $0
|
||||
MOVW PSALAA, R8
|
||||
MOVD LCA64(R8), R8
|
||||
MOVD CAA(R8), R9
|
||||
MOVD g, GOCB(R9)
|
||||
|
||||
// Restore LE stack.
|
||||
MOVD SAVSTACK_ASYNC(R8), R9 // R9-> LE stack frame saving address
|
||||
MOVD 0(R9), R4 // R4-> restore previously saved stack frame pointer
|
||||
|
||||
MOVD parms_base+8(FP), R7 // R7 -> argument array
|
||||
MOVD parms_len+16(FP), R8 // R8 number of arguments
|
||||
|
||||
// arg 1 ---> R1
|
||||
CMP R8, $0
|
||||
BEQ docall
|
||||
SUB $1, R8
|
||||
MOVD 0(R7), R1
|
||||
|
||||
// arg 2 ---> R2
|
||||
CMP R8, $0
|
||||
BEQ docall
|
||||
SUB $1, R8
|
||||
ADD $8, R7
|
||||
MOVD 0(R7), R2
|
||||
|
||||
// arg 3 --> R3
|
||||
CMP R8, $0
|
||||
BEQ docall
|
||||
SUB $1, R8
|
||||
ADD $8, R7
|
||||
MOVD 0(R7), R3
|
||||
|
||||
CMP R8, $0
|
||||
BEQ docall
|
||||
MOVD $2176+16, R6 // starting LE stack address-8 to store 4th argument
|
||||
|
||||
repeat:
|
||||
ADD $8, R7
|
||||
MOVD 0(R7), R0 // advance arg pointer by 8 byte
|
||||
ADD $8, R6 // advance LE argument address by 8 byte
|
||||
MOVD R0, (R4)(R6*1) // copy argument from go-slice to le-frame
|
||||
SUB $1, R8
|
||||
CMP R8, $0
|
||||
BNE repeat
|
||||
|
||||
docall:
|
||||
MOVD funcdesc+0(FP), R8 // R8-> function descriptor
|
||||
LMG 0(R8), R5, R6
|
||||
MOVD $0, 0(R9) // R9 address of SAVSTACK_ASYNC
|
||||
LE_CALL // balr R7, R6 (return #1)
|
||||
NOPH
|
||||
MOVD R3, ret+32(FP)
|
||||
CMP R3, $-1 // compare result to -1
|
||||
BNE done
|
||||
|
||||
// retrieve errno and errno2
|
||||
MOVD zosLibVec<>(SB), R8
|
||||
ADD $(__errno), R8
|
||||
LMG 0(R8), R5, R6
|
||||
LE_CALL // balr R7, R6 __errno (return #3)
|
||||
NOPH
|
||||
MOVWZ 0(R3), R3
|
||||
MOVD R3, err+48(FP)
|
||||
MOVD zosLibVec<>(SB), R8
|
||||
ADD $(__err2ad), R8
|
||||
LMG 0(R8), R5, R6
|
||||
LE_CALL // balr R7, R6 __err2ad (return #2)
|
||||
NOPH
|
||||
MOVW (R3), R2 // retrieve errno2
|
||||
MOVD R2, errno2+40(FP) // store in return area
|
||||
|
||||
done:
|
||||
MOVD R4, 0(R9) // Save stack pointer.
|
||||
RET
|
||||
|
||||
JMP runtime·CallLeFuncWithErr(SB)
|
||||
//
|
||||
// Call LE function, if the return is 0
|
||||
// errno and errno2 is retrieved
|
||||
//
|
||||
TEXT ·CallLeFuncWithPtrReturn(SB), NOSPLIT, $0
|
||||
MOVW PSALAA, R8
|
||||
MOVD LCA64(R8), R8
|
||||
MOVD CAA(R8), R9
|
||||
MOVD g, GOCB(R9)
|
||||
|
||||
// Restore LE stack.
|
||||
MOVD SAVSTACK_ASYNC(R8), R9 // R9-> LE stack frame saving address
|
||||
MOVD 0(R9), R4 // R4-> restore previously saved stack frame pointer
|
||||
|
||||
MOVD parms_base+8(FP), R7 // R7 -> argument array
|
||||
MOVD parms_len+16(FP), R8 // R8 number of arguments
|
||||
|
||||
// arg 1 ---> R1
|
||||
CMP R8, $0
|
||||
BEQ docall
|
||||
SUB $1, R8
|
||||
MOVD 0(R7), R1
|
||||
|
||||
// arg 2 ---> R2
|
||||
CMP R8, $0
|
||||
BEQ docall
|
||||
SUB $1, R8
|
||||
ADD $8, R7
|
||||
MOVD 0(R7), R2
|
||||
|
||||
// arg 3 --> R3
|
||||
CMP R8, $0
|
||||
BEQ docall
|
||||
SUB $1, R8
|
||||
ADD $8, R7
|
||||
MOVD 0(R7), R3
|
||||
|
||||
CMP R8, $0
|
||||
BEQ docall
|
||||
MOVD $2176+16, R6 // starting LE stack address-8 to store 4th argument
|
||||
|
||||
repeat:
|
||||
ADD $8, R7
|
||||
MOVD 0(R7), R0 // advance arg pointer by 8 byte
|
||||
ADD $8, R6 // advance LE argument address by 8 byte
|
||||
MOVD R0, (R4)(R6*1) // copy argument from go-slice to le-frame
|
||||
SUB $1, R8
|
||||
CMP R8, $0
|
||||
BNE repeat
|
||||
|
||||
docall:
|
||||
MOVD funcdesc+0(FP), R8 // R8-> function descriptor
|
||||
LMG 0(R8), R5, R6
|
||||
MOVD $0, 0(R9) // R9 address of SAVSTACK_ASYNC
|
||||
LE_CALL // balr R7, R6 (return #1)
|
||||
NOPH
|
||||
MOVD R3, ret+32(FP)
|
||||
CMP R3, $0 // compare result to 0
|
||||
BNE done
|
||||
|
||||
// retrieve errno and errno2
|
||||
MOVD zosLibVec<>(SB), R8
|
||||
ADD $(__errno), R8
|
||||
LMG 0(R8), R5, R6
|
||||
LE_CALL // balr R7, R6 __errno (return #3)
|
||||
NOPH
|
||||
MOVWZ 0(R3), R3
|
||||
MOVD R3, err+48(FP)
|
||||
MOVD zosLibVec<>(SB), R8
|
||||
ADD $(__err2ad), R8
|
||||
LMG 0(R8), R5, R6
|
||||
LE_CALL // balr R7, R6 __err2ad (return #2)
|
||||
NOPH
|
||||
MOVW (R3), R2 // retrieve errno2
|
||||
MOVD R2, errno2+40(FP) // store in return area
|
||||
XOR R2, R2
|
||||
MOVWZ R2, (R3) // clear errno2
|
||||
|
||||
done:
|
||||
MOVD R4, 0(R9) // Save stack pointer.
|
||||
RET
|
||||
|
||||
JMP runtime·CallLeFuncWithPtrReturn(SB)
|
||||
//
|
||||
// function to test if a pointer can be safely dereferenced (content read)
|
||||
// return 0 for succces
|
||||
@@ -360,23 +197,4 @@ TEXT ·ptrtest(SB), NOSPLIT, $0-16
|
||||
//
|
||||
// func safeload(ptr uintptr) ( value uintptr, error uintptr)
|
||||
TEXT ·safeload(SB), NOSPLIT, $0-24
|
||||
MOVD ptr+0(FP), R10 // test pointer in R10
|
||||
MOVD $0x0, R6
|
||||
BYTE $0xE3; BYTE $0x20; BYTE $0x04; BYTE $0xB8; BYTE $0x00; BYTE $0x17 // llgt 2,1208
|
||||
BYTE $0xB9; BYTE $0x17; BYTE $0x00; BYTE $0x22 // llgtr 2,2
|
||||
BYTE $0xA5; BYTE $0x26; BYTE $0x7F; BYTE $0xFF // nilh 2,32767
|
||||
BYTE $0xE3; BYTE $0x22; BYTE $0x00; BYTE $0x58; BYTE $0x00; BYTE $0x04 // lg 2,88(2)
|
||||
BYTE $0xE3; BYTE $0x22; BYTE $0x00; BYTE $0x08; BYTE $0x00; BYTE $0x04 // lg 2,8(2)
|
||||
BYTE $0x41; BYTE $0x22; BYTE $0x03; BYTE $0x68 // la 2,872(2)
|
||||
BYTE $0xB9; BYTE $0x82; BYTE $0x00; BYTE $0x33 // xgr 3,3
|
||||
BYTE $0xA7; BYTE $0x55; BYTE $0x00; BYTE $0x04 // bras 5,lbl1
|
||||
BYTE $0xA7; BYTE $0x39; BYTE $0x00; BYTE $0x01 // lghi 3,1
|
||||
BYTE $0xB9; BYTE $0x02; BYTE $0x00; BYTE $0x33 // lbl1 ltgr 3,3
|
||||
BYTE $0xA7; BYTE $0x74; BYTE $0x00; BYTE $0x08 // brc b'0111',lbl2
|
||||
BYTE $0xE3; BYTE $0x52; BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x24 // stg 5,0(2)
|
||||
BYTE $0xE3; BYTE $0x6A; BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x04 // lg 6,0(10)
|
||||
BYTE $0xB9; BYTE $0x82; BYTE $0x00; BYTE $0x99 // lbl2 xgr 9,9
|
||||
BYTE $0xE3; BYTE $0x92; BYTE $0x00; BYTE $0x00; BYTE $0x00; BYTE $0x24 // stg 9,0(2)
|
||||
MOVD R6, value+8(FP) // result in R6
|
||||
MOVD R3, error+16(FP) // error in R3
|
||||
RET
|
||||
JMP runtime·ZosSafeLoad(SB)
|
||||
|
||||
+9
-9
@@ -20,15 +20,15 @@ TEXT ·bpxcall(SB), NOSPLIT|NOFRAME, $0
|
||||
MOVD plist_base+0(FP), R1 // r1 points to plist
|
||||
MOVD bpx_offset+24(FP), R2 // r2 offset to BPX vector table
|
||||
MOVD R14, R7 // save r14
|
||||
MOVD R15, R8 // save r15
|
||||
MOVWZ 16(R0), R9
|
||||
MOVWZ 544(R9), R9
|
||||
MOVWZ 24(R9), R9 // call vector in r9
|
||||
ADD R2, R9 // add offset to vector table
|
||||
MOVWZ (R9), R9 // r9 points to entry point
|
||||
BYTE $0x0D // BL R14,R9 --> basr r14,r9
|
||||
BYTE $0xE9 // clobbers 0,1,14,15
|
||||
MOVD R8, R15 // restore 15
|
||||
MOVD R15, R9 // save r15
|
||||
MOVWZ 16(R0), R15
|
||||
MOVWZ 544(R15), R15
|
||||
MOVWZ 24(R15), R15 // call vector in r15
|
||||
ADD R2, R15 // add offset to vector table
|
||||
MOVWZ (R15), R15 // r15 points to entry point
|
||||
BYTE $0x0D // BL R14,R15 --> basr r14,r15
|
||||
BYTE $0xEF // clobbers 0,1,14,15
|
||||
MOVD R9, R15 // restore 15
|
||||
JMP R7 // return via saved return address
|
||||
|
||||
// func A2e(arr [] byte)
|
||||
|
||||
+2
-2
@@ -13,12 +13,12 @@ func FcntlInt(fd uintptr, cmd, arg int) (int, error) {
|
||||
|
||||
// FcntlFlock performs a fcntl syscall for the F_GETLK, F_SETLK or F_SETLKW command.
|
||||
func FcntlFlock(fd uintptr, cmd int, lk *Flock_t) error {
|
||||
_, err := fcntl(int(fd), cmd, int(uintptr(unsafe.Pointer(lk))))
|
||||
_, err := fcntlPtr(int(fd), cmd, unsafe.Pointer(lk))
|
||||
return err
|
||||
}
|
||||
|
||||
// FcntlFstore performs a fcntl syscall for the F_PREALLOCATE command.
|
||||
func FcntlFstore(fd uintptr, cmd int, fstore *Fstore_t) error {
|
||||
_, err := fcntl(int(fd), cmd, int(uintptr(unsafe.Pointer(fstore))))
|
||||
_, err := fcntlPtr(int(fd), cmd, unsafe.Pointer(fstore))
|
||||
return err
|
||||
}
|
||||
|
||||
+1
-1
@@ -579,7 +579,7 @@ ccflags="$@"
|
||||
$2 ~ /^DIOC/ ||
|
||||
$2 ~ /^RUSAGE_(SELF|CHILDREN|THREAD)/ ||
|
||||
$2 ~ /^RLIMIT_(AS|CORE|CPU|DATA|FSIZE|LOCKS|MEMLOCK|MSGQUEUE|NICE|NOFILE|NPROC|RSS|RTPRIO|RTTIME|SIGPENDING|STACK)|RLIM_INFINITY/ ||
|
||||
$2 ~ /^PRIO_(PROCESS|PGRP|USER)/ ||
|
||||
$2 ~ /^PRIO_(PROCESS|PGRP|USER|DARWIN_(THREAD|PROCESS|BG|NONUI))/ ||
|
||||
$2 ~ /^CLONE_[A-Z_]+/ ||
|
||||
$2 !~ /^(BPF_TIMEVAL|BPF_FIB_LOOKUP_[A-Z]+|BPF_F_LINK)$/ &&
|
||||
$2 ~ /^(BPF|DLT)_/ ||
|
||||
|
||||
+537
@@ -0,0 +1,537 @@
|
||||
// Copyright 2026 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build zos
|
||||
|
||||
package unix
|
||||
|
||||
import "unsafe"
|
||||
|
||||
// z/OS ptrace implementation notes:
|
||||
//
|
||||
// This file provides ptrace wrappers for z/OS that match the Linux API as closely
|
||||
// as possible. However, there are fundamental differences in how z/OS implements
|
||||
// process tracing compared to Linux:
|
||||
//
|
||||
// 1. SYSTEM CALL INTERFACE:
|
||||
// - z/OS uses BPX4PTR (5 parameters) vs Linux ptrace syscall (4 parameters)
|
||||
// - The 5th parameter (buffer) is used for block operations
|
||||
//
|
||||
// 2. MEMORY OPERATIONS:
|
||||
// - z/OS: PT_READ_BLOCK/PT_WRITE_BLOCK for efficient block transfers
|
||||
// - Linux: PTRACE_PEEKTEXT/POKETEXT for word-by-word access
|
||||
//
|
||||
// 3. REGISTER OPERATIONS:
|
||||
// - z/OS: PT_READ_GPR/PT_WRITE_GPR with register number for 64-bit values
|
||||
// - Linux: PTRACE_GETREGSET/SETREGSET with iovec structure
|
||||
//
|
||||
// 4. SINGLE-STEPPING:
|
||||
// - z/OS: No native single-step; requires temporary breakpoints or PER
|
||||
// - Linux: PTRACE_SINGLESTEP natively supported
|
||||
// a) Read instruction at current PSW
|
||||
// b) Calculate next instruction address (handle branches)
|
||||
// c) Set temporary breakpoint (SVC 144 = 0x0A90) at next address
|
||||
// d) Continue execution until breakpoint hit
|
||||
// e) Restore original instruction and adjust PSW
|
||||
//
|
||||
// 5. SYSCALL TRACING:
|
||||
// - z/OS: No PTRACE_SYSCALL equivalent; requires breakpoint-based approach
|
||||
// - Linux: PTRACE_SYSCALL stops at syscall entry/exit
|
||||
// a) Identify BPX syscall vector location
|
||||
// b) Set breakpoints at syscall entry points
|
||||
// c) Detect BASR instructions calling into syscall vector
|
||||
// d) Parse arguments from registers before/after syscall
|
||||
//
|
||||
// 6. LIMITATIONS:
|
||||
// - PtraceSetOptions: No equivalent (returns ENOSYS)
|
||||
// - PtraceGetEventMsg: No equivalent (returns ENOSYS)
|
||||
// - PtraceSingleStep: Requires complex implementation (returns ENOSYS)
|
||||
// - PtraceInterrupt: No equivalent (returns ENOSYS)
|
||||
// - PtracePokeUser: No PT_WRITE_U (returns ENOSYS)
|
||||
//
|
||||
// For reference implementations of single-stepping and syscall tracing on z/OS,
|
||||
|
||||
// ptrace is the basic wrapper for BPX4PTR on z/OS.
|
||||
// Note: z/OS ptrace (BPX4PTR) takes 5 parameters vs 4 on Linux/Darwin.
|
||||
// The 5th parameter (buffer) is used for operations like PT_READ_BLOCK/PT_WRITE_BLOCK.
|
||||
//
|
||||
// data is an integer-valued argument (signal number, register index, byte count,
|
||||
// or a target-process address). It is not a Go-managed pointer. We must not pass
|
||||
// it to Bpx4ptr as unsafe.Pointer(data) because the garbage collector would treat
|
||||
// that integer as a pointer and may crash trying to follow it.
|
||||
//
|
||||
// Instead we inline the parms array that Bpx4ptr would construct, placing &data
|
||||
// at parms[3]. BPX4PTR dereferences parms[3] to obtain the data value, so it
|
||||
// receives data unchanged while the GC only ever sees a valid stack pointer.
|
||||
func ptrace(request int, pid int, addr uintptr, data uintptr) (err error) {
|
||||
req32 := int32(request)
|
||||
pid32 := int32(pid)
|
||||
var rv, rc, rn int32
|
||||
var buffer unsafe.Pointer
|
||||
parms := [8]unsafe.Pointer{
|
||||
unsafe.Pointer(&req32),
|
||||
unsafe.Pointer(&pid32),
|
||||
unsafe.Pointer(&addr),
|
||||
unsafe.Pointer(&data), // &data, not unsafe.Pointer(data)
|
||||
unsafe.Pointer(&buffer),
|
||||
unsafe.Pointer(&rv),
|
||||
unsafe.Pointer(&rc),
|
||||
unsafe.Pointer(&rn),
|
||||
}
|
||||
bpxcall(parms[:], BPX4PTR)
|
||||
if rv != 0 {
|
||||
err = errnoErr2(Errno(rc), uintptr(rn))
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// ptracePtr is a variant that accepts unsafe.Pointer for the data parameter.
|
||||
// addr is a target-process address (a raw integer), not a Go-managed pointer.
|
||||
// We must not pass it to Bpx4ptr as unsafe.Pointer(addr); instead we inline the
|
||||
// parms array and place &addr at parms[2], exactly as ptrace() does for data.
|
||||
func ptracePtr(request int, pid int, addr uintptr, data unsafe.Pointer) (err error) {
|
||||
req32 := int32(request)
|
||||
pid32 := int32(pid)
|
||||
var rv, rc, rn int32
|
||||
var buffer unsafe.Pointer
|
||||
parms := [8]unsafe.Pointer{
|
||||
unsafe.Pointer(&req32),
|
||||
unsafe.Pointer(&pid32),
|
||||
unsafe.Pointer(&addr), // &addr, not unsafe.Pointer(addr)
|
||||
unsafe.Pointer(&data),
|
||||
unsafe.Pointer(&buffer),
|
||||
unsafe.Pointer(&rv),
|
||||
unsafe.Pointer(&rc),
|
||||
unsafe.Pointer(&rn),
|
||||
}
|
||||
bpxcall(parms[:], BPX4PTR)
|
||||
if rv != 0 {
|
||||
err = errnoErr2(Errno(rc), uintptr(rn))
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// ptracePtrWithBuffer is used for operations that require the buffer parameter.
|
||||
// addr is a target-process address; same &addr treatment as ptracePtr.
|
||||
func ptracePtrWithBuffer(request int, pid int, addr uintptr, data unsafe.Pointer, buffer unsafe.Pointer) (err error) {
|
||||
req32 := int32(request)
|
||||
pid32 := int32(pid)
|
||||
var rv, rc, rn int32
|
||||
parms := [8]unsafe.Pointer{
|
||||
unsafe.Pointer(&req32),
|
||||
unsafe.Pointer(&pid32),
|
||||
unsafe.Pointer(&addr), // &addr, not unsafe.Pointer(addr)
|
||||
unsafe.Pointer(&data),
|
||||
unsafe.Pointer(&buffer),
|
||||
unsafe.Pointer(&rv),
|
||||
unsafe.Pointer(&rc),
|
||||
unsafe.Pointer(&rn),
|
||||
}
|
||||
bpxcall(parms[:], BPX4PTR)
|
||||
if rv != 0 {
|
||||
err = errnoErr2(Errno(rc), uintptr(rn))
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// High-level convenience functions matching the Linux/Darwin API
|
||||
|
||||
func PtraceAttach(pid int) (err error) {
|
||||
return ptrace(PT_ATTACH, pid, 0, 0)
|
||||
}
|
||||
|
||||
func PtraceDetach(pid int) (err error) {
|
||||
return ptrace(PT_DETACH, pid, 0, 0)
|
||||
}
|
||||
|
||||
func PtraceCont(pid int, signal int) (err error) {
|
||||
// PT_CONTINUE can be interrupted by signals (EINTR), retry if needed
|
||||
for {
|
||||
err = ptrace(PT_CONTINUE, pid, 0, uintptr(signal))
|
||||
if err != EINTR {
|
||||
break
|
||||
}
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func PtraceKill(pid int) (err error) {
|
||||
return ptrace(PT_KILL, pid, 0, 0)
|
||||
}
|
||||
|
||||
// ptracePeek implements the peek operations using PT_READ_BLOCK.
|
||||
// On z/OS, PT_READ_BLOCK can read arbitrary-length data efficiently.
|
||||
// Unlike Linux which reads word-by-word, z/OS can read blocks directly.
|
||||
func ptracePeek(req int, pid int, addr uintptr, out []byte) (count int, err error) {
|
||||
if len(out) == 0 {
|
||||
return 0, nil
|
||||
}
|
||||
|
||||
// z/OS PT_READ_BLOCK can read blocks directly without word-by-word alignment
|
||||
// The buffer parameter points to the output buffer
|
||||
buffer := unsafe.Pointer(&out[0])
|
||||
err = ptracePtrWithBuffer(req, pid, addr, unsafe.Pointer(uintptr(len(out))), buffer)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return len(out), nil
|
||||
}
|
||||
|
||||
// PtracePeekText reads from the traced process's text segment.
|
||||
func PtracePeekText(pid int, addr uintptr, out []byte) (count int, err error) {
|
||||
return ptracePeek(PT_READ_BLOCK, pid, addr, out)
|
||||
}
|
||||
|
||||
// PtracePeekData reads from the traced process's data segment.
|
||||
func PtracePeekData(pid int, addr uintptr, out []byte) (count int, err error) {
|
||||
return ptracePeek(PT_READ_BLOCK, pid, addr, out)
|
||||
}
|
||||
|
||||
// PtracePeekUser reads from the traced process's user area.
|
||||
// On z/OS, PT_READ_U reads a 32-bit word from the user area at the specified offset.
|
||||
// To match Linux behavior, we implement word-by-word reading for arbitrary lengths.
|
||||
func PtracePeekUser(pid int, addr uintptr, out []byte) (count int, err error) {
|
||||
if len(out) == 0 {
|
||||
return 0, nil
|
||||
}
|
||||
|
||||
// PT_READ_U reads 32-bit words from user area
|
||||
// We need to read word-by-word to handle arbitrary lengths
|
||||
n := 0
|
||||
for n < len(out) {
|
||||
var data uint32
|
||||
err = ptracePtr(PT_READ_U, pid, addr+uintptr(n), unsafe.Pointer(&data))
|
||||
if err != nil {
|
||||
return n, err
|
||||
}
|
||||
|
||||
// Copy up to 4 bytes to output
|
||||
remaining := len(out) - n
|
||||
if remaining >= 4 {
|
||||
out[n] = byte(data >> 24)
|
||||
out[n+1] = byte(data >> 16)
|
||||
out[n+2] = byte(data >> 8)
|
||||
out[n+3] = byte(data)
|
||||
n += 4
|
||||
} else {
|
||||
// Handle partial word at the end
|
||||
for i := 0; i < remaining; i++ {
|
||||
out[n+i] = byte(data >> (24 - i*8))
|
||||
}
|
||||
n += remaining
|
||||
}
|
||||
}
|
||||
return n, nil
|
||||
}
|
||||
|
||||
// ptracePoke implements the poke operations using PT_WRITE_BLOCK.
|
||||
func ptracePoke(pokeReq int, peekReq int, pid int, addr uintptr, data []byte) (count int, err error) {
|
||||
if len(data) == 0 {
|
||||
return 0, nil
|
||||
}
|
||||
|
||||
// z/OS PT_WRITE_BLOCK can write blocks directly
|
||||
buffer := unsafe.Pointer(&data[0])
|
||||
err = ptracePtrWithBuffer(pokeReq, pid, addr, unsafe.Pointer(uintptr(len(data))), buffer)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return len(data), nil
|
||||
}
|
||||
|
||||
// PtracePokeText writes to the traced process's text segment.
|
||||
func PtracePokeText(pid int, addr uintptr, data []byte) (count int, err error) {
|
||||
return ptracePoke(PT_WRITE_BLOCK, PT_READ_BLOCK, pid, addr, data)
|
||||
}
|
||||
|
||||
// PtracePokeData writes to the traced process's data segment.
|
||||
func PtracePokeData(pid int, addr uintptr, data []byte) (count int, err error) {
|
||||
return ptracePoke(PT_WRITE_BLOCK, PT_READ_BLOCK, pid, addr, data)
|
||||
}
|
||||
|
||||
// PtracePokeUser writes to the traced process's user area.
|
||||
// Note: z/OS does not have a direct PT_WRITE_U equivalent.
|
||||
// This function returns ENOSYS to indicate it's not supported.
|
||||
// DIFFERENCE FROM LINUX: Linux supports PTRACE_POKEUSR, z/OS does not.
|
||||
func PtracePokeUser(pid int, addr uintptr, data []byte) (count int, err error) {
|
||||
// z/OS doesn't have PT_WRITE_U
|
||||
return 0, ENOSYS
|
||||
}
|
||||
|
||||
// PtraceGetRegs retrieves the general purpose registers from the traced process.
|
||||
// On z/OS, PT_READ_GPR can read individual registers as 64-bit values when called
|
||||
// with a register number, or read all registers when called with a buffer.
|
||||
// This function reads each register individually to ensure full 64-bit values.
|
||||
// DIFFERENCE FROM LINUX: Linux uses PTRACE_GETREGSET with iovec, z/OS uses PT_READ_GPR.
|
||||
func PtraceGetRegs(pid int, regsout *PtraceRegs) (err error) {
|
||||
// Use PT_REGHSET to enable reading high GPRs for AMODE 64 programs
|
||||
rv, rc, rn := Bpx4ptr(int32(PT_REGHSET), int32(pid), nil, nil, nil)
|
||||
_ = rv
|
||||
_ = rc
|
||||
_ = rn
|
||||
|
||||
// Use PT_BLOCKREQ to read GPRs and PSW in one call
|
||||
// dbx uses 3 requests: PT_READ_GPR, PT_READ_U, PT_READ_GPRH
|
||||
// PT_READ_U is required for ptrace to populate PSW in GPR block
|
||||
//
|
||||
// IMPORTANT: z/OS ptrace always returns 64-bit ESA/390 format PSW in the Psw field.
|
||||
// The 128-bit Pswg field is never populated, even with PSWG_Req bit set.
|
||||
// We convert ESA/390 to z/Architecture format in software (matching DBX behavior).
|
||||
const (
|
||||
numRequests = 3
|
||||
reqSize = int(unsafe.Sizeof(PtraceBlkReqReq{}))
|
||||
gprSize = int(unsafe.Sizeof(PtraceBlkGpr{}))
|
||||
uareaSize = int(unsafe.Sizeof(PtraceBlkUar{})) + 6*int(unsafe.Sizeof(PtraceBlkUarOcw{}))
|
||||
totalSize = int(unsafe.Sizeof(PtraceBlkReq{})) + numRequests*reqSize + gprSize*2 + uareaSize
|
||||
)
|
||||
|
||||
// Allocate buffer for block request
|
||||
buf := make([]byte, totalSize)
|
||||
|
||||
// Setup block request header
|
||||
blkReq := (*PtraceBlkReq)(unsafe.Pointer(&buf[0]))
|
||||
blkReq.Numreq = numRequests
|
||||
|
||||
// Setup request array
|
||||
reqOffset := int(unsafe.Sizeof(PtraceBlkReq{}))
|
||||
reqs := (*[3]PtraceBlkReqReq)(unsafe.Pointer(&buf[reqOffset]))
|
||||
|
||||
// Setup GPR block (lower 32 bits)
|
||||
gprOffset := reqOffset + numRequests*reqSize
|
||||
gprBlock := (*PtraceBlkGpr)(unsafe.Pointer(&buf[gprOffset]))
|
||||
|
||||
// Setup user area block (required for PSW)
|
||||
uareaOffset := gprOffset + gprSize
|
||||
uareaBlock := (*PtraceBlkUar)(unsafe.Pointer(&buf[uareaOffset]))
|
||||
uareaBlock.Num = 6 // Number of control info entries
|
||||
|
||||
// Setup user area offset/control words
|
||||
uareaOcw := (*[6]PtraceBlkUarOcw)(unsafe.Pointer(&buf[uareaOffset+int(unsafe.Sizeof(PtraceBlkUar{}))]))
|
||||
uareaOcw[0].Ofs = 1025 // program interrupt code
|
||||
uareaOcw[1].Ofs = 1026 // abend completion code
|
||||
uareaOcw[2].Ofs = 1027 // abend reason code
|
||||
uareaOcw[3].Ofs = 1028 // signal code
|
||||
uareaOcw[4].Ofs = 1029 // instruction length code
|
||||
uareaOcw[5].Ofs = 1030 // process flags
|
||||
|
||||
// Setup high GPR block (upper 32 bits)
|
||||
gprHighOffset := uareaOffset + uareaSize
|
||||
gprHighBlock := (*PtraceBlkGpr)(unsafe.Pointer(&buf[gprHighOffset]))
|
||||
|
||||
// Configure requests (order matters: GPR, U, GPRH)
|
||||
// reqdata contains OFFSET from buffer start, not absolute address
|
||||
// dbx: brr[0].reqdata=(unsigned long)brg; where brg is the offset
|
||||
reqs[0].Reqtype = PT_READ_GPR
|
||||
reqs[0].Reqdata = uint32(gprOffset)
|
||||
reqs[1].Reqtype = PT_READ_U
|
||||
reqs[1].Reqdata = uint32(uareaOffset)
|
||||
reqs[2].Reqtype = PT_READ_GPRH
|
||||
reqs[2].Reqdata = uint32(gprHighOffset)
|
||||
|
||||
// Execute block request
|
||||
rvBlk, rcBlk, rnBlk := Bpx4ptr(int32(PT_BLOCKREQ), int32(pid),
|
||||
unsafe.Pointer(&buf[0]), unsafe.Pointer(uintptr(totalSize)), nil)
|
||||
if rvBlk == -1 {
|
||||
return errnoErr2(Errno(rcBlk), uintptr(rnBlk))
|
||||
}
|
||||
|
||||
// Extract GPRs (combine low and high 32 bits)
|
||||
for i := 0; i < 16; i++ {
|
||||
low := uint64(gprBlock.Gpr[i])
|
||||
high := uint64(gprHighBlock.Gpr[i]) << 32
|
||||
regsout.Gprs[i] = high | low
|
||||
}
|
||||
|
||||
// Extract PSW from GPR block structure
|
||||
// z/OS ptrace ALWAYS returns 8-byte ESA/390 format PSW at offset 144.
|
||||
// The 16-byte PSWG field at offset 152 is NEVER populated (always zero).
|
||||
// We must convert ESA/390 format to z/Architecture format in software (like DBX does).
|
||||
//
|
||||
// ESA/390 PSW format (8 bytes):
|
||||
// Word 1 (bytes 0-3): Mask with bit 12 = 1 (ECMODE31BIT)
|
||||
// Word 2 (bytes 4-7): Address with bit 0 = AMODE bit (1=31-bit, 0=64-bit)
|
||||
//
|
||||
// z/Architecture PSW format (16 bytes):
|
||||
// Mask (bytes 0-7): Extended mask with bit 12 = 0, bits 31-32 = EA+BA (AMODE)
|
||||
// Addr (bytes 8-15): Full 64-bit instruction address
|
||||
|
||||
// Read ESA/390 PSW as two 32-bit words
|
||||
pswWord1 := uint32(gprBlock.Psw[0])<<24 | uint32(gprBlock.Psw[1])<<16 |
|
||||
uint32(gprBlock.Psw[2])<<8 | uint32(gprBlock.Psw[3])
|
||||
pswWord2 := uint32(gprBlock.Psw[4])<<24 | uint32(gprBlock.Psw[5])<<16 |
|
||||
uint32(gprBlock.Psw[6])<<8 | uint32(gprBlock.Psw[7])
|
||||
|
||||
// Convert ESA/390 to z/Architecture format (matching DBX psw_ESA390_to_zArchitecture)
|
||||
const ECMODE31BIT = uint64(0x0000000000080000)
|
||||
const AMODE31BIT = uint64(0x0000000080000000)
|
||||
const ADDR_MASK_31 = uint64(0x000000007FFFFFFF)
|
||||
|
||||
// Extract AMODE bit from address word (bit 0 of word 2)
|
||||
amode31 := uint64(pswWord2) & AMODE31BIT
|
||||
|
||||
// Mask off AMODE bit from address
|
||||
addr := uint64(pswWord2) & ADDR_MASK_31
|
||||
|
||||
// Convert mask: clear ECMODE31BIT, shift left 32 bits, add AMODE bit
|
||||
mask := uint64(pswWord1) & ^ECMODE31BIT
|
||||
mask = (mask << 32) | amode31
|
||||
|
||||
regsout.Psw.Mask = mask
|
||||
regsout.Psw.Addr = addr
|
||||
|
||||
// Note: Access registers (Acrs), floating point registers (Fp_regs),
|
||||
// PER info (Per_info), and other fields would require additional
|
||||
// PT_READ_* calls. For now, we focus on GPRs and PSW which are
|
||||
// the most commonly used registers for debugging.
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// ptraceWritePSW writes only the PSW address register.
|
||||
// This is a lower-level function used internally for single-stepping.
|
||||
// Based on ztrace's write_psw function.
|
||||
func ptraceWritePSW(pid int, pswAddr uint32) error {
|
||||
const PTRACE_REG_PSWA = 41
|
||||
rv, rc, rn := Bpx4ptr(int32(PT_WRITE_GPR), int32(pid),
|
||||
unsafe.Pointer(uintptr(PTRACE_REG_PSWA)),
|
||||
unsafe.Pointer(uintptr(pswAddr)),
|
||||
nil)
|
||||
if rv == -1 {
|
||||
return errnoErr2(Errno(rc), uintptr(rn))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// PtraceSetRegs sets the general purpose registers in the traced process.
|
||||
// Uses PT_BLOCKREQ to write GPRs and PSW in a single call, matching dbx implementation.
|
||||
// DIFFERENCE FROM LINUX: Linux uses PTRACE_SETREGSET with iovec, z/OS uses PT_BLOCKREQ.
|
||||
// NOTE: The process must be in a stopped state for register writes to succeed.
|
||||
func PtraceSetRegs(pid int, regs *PtraceRegs) (err error) {
|
||||
// Use PT_REGHSET to enable writing high GPRs for AMODE 64 programs
|
||||
rv, rc, rn := Bpx4ptr(int32(PT_REGHSET), int32(pid), nil, nil, nil)
|
||||
_ = rv
|
||||
_ = rc
|
||||
_ = rn
|
||||
|
||||
// Use PT_BLOCKREQ to write GPRs and PSW in one call
|
||||
const (
|
||||
numRequests = 2
|
||||
reqSize = int(unsafe.Sizeof(PtraceBlkReqReq{}))
|
||||
gprSize = int(unsafe.Sizeof(PtraceBlkGpr{}))
|
||||
totalSize = int(unsafe.Sizeof(PtraceBlkReq{})) + numRequests*reqSize + gprSize*2
|
||||
)
|
||||
|
||||
// Allocate buffer for block request
|
||||
buf := make([]byte, totalSize)
|
||||
|
||||
// Setup block request header
|
||||
blkReq := (*PtraceBlkReq)(unsafe.Pointer(&buf[0]))
|
||||
blkReq.Numreq = numRequests
|
||||
|
||||
// Setup request array
|
||||
reqOffset := int(unsafe.Sizeof(PtraceBlkReq{}))
|
||||
reqs := (*[2]PtraceBlkReqReq)(unsafe.Pointer(&buf[reqOffset]))
|
||||
|
||||
// Setup GPR block (lower 32 bits)
|
||||
gprOffset := reqOffset + numRequests*reqSize
|
||||
gprBlock := (*PtraceBlkGpr)(unsafe.Pointer(&buf[gprOffset]))
|
||||
|
||||
// Setup high GPR block (upper 32 bits)
|
||||
gprHighOffset := gprOffset + gprSize
|
||||
gprHighBlock := (*PtraceBlkGpr)(unsafe.Pointer(&buf[gprHighOffset]))
|
||||
|
||||
// Mark all GPRs as modified (set all 16 bits)
|
||||
gprBlock.Writebitflags = 0xFFFF
|
||||
gprHighBlock.Writebitflags = 0xFFFF
|
||||
|
||||
// Split 64-bit GPRs into low and high 32 bits
|
||||
for i := 0; i < 16; i++ {
|
||||
gprBlock.Gpr[i] = uint32(regs.Gprs[i] & 0xFFFFFFFF)
|
||||
gprHighBlock.Gpr[i] = uint32(regs.Gprs[i] >> 32)
|
||||
}
|
||||
|
||||
// Pack PSW for 31-bit targets (current z/OS)
|
||||
// Upper 32 bits = mask, lower 32 bits = address
|
||||
gprBlock.Wpsw = 1 // Mark PSW as modified
|
||||
// Write PSW in old format (8 bytes at offset 144)
|
||||
// Word 1 (mask) at bytes 0-3, Word 2 (addr) at bytes 4-7
|
||||
pswMask := uint32(regs.Psw.Mask)
|
||||
pswAddr := uint32(regs.Psw.Addr)
|
||||
gprBlock.Psw[0] = byte(pswMask >> 24)
|
||||
gprBlock.Psw[1] = byte(pswMask >> 16)
|
||||
gprBlock.Psw[2] = byte(pswMask >> 8)
|
||||
gprBlock.Psw[3] = byte(pswMask)
|
||||
gprBlock.Psw[4] = byte(pswAddr >> 24)
|
||||
gprBlock.Psw[5] = byte(pswAddr >> 16)
|
||||
gprBlock.Psw[6] = byte(pswAddr >> 8)
|
||||
gprBlock.Psw[7] = byte(pswAddr)
|
||||
|
||||
// Clear extended PSWG (not used for 31-bit targets)
|
||||
for i := 0; i < 16; i++ {
|
||||
gprBlock.Pswg[i] = 0
|
||||
}
|
||||
|
||||
// Configure requests
|
||||
// reqdata contains OFFSET from buffer start, not absolute address
|
||||
reqs[0].Reqtype = PT_WRITE_GPR
|
||||
reqs[0].Reqdata = uint32(gprOffset)
|
||||
reqs[1].Reqtype = PT_WRITE_GPRH
|
||||
reqs[1].Reqdata = uint32(gprHighOffset)
|
||||
|
||||
// Execute block request
|
||||
rvBlk, rcBlk, rnBlk := Bpx4ptr(int32(PT_BLOCKREQ), int32(pid),
|
||||
unsafe.Pointer(&buf[0]), unsafe.Pointer(uintptr(totalSize)), nil)
|
||||
if rvBlk == -1 {
|
||||
return errnoErr2(Errno(rcBlk), uintptr(rnBlk))
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// PtraceSetOptions sets ptrace options.
|
||||
// DIFFERENCE FROM LINUX: z/OS doesn't have PTRACE_SETOPTIONS equivalent.
|
||||
// Returns ENOSYS to indicate this is not supported on z/OS.
|
||||
func PtraceSetOptions(pid int, options int) (err error) {
|
||||
return ENOSYS
|
||||
}
|
||||
|
||||
// PtraceGetEventMsg retrieves a message about the ptrace event.
|
||||
// DIFFERENCE FROM LINUX: z/OS doesn't have PTRACE_GETEVENTMSG equivalent.
|
||||
// Returns ENOSYS to indicate this is not supported on z/OS.
|
||||
func PtraceGetEventMsg(pid int) (msg uint, err error) {
|
||||
return 0, ENOSYS
|
||||
}
|
||||
|
||||
// PtraceSyscall continues execution and stops at the next syscall entry/exit.
|
||||
// DIFFERENCE FROM LINUX: z/OS doesn't have PTRACE_SYSCALL equivalent.
|
||||
// This function falls back to PT_CONTINUE and will NOT stop at syscalls.
|
||||
//
|
||||
// To trace syscalls on z/OS, applications must:
|
||||
// 1. Set breakpoints at BPX syscall entry points (requires knowledge of syscall vector)
|
||||
// 2. Detect BASR instructions that call into the BPX syscall vector
|
||||
// 3. Use PT_LDINFO to identify loaded modules and their entry points
|
||||
func PtraceSyscall(pid int, signal int) (err error) {
|
||||
// z/OS doesn't have a direct PTRACE_SYSCALL equivalent
|
||||
// Use PT_CONTINUE as a fallback (won't stop at syscalls)
|
||||
return ptrace(PT_CONTINUE, pid, 0, uintptr(signal))
|
||||
}
|
||||
|
||||
// Note: PtraceSingleStep is implemented in ptrace_zos_singlestep.go
|
||||
// with full two-breakpoint emulation for branch instructions.
|
||||
|
||||
// PtraceInterrupt interrupts the traced process.
|
||||
// DIFFERENCE FROM LINUX: z/OS doesn't have PTRACE_INTERRUPT equivalent.
|
||||
// Returns ENOSYS to indicate this is not supported on z/OS.
|
||||
func PtraceInterrupt(pid int) (err error) {
|
||||
return ENOSYS
|
||||
}
|
||||
|
||||
// PtraceSeize attaches to a process without stopping it.
|
||||
// DIFFERENCE FROM LINUX: z/OS doesn't have PTRACE_SEIZE equivalent.
|
||||
// Uses PT_ATTACH as a fallback, which will stop the process.
|
||||
func PtraceSeize(pid int) (err error) {
|
||||
// z/OS doesn't have PTRACE_SEIZE, use PT_ATTACH
|
||||
// Note: This WILL stop the process, unlike Linux PTRACE_SEIZE
|
||||
return ptrace(PT_ATTACH, pid, 0, 0)
|
||||
}
|
||||
+425
@@ -0,0 +1,425 @@
|
||||
// Copyright 2024 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build zos
|
||||
|
||||
package unix
|
||||
|
||||
import (
|
||||
"sync"
|
||||
)
|
||||
|
||||
// Single-stepping emulation for z/OS
|
||||
//
|
||||
// z/OS does not have native single-step support like Linux's PTRACE_SINGLESTEP.
|
||||
// Instead, single-stepping must be emulated using temporary breakpoints.
|
||||
//
|
||||
// This file provides a complete implementation of single-step emulation using
|
||||
// temporary breakpoints at both the sequential next instruction and branch target.
|
||||
|
||||
const (
|
||||
// NO_BRANCH_DEST indicates the instruction is not a branch or cannot branch
|
||||
NO_BRANCH_DEST = 0xFFFFFFFF
|
||||
|
||||
// SVC_144 is the breakpoint instruction (SVC 144 = 0x0A90)
|
||||
SVC_144 = 0x0A90
|
||||
|
||||
// Maximum number of temporary breakpoints (one for next PC, one for branch dest)
|
||||
MAX_TEMP_BREAKPOINTS = 2
|
||||
|
||||
// S/390 branch instruction opcodes
|
||||
// RR format (Register-Register)
|
||||
opBCR = 0x07 // Branch on Condition Register
|
||||
opBALR = 0x05 // Branch and Link Register
|
||||
opBASR = 0x0D // Branch and Save Register
|
||||
opBASSM = 0x0C // Branch and Save and Set Mode
|
||||
opBSM = 0x0B // Branch and Set Mode
|
||||
opBCTR = 0x06 // Branch on Count Register
|
||||
|
||||
// RX format (Register-Index-Storage)
|
||||
opBC = 0x47 // Branch on Condition
|
||||
opBAL = 0x45 // Branch and Link
|
||||
opBCT = 0x46 // Branch on Count
|
||||
opBAS = 0x4D // Branch and Save
|
||||
|
||||
// RS format (Register-Storage)
|
||||
opBXH = 0x86 // Branch on Index High
|
||||
opBXLE = 0x87 // Branch on Index Low or Equal
|
||||
|
||||
// Extended branch opcodes
|
||||
opBA7 = 0xA7 // A7x series (BRC, BRAS, BRCT, BRCTG)
|
||||
opBC0 = 0xC0 // C0x series (BRASL, BRCL)
|
||||
opBEC = 0xEC // ECxx series (RIEc format: compare-and-branch)
|
||||
)
|
||||
|
||||
// tempBreakpoint represents a temporary breakpoint for single-stepping
|
||||
type tempBreakpoint struct {
|
||||
address uint64
|
||||
originalInsn [8]byte // Save up to 8 bytes (full instruction)
|
||||
active bool
|
||||
}
|
||||
|
||||
// singleStepState manages temporary breakpoints for a process
|
||||
type singleStepState struct {
|
||||
mu sync.Mutex
|
||||
breakpoints [MAX_TEMP_BREAKPOINTS]tempBreakpoint
|
||||
}
|
||||
|
||||
var (
|
||||
// Global map of process states (pid -> state)
|
||||
processStates = make(map[int]*singleStepState)
|
||||
processStatesMu sync.Mutex
|
||||
)
|
||||
|
||||
// getProcessState returns or creates the single-step state for a process
|
||||
func getProcessState(pid int) *singleStepState {
|
||||
processStatesMu.Lock()
|
||||
defer processStatesMu.Unlock()
|
||||
|
||||
state, exists := processStates[pid]
|
||||
if !exists {
|
||||
state = &singleStepState{}
|
||||
processStates[pid] = state
|
||||
}
|
||||
return state
|
||||
}
|
||||
|
||||
// cleanupProcessState removes the state for a process (call on detach)
|
||||
func cleanupProcessState(pid int) {
|
||||
processStatesMu.Lock()
|
||||
defer processStatesMu.Unlock()
|
||||
delete(processStates, pid)
|
||||
}
|
||||
|
||||
// GetInstructionLength returns the length of an S/390 instruction in bytes.
|
||||
func GetInstructionLength(firstByte byte) int {
|
||||
switch (firstByte >> 6) & 0x03 {
|
||||
case 0x00:
|
||||
return 2
|
||||
case 0x01, 0x02:
|
||||
return 4
|
||||
case 0x03:
|
||||
return 6
|
||||
default:
|
||||
return 2
|
||||
}
|
||||
}
|
||||
|
||||
// GetNextInstructionAddr returns the address of the next sequential instruction.
|
||||
func GetNextInstructionAddr(pc uint64, instruction []byte) uint64 {
|
||||
if len(instruction) < 1 {
|
||||
return pc + 2
|
||||
}
|
||||
insnLen := GetInstructionLength(instruction[0])
|
||||
return pc + uint64(insnLen)
|
||||
}
|
||||
|
||||
// CalculateBranchDest calculates the destination address for branch instructions.
|
||||
func CalculateBranchDest(pid int, pc uint64, instruction []byte) uint64 {
|
||||
if len(instruction) < 6 {
|
||||
return NO_BRANCH_DEST
|
||||
}
|
||||
|
||||
inst0_15 := uint16(instruction[0])<<8 | uint16(instruction[1])
|
||||
inst16_31 := uint16(instruction[2])<<8 | uint16(instruction[3])
|
||||
inst32_47 := uint16(instruction[4])<<8 | uint16(instruction[5])
|
||||
opcode := instruction[0]
|
||||
|
||||
var dest uint64 = NO_BRANCH_DEST
|
||||
|
||||
// RR format branches
|
||||
if opcode == opBCR || opcode == opBALR || opcode == opBASR ||
|
||||
opcode == opBASSM || opcode == opBSM || opcode == opBCTR {
|
||||
|
||||
r2 := int(inst0_15 & 0x0F)
|
||||
|
||||
if opcode == opBCR {
|
||||
mask := int((inst0_15 >> 4) & 0x0F)
|
||||
if mask == 0 || r2 == 0 {
|
||||
return NO_BRANCH_DEST
|
||||
}
|
||||
} else {
|
||||
if r2 == 0 {
|
||||
return NO_BRANCH_DEST
|
||||
}
|
||||
}
|
||||
|
||||
var regs PtraceRegs
|
||||
if err := PtraceGetRegs(pid, ®s); err == nil {
|
||||
if r2 >= 0 && r2 < 16 {
|
||||
regVal := regs.Gprs[r2]
|
||||
dest = regVal
|
||||
}
|
||||
}
|
||||
} else if opcode == opBC || opcode == opBAL || opcode == opBCT || opcode == opBAS {
|
||||
// RX format branches
|
||||
if opcode == opBC {
|
||||
mask := int((inst0_15 >> 4) & 0x0F)
|
||||
if mask == 0 {
|
||||
return NO_BRANCH_DEST
|
||||
}
|
||||
}
|
||||
|
||||
index := int(inst0_15 & 0x0F)
|
||||
base := int((inst16_31 >> 12) & 0x0F)
|
||||
displacement := uint32(inst16_31 & 0x0FFF)
|
||||
|
||||
var baseVal, indexVal uint64
|
||||
var regs PtraceRegs
|
||||
if err := PtraceGetRegs(pid, ®s); err == nil {
|
||||
if base != 0 && base < 16 {
|
||||
baseVal = regs.Gprs[base]
|
||||
}
|
||||
if index != 0 && index < 16 {
|
||||
indexVal = regs.Gprs[index]
|
||||
}
|
||||
}
|
||||
|
||||
if base == 0 && index == 0 {
|
||||
dest = pc + uint64(displacement)
|
||||
} else {
|
||||
dest = baseVal + indexVal + uint64(displacement)
|
||||
}
|
||||
} else if opcode == opBXH || opcode == opBXLE {
|
||||
// RS format branches
|
||||
base := int((inst16_31 >> 12) & 0x0F)
|
||||
displacement := uint32(inst16_31 & 0x0FFF)
|
||||
|
||||
var baseVal uint64
|
||||
var regs PtraceRegs
|
||||
if err := PtraceGetRegs(pid, ®s); err == nil {
|
||||
if base != 0 && base < 16 {
|
||||
baseVal = regs.Gprs[base]
|
||||
}
|
||||
}
|
||||
|
||||
dest = baseVal + uint64(displacement)
|
||||
} else if opcode == opBA7 {
|
||||
// RI format branches
|
||||
subOp := int(inst0_15 & 0x0F)
|
||||
|
||||
if subOp < 4 || subOp > 7 {
|
||||
return NO_BRANCH_DEST
|
||||
}
|
||||
|
||||
if subOp == 0x04 {
|
||||
mask := int((inst0_15 >> 4) & 0x0F)
|
||||
if mask == 0 {
|
||||
return NO_BRANCH_DEST
|
||||
}
|
||||
}
|
||||
|
||||
relDispl := int16(inst16_31)
|
||||
dest = uint64(int64(pc) + int64(relDispl)*2)
|
||||
} else if opcode == opBC0 {
|
||||
// RIL format branches
|
||||
subOp := int(inst0_15 & 0x0F)
|
||||
|
||||
if subOp == 0x04 || subOp == 0x05 {
|
||||
if subOp == 0x04 {
|
||||
mask := int((inst0_15 >> 4) & 0x0F)
|
||||
if mask == 0 {
|
||||
return NO_BRANCH_DEST
|
||||
}
|
||||
}
|
||||
|
||||
inst16_47 := (uint32(inst16_31) << 16) | uint32(inst32_47)
|
||||
relDispl4 := int32(inst16_47)
|
||||
dest = uint64(int64(pc) + int64(relDispl4)*2)
|
||||
}
|
||||
} else if opcode == opBEC {
|
||||
// RIEc format compare-and-branch
|
||||
subOp := instruction[4]
|
||||
|
||||
isCompareBranch := (subOp >= 0x64 && subOp <= 0x67) ||
|
||||
(subOp >= 0x76 && subOp <= 0x77) ||
|
||||
(subOp >= 0x7C && subOp <= 0x7F)
|
||||
|
||||
if isCompareBranch {
|
||||
ri4 := int16(inst16_31)
|
||||
dest = uint64(int64(pc) + int64(ri4)*2)
|
||||
}
|
||||
}
|
||||
|
||||
if dest < 0x2000 {
|
||||
return NO_BRANCH_DEST
|
||||
}
|
||||
|
||||
return dest
|
||||
}
|
||||
|
||||
// setTempBreakpoint sets a temporary breakpoint at the specified address
|
||||
func (s *singleStepState) setTempBreakpoint(pid int, addr uint64) error {
|
||||
s.mu.Lock()
|
||||
defer s.mu.Unlock()
|
||||
|
||||
// Find free slot
|
||||
slot := -1
|
||||
for i := 0; i < MAX_TEMP_BREAKPOINTS; i++ {
|
||||
if !s.breakpoints[i].active {
|
||||
slot = i
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if slot == -1 {
|
||||
return ENOMEM // All slots in use
|
||||
}
|
||||
|
||||
// Read original instruction (up to 8 bytes for safety)
|
||||
_, err := PtracePeekText(pid, uintptr(addr), s.breakpoints[slot].originalInsn[:])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Write SVC 144 (0x0A90) as breakpoint
|
||||
svc144 := []byte{0x0A, 0x90}
|
||||
_, err = PtracePokeText(pid, uintptr(addr), svc144)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
s.breakpoints[slot].address = addr
|
||||
s.breakpoints[slot].active = true
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// removeTempBreakpoints removes all active temporary breakpoints
|
||||
func (s *singleStepState) removeTempBreakpoints(pid int) error {
|
||||
s.mu.Lock()
|
||||
defer s.mu.Unlock()
|
||||
|
||||
var lastErr error
|
||||
for i := 0; i < MAX_TEMP_BREAKPOINTS; i++ {
|
||||
if !s.breakpoints[i].active {
|
||||
continue
|
||||
}
|
||||
|
||||
// Restore original instruction (first 2 bytes are enough for SVC 144)
|
||||
_, err := PtracePokeText(pid, uintptr(s.breakpoints[i].address), s.breakpoints[i].originalInsn[:2])
|
||||
if err != nil {
|
||||
lastErr = err
|
||||
}
|
||||
|
||||
s.breakpoints[i].active = false
|
||||
}
|
||||
|
||||
return lastErr
|
||||
}
|
||||
|
||||
// isTempBreakpoint checks if an address is a temporary breakpoint
|
||||
func (s *singleStepState) isTempBreakpoint(addr uint64) bool {
|
||||
s.mu.Lock()
|
||||
defer s.mu.Unlock()
|
||||
|
||||
for i := 0; i < MAX_TEMP_BREAKPOINTS; i++ {
|
||||
if s.breakpoints[i].active && s.breakpoints[i].address == addr {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// PtraceSingleStep executes a single instruction using temporary breakpoints.
|
||||
//
|
||||
// This function:
|
||||
// 1. Reads the current instruction at PSW
|
||||
// 2. Calculates the next instruction address (sequential)
|
||||
// 3. If branch instruction, calculates branch destination
|
||||
// 4. Sets temporary breakpoints at both addresses
|
||||
// 5. Continues execution until breakpoint hit
|
||||
// 6. Restores original instructions and adjusts PSW
|
||||
//
|
||||
// Returns nil on success, error on failure.
|
||||
func PtraceSingleStep(pid int) error {
|
||||
state := getProcessState(pid)
|
||||
|
||||
// 1. Get current PSW
|
||||
var regs PtraceRegs
|
||||
if err := PtraceGetRegs(pid, ®s); err != nil {
|
||||
return err
|
||||
}
|
||||
pc := regs.Psw.Addr
|
||||
|
||||
// 2. Read instruction at PC
|
||||
insn := make([]byte, 8)
|
||||
if _, err := PtracePeekText(pid, uintptr(pc), insn); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 3. Calculate next instruction addresses
|
||||
nextPC := GetNextInstructionAddr(pc, insn)
|
||||
branchDest := CalculateBranchDest(pid, pc, insn)
|
||||
|
||||
// 4. Set temporary breakpoints
|
||||
if err := state.setTempBreakpoint(pid, nextPC); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// If branch instruction, set breakpoint at branch destination too
|
||||
if branchDest != NO_BRANCH_DEST && branchDest != nextPC {
|
||||
if err := state.setTempBreakpoint(pid, branchDest); err != nil {
|
||||
state.removeTempBreakpoints(pid) // Cleanup first breakpoint
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// 5. Continue execution
|
||||
if err := PtraceCont(pid, 0); err != nil {
|
||||
state.removeTempBreakpoints(pid)
|
||||
return err
|
||||
}
|
||||
|
||||
// 6. Wait for breakpoint hit (retry on EINTR)
|
||||
var status WaitStatus
|
||||
for {
|
||||
_, err := Wait4(pid, &status, 0, nil)
|
||||
if err == EINTR {
|
||||
continue // Retry on interrupted system call
|
||||
}
|
||||
if err != nil {
|
||||
state.removeTempBreakpoints(pid)
|
||||
return err
|
||||
}
|
||||
break
|
||||
}
|
||||
|
||||
// Check if process stopped (should be at breakpoint)
|
||||
if !status.Stopped() {
|
||||
state.removeTempBreakpoints(pid)
|
||||
return ECHILD // Process exited or error
|
||||
}
|
||||
|
||||
// 7. Get current PSW (should be at breakpoint + 2)
|
||||
if err := PtraceGetRegs(pid, ®s); err != nil {
|
||||
state.removeTempBreakpoints(pid)
|
||||
return err
|
||||
}
|
||||
|
||||
// 8. Remove temporary breakpoints
|
||||
if err := state.removeTempBreakpoints(pid); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// 9. Back up PSW by 2 bytes (to point at original instruction, not SVC 144)
|
||||
// Use direct PSW write like ztrace does, not full register set
|
||||
hitAddr := regs.Psw.Addr
|
||||
if state.isTempBreakpoint(hitAddr - 2) {
|
||||
if err := ptraceWritePSW(pid, uint32(hitAddr-2)); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// PtraceDetachWithCleanup detaches from a process and cleans up single-step state.
|
||||
// Use this instead of PtraceDetach when using PtraceSingleStep.
|
||||
func PtraceDetachWithCleanup(pid int) error {
|
||||
state := getProcessState(pid)
|
||||
state.removeTempBreakpoints(pid)
|
||||
cleanupProcessState(pid)
|
||||
return PtraceDetach(pid)
|
||||
}
|
||||
+1
@@ -369,6 +369,7 @@ func Flistxattr(fd int, dest []byte) (sz int, err error) {
|
||||
*/
|
||||
|
||||
//sys fcntl(fd int, cmd int, arg int) (val int, err error)
|
||||
//sys fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (val int, err error) = SYS_FCNTL
|
||||
|
||||
//sys kill(pid int, signum int, posix int) (err error)
|
||||
|
||||
|
||||
+9
@@ -369,6 +369,15 @@ func Dup3(oldfd, newfd, flags int) error {
|
||||
//sys ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
|
||||
//sys ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error)
|
||||
//sys ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error)
|
||||
//sys extattrGetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error)
|
||||
//sys extattrSetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error)
|
||||
//sys extattrListFd(fd int, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error)
|
||||
//sys extattrGetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error)
|
||||
//sys extattrSetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error)
|
||||
//sys extattrListFile(file string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error)
|
||||
//sys extattrGetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error)
|
||||
//sys extattrSetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error)
|
||||
//sys extattrListLink(link string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error)
|
||||
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_POSIX_FADVISE
|
||||
//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
|
||||
//sys Fchdir(fd int) (err error)
|
||||
|
||||
+20
-1
@@ -1991,7 +1991,24 @@ func FsconfigReconfigure(fd int) (err error) {
|
||||
return fsconfig(fd, FSCONFIG_CMD_RECONFIGURE, nil, nil, 0)
|
||||
}
|
||||
|
||||
//sys Getdents(fd int, buf []byte) (n int, err error) = SYS_GETDENTS64
|
||||
//sys getdents(fd int, buf []byte) (n int, err error) = SYS_GETDENTS64
|
||||
|
||||
// Getdents reads directory entries from fd into buf.
|
||||
func Getdents(fd int, buf []byte) (n int, err error) {
|
||||
// getdents64 stores d_ino with a 64-bit write, which faults on
|
||||
// strict-alignment targets unless buf is 8-aligned.
|
||||
if len(buf) > 0 {
|
||||
if off := int(-uintptr(unsafe.Pointer(&buf[0])) & 7); off > 0 && off < len(buf) {
|
||||
n, err = getdents(fd, buf[off:])
|
||||
if n > 0 {
|
||||
copy(buf, buf[off:off+n])
|
||||
}
|
||||
return n, err
|
||||
}
|
||||
}
|
||||
return getdents(fd, buf)
|
||||
}
|
||||
|
||||
//sysnb Getpgid(pid int) (pgid int, err error)
|
||||
|
||||
func Getpgrp() (pid int) {
|
||||
@@ -2033,6 +2050,7 @@ func Getrandom(buf []byte, flags int) (n int, err error) {
|
||||
//sysnb Kill(pid int, sig syscall.Signal) (err error)
|
||||
//sys Klogctl(typ int, buf []byte) (n int, err error) = SYS_SYSLOG
|
||||
//sys Lgetxattr(path string, attr string, dest []byte) (sz int, err error)
|
||||
//sys Listns(req *NsIdReq, nsIds []uint64, flags uint) (n int, err error)
|
||||
//sys Listxattr(path string, dest []byte) (sz int, err error)
|
||||
//sys Llistxattr(path string, dest []byte) (sz int, err error)
|
||||
//sys Lremovexattr(path string, attr string) (err error)
|
||||
@@ -2046,6 +2064,7 @@ func Getrandom(buf []byte, flags int) (n int, err error) {
|
||||
//sys PerfEventOpen(attr *PerfEventAttr, pid int, cpu int, groupFd int, flags int) (fd int, err error)
|
||||
//sys PivotRoot(newroot string, putold string) (err error) = SYS_PIVOT_ROOT
|
||||
//sys Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (err error)
|
||||
//sys PrctlArg5Ptr(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 unsafe.Pointer) (err error) = SYS_PRCTL
|
||||
//sys pselect6(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *sigset_argpack) (n int, err error)
|
||||
//sys read(fd int, p []byte) (n int, err error)
|
||||
//sys Removexattr(path string, attr string) (err error)
|
||||
|
||||
+3
-3
@@ -8,7 +8,7 @@ package unix
|
||||
|
||||
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_FADVISE64
|
||||
//sys Fchown(fd int, uid int, gid int) (err error)
|
||||
//sys Fstat(fd int, stat *Stat_t) (err error)
|
||||
//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64
|
||||
//sys Fstatat(dirfd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64
|
||||
//sys Fstatfs(fd int, buf *Statfs_t) (err error)
|
||||
//sys Ftruncate(fd int, length int64) (err error)
|
||||
@@ -19,7 +19,7 @@ package unix
|
||||
//sysnb Getuid() (uid int)
|
||||
//sys Lchown(path string, uid int, gid int) (err error)
|
||||
//sys Listen(s int, n int) (err error)
|
||||
//sys Lstat(path string, stat *Stat_t) (err error)
|
||||
//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64
|
||||
//sys Pause() (err error)
|
||||
//sys pread(fd int, p []byte, offset int64) (n int, err error) = SYS_PREAD64
|
||||
//sys pwrite(fd int, p []byte, offset int64) (n int, err error) = SYS_PWRITE64
|
||||
@@ -31,7 +31,7 @@ package unix
|
||||
//sys setfsuid(uid int) (prev int, err error)
|
||||
//sys Shutdown(fd int, how int) (err error)
|
||||
//sys Splice(rfd int, roff *int64, wfd int, woff *int64, len int, flags int) (n int64, err error)
|
||||
//sys Stat(path string, stat *Stat_t) (err error)
|
||||
//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64
|
||||
//sys Statfs(path string, buf *Statfs_t) (err error)
|
||||
//sys SyncFileRange(fd int, off int64, n int64, flags int) (err error)
|
||||
//sys Truncate(path string, length int64) (err error)
|
||||
|
||||
+9
@@ -293,6 +293,15 @@ func Getvfsstat(buf []Statvfs_t, flags int) (n int, err error) {
|
||||
//sys ExtattrSetLink(link string, attrnamespace int, attrname string, data uintptr, nbytes int) (ret int, err error)
|
||||
//sys ExtattrDeleteLink(link string, attrnamespace int, attrname string) (err error)
|
||||
//sys ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (ret int, err error)
|
||||
//sys extattrGetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error)
|
||||
//sys extattrSetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error)
|
||||
//sys extattrListFd(fd int, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error)
|
||||
//sys extattrGetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error)
|
||||
//sys extattrSetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error)
|
||||
//sys extattrListFile(file string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error)
|
||||
//sys extattrGetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error)
|
||||
//sys extattrSetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error)
|
||||
//sys extattrListLink(link string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error)
|
||||
//sys Faccessat(dirfd int, path string, mode uint32, flags int) (err error)
|
||||
//sys Fadvise(fd int, offset int64, length int64, advice int) (err error) = SYS_POSIX_FADVISE
|
||||
//sys Fchdir(fd int) (err error)
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build (darwin || dragonfly || freebsd || (linux && !ppc64 && !ppc64le) || netbsd || openbsd || solaris) && gc
|
||||
//go:build (darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris) && gc
|
||||
|
||||
package unix
|
||||
|
||||
|
||||
-22
@@ -1,22 +0,0 @@
|
||||
// Copyright 2018 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
//go:build linux && (ppc64le || ppc64) && gc
|
||||
|
||||
package unix
|
||||
|
||||
import "syscall"
|
||||
|
||||
func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {
|
||||
return syscall.Syscall(trap, a1, a2, a3)
|
||||
}
|
||||
func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) {
|
||||
return syscall.Syscall6(trap, a1, a2, a3, a4, a5, a6)
|
||||
}
|
||||
func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err syscall.Errno) {
|
||||
return syscall.RawSyscall(trap, a1, a2, a3)
|
||||
}
|
||||
func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err syscall.Errno) {
|
||||
return syscall.RawSyscall6(trap, a1, a2, a3, a4, a5, a6)
|
||||
}
|
||||
-4
@@ -27,14 +27,10 @@ import (
|
||||
"unsafe"
|
||||
)
|
||||
|
||||
//go:noescape
|
||||
func initZosLibVec()
|
||||
|
||||
//go:noescape
|
||||
func GetZosLibVec() uintptr
|
||||
|
||||
func init() {
|
||||
initZosLibVec()
|
||||
r0, _, _ := CallLeFuncWithPtrReturn(GetZosLibVec()+SYS_____GETENV_A<<4, uintptr(unsafe.Pointer(&([]byte("__ZOS_XSYSTRACE\x00"))[0])))
|
||||
if r0 != 0 {
|
||||
n, _, _ := CallLeFuncWithPtrReturn(GetZosLibVec()+SYS___ATOI_A<<4, r0)
|
||||
|
||||
+12
-12
@@ -56,7 +56,7 @@ func Getxattr(file string, attr string, dest []byte) (sz int, err error) {
|
||||
return -1, err
|
||||
}
|
||||
|
||||
return ExtattrGetFile(file, nsid, a, uintptr(d), destsize)
|
||||
return extattrGetFile(file, nsid, a, d, destsize)
|
||||
}
|
||||
|
||||
func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
|
||||
@@ -68,7 +68,7 @@ func Fgetxattr(fd int, attr string, dest []byte) (sz int, err error) {
|
||||
return -1, err
|
||||
}
|
||||
|
||||
return ExtattrGetFd(fd, nsid, a, uintptr(d), destsize)
|
||||
return extattrGetFd(fd, nsid, a, d, destsize)
|
||||
}
|
||||
|
||||
func Lgetxattr(link string, attr string, dest []byte) (sz int, err error) {
|
||||
@@ -80,7 +80,7 @@ func Lgetxattr(link string, attr string, dest []byte) (sz int, err error) {
|
||||
return -1, err
|
||||
}
|
||||
|
||||
return ExtattrGetLink(link, nsid, a, uintptr(d), destsize)
|
||||
return extattrGetLink(link, nsid, a, d, destsize)
|
||||
}
|
||||
|
||||
// flags are unused on FreeBSD
|
||||
@@ -97,7 +97,7 @@ func Fsetxattr(fd int, attr string, data []byte, flags int) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
_, err = ExtattrSetFd(fd, nsid, a, uintptr(d), datasiz)
|
||||
_, err = extattrSetFd(fd, nsid, a, d, datasiz)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -113,7 +113,7 @@ func Setxattr(file string, attr string, data []byte, flags int) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
_, err = ExtattrSetFile(file, nsid, a, uintptr(d), datasiz)
|
||||
_, err = extattrSetFile(file, nsid, a, d, datasiz)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -129,7 +129,7 @@ func Lsetxattr(link string, attr string, data []byte, flags int) (err error) {
|
||||
return
|
||||
}
|
||||
|
||||
_, err = ExtattrSetLink(link, nsid, a, uintptr(d), datasiz)
|
||||
_, err = extattrSetLink(link, nsid, a, d, datasiz)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -199,9 +199,9 @@ func ListxattrNS(file string, nsid int, dest []byte) (sz int, err error) {
|
||||
d := initxattrdest(dest, 0)
|
||||
destsiz := len(dest)
|
||||
|
||||
s, e := ExtattrListFile(file, nsid, uintptr(d), destsiz)
|
||||
s, e := extattrListFile(file, nsid, d, destsiz)
|
||||
if e != nil {
|
||||
return 0, err
|
||||
return 0, e
|
||||
}
|
||||
|
||||
return s, nil
|
||||
@@ -235,9 +235,9 @@ func FlistxattrNS(fd int, nsid int, dest []byte) (sz int, err error) {
|
||||
d := initxattrdest(dest, 0)
|
||||
destsiz := len(dest)
|
||||
|
||||
s, e := ExtattrListFd(fd, nsid, uintptr(d), destsiz)
|
||||
s, e := extattrListFd(fd, nsid, d, destsiz)
|
||||
if e != nil {
|
||||
return 0, err
|
||||
return 0, e
|
||||
}
|
||||
|
||||
return s, nil
|
||||
@@ -271,9 +271,9 @@ func LlistxattrNS(link string, nsid int, dest []byte) (sz int, err error) {
|
||||
d := initxattrdest(dest, 0)
|
||||
destsiz := len(dest)
|
||||
|
||||
s, e := ExtattrListLink(link, nsid, uintptr(d), destsiz)
|
||||
s, e := extattrListLink(link, nsid, d, destsiz)
|
||||
if e != nil {
|
||||
return 0, err
|
||||
return 0, e
|
||||
}
|
||||
|
||||
return s, nil
|
||||
|
||||
+6
@@ -1128,6 +1128,7 @@ const (
|
||||
O_DSYNC = 0x400000
|
||||
O_EVTONLY = 0x8000
|
||||
O_EXCL = 0x800
|
||||
O_EXEC = 0x40000000
|
||||
O_EXLOCK = 0x20
|
||||
O_FSYNC = 0x80
|
||||
O_NDELAY = 0x4
|
||||
@@ -1138,6 +1139,7 @@ const (
|
||||
O_POPUP = 0x80000000
|
||||
O_RDONLY = 0x0
|
||||
O_RDWR = 0x2
|
||||
O_SEARCH = 0x40100000
|
||||
O_SHLOCK = 0x10
|
||||
O_SYMLINK = 0x200000
|
||||
O_SYNC = 0x80
|
||||
@@ -1147,6 +1149,10 @@ const (
|
||||
PARMRK = 0x8
|
||||
PARODD = 0x2000
|
||||
PENDIN = 0x20000000
|
||||
PRIO_DARWIN_BG = 0x1000
|
||||
PRIO_DARWIN_NONUI = 0x1001
|
||||
PRIO_DARWIN_PROCESS = 0x4
|
||||
PRIO_DARWIN_THREAD = 0x3
|
||||
PRIO_PGRP = 0x1
|
||||
PRIO_PROCESS = 0x0
|
||||
PRIO_USER = 0x2
|
||||
|
||||
+6
@@ -1128,6 +1128,7 @@ const (
|
||||
O_DSYNC = 0x400000
|
||||
O_EVTONLY = 0x8000
|
||||
O_EXCL = 0x800
|
||||
O_EXEC = 0x40000000
|
||||
O_EXLOCK = 0x20
|
||||
O_FSYNC = 0x80
|
||||
O_NDELAY = 0x4
|
||||
@@ -1138,6 +1139,7 @@ const (
|
||||
O_POPUP = 0x80000000
|
||||
O_RDONLY = 0x0
|
||||
O_RDWR = 0x2
|
||||
O_SEARCH = 0x40100000
|
||||
O_SHLOCK = 0x10
|
||||
O_SYMLINK = 0x200000
|
||||
O_SYNC = 0x80
|
||||
@@ -1147,6 +1149,10 @@ const (
|
||||
PARMRK = 0x8
|
||||
PARODD = 0x2000
|
||||
PENDIN = 0x20000000
|
||||
PRIO_DARWIN_BG = 0x1000
|
||||
PRIO_DARWIN_NONUI = 0x1001
|
||||
PRIO_DARWIN_PROCESS = 0x4
|
||||
PRIO_DARWIN_THREAD = 0x3
|
||||
PRIO_PGRP = 0x1
|
||||
PRIO_PROCESS = 0x0
|
||||
PRIO_USER = 0x2
|
||||
|
||||
+32
@@ -752,10 +752,12 @@ const (
|
||||
CLONE_ARGS_SIZE_VER0 = 0x40
|
||||
CLONE_ARGS_SIZE_VER1 = 0x50
|
||||
CLONE_ARGS_SIZE_VER2 = 0x58
|
||||
CLONE_AUTOREAP = 0x400000000
|
||||
CLONE_CHILD_CLEARTID = 0x200000
|
||||
CLONE_CHILD_SETTID = 0x1000000
|
||||
CLONE_CLEAR_SIGHAND = 0x100000000
|
||||
CLONE_DETACHED = 0x400000
|
||||
CLONE_EMPTY_MNTNS = 0x2000000000
|
||||
CLONE_FILES = 0x400
|
||||
CLONE_FS = 0x200
|
||||
CLONE_INTO_CGROUP = 0x200000000
|
||||
@@ -768,9 +770,11 @@ const (
|
||||
CLONE_NEWTIME = 0x80
|
||||
CLONE_NEWUSER = 0x10000000
|
||||
CLONE_NEWUTS = 0x4000000
|
||||
CLONE_NNP = 0x800000000
|
||||
CLONE_PARENT = 0x8000
|
||||
CLONE_PARENT_SETTID = 0x100000
|
||||
CLONE_PIDFD = 0x1000
|
||||
CLONE_PIDFD_AUTOKILL = 0x1000000000
|
||||
CLONE_PTRACE = 0x2000
|
||||
CLONE_SETTLS = 0x80000
|
||||
CLONE_SIGHAND = 0x800
|
||||
@@ -803,12 +807,15 @@ const (
|
||||
DEVLINK_GENL_MCGRP_CONFIG_NAME = "config"
|
||||
DEVLINK_GENL_NAME = "devlink"
|
||||
DEVLINK_GENL_VERSION = 0x1
|
||||
DEVLINK_INDEX_BUS_NAME = "devlink_index"
|
||||
DEVLINK_PORT_FN_CAP_IPSEC_CRYPTO = 0x4
|
||||
DEVLINK_PORT_FN_CAP_IPSEC_PACKET = 0x8
|
||||
DEVLINK_PORT_FN_CAP_MIGRATABLE = 0x2
|
||||
DEVLINK_PORT_FN_CAP_ROCE = 0x1
|
||||
DEVLINK_RATE_TCS_MAX = 0x8
|
||||
DEVLINK_RATE_TC_INDEX_MAX = 0x7
|
||||
DEVLINK_RESOURCE_SCOPE_DEV = 0x1
|
||||
DEVLINK_RESOURCE_SCOPE_PORT = 0x2
|
||||
DEVLINK_SB_THRESHOLD_TO_ALPHA_MAX = 0x14
|
||||
DEVLINK_SUPPORTED_FLASH_OVERWRITE_SECTIONS = 0x3
|
||||
DEVMEM_MAGIC = 0x454d444d
|
||||
@@ -1127,6 +1134,7 @@ const (
|
||||
ETHTOOL_SWOL = 0x6
|
||||
ETHTOOL_TEST = 0x1a
|
||||
ETH_P_1588 = 0x88f7
|
||||
ETH_P_8021AC = 0x8870
|
||||
ETH_P_8021AD = 0x88a8
|
||||
ETH_P_8021AH = 0x88e7
|
||||
ETH_P_8021Q = 0x8100
|
||||
@@ -1170,6 +1178,7 @@ const (
|
||||
ETH_P_ETHERCAT = 0x88a4
|
||||
ETH_P_FCOE = 0x8906
|
||||
ETH_P_FIP = 0x8914
|
||||
ETH_P_GRE_OSI = 0xfe
|
||||
ETH_P_HDLC = 0x19
|
||||
ETH_P_HSR = 0x892f
|
||||
ETH_P_IBOE = 0x8915
|
||||
@@ -1198,6 +1207,7 @@ const (
|
||||
ETH_P_MXLGSW = 0x88c3
|
||||
ETH_P_NCSI = 0x88f8
|
||||
ETH_P_NSH = 0x894f
|
||||
ETH_P_NXP_NETC = 0xfd3a
|
||||
ETH_P_PAE = 0x888e
|
||||
ETH_P_PAUSE = 0x8808
|
||||
ETH_P_PHONET = 0xf5
|
||||
@@ -1359,6 +1369,7 @@ const (
|
||||
FAN_UNLIMITED_MARKS = 0x20
|
||||
FAN_UNLIMITED_QUEUE = 0x10
|
||||
FD_CLOEXEC = 0x1
|
||||
FD_NSFS_ROOT = -0x2713
|
||||
FD_PIDFS_ROOT = -0x2712
|
||||
FD_SETSIZE = 0x400
|
||||
FF0 = 0x0
|
||||
@@ -1427,6 +1438,8 @@ const (
|
||||
FS_POLICY_FLAGS_PAD_8 = 0x1
|
||||
FS_POLICY_FLAGS_PAD_MASK = 0x3
|
||||
FS_POLICY_FLAGS_VALID = 0x7
|
||||
FS_SHUTDOWN_FLAGS_LOGFLUSH = 0x1
|
||||
FS_SHUTDOWN_FLAGS_NOLOGFLUSH = 0x2
|
||||
FS_VERITY_FL = 0x100000
|
||||
FS_VERITY_HASH_ALG_SHA256 = 0x1
|
||||
FS_VERITY_HASH_ALG_SHA512 = 0x2
|
||||
@@ -1441,6 +1454,7 @@ const (
|
||||
F_DUPFD_CLOEXEC = 0x406
|
||||
F_DUPFD_QUERY = 0x403
|
||||
F_EXLCK = 0x4
|
||||
F_GETDELEG = 0x40f
|
||||
F_GETFD = 0x1
|
||||
F_GETFL = 0x3
|
||||
F_GETLEASE = 0x401
|
||||
@@ -1462,6 +1476,7 @@ const (
|
||||
F_SEAL_SEAL = 0x1
|
||||
F_SEAL_SHRINK = 0x2
|
||||
F_SEAL_WRITE = 0x8
|
||||
F_SETDELEG = 0x410
|
||||
F_SETFD = 0x2
|
||||
F_SETFL = 0x4
|
||||
F_SETLEASE = 0x400
|
||||
@@ -1632,6 +1647,7 @@ const (
|
||||
IN_UNMOUNT = 0x2000
|
||||
IOCTL_MEI_CONNECT_CLIENT = 0xc0104801
|
||||
IOCTL_MEI_CONNECT_CLIENT_VTAG = 0xc0144804
|
||||
IPPROTO_AGGFRAG = 0x90
|
||||
IPPROTO_AH = 0x33
|
||||
IPPROTO_BEETPH = 0x5e
|
||||
IPPROTO_COMP = 0x6c
|
||||
@@ -1913,10 +1929,14 @@ const (
|
||||
LANDLOCK_ACCESS_FS_REFER = 0x2000
|
||||
LANDLOCK_ACCESS_FS_REMOVE_DIR = 0x10
|
||||
LANDLOCK_ACCESS_FS_REMOVE_FILE = 0x20
|
||||
LANDLOCK_ACCESS_FS_RESOLVE_UNIX = 0x10000
|
||||
LANDLOCK_ACCESS_FS_TRUNCATE = 0x4000
|
||||
LANDLOCK_ACCESS_FS_WRITE_FILE = 0x2
|
||||
LANDLOCK_ACCESS_NET_BIND_TCP = 0x1
|
||||
LANDLOCK_ACCESS_NET_BIND_UDP = 0x4
|
||||
LANDLOCK_ACCESS_NET_CONNECT_SEND_UDP = 0x8
|
||||
LANDLOCK_ACCESS_NET_CONNECT_TCP = 0x2
|
||||
LANDLOCK_ADD_RULE_QUIET = 0x1
|
||||
LANDLOCK_CREATE_RULESET_ERRATA = 0x2
|
||||
LANDLOCK_CREATE_RULESET_VERSION = 0x1
|
||||
LANDLOCK_RESTRICT_SELF_LOG_NEW_EXEC_ON = 0x2
|
||||
@@ -3408,6 +3428,7 @@ const (
|
||||
SCHED_FLAG_UTIL_CLAMP = 0x60
|
||||
SCHED_FLAG_UTIL_CLAMP_MAX = 0x40
|
||||
SCHED_FLAG_UTIL_CLAMP_MIN = 0x20
|
||||
SCHED_GETATTR_FLAG_DL_DYNAMIC = 0x1
|
||||
SCHED_IDLE = 0x5
|
||||
SCHED_NORMAL = 0x0
|
||||
SCHED_RESET_ON_FORK = 0x40000000
|
||||
@@ -3790,6 +3811,14 @@ const (
|
||||
TCPOPT_TIMESTAMP = 0x8
|
||||
TCPOPT_TSTAMP_HDR = 0x101080a
|
||||
TCPOPT_WINDOW = 0x3
|
||||
TCP_ACCECN_ACE_FAIL_RECV = 0x2
|
||||
TCP_ACCECN_ACE_FAIL_SEND = 0x1
|
||||
TCP_ACCECN_OPT_COUNTER_SEEN = 0x2
|
||||
TCP_ACCECN_OPT_EMPTY_SEEN = 0x1
|
||||
TCP_ACCECN_OPT_FAIL_RECV = 0x8
|
||||
TCP_ACCECN_OPT_FAIL_SEEN = 0x3
|
||||
TCP_ACCECN_OPT_FAIL_SEND = 0x4
|
||||
TCP_ACCECN_OPT_NOT_SEEN = 0x0
|
||||
TCP_AO_KEYF_EXCLUDE_OPT = 0x2
|
||||
TCP_AO_KEYF_IFINDEX = 0x1
|
||||
TCP_AO_MAXKEYLEN = 0x50
|
||||
@@ -3804,6 +3833,7 @@ const (
|
||||
TCP_COOKIE_TRANSACTIONS = 0xf
|
||||
TCP_CORK = 0x3
|
||||
TCP_DEFER_ACCEPT = 0x9
|
||||
TCP_DELACK_MAX_US = 0x2e
|
||||
TCP_FASTOPEN = 0x17
|
||||
TCP_FASTOPEN_CONNECT = 0x1e
|
||||
TCP_FASTOPEN_KEY = 0x21
|
||||
@@ -3836,6 +3866,8 @@ const (
|
||||
TCP_REPAIR_OPTIONS = 0x16
|
||||
TCP_REPAIR_QUEUE = 0x14
|
||||
TCP_REPAIR_WINDOW = 0x1d
|
||||
TCP_RTO_MAX_MS = 0x2c
|
||||
TCP_RTO_MIN_US = 0x2d
|
||||
TCP_SAVED_SYN = 0x1c
|
||||
TCP_SAVE_SYN = 0x1b
|
||||
TCP_SYNCNT = 0x7
|
||||
|
||||
+2
@@ -600,6 +600,7 @@ const (
|
||||
EDQUOT = syscall.Errno(0x7a)
|
||||
EFSBADCRC = syscall.Errno(0x4a)
|
||||
EFSCORRUPTED = syscall.Errno(0x75)
|
||||
EFTYPE = syscall.Errno(0x86)
|
||||
EHOSTDOWN = syscall.Errno(0x70)
|
||||
EHOSTUNREACH = syscall.Errno(0x71)
|
||||
EHWPOISON = syscall.Errno(0x85)
|
||||
@@ -840,6 +841,7 @@ var errorList = [...]struct {
|
||||
{131, "ENOTRECOVERABLE", "state not recoverable"},
|
||||
{132, "ERFKILL", "operation not possible due to RF-kill"},
|
||||
{133, "EHWPOISON", "memory page has hardware error"},
|
||||
{134, "EFTYPE", "unknown error 134"},
|
||||
}
|
||||
|
||||
// Signal table
|
||||
|
||||
+2
@@ -600,6 +600,7 @@ const (
|
||||
EDQUOT = syscall.Errno(0x7a)
|
||||
EFSBADCRC = syscall.Errno(0x4a)
|
||||
EFSCORRUPTED = syscall.Errno(0x75)
|
||||
EFTYPE = syscall.Errno(0x86)
|
||||
EHOSTDOWN = syscall.Errno(0x70)
|
||||
EHOSTUNREACH = syscall.Errno(0x71)
|
||||
EHWPOISON = syscall.Errno(0x85)
|
||||
@@ -840,6 +841,7 @@ var errorList = [...]struct {
|
||||
{131, "ENOTRECOVERABLE", "state not recoverable"},
|
||||
{132, "ERFKILL", "operation not possible due to RF-kill"},
|
||||
{133, "EHWPOISON", "memory page has hardware error"},
|
||||
{134, "EFTYPE", "unknown error 134"},
|
||||
}
|
||||
|
||||
// Signal table
|
||||
|
||||
+2
@@ -605,6 +605,7 @@ const (
|
||||
EDQUOT = syscall.Errno(0x7a)
|
||||
EFSBADCRC = syscall.Errno(0x4a)
|
||||
EFSCORRUPTED = syscall.Errno(0x75)
|
||||
EFTYPE = syscall.Errno(0x86)
|
||||
EHOSTDOWN = syscall.Errno(0x70)
|
||||
EHOSTUNREACH = syscall.Errno(0x71)
|
||||
EHWPOISON = syscall.Errno(0x85)
|
||||
@@ -845,6 +846,7 @@ var errorList = [...]struct {
|
||||
{131, "ENOTRECOVERABLE", "state not recoverable"},
|
||||
{132, "ERFKILL", "operation not possible due to RF-kill"},
|
||||
{133, "EHWPOISON", "memory page has hardware error"},
|
||||
{134, "EFTYPE", "unknown error 134"},
|
||||
}
|
||||
|
||||
// Signal table
|
||||
|
||||
+2
@@ -602,6 +602,7 @@ const (
|
||||
EDQUOT = syscall.Errno(0x7a)
|
||||
EFSBADCRC = syscall.Errno(0x4a)
|
||||
EFSCORRUPTED = syscall.Errno(0x75)
|
||||
EFTYPE = syscall.Errno(0x86)
|
||||
EHOSTDOWN = syscall.Errno(0x70)
|
||||
EHOSTUNREACH = syscall.Errno(0x71)
|
||||
EHWPOISON = syscall.Errno(0x85)
|
||||
@@ -842,6 +843,7 @@ var errorList = [...]struct {
|
||||
{131, "ENOTRECOVERABLE", "state not recoverable"},
|
||||
{132, "ERFKILL", "operation not possible due to RF-kill"},
|
||||
{133, "EHWPOISON", "memory page has hardware error"},
|
||||
{134, "EFTYPE", "unknown error 134"},
|
||||
}
|
||||
|
||||
// Signal table
|
||||
|
||||
+2
@@ -592,6 +592,7 @@ const (
|
||||
EDQUOT = syscall.Errno(0x7a)
|
||||
EFSBADCRC = syscall.Errno(0x4a)
|
||||
EFSCORRUPTED = syscall.Errno(0x75)
|
||||
EFTYPE = syscall.Errno(0x86)
|
||||
EHOSTDOWN = syscall.Errno(0x70)
|
||||
EHOSTUNREACH = syscall.Errno(0x71)
|
||||
EHWPOISON = syscall.Errno(0x85)
|
||||
@@ -832,6 +833,7 @@ var errorList = [...]struct {
|
||||
{131, "ENOTRECOVERABLE", "state not recoverable"},
|
||||
{132, "ERFKILL", "operation not possible due to RF-kill"},
|
||||
{133, "EHWPOISON", "memory page has hardware error"},
|
||||
{134, "EFTYPE", "unknown error 134"},
|
||||
}
|
||||
|
||||
// Signal table
|
||||
|
||||
+2
@@ -601,6 +601,7 @@ const (
|
||||
EDQUOT = syscall.Errno(0x46d)
|
||||
EFSBADCRC = syscall.Errno(0x4d)
|
||||
EFSCORRUPTED = syscall.Errno(0x87)
|
||||
EFTYPE = syscall.Errno(0xa9)
|
||||
EHOSTDOWN = syscall.Errno(0x93)
|
||||
EHOSTUNREACH = syscall.Errno(0x94)
|
||||
EHWPOISON = syscall.Errno(0xa8)
|
||||
@@ -845,6 +846,7 @@ var errorList = [...]struct {
|
||||
{166, "ENOTRECOVERABLE", "state not recoverable"},
|
||||
{167, "ERFKILL", "operation not possible due to RF-kill"},
|
||||
{168, "EHWPOISON", "memory page has hardware error"},
|
||||
{169, "EFTYPE", "unknown error 169"},
|
||||
{1133, "EDQUOT", "disk quota exceeded"},
|
||||
}
|
||||
|
||||
|
||||
+2
@@ -601,6 +601,7 @@ const (
|
||||
EDQUOT = syscall.Errno(0x46d)
|
||||
EFSBADCRC = syscall.Errno(0x4d)
|
||||
EFSCORRUPTED = syscall.Errno(0x87)
|
||||
EFTYPE = syscall.Errno(0xa9)
|
||||
EHOSTDOWN = syscall.Errno(0x93)
|
||||
EHOSTUNREACH = syscall.Errno(0x94)
|
||||
EHWPOISON = syscall.Errno(0xa8)
|
||||
@@ -845,6 +846,7 @@ var errorList = [...]struct {
|
||||
{166, "ENOTRECOVERABLE", "state not recoverable"},
|
||||
{167, "ERFKILL", "operation not possible due to RF-kill"},
|
||||
{168, "EHWPOISON", "memory page has hardware error"},
|
||||
{169, "EFTYPE", "unknown error 169"},
|
||||
{1133, "EDQUOT", "disk quota exceeded"},
|
||||
}
|
||||
|
||||
|
||||
+2
@@ -601,6 +601,7 @@ const (
|
||||
EDQUOT = syscall.Errno(0x46d)
|
||||
EFSBADCRC = syscall.Errno(0x4d)
|
||||
EFSCORRUPTED = syscall.Errno(0x87)
|
||||
EFTYPE = syscall.Errno(0xa9)
|
||||
EHOSTDOWN = syscall.Errno(0x93)
|
||||
EHOSTUNREACH = syscall.Errno(0x94)
|
||||
EHWPOISON = syscall.Errno(0xa8)
|
||||
@@ -845,6 +846,7 @@ var errorList = [...]struct {
|
||||
{166, "ENOTRECOVERABLE", "state not recoverable"},
|
||||
{167, "ERFKILL", "operation not possible due to RF-kill"},
|
||||
{168, "EHWPOISON", "memory page has hardware error"},
|
||||
{169, "EFTYPE", "unknown error 169"},
|
||||
{1133, "EDQUOT", "disk quota exceeded"},
|
||||
}
|
||||
|
||||
|
||||
+2
@@ -601,6 +601,7 @@ const (
|
||||
EDQUOT = syscall.Errno(0x46d)
|
||||
EFSBADCRC = syscall.Errno(0x4d)
|
||||
EFSCORRUPTED = syscall.Errno(0x87)
|
||||
EFTYPE = syscall.Errno(0xa9)
|
||||
EHOSTDOWN = syscall.Errno(0x93)
|
||||
EHOSTUNREACH = syscall.Errno(0x94)
|
||||
EHWPOISON = syscall.Errno(0xa8)
|
||||
@@ -845,6 +846,7 @@ var errorList = [...]struct {
|
||||
{166, "ENOTRECOVERABLE", "state not recoverable"},
|
||||
{167, "ERFKILL", "operation not possible due to RF-kill"},
|
||||
{168, "EHWPOISON", "memory page has hardware error"},
|
||||
{169, "EFTYPE", "unknown error 169"},
|
||||
{1133, "EDQUOT", "disk quota exceeded"},
|
||||
}
|
||||
|
||||
|
||||
+2
@@ -657,6 +657,7 @@ const (
|
||||
EDQUOT = syscall.Errno(0x7a)
|
||||
EFSBADCRC = syscall.Errno(0x4a)
|
||||
EFSCORRUPTED = syscall.Errno(0x75)
|
||||
EFTYPE = syscall.Errno(0x86)
|
||||
EHOSTDOWN = syscall.Errno(0x70)
|
||||
EHOSTUNREACH = syscall.Errno(0x71)
|
||||
EHWPOISON = syscall.Errno(0x85)
|
||||
@@ -898,6 +899,7 @@ var errorList = [...]struct {
|
||||
{131, "ENOTRECOVERABLE", "state not recoverable"},
|
||||
{132, "ERFKILL", "operation not possible due to RF-kill"},
|
||||
{133, "EHWPOISON", "memory page has hardware error"},
|
||||
{134, "EFTYPE", "unknown error 134"},
|
||||
}
|
||||
|
||||
// Signal table
|
||||
|
||||
+2
@@ -661,6 +661,7 @@ const (
|
||||
EDQUOT = syscall.Errno(0x7a)
|
||||
EFSBADCRC = syscall.Errno(0x4a)
|
||||
EFSCORRUPTED = syscall.Errno(0x75)
|
||||
EFTYPE = syscall.Errno(0x86)
|
||||
EHOSTDOWN = syscall.Errno(0x70)
|
||||
EHOSTUNREACH = syscall.Errno(0x71)
|
||||
EHWPOISON = syscall.Errno(0x85)
|
||||
@@ -902,6 +903,7 @@ var errorList = [...]struct {
|
||||
{131, "ENOTRECOVERABLE", "state not recoverable"},
|
||||
{132, "ERFKILL", "operation not possible due to RF-kill"},
|
||||
{133, "EHWPOISON", "memory page has hardware error"},
|
||||
{134, "EFTYPE", "unknown error 134"},
|
||||
}
|
||||
|
||||
// Signal table
|
||||
|
||||
+2
@@ -661,6 +661,7 @@ const (
|
||||
EDQUOT = syscall.Errno(0x7a)
|
||||
EFSBADCRC = syscall.Errno(0x4a)
|
||||
EFSCORRUPTED = syscall.Errno(0x75)
|
||||
EFTYPE = syscall.Errno(0x86)
|
||||
EHOSTDOWN = syscall.Errno(0x70)
|
||||
EHOSTUNREACH = syscall.Errno(0x71)
|
||||
EHWPOISON = syscall.Errno(0x85)
|
||||
@@ -902,6 +903,7 @@ var errorList = [...]struct {
|
||||
{131, "ENOTRECOVERABLE", "state not recoverable"},
|
||||
{132, "ERFKILL", "operation not possible due to RF-kill"},
|
||||
{133, "EHWPOISON", "memory page has hardware error"},
|
||||
{134, "EFTYPE", "unknown error 134"},
|
||||
}
|
||||
|
||||
// Signal table
|
||||
|
||||
+2
@@ -602,6 +602,7 @@ const (
|
||||
EDQUOT = syscall.Errno(0x7a)
|
||||
EFSBADCRC = syscall.Errno(0x4a)
|
||||
EFSCORRUPTED = syscall.Errno(0x75)
|
||||
EFTYPE = syscall.Errno(0x86)
|
||||
EHOSTDOWN = syscall.Errno(0x70)
|
||||
EHOSTUNREACH = syscall.Errno(0x71)
|
||||
EHWPOISON = syscall.Errno(0x85)
|
||||
@@ -842,6 +843,7 @@ var errorList = [...]struct {
|
||||
{131, "ENOTRECOVERABLE", "state not recoverable"},
|
||||
{132, "ERFKILL", "operation not possible due to RF-kill"},
|
||||
{133, "EHWPOISON", "memory page has hardware error"},
|
||||
{134, "EFTYPE", "unknown error 134"},
|
||||
}
|
||||
|
||||
// Signal table
|
||||
|
||||
+2
@@ -661,6 +661,7 @@ const (
|
||||
EDQUOT = syscall.Errno(0x7a)
|
||||
EFSBADCRC = syscall.Errno(0x4a)
|
||||
EFSCORRUPTED = syscall.Errno(0x75)
|
||||
EFTYPE = syscall.Errno(0x86)
|
||||
EHOSTDOWN = syscall.Errno(0x70)
|
||||
EHOSTUNREACH = syscall.Errno(0x71)
|
||||
EHWPOISON = syscall.Errno(0x85)
|
||||
@@ -901,6 +902,7 @@ var errorList = [...]struct {
|
||||
{131, "ENOTRECOVERABLE", "state not recoverable"},
|
||||
{132, "ERFKILL", "operation not possible due to RF-kill"},
|
||||
{133, "EHWPOISON", "memory page has hardware error"},
|
||||
{134, "EFTYPE", "unknown error 134"},
|
||||
}
|
||||
|
||||
// Signal table
|
||||
|
||||
+2
@@ -704,6 +704,7 @@ const (
|
||||
EDQUOT = syscall.Errno(0x45)
|
||||
EFSBADCRC = syscall.Errno(0x4c)
|
||||
EFSCORRUPTED = syscall.Errno(0x75)
|
||||
EFTYPE = syscall.Errno(0x88)
|
||||
EHOSTDOWN = syscall.Errno(0x40)
|
||||
EHOSTUNREACH = syscall.Errno(0x41)
|
||||
EHWPOISON = syscall.Errno(0x87)
|
||||
@@ -950,6 +951,7 @@ var errorList = [...]struct {
|
||||
{133, "ENOTRECOVERABLE", "state not recoverable"},
|
||||
{134, "ERFKILL", "operation not possible due to RF-kill"},
|
||||
{135, "EHWPOISON", "memory page has hardware error"},
|
||||
{136, "EFTYPE", "unknown error 136"},
|
||||
}
|
||||
|
||||
// Signal table
|
||||
|
||||
+11
@@ -702,6 +702,17 @@ var libc_fcntl_trampoline_addr uintptr
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (val int, err error) {
|
||||
r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))
|
||||
val = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func kill(pid int, signum int, posix int) (err error) {
|
||||
_, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), uintptr(posix))
|
||||
if e1 != 0 {
|
||||
|
||||
+11
@@ -702,6 +702,17 @@ var libc_fcntl_trampoline_addr uintptr
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (val int, err error) {
|
||||
r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg))
|
||||
val = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func kill(pid int, signum int, posix int) (err error) {
|
||||
_, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), uintptr(posix))
|
||||
if e1 != 0 {
|
||||
|
||||
+159
@@ -825,6 +825,165 @@ func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrGetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrSetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrListFd(fd int, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrGetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(file)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrSetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(file)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrListFile(file string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(file)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrGetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(link)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrSetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(link)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrListLink(link string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(link)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
|
||||
_, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice))
|
||||
if e1 != 0 {
|
||||
|
||||
+159
@@ -825,6 +825,165 @@ func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrGetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrSetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrListFd(fd int, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrGetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(file)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrSetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(file)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrListFile(file string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(file)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrGetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(link)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrSetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(link)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrListLink(link string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(link)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
|
||||
_, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
|
||||
if e1 != 0 {
|
||||
|
||||
+159
@@ -825,6 +825,165 @@ func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrGetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrSetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrListFd(fd int, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrGetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(file)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrSetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(file)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrListFile(file string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(file)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrGetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(link)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrSetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(link)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrListLink(link string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(link)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
|
||||
_, _, e1 := Syscall9(SYS_POSIX_FADVISE, uintptr(fd), 0, uintptr(offset), uintptr(offset>>32), uintptr(length), uintptr(length>>32), uintptr(advice), 0, 0)
|
||||
if e1 != 0 {
|
||||
|
||||
+159
@@ -825,6 +825,165 @@ func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrGetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrSetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrListFd(fd int, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrGetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(file)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrSetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(file)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrListFile(file string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(file)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrGetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(link)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrSetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(link)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrListLink(link string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(link)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
|
||||
_, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
|
||||
if e1 != 0 {
|
||||
|
||||
+159
@@ -825,6 +825,165 @@ func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrGetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrSetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrListFd(fd int, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrGetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(file)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrSetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(file)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrListFile(file string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(file)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrGetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(link)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrSetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(link)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrListLink(link string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(link)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Fadvise(fd int, offset int64, length int64, advice int) (err error) {
|
||||
_, _, e1 := Syscall6(SYS_POSIX_FADVISE, uintptr(fd), uintptr(offset), uintptr(length), uintptr(advice), 0, 0)
|
||||
if e1 != 0 {
|
||||
|
||||
+28
-1
@@ -943,7 +943,7 @@ func fsconfig(fd int, cmd uint, key *byte, value *byte, aux int) (err error) {
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Getdents(fd int, buf []byte) (n int, err error) {
|
||||
func getdents(fd int, buf []byte) (n int, err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(buf) > 0 {
|
||||
_p0 = unsafe.Pointer(&buf[0])
|
||||
@@ -1167,6 +1167,23 @@ func Lgetxattr(path string, attr string, dest []byte) (sz int, err error) {
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Listns(req *NsIdReq, nsIds []uint64, flags uint) (n int, err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(nsIds) > 0 {
|
||||
_p0 = unsafe.Pointer(&nsIds[0])
|
||||
} else {
|
||||
_p0 = unsafe.Pointer(&_zero)
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_LISTNS, uintptr(unsafe.Pointer(req)), uintptr(_p0), uintptr(len(nsIds)), uintptr(flags), 0, 0)
|
||||
n = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Listxattr(path string, dest []byte) (sz int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(path)
|
||||
@@ -1390,6 +1407,16 @@ func Prctl(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 uintptr) (
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func PrctlArg5Ptr(option int, arg2 uintptr, arg3 uintptr, arg4 uintptr, arg5 unsafe.Pointer) (err error) {
|
||||
_, _, e1 := Syscall6(SYS_PRCTL, uintptr(option), uintptr(arg2), uintptr(arg3), uintptr(arg4), uintptr(arg5), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func pselect6(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timespec, sigmask *sigset_argpack) (n int, err error) {
|
||||
r0, _, e1 := Syscall6(SYS_PSELECT6, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), uintptr(unsafe.Pointer(sigmask)))
|
||||
n = int(r0)
|
||||
|
||||
+3
-3
@@ -66,7 +66,7 @@ func Fchown(fd int, uid int, gid int) (err error) {
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Fstat(fd int, stat *Stat_t) (err error) {
|
||||
_, _, e1 := Syscall(SYS_FSTAT, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
|
||||
_, _, e1 := Syscall(SYS_FSTAT64, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
@@ -183,7 +183,7 @@ func Lstat(path string, stat *Stat_t) (err error) {
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
_, _, e1 := Syscall(SYS_LSTAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
|
||||
_, _, e1 := Syscall(SYS_LSTAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
@@ -338,7 +338,7 @@ func Stat(path string, stat *Stat_t) (err error) {
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
_, _, e1 := Syscall(SYS_STAT, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
|
||||
_, _, e1 := Syscall(SYS_STAT64, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
|
||||
+159
@@ -802,6 +802,165 @@ func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrGetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrSetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrListFd(fd int, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrGetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(file)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrSetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(file)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrListFile(file string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(file)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrGetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(link)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrSetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(link)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrListLink(link string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(link)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(path)
|
||||
|
||||
+159
@@ -802,6 +802,165 @@ func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrGetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrSetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrListFd(fd int, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrGetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(file)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrSetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(file)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrListFile(file string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(file)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrGetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(link)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrSetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(link)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrListLink(link string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(link)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(path)
|
||||
|
||||
+159
@@ -802,6 +802,165 @@ func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrGetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrSetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrListFd(fd int, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrGetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(file)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrSetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(file)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrListFile(file string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(file)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrGetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(link)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrSetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(link)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrListLink(link string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(link)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(path)
|
||||
|
||||
+159
@@ -802,6 +802,165 @@ func ExtattrListLink(link string, attrnamespace int, data uintptr, nbytes int) (
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrGetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrSetFd(fd int, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FD, uintptr(fd), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p0)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrListFd(fd int, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FD, uintptr(fd), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrGetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(file)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrSetFile(file string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(file)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrListFile(file string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(file)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_FILE, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrGetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(link)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_GET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrSetLink(link string, attrnamespace int, attrname string, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(link)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
var _p1 *byte
|
||||
_p1, err = BytePtrFromString(attrname)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_SET_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(unsafe.Pointer(_p1)), uintptr(data), uintptr(nbytes), 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func extattrListLink(link string, attrnamespace int, data unsafe.Pointer, nbytes int) (ret int, err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(link)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
r0, _, e1 := Syscall6(SYS_EXTATTR_LIST_LINK, uintptr(unsafe.Pointer(_p0)), uintptr(attrnamespace), uintptr(data), uintptr(nbytes), 0, 0)
|
||||
ret = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) {
|
||||
var _p0 *byte
|
||||
_p0, err = BytePtrFromString(path)
|
||||
|
||||
+13
@@ -2848,5 +2848,18 @@ const (
|
||||
SYS_____CHATTRAT64_A = 0xE39 // 3641
|
||||
SYS_MADVISE = 0xE3A // 3642
|
||||
SYS___AUTHENTICATE = 0xE3B // 3643
|
||||
SYS_GETPWENT_R = 0xE3C // 3644
|
||||
SYS___GETPWENT_R_A = 0xE3D // 3645
|
||||
SYS_STRNLEN = 0xE3E // 3646
|
||||
SYS_STPCPY = 0xE3F // 3647
|
||||
SYS_STPNCPY = 0xE40 // 3648
|
||||
SYS_STRSIGNAL = 0xE41 // 3649
|
||||
SYS_WCPCPY = 0xE42 // 3650
|
||||
SYS_WCPNCPY = 0xE43 // 3651
|
||||
SYS_WCSNLEN = 0xE44 // 3652
|
||||
SYS___STRSIGNAL_A = 0xE45 // 3653
|
||||
SYS_FDOPENDIR = 0xE46 // 3654
|
||||
SYS_FDCLOSEDIR = 0xE47 // 3655
|
||||
SYS_SYSCALL = 0xE48 // 3656
|
||||
|
||||
)
|
||||
|
||||
+65
-36
@@ -933,6 +933,29 @@ type OpenHow struct {
|
||||
|
||||
const SizeofOpenHow = 0x18
|
||||
|
||||
type NsIdReq struct {
|
||||
Size uint32
|
||||
Spare uint32
|
||||
Ns_id uint64
|
||||
Ns_type uint32
|
||||
Spare2 uint32
|
||||
User_ns_id uint64
|
||||
}
|
||||
|
||||
const (
|
||||
NS_ID_REQ_SIZE_VER0 = 0x20
|
||||
LISTNS_CURRENT_USER = 0xffffffffffffffff
|
||||
|
||||
TIME_NS = 0x80
|
||||
MNT_NS = 0x20000
|
||||
CGROUP_NS = 0x2000000
|
||||
UTS_NS = 0x4000000
|
||||
IPC_NS = 0x8000000
|
||||
USER_NS = 0x10000000
|
||||
PID_NS = 0x20000000
|
||||
NET_NS = 0x40000000
|
||||
)
|
||||
|
||||
const (
|
||||
RESOLVE_BENEATH = 0x8
|
||||
RESOLVE_IN_ROOT = 0x10
|
||||
@@ -3579,7 +3602,7 @@ const (
|
||||
DEVLINK_ATTR_LINECARD_SUPPORTED_TYPES = 0xae
|
||||
DEVLINK_ATTR_NESTED_DEVLINK = 0xaf
|
||||
DEVLINK_ATTR_SELFTESTS = 0xb0
|
||||
DEVLINK_ATTR_MAX = 0xb7
|
||||
DEVLINK_ATTR_MAX = 0xb9
|
||||
DEVLINK_DPIPE_FIELD_MAPPING_TYPE_NONE = 0x0
|
||||
DEVLINK_DPIPE_FIELD_MAPPING_TYPE_IFINDEX = 0x1
|
||||
DEVLINK_DPIPE_MATCH_TYPE_FIELD_EXACT = 0x0
|
||||
@@ -4101,7 +4124,7 @@ const (
|
||||
ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL = 0x17
|
||||
ETHTOOL_A_COALESCE_USE_CQE_MODE_TX = 0x18
|
||||
ETHTOOL_A_COALESCE_USE_CQE_MODE_RX = 0x19
|
||||
ETHTOOL_A_COALESCE_MAX = 0x1e
|
||||
ETHTOOL_A_COALESCE_MAX = 0x20
|
||||
ETHTOOL_A_PAUSE_UNSPEC = 0x0
|
||||
ETHTOOL_A_PAUSE_HEADER = 0x1
|
||||
ETHTOOL_A_PAUSE_AUTONEG = 0x2
|
||||
@@ -4113,7 +4136,7 @@ const (
|
||||
ETHTOOL_A_PAUSE_STAT_PAD = 0x1
|
||||
ETHTOOL_A_PAUSE_STAT_TX_FRAMES = 0x2
|
||||
ETHTOOL_A_PAUSE_STAT_RX_FRAMES = 0x3
|
||||
ETHTOOL_A_PAUSE_STAT_MAX = 0x3
|
||||
ETHTOOL_A_PAUSE_STAT_MAX = 0x4
|
||||
ETHTOOL_A_EEE_UNSPEC = 0x0
|
||||
ETHTOOL_A_EEE_HEADER = 0x1
|
||||
ETHTOOL_A_EEE_MODES_OURS = 0x2
|
||||
@@ -4537,9 +4560,12 @@ const (
|
||||
)
|
||||
|
||||
type LandlockRulesetAttr struct {
|
||||
Access_fs uint64
|
||||
Access_net uint64
|
||||
Scoped uint64
|
||||
Handled_access_fs uint64
|
||||
Handled_access_net uint64
|
||||
Scoped uint64
|
||||
Quiet_access_fs uint64
|
||||
Quiet_access_net uint64
|
||||
Quiet_scoped uint64
|
||||
}
|
||||
|
||||
type LandlockPathBeneathAttr struct {
|
||||
@@ -4569,28 +4595,31 @@ const (
|
||||
PIDFD_COREDUMP_USER = 0x4
|
||||
PIDFD_COREDUMP_ROOT = 0x8
|
||||
PIDFD_INFO_SIZE_VER0 = 0x40
|
||||
PIDFD_GET_INFO = 0xc048ff0b
|
||||
PIDFD_GET_INFO = 0xc058ff0b
|
||||
)
|
||||
|
||||
const SizeofPidfdInfo = 0x48
|
||||
const SizeofPidfdInfo = 0x58
|
||||
|
||||
type PidfdInfo struct {
|
||||
Mask uint64
|
||||
Cgroupid uint64
|
||||
Pid uint32
|
||||
Tgid uint32
|
||||
Ppid uint32
|
||||
Ruid uint32
|
||||
Rgid uint32
|
||||
Euid uint32
|
||||
Egid uint32
|
||||
Suid uint32
|
||||
Sgid uint32
|
||||
Fsuid uint32
|
||||
Fsgid uint32
|
||||
Exit_code int32
|
||||
Coredump_mask uint32
|
||||
_ uint32
|
||||
Mask uint64
|
||||
Cgroupid uint64
|
||||
Pid uint32
|
||||
Tgid uint32
|
||||
Ppid uint32
|
||||
Ruid uint32
|
||||
Rgid uint32
|
||||
Euid uint32
|
||||
Egid uint32
|
||||
Suid uint32
|
||||
Sgid uint32
|
||||
Fsuid uint32
|
||||
Fsgid uint32
|
||||
Exit_code int32
|
||||
Coredump_mask uint32
|
||||
Coredump_signal uint32
|
||||
Coredump_code uint32
|
||||
Coredump_pad uint32
|
||||
Supported_mask uint64
|
||||
}
|
||||
|
||||
const (
|
||||
@@ -4932,7 +4961,7 @@ const (
|
||||
NL80211_ATTR_MAC_HINT = 0xc8
|
||||
NL80211_ATTR_MAC_MASK = 0xd7
|
||||
NL80211_ATTR_MAX_AP_ASSOC_STA = 0xca
|
||||
NL80211_ATTR_MAX = 0x15c
|
||||
NL80211_ATTR_MAX = 0x16e
|
||||
NL80211_ATTR_MAX_CRIT_PROT_DURATION = 0xb4
|
||||
NL80211_ATTR_MAX_CSA_COUNTERS = 0xce
|
||||
NL80211_ATTR_MAX_HW_TIMESTAMP_PEERS = 0x143
|
||||
@@ -5147,12 +5176,12 @@ const (
|
||||
NL80211_ATTR_WOWLAN_TRIGGERS = 0x75
|
||||
NL80211_ATTR_WOWLAN_TRIGGERS_SUPPORTED = 0x76
|
||||
NL80211_ATTR_WPA_VERSIONS = 0x4b
|
||||
NL80211_AUTHTYPE_AUTOMATIC = 0x9
|
||||
NL80211_AUTHTYPE_AUTOMATIC = 0xa
|
||||
NL80211_AUTHTYPE_FILS_PK = 0x7
|
||||
NL80211_AUTHTYPE_FILS_SK = 0x5
|
||||
NL80211_AUTHTYPE_FILS_SK_PFS = 0x6
|
||||
NL80211_AUTHTYPE_FT = 0x2
|
||||
NL80211_AUTHTYPE_MAX = 0x8
|
||||
NL80211_AUTHTYPE_MAX = 0x9
|
||||
NL80211_AUTHTYPE_NETWORK_EAP = 0x3
|
||||
NL80211_AUTHTYPE_OPEN_SYSTEM = 0x0
|
||||
NL80211_AUTHTYPE_SAE = 0x4
|
||||
@@ -5320,7 +5349,7 @@ const (
|
||||
NL80211_CMD_LEAVE_MESH = 0x45
|
||||
NL80211_CMD_LEAVE_OCB = 0x6d
|
||||
NL80211_CMD_LINKS_REMOVED = 0x9a
|
||||
NL80211_CMD_MAX = 0x9f
|
||||
NL80211_CMD_MAX = 0xa7
|
||||
NL80211_CMD_MICHAEL_MIC_FAILURE = 0x29
|
||||
NL80211_CMD_MODIFY_LINK_STA = 0x97
|
||||
NL80211_CMD_NAN_MATCH = 0x78
|
||||
@@ -5566,7 +5595,7 @@ const (
|
||||
NL80211_FREQUENCY_ATTR_GO_CONCURRENT = 0xf
|
||||
NL80211_FREQUENCY_ATTR_INDOOR_ONLY = 0xe
|
||||
NL80211_FREQUENCY_ATTR_IR_CONCURRENT = 0xf
|
||||
NL80211_FREQUENCY_ATTR_MAX = 0x27
|
||||
NL80211_FREQUENCY_ATTR_MAX = 0x29
|
||||
NL80211_FREQUENCY_ATTR_MAX_TX_POWER = 0x6
|
||||
NL80211_FREQUENCY_ATTR_NO_10MHZ = 0x11
|
||||
NL80211_FREQUENCY_ATTR_NO_160MHZ = 0xc
|
||||
@@ -5639,7 +5668,7 @@ const (
|
||||
NL80211_IFTYPE_AKM_ATTR_SUITES = 0x2
|
||||
NL80211_IFTYPE_AP = 0x3
|
||||
NL80211_IFTYPE_AP_VLAN = 0x4
|
||||
NL80211_IFTYPE_MAX = 0xc
|
||||
NL80211_IFTYPE_MAX = 0xe
|
||||
NL80211_IFTYPE_MESH_POINT = 0x7
|
||||
NL80211_IFTYPE_MONITOR = 0x6
|
||||
NL80211_IFTYPE_NAN = 0xc
|
||||
@@ -5664,7 +5693,7 @@ const (
|
||||
NL80211_KEY_DEFAULT_TYPES = 0x8
|
||||
NL80211_KEY_DEFAULT_TYPE_UNICAST = 0x1
|
||||
NL80211_KEY_IDX = 0x2
|
||||
NL80211_KEY_MAX = 0xa
|
||||
NL80211_KEY_MAX = 0xb
|
||||
NL80211_KEY_MODE = 0x9
|
||||
NL80211_KEY_NO_TX = 0x1
|
||||
NL80211_KEY_RX_TX = 0x0
|
||||
@@ -5822,7 +5851,7 @@ const (
|
||||
NL80211_PMKSA_CANDIDATE_BSSID = 0x2
|
||||
NL80211_PMKSA_CANDIDATE_INDEX = 0x1
|
||||
NL80211_PMKSA_CANDIDATE_PREAUTH = 0x3
|
||||
NL80211_PMSR_ATTR_MAX = 0x5
|
||||
NL80211_PMSR_ATTR_MAX = 0x7
|
||||
NL80211_PMSR_ATTR_MAX_PEERS = 0x1
|
||||
NL80211_PMSR_ATTR_PEERS = 0x5
|
||||
NL80211_PMSR_ATTR_RANDOMIZE_MAC_ADDR = 0x3
|
||||
@@ -5831,7 +5860,7 @@ const (
|
||||
NL80211_PMSR_FTM_CAPA_ATTR_ASAP = 0x1
|
||||
NL80211_PMSR_FTM_CAPA_ATTR_BANDWIDTHS = 0x6
|
||||
NL80211_PMSR_FTM_CAPA_ATTR_MAX_BURSTS_EXPONENT = 0x7
|
||||
NL80211_PMSR_FTM_CAPA_ATTR_MAX = 0x12
|
||||
NL80211_PMSR_FTM_CAPA_ATTR_MAX = 0x1f
|
||||
NL80211_PMSR_FTM_CAPA_ATTR_MAX_FTMS_PER_BURST = 0x8
|
||||
NL80211_PMSR_FTM_CAPA_ATTR_NON_ASAP = 0x2
|
||||
NL80211_PMSR_FTM_CAPA_ATTR_NON_TRIGGER_BASED = 0xa
|
||||
@@ -5853,7 +5882,7 @@ const (
|
||||
NL80211_PMSR_FTM_REQ_ATTR_BURST_PERIOD = 0x4
|
||||
NL80211_PMSR_FTM_REQ_ATTR_FTMS_PER_BURST = 0x6
|
||||
NL80211_PMSR_FTM_REQ_ATTR_LMR_FEEDBACK = 0xc
|
||||
NL80211_PMSR_FTM_REQ_ATTR_MAX = 0xe
|
||||
NL80211_PMSR_FTM_REQ_ATTR_MAX = 0x17
|
||||
NL80211_PMSR_FTM_REQ_ATTR_NON_TRIGGER_BASED = 0xb
|
||||
NL80211_PMSR_FTM_REQ_ATTR_NUM_BURSTS_EXP = 0x3
|
||||
NL80211_PMSR_FTM_REQ_ATTR_NUM_FTMR_RETRIES = 0x7
|
||||
@@ -5871,7 +5900,7 @@ const (
|
||||
NL80211_PMSR_FTM_RESP_ATTR_FAIL_REASON = 0x1
|
||||
NL80211_PMSR_FTM_RESP_ATTR_FTMS_PER_BURST = 0x8
|
||||
NL80211_PMSR_FTM_RESP_ATTR_LCI = 0x13
|
||||
NL80211_PMSR_FTM_RESP_ATTR_MAX = 0x16
|
||||
NL80211_PMSR_FTM_RESP_ATTR_MAX = 0x21
|
||||
NL80211_PMSR_FTM_RESP_ATTR_NUM_BURSTS_EXP = 0x6
|
||||
NL80211_PMSR_FTM_RESP_ATTR_NUM_FTMR_ATTEMPTS = 0x3
|
||||
NL80211_PMSR_FTM_RESP_ATTR_NUM_FTMR_SUCCESSES = 0x4
|
||||
@@ -5885,7 +5914,7 @@ const (
|
||||
NL80211_PMSR_FTM_RESP_ATTR_TX_RATE = 0xb
|
||||
NL80211_PMSR_PEER_ATTR_ADDR = 0x1
|
||||
NL80211_PMSR_PEER_ATTR_CHAN = 0x2
|
||||
NL80211_PMSR_PEER_ATTR_MAX = 0x4
|
||||
NL80211_PMSR_PEER_ATTR_MAX = 0x5
|
||||
NL80211_PMSR_PEER_ATTR_REQ = 0x3
|
||||
NL80211_PMSR_PEER_ATTR_RESP = 0x4
|
||||
NL80211_PMSR_REQ_ATTR_DATA = 0x1
|
||||
|
||||
+6
@@ -163,6 +163,11 @@ type Msghdr struct {
|
||||
Flags int32
|
||||
}
|
||||
|
||||
type Mmsghdr struct {
|
||||
Hdr Msghdr
|
||||
Len uint32
|
||||
}
|
||||
|
||||
type Cmsghdr struct {
|
||||
Len uint32
|
||||
Level int32
|
||||
@@ -178,6 +183,7 @@ const (
|
||||
SizeofSockaddrNFCLLCP = 0x58
|
||||
SizeofIovec = 0x8
|
||||
SizeofMsghdr = 0x1c
|
||||
SizeofMmsghdr = 0x20
|
||||
SizeofCmsghdr = 0xc
|
||||
)
|
||||
|
||||
|
||||
+7
@@ -166,6 +166,12 @@ type Msghdr struct {
|
||||
_ [4]byte
|
||||
}
|
||||
|
||||
type Mmsghdr struct {
|
||||
Hdr Msghdr
|
||||
Len uint32
|
||||
_ [4]byte
|
||||
}
|
||||
|
||||
type Cmsghdr struct {
|
||||
Len uint64
|
||||
Level int32
|
||||
@@ -181,6 +187,7 @@ const (
|
||||
SizeofSockaddrNFCLLCP = 0x60
|
||||
SizeofIovec = 0x10
|
||||
SizeofMsghdr = 0x38
|
||||
SizeofMmsghdr = 0x40
|
||||
SizeofCmsghdr = 0x10
|
||||
)
|
||||
|
||||
|
||||
+6
@@ -169,6 +169,11 @@ type Msghdr struct {
|
||||
Flags int32
|
||||
}
|
||||
|
||||
type Mmsghdr struct {
|
||||
Hdr Msghdr
|
||||
Len uint32
|
||||
}
|
||||
|
||||
type Cmsghdr struct {
|
||||
Len uint32
|
||||
Level int32
|
||||
@@ -184,6 +189,7 @@ const (
|
||||
SizeofSockaddrNFCLLCP = 0x58
|
||||
SizeofIovec = 0x8
|
||||
SizeofMsghdr = 0x1c
|
||||
SizeofMmsghdr = 0x20
|
||||
SizeofCmsghdr = 0xc
|
||||
)
|
||||
|
||||
|
||||
+7
@@ -167,6 +167,12 @@ type Msghdr struct {
|
||||
_ [4]byte
|
||||
}
|
||||
|
||||
type Mmsghdr struct {
|
||||
Hdr Msghdr
|
||||
Len uint32
|
||||
_ [4]byte
|
||||
}
|
||||
|
||||
type Cmsghdr struct {
|
||||
Len uint64
|
||||
Level int32
|
||||
@@ -182,6 +188,7 @@ const (
|
||||
SizeofSockaddrNFCLLCP = 0x60
|
||||
SizeofIovec = 0x10
|
||||
SizeofMsghdr = 0x38
|
||||
SizeofMmsghdr = 0x40
|
||||
SizeofCmsghdr = 0x10
|
||||
)
|
||||
|
||||
|
||||
+7
@@ -167,6 +167,12 @@ type Msghdr struct {
|
||||
_ [4]byte
|
||||
}
|
||||
|
||||
type Mmsghdr struct {
|
||||
Hdr Msghdr
|
||||
Len uint32
|
||||
_ [4]byte
|
||||
}
|
||||
|
||||
type Cmsghdr struct {
|
||||
Len uint64
|
||||
Level int32
|
||||
@@ -182,6 +188,7 @@ const (
|
||||
SizeofSockaddrNFCLLCP = 0x60
|
||||
SizeofIovec = 0x10
|
||||
SizeofMsghdr = 0x38
|
||||
SizeofMmsghdr = 0x40
|
||||
SizeofCmsghdr = 0x10
|
||||
)
|
||||
|
||||
|
||||
+6
@@ -168,6 +168,11 @@ type Msghdr struct {
|
||||
Flags int32
|
||||
}
|
||||
|
||||
type Mmsghdr struct {
|
||||
Hdr Msghdr
|
||||
Len uint32
|
||||
}
|
||||
|
||||
type Cmsghdr struct {
|
||||
Len uint32
|
||||
Level int32
|
||||
@@ -183,6 +188,7 @@ const (
|
||||
SizeofSockaddrNFCLLCP = 0x58
|
||||
SizeofIovec = 0x8
|
||||
SizeofMsghdr = 0x1c
|
||||
SizeofMmsghdr = 0x20
|
||||
SizeofCmsghdr = 0xc
|
||||
)
|
||||
|
||||
|
||||
+7
@@ -167,6 +167,12 @@ type Msghdr struct {
|
||||
_ [4]byte
|
||||
}
|
||||
|
||||
type Mmsghdr struct {
|
||||
Hdr Msghdr
|
||||
Len uint32
|
||||
_ [4]byte
|
||||
}
|
||||
|
||||
type Cmsghdr struct {
|
||||
Len uint64
|
||||
Level int32
|
||||
@@ -182,6 +188,7 @@ const (
|
||||
SizeofSockaddrNFCLLCP = 0x60
|
||||
SizeofIovec = 0x10
|
||||
SizeofMsghdr = 0x38
|
||||
SizeofMmsghdr = 0x40
|
||||
SizeofCmsghdr = 0x10
|
||||
)
|
||||
|
||||
|
||||
+7
@@ -167,6 +167,12 @@ type Msghdr struct {
|
||||
_ [4]byte
|
||||
}
|
||||
|
||||
type Mmsghdr struct {
|
||||
Hdr Msghdr
|
||||
Len uint32
|
||||
_ [4]byte
|
||||
}
|
||||
|
||||
type Cmsghdr struct {
|
||||
Len uint64
|
||||
Level int32
|
||||
@@ -182,6 +188,7 @@ const (
|
||||
SizeofSockaddrNFCLLCP = 0x60
|
||||
SizeofIovec = 0x10
|
||||
SizeofMsghdr = 0x38
|
||||
SizeofMmsghdr = 0x40
|
||||
SizeofCmsghdr = 0x10
|
||||
)
|
||||
|
||||
|
||||
+6
@@ -168,6 +168,11 @@ type Msghdr struct {
|
||||
Flags int32
|
||||
}
|
||||
|
||||
type Mmsghdr struct {
|
||||
Hdr Msghdr
|
||||
Len uint32
|
||||
}
|
||||
|
||||
type Cmsghdr struct {
|
||||
Len uint32
|
||||
Level int32
|
||||
@@ -183,6 +188,7 @@ const (
|
||||
SizeofSockaddrNFCLLCP = 0x58
|
||||
SizeofIovec = 0x8
|
||||
SizeofMsghdr = 0x1c
|
||||
SizeofMmsghdr = 0x20
|
||||
SizeofCmsghdr = 0xc
|
||||
)
|
||||
|
||||
|
||||
+6
@@ -169,6 +169,11 @@ type Msghdr struct {
|
||||
Flags int32
|
||||
}
|
||||
|
||||
type Mmsghdr struct {
|
||||
Hdr Msghdr
|
||||
Len uint32
|
||||
}
|
||||
|
||||
type Cmsghdr struct {
|
||||
Len uint32
|
||||
Level int32
|
||||
@@ -184,6 +189,7 @@ const (
|
||||
SizeofSockaddrNFCLLCP = 0x58
|
||||
SizeofIovec = 0x8
|
||||
SizeofMsghdr = 0x1c
|
||||
SizeofMmsghdr = 0x20
|
||||
SizeofCmsghdr = 0xc
|
||||
)
|
||||
|
||||
|
||||
+7
@@ -168,6 +168,12 @@ type Msghdr struct {
|
||||
_ [4]byte
|
||||
}
|
||||
|
||||
type Mmsghdr struct {
|
||||
Hdr Msghdr
|
||||
Len uint32
|
||||
_ [4]byte
|
||||
}
|
||||
|
||||
type Cmsghdr struct {
|
||||
Len uint64
|
||||
Level int32
|
||||
@@ -183,6 +189,7 @@ const (
|
||||
SizeofSockaddrNFCLLCP = 0x60
|
||||
SizeofIovec = 0x10
|
||||
SizeofMsghdr = 0x38
|
||||
SizeofMmsghdr = 0x40
|
||||
SizeofCmsghdr = 0x10
|
||||
)
|
||||
|
||||
|
||||
+7
@@ -168,6 +168,12 @@ type Msghdr struct {
|
||||
_ [4]byte
|
||||
}
|
||||
|
||||
type Mmsghdr struct {
|
||||
Hdr Msghdr
|
||||
Len uint32
|
||||
_ [4]byte
|
||||
}
|
||||
|
||||
type Cmsghdr struct {
|
||||
Len uint64
|
||||
Level int32
|
||||
@@ -183,6 +189,7 @@ const (
|
||||
SizeofSockaddrNFCLLCP = 0x60
|
||||
SizeofIovec = 0x10
|
||||
SizeofMsghdr = 0x38
|
||||
SizeofMmsghdr = 0x40
|
||||
SizeofCmsghdr = 0x10
|
||||
)
|
||||
|
||||
|
||||
+7
@@ -167,6 +167,12 @@ type Msghdr struct {
|
||||
_ [4]byte
|
||||
}
|
||||
|
||||
type Mmsghdr struct {
|
||||
Hdr Msghdr
|
||||
Len uint32
|
||||
_ [4]byte
|
||||
}
|
||||
|
||||
type Cmsghdr struct {
|
||||
Len uint64
|
||||
Level int32
|
||||
@@ -182,6 +188,7 @@ const (
|
||||
SizeofSockaddrNFCLLCP = 0x60
|
||||
SizeofIovec = 0x10
|
||||
SizeofMsghdr = 0x38
|
||||
SizeofMmsghdr = 0x40
|
||||
SizeofCmsghdr = 0x10
|
||||
)
|
||||
|
||||
|
||||
+7
@@ -166,6 +166,12 @@ type Msghdr struct {
|
||||
_ [4]byte
|
||||
}
|
||||
|
||||
type Mmsghdr struct {
|
||||
Hdr Msghdr
|
||||
Len uint32
|
||||
_ [4]byte
|
||||
}
|
||||
|
||||
type Cmsghdr struct {
|
||||
Len uint64
|
||||
Level int32
|
||||
@@ -181,6 +187,7 @@ const (
|
||||
SizeofSockaddrNFCLLCP = 0x60
|
||||
SizeofIovec = 0x10
|
||||
SizeofMsghdr = 0x38
|
||||
SizeofMmsghdr = 0x40
|
||||
SizeofCmsghdr = 0x10
|
||||
)
|
||||
|
||||
|
||||
+10
-5
@@ -84,22 +84,20 @@ type Rusage struct {
|
||||
|
||||
type Stat_t struct {
|
||||
Dev uint64
|
||||
_ uint16
|
||||
Ino uint64
|
||||
Nlink uint64
|
||||
Mode uint32
|
||||
Nlink uint32
|
||||
Uid uint32
|
||||
Gid uint32
|
||||
_ uint32
|
||||
Rdev uint64
|
||||
_ uint16
|
||||
Size int64
|
||||
Blksize int64
|
||||
Blocks int64
|
||||
Atim Timespec
|
||||
Mtim Timespec
|
||||
Ctim Timespec
|
||||
_ uint64
|
||||
_ uint64
|
||||
_ [3]int64
|
||||
}
|
||||
|
||||
type Dirent struct {
|
||||
@@ -170,6 +168,12 @@ type Msghdr struct {
|
||||
_ [4]byte
|
||||
}
|
||||
|
||||
type Mmsghdr struct {
|
||||
Hdr Msghdr
|
||||
Len uint32
|
||||
_ [4]byte
|
||||
}
|
||||
|
||||
type Cmsghdr struct {
|
||||
Len uint64
|
||||
Level int32
|
||||
@@ -185,6 +189,7 @@ const (
|
||||
SizeofSockaddrNFCLLCP = 0x60
|
||||
SizeofIovec = 0x10
|
||||
SizeofMsghdr = 0x38
|
||||
SizeofMmsghdr = 0x40
|
||||
SizeofCmsghdr = 0x10
|
||||
)
|
||||
|
||||
|
||||
+78
@@ -209,6 +209,84 @@ type TCPInfo struct {
|
||||
Total_retrans uint32
|
||||
}
|
||||
|
||||
// Ptrace structures for z/OS
|
||||
|
||||
type PtraceRegs struct {
|
||||
Psw PtracePsw
|
||||
Gprs [16]uint64
|
||||
Acrs [16]uint32
|
||||
Orig_gpr2 uint64
|
||||
Fp_regs PtraceFpregs
|
||||
Per_info PtracePer
|
||||
Ieee_instruction_pointer uint64
|
||||
}
|
||||
|
||||
type PtracePsw struct {
|
||||
Mask uint64
|
||||
Addr uint64
|
||||
}
|
||||
|
||||
type PtraceFpregs struct {
|
||||
Fpc uint32
|
||||
Fprs [16]float64
|
||||
}
|
||||
|
||||
type PtracePer struct {
|
||||
Control_regs [3]uint64
|
||||
_ [8]byte
|
||||
Starting_addr uint64
|
||||
Ending_addr uint64
|
||||
Perc_atmid uint16
|
||||
Address uint64
|
||||
Access_id uint8
|
||||
_ [7]byte
|
||||
}
|
||||
|
||||
// PT_BLOCKREQ structures for block ptrace requests
|
||||
// Layout matches BPXYPTRC HLASM macro (PtBR_GPR + PtBR_GPR_EXT):
|
||||
//
|
||||
// Offset 0-1: Writebitflags (PtBR_GPR_CntlGPR, 2 bytes)
|
||||
// Offset 2-3: Wpsw (PtBR_GPR_CntlMisc, 2 bytes with WPSW bit flag)
|
||||
// Offset 4-15: Reserved (12 bytes)
|
||||
// Offset 16-79: Gpr (64 bytes, 16 GPRs)
|
||||
// Offset 80-143: Ctl (64 bytes, 16 CRs)
|
||||
// Offset 144-151: Psw old format (8 bytes, PtBR_GPR_PSW)
|
||||
// Offset 152-167: Pswg extended (16 bytes, PtBR_GPR_PSWG for 64-bit)
|
||||
// Total: 168 bytes (base 152 + extended 16)
|
||||
type PtraceBlkGpr struct {
|
||||
Writebitflags uint16 // 2 bytes at offset 0 (PtBR_GPR_CntlGPR)
|
||||
Wpsw uint16 // 2 bytes at offset 2 (PtBR_GPR_CntlMisc with WPSW flag)
|
||||
_ [12]byte // 12 bytes reserved (offset 4-15)
|
||||
Gpr [16]uint32 // 64 bytes at offset 16 (GPRs)
|
||||
Ctl [16]uint32 // 64 bytes at offset 80 (CRs)
|
||||
Psw [8]byte // 8 bytes at offset 144 (old PSW format)
|
||||
Pswg [16]byte // 16 bytes at offset 152 (extended PSWG)
|
||||
// Total: 2+2+12+64+64+8+16 = 168 bytes
|
||||
}
|
||||
|
||||
type PtraceBlkReqReq struct {
|
||||
Reqtype int32
|
||||
Reqstat int32
|
||||
Reqdata uint32
|
||||
_ [4]byte
|
||||
}
|
||||
|
||||
type PtraceBlkReq struct {
|
||||
Numreq int32
|
||||
_ [12]byte
|
||||
}
|
||||
|
||||
// PT_READ_U structures for reading user area (control info)
|
||||
type PtraceBlkUarOcw struct {
|
||||
Ofs uint32 // Control information offset
|
||||
Ctl uint32 // Control information
|
||||
}
|
||||
|
||||
type PtraceBlkUar struct {
|
||||
Num uint32 // Number of entries
|
||||
_ [4]byte
|
||||
}
|
||||
|
||||
type _Gid_t uint32
|
||||
|
||||
type rusage_zos struct {
|
||||
|
||||
-35
@@ -1,35 +0,0 @@
|
||||
// Copyright 2018 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
package windows
|
||||
|
||||
type WSAData struct {
|
||||
Version uint16
|
||||
HighVersion uint16
|
||||
Description [WSADESCRIPTION_LEN + 1]byte
|
||||
SystemStatus [WSASYS_STATUS_LEN + 1]byte
|
||||
MaxSockets uint16
|
||||
MaxUdpDg uint16
|
||||
VendorInfo *byte
|
||||
}
|
||||
|
||||
type Servent struct {
|
||||
Name *byte
|
||||
Aliases **byte
|
||||
Port uint16
|
||||
Proto *byte
|
||||
}
|
||||
|
||||
type JOBOBJECT_BASIC_LIMIT_INFORMATION struct {
|
||||
PerProcessUserTimeLimit int64
|
||||
PerJobUserTimeLimit int64
|
||||
LimitFlags uint32
|
||||
MinimumWorkingSetSize uintptr
|
||||
MaximumWorkingSetSize uintptr
|
||||
ActiveProcessLimit uint32
|
||||
Affinity uintptr
|
||||
PriorityClass uint32
|
||||
SchedulingClass uint32
|
||||
_ uint32 // pad to 8 byte boundary
|
||||
}
|
||||
+1
-1
@@ -694,7 +694,7 @@ golang.org/x/net/internal/socks
|
||||
golang.org/x/net/internal/timeseries
|
||||
golang.org/x/net/proxy
|
||||
golang.org/x/net/trace
|
||||
# golang.org/x/sys v0.48.0
|
||||
# golang.org/x/sys v0.49.0
|
||||
## explicit; go 1.26.0
|
||||
golang.org/x/sys/cpu
|
||||
golang.org/x/sys/execabs
|
||||
|
||||
Reference in New Issue
Block a user