From 485474d204297ce9ff2b7f6c2a2b0e048c61fb8e Mon Sep 17 00:00:00 2001 From: Manlio Perillo Date: Wed, 12 May 2021 15:16:20 +0200 Subject: [PATCH 001/100] cmd/go/testdata/script: fix test failing on nocgo builders The regression test introduced in https://golang.org/cl/318770 broke the the nocgo builders. Update the cgo package used in the test to ensure that it can be build both with cgo enabled and disabled. Change-Id: Iab0486f0b85ac5e5a22fdf8a1998edd50cbb4d96 Reviewed-on: https://go-review.googlesource.com/c/go/+/319210 Trust: Bryan C. Mills Trust: Jay Conrod Reviewed-by: Bryan C. Mills Reviewed-by: Jay Conrod Run-TryBot: Bryan C. Mills TryBot-Result: Go Bot --- src/cmd/go/testdata/script/list_find_nodeps.txt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/cmd/go/testdata/script/list_find_nodeps.txt b/src/cmd/go/testdata/script/list_find_nodeps.txt index 55f98f6c6c3..e08ce789509 100644 --- a/src/cmd/go/testdata/script/list_find_nodeps.txt +++ b/src/cmd/go/testdata/script/list_find_nodeps.txt @@ -33,6 +33,16 @@ func F() { println(C.INT_MAX) } +-- cgo/pkg_notcgo.go -- +//go:build !cgo +// +build !cgo + +package cgopkg + +func F() { + println(0) +} + -- swig/pkg.go -- package swigpkg From af0f8c149e8a4b237910fc7b41739bedc546473c Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Tue, 11 May 2021 22:40:02 -0400 Subject: [PATCH 002/100] cmd/link: don't cast end address to int32 When linking a very large binary, the section address may not fit in int32. Don't truncate it. Change-Id: Ibcc8d74bf5662611949e547ce44ca8b973de383f Reviewed-on: https://go-review.googlesource.com/c/go/+/319289 Trust: Cherry Mui Run-TryBot: Cherry Mui Reviewed-by: Than McIntosh TryBot-Result: Go Bot --- src/cmd/link/internal/ld/elf.go | 2 +- src/cmd/link/internal/ld/macho.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cmd/link/internal/ld/elf.go b/src/cmd/link/internal/ld/elf.go index 87d88dd957d..6f81e74da29 100644 --- a/src/cmd/link/internal/ld/elf.go +++ b/src/cmd/link/internal/ld/elf.go @@ -1171,7 +1171,7 @@ func elfrelocsect(ctxt *Link, out *OutBuf, sect *sym.Section, syms []loader.Sym) } } - eaddr := int32(sect.Vaddr + sect.Length) + eaddr := sect.Vaddr + sect.Length for _, s := range syms { if !ldr.AttrReachable(s) { continue diff --git a/src/cmd/link/internal/ld/macho.go b/src/cmd/link/internal/ld/macho.go index 642113cf070..45a3971c33f 100644 --- a/src/cmd/link/internal/ld/macho.go +++ b/src/cmd/link/internal/ld/macho.go @@ -1194,7 +1194,7 @@ func machorelocsect(ctxt *Link, out *OutBuf, sect *sym.Section, syms []loader.Sy } } - eaddr := int32(sect.Vaddr + sect.Length) + eaddr := sect.Vaddr + sect.Length for _, s := range syms { if !ldr.AttrReachable(s) { continue From e03383a2e233fc89958cff31642dff917d649378 Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Tue, 11 May 2021 22:40:41 -0400 Subject: [PATCH 003/100] cmd/link: check mmap error We already check mmap errors on some code paths, but we missed one. Add error check there. Change-Id: Ic0e9cb0eb03c805de40802cfc5d5500e3e065d99 Reviewed-on: https://go-review.googlesource.com/c/go/+/319290 Trust: Cherry Mui Run-TryBot: Cherry Mui TryBot-Result: Go Bot Reviewed-by: Than McIntosh --- src/cmd/link/internal/ld/asmb.go | 5 ++++- src/cmd/link/internal/ld/main.go | 2 +- src/cmd/link/internal/ld/outbuf.go | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/cmd/link/internal/ld/asmb.go b/src/cmd/link/internal/ld/asmb.go index 37546695556..d6ecb2895ba 100644 --- a/src/cmd/link/internal/ld/asmb.go +++ b/src/cmd/link/internal/ld/asmb.go @@ -167,7 +167,10 @@ func sizeExtRelocs(ctxt *Link, relsize uint32) { } } filesz := ctxt.Out.Offset() + sz - ctxt.Out.Mmap(uint64(filesz)) + err := ctxt.Out.Mmap(uint64(filesz)) + if err != nil { + Exitf("mapping output file failed: %v", err) + } } // relocSectFn wraps the function writing relocations of a section diff --git a/src/cmd/link/internal/ld/main.go b/src/cmd/link/internal/ld/main.go index adb39d06076..cba0e3d81fe 100644 --- a/src/cmd/link/internal/ld/main.go +++ b/src/cmd/link/internal/ld/main.go @@ -334,7 +334,7 @@ func Main(arch *sys.Arch, theArch Arch) { // Don't mmap if we're building for Wasm. Wasm file // layout is very different so filesize is meaningless. if err := ctxt.Out.Mmap(filesize); err != nil { - panic(err) + Exitf("mapping output file failed: %v", err) } } // asmb will redirect symbols to the output file mmap, and relocations diff --git a/src/cmd/link/internal/ld/outbuf.go b/src/cmd/link/internal/ld/outbuf.go index 530836ef7cf..9d5e8854fea 100644 --- a/src/cmd/link/internal/ld/outbuf.go +++ b/src/cmd/link/internal/ld/outbuf.go @@ -160,7 +160,7 @@ func (out *OutBuf) copyHeap() bool { total := uint64(bufLen + heapLen) if heapLen != 0 { if err := out.Mmap(total); err != nil { // Mmap will copy out.heap over to out.buf - panic(err) + Exitf("mapping output file failed: %v", err) } } return true From 03886707f9e8db668bd1fd7b8f99799dba0408e3 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Thu, 6 May 2021 11:38:46 -0400 Subject: [PATCH 004/100] runtime: fix handling of SPWRITE functions in traceback It is valid to see SPWRITE functions at the top of a GC stack traceback, in the case where they self-preempted during the stack growth check and haven't actually modified SP in a traceback-unfriendly manner yet. The current check is therefore too aggressive. isAsyncSafePoint is taking care of not async-preempting SPWRITE functions because it doesn't async-preempt any assembly functions at all. But perhaps it will in the future. To keep a check that SPWRITE assembly functions are not async-preempted, add one in preemptPark. Then relax the check in traceback to avoid triggering on self-preempted SPWRITE functions. The long and short of this is that the assembly we corrected in x/crypto issue #44269 was incredibly dodgy but not technically incompatible with the Go runtime. After this change, the original x/crypto assembly no longer causes GC traceback crashes during "GOGC=1 go test -count=1000". But we'll still leave the corrected assembly. This also means that we don't need to worry about diagnosing SPWRITE assembly functions that may exist in the wild. They will be skipped for async preemption and no harm no foul. Fixes #44269, which was open pending some kind of check for bad SPWRITE functions in the wild. (No longer needed.) Change-Id: I6000197b62812bbd2cd92da28eab422634cf75a8 Reviewed-on: https://go-review.googlesource.com/c/go/+/317669 Trust: Russ Cox Run-TryBot: Russ Cox TryBot-Result: Go Bot Reviewed-by: Cherry Mui --- src/runtime/preempt.go | 2 ++ src/runtime/proc.go | 15 +++++++++++++++ src/runtime/traceback.go | 17 ++++++++++++----- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/src/runtime/preempt.go b/src/runtime/preempt.go index 372185266f7..1d5aae13631 100644 --- a/src/runtime/preempt.go +++ b/src/runtime/preempt.go @@ -413,6 +413,8 @@ func isAsyncSafePoint(gp *g, pc, sp, lr uintptr) (bool, uintptr) { // // TODO: Are there cases that are safe but don't have a // locals pointer map, like empty frame functions? + // It might be possible to preempt any assembly functions + // except the ones that have funcFlag_SPWRITE set in f.flag. return false, 0 } name := funcname(f) diff --git a/src/runtime/proc.go b/src/runtime/proc.go index 66a06feb24f..ded406cc28d 100644 --- a/src/runtime/proc.go +++ b/src/runtime/proc.go @@ -3570,6 +3570,21 @@ func preemptPark(gp *g) { throw("bad g status") } gp.waitreason = waitReasonPreempted + + if gp.asyncSafePoint { + // Double-check that async preemption does not + // happen in SPWRITE assembly functions. + // isAsyncSafePoint must exclude this case. + f := findfunc(gp.sched.pc) + if !f.valid() { + throw("preempt at unknown pc") + } + if f.flag&funcFlag_SPWRITE != 0 { + println("runtime: unexpected SPWRITE function", funcname(f), "in async preempt") + throw("preempt SPWRITE") + } + } + // Transition from _Grunning to _Gscan|_Gpreempted. We can't // be in _Grunning when we dropg because then we'd be running // without an M, but the moment we're in _Gpreempted, diff --git a/src/runtime/traceback.go b/src/runtime/traceback.go index 167d51c452a..89780edc1ff 100644 --- a/src/runtime/traceback.go +++ b/src/runtime/traceback.go @@ -219,18 +219,25 @@ func gentraceback(pc0, sp0, lr0 uintptr, gp *g, skip int, pcbuf *uintptr, max in // This function marks the top of the stack. Stop the traceback. frame.lr = 0 flr = funcInfo{} - } else if flag&funcFlag_SPWRITE != 0 { + } else if flag&funcFlag_SPWRITE != 0 && (callback == nil || n > 0) { // The function we are in does a write to SP that we don't know // how to encode in the spdelta table. Examples include context // switch routines like runtime.gogo but also any code that switches // to the g0 stack to run host C code. Since we can't reliably unwind // the SP (we might not even be on the stack we think we are), // we stop the traceback here. + // This only applies for profiling signals (callback == nil). + // + // For a GC stack traversal (callback != nil), we should only see + // a function when it has voluntarily preempted itself on entry + // during the stack growth check. In that case, the function has + // not yet had a chance to do any writes to SP and is safe to unwind. + // isAsyncSafePoint does not allow assembly functions to be async preempted, + // and preemptPark double-checks that SPWRITE functions are not async preempted. + // So for GC stack traversal we leave things alone (this if body does not execute for n == 0) + // at the bottom frame of the stack. But farther up the stack we'd better not + // find any. if callback != nil { - // Finding an SPWRITE should only happen for a profiling signal, which can - // arrive at any time. For a GC stack traversal (callback != nil), - // we shouldn't see this case, and we must be sure to walk the - // entire stack or the GC is invalid. So crash. println("traceback: unexpected SPWRITE function", funcname(f)) throw("traceback") } From 07ff596404b03a8e01ed53f1553c59eb215dc697 Mon Sep 17 00:00:00 2001 From: Jonathan Swinney Date: Sat, 17 Apr 2021 01:12:28 +0000 Subject: [PATCH 005/100] runtime/internal/atomic: add LSE atomics instructions to arm64 As a follow up to an earlier change[1] to add ARMv8+LSE instructions in the compiler generated atomic intrinsics, make the same change in the runtime library. Since not all ARMv8 systems support LSE instructions, they are protected by a feature-flag branch. [1]: golang.org/cl/234217 commit: ecc3f5112eba Change-Id: I0e2fb22e78d5eddb6547863667a8865946679a00 Reviewed-on: https://go-review.googlesource.com/c/go/+/310591 Reviewed-by: Cherry Mui Run-TryBot: Cherry Mui TryBot-Result: Go Bot Trust: Heschi Kreinick --- src/runtime/internal/atomic/atomic_arm64.go | 9 +- src/runtime/internal/atomic/atomic_arm64.s | 93 +++++++++++++++++---- 2 files changed, 85 insertions(+), 17 deletions(-) diff --git a/src/runtime/internal/atomic/atomic_arm64.go b/src/runtime/internal/atomic/atomic_arm64.go index 131c687e1ba..3c8736997f4 100644 --- a/src/runtime/internal/atomic/atomic_arm64.go +++ b/src/runtime/internal/atomic/atomic_arm64.go @@ -7,7 +7,14 @@ package atomic -import "unsafe" +import ( + "unsafe" + "internal/cpu" +) + +const ( + offsetARM64HasATOMICS = unsafe.Offsetof(cpu.ARM64.HasATOMICS) +) //go:noescape func Xadd(ptr *uint32, delta int32) uint32 diff --git a/src/runtime/internal/atomic/atomic_arm64.s b/src/runtime/internal/atomic/atomic_arm64.s index 587e7f05e25..e9467afecd7 100644 --- a/src/runtime/internal/atomic/atomic_arm64.s +++ b/src/runtime/internal/atomic/atomic_arm64.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +#include "go_asm.h" #include "textflag.h" TEXT ·Casint32(SB), NOSPLIT, $0-17 @@ -127,10 +128,15 @@ TEXT ·Store64(SB), NOSPLIT, $0-16 TEXT ·Xchg(SB), NOSPLIT, $0-20 MOVD ptr+0(FP), R0 MOVW new+8(FP), R1 -again: + MOVBU internal∕cpu·ARM64+const_offsetARM64HasATOMICS(SB), R4 + CBZ R4, load_store_loop + SWPALW R1, (R0), R2 + MOVW R2, ret+16(FP) + RET +load_store_loop: LDAXRW (R0), R2 STLXRW R1, (R0), R3 - CBNZ R3, again + CBNZ R3, load_store_loop MOVW R2, ret+16(FP) RET @@ -142,10 +148,15 @@ again: TEXT ·Xchg64(SB), NOSPLIT, $0-24 MOVD ptr+0(FP), R0 MOVD new+8(FP), R1 -again: + MOVBU internal∕cpu·ARM64+const_offsetARM64HasATOMICS(SB), R4 + CBZ R4, load_store_loop + SWPALD R1, (R0), R2 + MOVD R2, ret+16(FP) + RET +load_store_loop: LDAXR (R0), R2 STLXR R1, (R0), R3 - CBNZ R3, again + CBNZ R3, load_store_loop MOVD R2, ret+16(FP) RET @@ -160,12 +171,20 @@ TEXT ·Cas(SB), NOSPLIT, $0-17 MOVD ptr+0(FP), R0 MOVW old+8(FP), R1 MOVW new+12(FP), R2 -again: + MOVBU internal∕cpu·ARM64+const_offsetARM64HasATOMICS(SB), R4 + CBZ R4, load_store_loop + MOVD R1, R3 + CASALW R3, (R0), R2 + CMP R1, R3 + CSET EQ, R0 + MOVB R0, ret+16(FP) + RET +load_store_loop: LDAXRW (R0), R3 CMPW R1, R3 BNE ok STLXRW R2, (R0), R3 - CBNZ R3, again + CBNZ R3, load_store_loop ok: CSET EQ, R0 MOVB R0, ret+16(FP) @@ -183,12 +202,20 @@ TEXT ·Cas64(SB), NOSPLIT, $0-25 MOVD ptr+0(FP), R0 MOVD old+8(FP), R1 MOVD new+16(FP), R2 -again: + MOVBU internal∕cpu·ARM64+const_offsetARM64HasATOMICS(SB), R4 + CBZ R4, load_store_loop + MOVD R1, R3 + CASALD R3, (R0), R2 + CMP R1, R3 + CSET EQ, R0 + MOVB R0, ret+24(FP) + RET +load_store_loop: LDAXR (R0), R3 CMP R1, R3 BNE ok STLXR R2, (R0), R3 - CBNZ R3, again + CBNZ R3, load_store_loop ok: CSET EQ, R0 MOVB R0, ret+24(FP) @@ -201,11 +228,17 @@ ok: TEXT ·Xadd(SB), NOSPLIT, $0-20 MOVD ptr+0(FP), R0 MOVW delta+8(FP), R1 -again: + MOVBU internal∕cpu·ARM64+const_offsetARM64HasATOMICS(SB), R4 + CBZ R4, load_store_loop + LDADDALW R1, (R0), R2 + ADD R1, R2 + MOVW R2, ret+16(FP) + RET +load_store_loop: LDAXRW (R0), R2 ADDW R2, R1, R2 STLXRW R2, (R0), R3 - CBNZ R3, again + CBNZ R3, load_store_loop MOVW R2, ret+16(FP) RET @@ -216,11 +249,17 @@ again: TEXT ·Xadd64(SB), NOSPLIT, $0-24 MOVD ptr+0(FP), R0 MOVD delta+8(FP), R1 -again: + MOVBU internal∕cpu·ARM64+const_offsetARM64HasATOMICS(SB), R4 + CBZ R4, load_store_loop + LDADDALD R1, (R0), R2 + ADD R1, R2 + MOVD R2, ret+16(FP) + RET +load_store_loop: LDAXR (R0), R2 ADD R2, R1, R2 STLXR R2, (R0), R3 - CBNZ R3, again + CBNZ R3, load_store_loop MOVD R2, ret+16(FP) RET @@ -236,37 +275,59 @@ TEXT ·Xchguintptr(SB), NOSPLIT, $0-24 TEXT ·And8(SB), NOSPLIT, $0-9 MOVD ptr+0(FP), R0 MOVB val+8(FP), R1 + MOVBU internal∕cpu·ARM64+const_offsetARM64HasATOMICS(SB), R4 + CBZ R4, load_store_loop + MVN R1, R2 + LDCLRALB R2, (R0), R3 + RET +load_store_loop: LDAXRB (R0), R2 AND R1, R2 STLXRB R2, (R0), R3 - CBNZ R3, -3(PC) + CBNZ R3, load_store_loop RET TEXT ·Or8(SB), NOSPLIT, $0-9 MOVD ptr+0(FP), R0 MOVB val+8(FP), R1 + MOVBU internal∕cpu·ARM64+const_offsetARM64HasATOMICS(SB), R4 + CBZ R4, load_store_loop + LDORALB R1, (R0), R2 + RET +load_store_loop: LDAXRB (R0), R2 ORR R1, R2 STLXRB R2, (R0), R3 - CBNZ R3, -3(PC) + CBNZ R3, load_store_loop RET // func And(addr *uint32, v uint32) TEXT ·And(SB), NOSPLIT, $0-12 MOVD ptr+0(FP), R0 MOVW val+8(FP), R1 + MOVBU internal∕cpu·ARM64+const_offsetARM64HasATOMICS(SB), R4 + CBZ R4, load_store_loop + MVN R1, R2 + LDCLRALW R2, (R0), R3 + RET +load_store_loop: LDAXRW (R0), R2 AND R1, R2 STLXRW R2, (R0), R3 - CBNZ R3, -3(PC) + CBNZ R3, load_store_loop RET // func Or(addr *uint32, v uint32) TEXT ·Or(SB), NOSPLIT, $0-12 MOVD ptr+0(FP), R0 MOVW val+8(FP), R1 + MOVBU internal∕cpu·ARM64+const_offsetARM64HasATOMICS(SB), R4 + CBZ R4, load_store_loop + LDORALW R1, (R0), R2 + RET +load_store_loop: LDAXRW (R0), R2 ORR R1, R2 STLXRW R2, (R0), R3 - CBNZ R3, -3(PC) + CBNZ R3, load_store_loop RET From 3b321a9d122f0dbf8b333cc79bbf61218e3d05ba Mon Sep 17 00:00:00 2001 From: Ruslan Andreev Date: Tue, 19 Jan 2021 22:30:10 +0800 Subject: [PATCH 006/100] cmd/compile: add arch-specific inlining for runtime.memmove This CL add runtime.memmove inlining for AMD64 and ARM64. According to ssa dump from testcases generic rules can't inline memmomve properly due to one of the arguments is Phi operation. But this Phi op will be optimized out by later optimization stages. As a result memmove can be inlined during arch-specific rules. The commit add new optimization rules to arch-specific rules that can inline runtime.memmove if it possible during lowering stage. Optimization fires 5 times in Go source-code using regabi. Fixes #41662 Change-Id: Iaffaf4c482d068b5f0683d141863892202cc8824 Reviewed-on: https://go-review.googlesource.com/c/go/+/289151 Reviewed-by: Keith Randall Run-TryBot: Keith Randall TryBot-Result: Go Bot Trust: David Chase --- src/cmd/compile/internal/ssa/gen/AMD64.rules | 19 +++++ src/cmd/compile/internal/ssa/gen/ARM64.rules | 9 +++ .../compile/internal/ssa/gen/generic.rules | 6 +- src/cmd/compile/internal/ssa/rewriteAMD64.go | 74 +++++++++++++++++++ src/cmd/compile/internal/ssa/rewriteARM64.go | 50 +++++++++++++ test/codegen/copy.go | 36 +++++++++ 6 files changed, 191 insertions(+), 3 deletions(-) diff --git a/src/cmd/compile/internal/ssa/gen/AMD64.rules b/src/cmd/compile/internal/ssa/gen/AMD64.rules index ec91ea1513b..4cd00732fc3 100644 --- a/src/cmd/compile/internal/ssa/gen/AMD64.rules +++ b/src/cmd/compile/internal/ssa/gen/AMD64.rules @@ -2216,3 +2216,22 @@ (MOVOstore [dstOff] {dstSym} ptr (MOVOload [srcOff] {srcSym} (SB) _) mem) && symIsRO(srcSym) => (MOVQstore [dstOff+8] {dstSym} ptr (MOVQconst [int64(read64(srcSym, int64(srcOff)+8, config.ctxt.Arch.ByteOrder))]) (MOVQstore [dstOff] {dstSym} ptr (MOVQconst [int64(read64(srcSym, int64(srcOff), config.ctxt.Arch.ByteOrder))]) mem)) + +// Arch-specific inlining for small or disjoint runtime.memmove +// Match post-lowering calls, memory version. +(SelectN [0] call:(CALLstatic {sym} s1:(MOVQstoreconst _ [sc] s2:(MOVQstore _ src s3:(MOVQstore _ dst mem))))) + && sc.Val64() >= 0 + && isSameCall(sym, "runtime.memmove") + && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 + && isInlinableMemmove(dst, src, sc.Val64(), config) + && clobber(s1, s2, s3, call) + => (Move [sc.Val64()] dst src mem) + +// Match post-lowering calls, register version. +(SelectN [0] call:(CALLstatic {sym} dst src (MOVQconst [sz]) mem)) + && sz >= 0 + && isSameCall(sym, "runtime.memmove") + && call.Uses == 1 + && isInlinableMemmove(dst, src, sz, config) + && clobber(call) + => (Move [sz] dst src mem) diff --git a/src/cmd/compile/internal/ssa/gen/ARM64.rules b/src/cmd/compile/internal/ssa/gen/ARM64.rules index 3d2759493e5..62699f290c2 100644 --- a/src/cmd/compile/internal/ssa/gen/ARM64.rules +++ b/src/cmd/compile/internal/ssa/gen/ARM64.rules @@ -2859,3 +2859,12 @@ (MOVHUload [off] {sym} (SB) _) && symIsRO(sym) => (MOVDconst [int64(read16(sym, int64(off), config.ctxt.Arch.ByteOrder))]) (MOVWUload [off] {sym} (SB) _) && symIsRO(sym) => (MOVDconst [int64(read32(sym, int64(off), config.ctxt.Arch.ByteOrder))]) (MOVDload [off] {sym} (SB) _) && symIsRO(sym) => (MOVDconst [int64(read64(sym, int64(off), config.ctxt.Arch.ByteOrder))]) + +// Arch-specific inlining for small or disjoint runtime.memmove +(SelectN [0] call:(CALLstatic {sym} s1:(MOVDstore _ (MOVDconst [sz]) s2:(MOVDstore _ src s3:(MOVDstore {t} _ dst mem))))) + && sz >= 0 + && isSameCall(sym, "runtime.memmove") + && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 + && isInlinableMemmove(dst, src, sz, config) + && clobber(s1, s2, s3, call) + => (Move [sz] dst src mem) diff --git a/src/cmd/compile/internal/ssa/gen/generic.rules b/src/cmd/compile/internal/ssa/gen/generic.rules index aad7600d793..5cbc70cf41d 100644 --- a/src/cmd/compile/internal/ssa/gen/generic.rules +++ b/src/cmd/compile/internal/ssa/gen/generic.rules @@ -2065,7 +2065,7 @@ (SelectN [0] call:(StaticCall {sym} s1:(Store _ (Const(64|32) [sz]) s2:(Store _ src s3:(Store {t} _ dst mem))))) && sz >= 0 && isSameCall(sym, "runtime.memmove") - && t.IsPtr() // avoids TUINTPTR, see issue 30061 + && t.IsPtr() // avoids TUNSAFEPTR, see issue 30061 && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && isInlinableMemmove(dst, src, int64(sz), config) && clobber(s1, s2, s3, call) @@ -2076,7 +2076,7 @@ && sz >= 0 && call.Uses == 1 // this will exclude all calls with results && isSameCall(sym, "runtime.memmove") - && dst.Type.IsPtr() // avoids TUINTPTR, see issue 30061 + && dst.Type.IsPtr() // avoids TUNSAFEPTR, see issue 30061 && isInlinableMemmove(dst, src, int64(sz), config) && clobber(call) => (Move {dst.Type.Elem()} [int64(sz)] dst src mem) @@ -2086,7 +2086,7 @@ && sz >= 0 && call.Uses == 1 // this will exclude all calls with results && isSameCall(sym, "runtime.memmove") - && dst.Type.IsPtr() // avoids TUINTPTR, see issue 30061 + && dst.Type.IsPtr() // avoids TUNSAFEPTR, see issue 30061 && isInlinableMemmove(dst, src, int64(sz), config) && clobber(call) => (Move {dst.Type.Elem()} [int64(sz)] dst src mem) diff --git a/src/cmd/compile/internal/ssa/rewriteAMD64.go b/src/cmd/compile/internal/ssa/rewriteAMD64.go index efb5d271451..5045ba7351f 100644 --- a/src/cmd/compile/internal/ssa/rewriteAMD64.go +++ b/src/cmd/compile/internal/ssa/rewriteAMD64.go @@ -1038,6 +1038,8 @@ func rewriteValueAMD64(v *Value) bool { return rewriteValueAMD64_OpSelect0(v) case OpSelect1: return rewriteValueAMD64_OpSelect1(v) + case OpSelectN: + return rewriteValueAMD64_OpSelectN(v) case OpSignExt16to32: v.Op = OpAMD64MOVWQSX return true @@ -32981,6 +32983,78 @@ func rewriteValueAMD64_OpSelect1(v *Value) bool { } return false } +func rewriteValueAMD64_OpSelectN(v *Value) bool { + v_0 := v.Args[0] + b := v.Block + config := b.Func.Config + // match: (SelectN [0] call:(CALLstatic {sym} s1:(MOVQstoreconst _ [sc] s2:(MOVQstore _ src s3:(MOVQstore _ dst mem))))) + // cond: sc.Val64() >= 0 && isSameCall(sym, "runtime.memmove") && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && isInlinableMemmove(dst, src, sc.Val64(), config) && clobber(s1, s2, s3, call) + // result: (Move [sc.Val64()] dst src mem) + for { + if auxIntToInt64(v.AuxInt) != 0 { + break + } + call := v_0 + if call.Op != OpAMD64CALLstatic || len(call.Args) != 1 { + break + } + sym := auxToCall(call.Aux) + s1 := call.Args[0] + if s1.Op != OpAMD64MOVQstoreconst { + break + } + sc := auxIntToValAndOff(s1.AuxInt) + _ = s1.Args[1] + s2 := s1.Args[1] + if s2.Op != OpAMD64MOVQstore { + break + } + _ = s2.Args[2] + src := s2.Args[1] + s3 := s2.Args[2] + if s3.Op != OpAMD64MOVQstore { + break + } + mem := s3.Args[2] + dst := s3.Args[1] + if !(sc.Val64() >= 0 && isSameCall(sym, "runtime.memmove") && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && isInlinableMemmove(dst, src, sc.Val64(), config) && clobber(s1, s2, s3, call)) { + break + } + v.reset(OpMove) + v.AuxInt = int64ToAuxInt(sc.Val64()) + v.AddArg3(dst, src, mem) + return true + } + // match: (SelectN [0] call:(CALLstatic {sym} dst src (MOVQconst [sz]) mem)) + // cond: sz >= 0 && isSameCall(sym, "runtime.memmove") && call.Uses == 1 && isInlinableMemmove(dst, src, sz, config) && clobber(call) + // result: (Move [sz] dst src mem) + for { + if auxIntToInt64(v.AuxInt) != 0 { + break + } + call := v_0 + if call.Op != OpAMD64CALLstatic || len(call.Args) != 4 { + break + } + sym := auxToCall(call.Aux) + mem := call.Args[3] + dst := call.Args[0] + src := call.Args[1] + call_2 := call.Args[2] + if call_2.Op != OpAMD64MOVQconst { + break + } + sz := auxIntToInt64(call_2.AuxInt) + if !(sz >= 0 && isSameCall(sym, "runtime.memmove") && call.Uses == 1 && isInlinableMemmove(dst, src, sz, config) && clobber(call)) { + break + } + v.reset(OpMove) + v.AuxInt = int64ToAuxInt(sz) + v.AddArg3(dst, src, mem) + return true + } + return false +} func rewriteValueAMD64_OpSlicemask(v *Value) bool { v_0 := v.Args[0] b := v.Block diff --git a/src/cmd/compile/internal/ssa/rewriteARM64.go b/src/cmd/compile/internal/ssa/rewriteARM64.go index 0ba3951df57..3cdc4d36cb5 100644 --- a/src/cmd/compile/internal/ssa/rewriteARM64.go +++ b/src/cmd/compile/internal/ssa/rewriteARM64.go @@ -984,6 +984,8 @@ func rewriteValueARM64(v *Value) bool { return rewriteValueARM64_OpSelect0(v) case OpSelect1: return rewriteValueARM64_OpSelect1(v) + case OpSelectN: + return rewriteValueARM64_OpSelectN(v) case OpSignExt16to32: v.Op = OpARM64MOVHreg return true @@ -25983,6 +25985,54 @@ func rewriteValueARM64_OpSelect1(v *Value) bool { } return false } +func rewriteValueARM64_OpSelectN(v *Value) bool { + v_0 := v.Args[0] + b := v.Block + config := b.Func.Config + // match: (SelectN [0] call:(CALLstatic {sym} s1:(MOVDstore _ (MOVDconst [sz]) s2:(MOVDstore _ src s3:(MOVDstore {t} _ dst mem))))) + // cond: sz >= 0 && isSameCall(sym, "runtime.memmove") && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && isInlinableMemmove(dst, src, sz, config) && clobber(s1, s2, s3, call) + // result: (Move [sz] dst src mem) + for { + if auxIntToInt64(v.AuxInt) != 0 { + break + } + call := v_0 + if call.Op != OpARM64CALLstatic { + break + } + sym := auxToCall(call.Aux) + s1 := call.Args[0] + if s1.Op != OpARM64MOVDstore { + break + } + _ = s1.Args[2] + s1_1 := s1.Args[1] + if s1_1.Op != OpARM64MOVDconst { + break + } + sz := auxIntToInt64(s1_1.AuxInt) + s2 := s1.Args[2] + if s2.Op != OpARM64MOVDstore { + break + } + _ = s2.Args[2] + src := s2.Args[1] + s3 := s2.Args[2] + if s3.Op != OpARM64MOVDstore { + break + } + mem := s3.Args[2] + dst := s3.Args[1] + if !(sz >= 0 && isSameCall(sym, "runtime.memmove") && s1.Uses == 1 && s2.Uses == 1 && s3.Uses == 1 && isInlinableMemmove(dst, src, sz, config) && clobber(s1, s2, s3, call)) { + break + } + v.reset(OpMove) + v.AuxInt = int64ToAuxInt(sz) + v.AddArg3(dst, src, mem) + return true + } + return false +} func rewriteValueARM64_OpSlicemask(v *Value) bool { v_0 := v.Args[0] b := v.Block diff --git a/test/codegen/copy.go b/test/codegen/copy.go index 0cd86d1161a..ea8a01f803f 100644 --- a/test/codegen/copy.go +++ b/test/codegen/copy.go @@ -97,6 +97,42 @@ func moveDisjointNoOverlap(a *[256]byte) { copy(a[:], a[128:]) } +// Check arch-specific memmove lowering. See issue 41662 fot details + +func moveArchLowering1(b []byte, x *[1]byte) { + _ = b[1] + // amd64:-".*memmove" + // arm64:-".*memmove" + copy(b, x[:]) +} + +func moveArchLowering2(b []byte, x *[2]byte) { + _ = b[2] + // amd64:-".*memmove" + // arm64:-".*memmove" + copy(b, x[:]) +} + +func moveArchLowering4(b []byte, x *[4]byte) { + _ = b[4] + // amd64:-".*memmove" + // arm64:-".*memmove" + copy(b, x[:]) +} + +func moveArchLowering8(b []byte, x *[8]byte) { + _ = b[8] + // amd64:-".*memmove" + // arm64:-".*memmove" + copy(b, x[:]) +} + +func moveArchLowering16(b []byte, x *[16]byte) { + _ = b[16] + // amd64:-".*memmove" + copy(b, x[:]) +} + // Check that no branches are generated when the pointers are [not] equal. func ptrEqual() { From f93b951f33add708d9e745e95a29ebe98f3e1255 Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Wed, 12 May 2021 13:08:16 -0400 Subject: [PATCH 007/100] cmd/compile/abi-internal.md: fix table format The table was not rendered correctly because one line missed a column. Change-Id: I1373e4e9fb8b8f2dcd9fd0db339083362cce9b71 Reviewed-on: https://go-review.googlesource.com/c/go/+/319291 Trust: Cherry Mui Reviewed-by: Than McIntosh --- src/cmd/compile/abi-internal.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cmd/compile/abi-internal.md b/src/cmd/compile/abi-internal.md index f901e707be3..1ae3c2538ff 100644 --- a/src/cmd/compile/abi-internal.md +++ b/src/cmd/compile/abi-internal.md @@ -402,7 +402,7 @@ without corrupting arguments or results. Special-purpose registers are as follows: | Register | Call meaning | Return meaning | Body meaning | -| --- | --- | --- | +| --- | --- | --- | --- | | RSP | Stack pointer | Same | Same | | RBP | Frame pointer | Same | Same | | RDX | Closure context pointer | Scratch | Scratch | From 6db7480f5973ced97dfb08f949889e2ff108a492 Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Tue, 11 May 2021 10:15:57 -0400 Subject: [PATCH 008/100] cmd/go/internal/modload: in updateLazyRoots, do not require the main module explicitly Fixes #46078 Change-Id: I8044dac717459f1eeae1d8381a6503f22f9f51ff Reviewed-on: https://go-review.googlesource.com/c/go/+/319009 Trust: Bryan C. Mills Reviewed-by: Jay Conrod --- src/cmd/go/internal/modload/buildlist.go | 3 +- .../go/testdata/script/mod_tidy_lazy_self.txt | 71 +++++++++++++++++++ 2 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 src/cmd/go/testdata/script/mod_tidy_lazy_self.txt diff --git a/src/cmd/go/internal/modload/buildlist.go b/src/cmd/go/internal/modload/buildlist.go index 7a0cea405e3..e5db41c7486 100644 --- a/src/cmd/go/internal/modload/buildlist.go +++ b/src/cmd/go/internal/modload/buildlist.go @@ -815,7 +815,8 @@ func updateLazyRoots(ctx context.Context, direct map[string]bool, rs *Requiremen roots = make([]module.Version, 0, len(rs.rootModules)) rootsUpgraded = false - inRootPaths := make(map[string]bool, len(rs.rootModules)) + inRootPaths := make(map[string]bool, len(rs.rootModules)+1) + inRootPaths[Target.Path] = true for _, m := range rs.rootModules { if inRootPaths[m.Path] { // This root specifies a redundant path. We already retained the diff --git a/src/cmd/go/testdata/script/mod_tidy_lazy_self.txt b/src/cmd/go/testdata/script/mod_tidy_lazy_self.txt new file mode 100644 index 00000000000..ffcea186035 --- /dev/null +++ b/src/cmd/go/testdata/script/mod_tidy_lazy_self.txt @@ -0,0 +1,71 @@ +# Regression test for https://golang.org/issue/46078: +# 'go mod tidy' should not panic if the main module initially +# requires an older version of itself. + + +# A module that explicitly requires an older version of itself should be +# rejected as inconsistent: we enforce that every explicit requirement is the +# selected version of its module path, but the selected version of the main +# module is always itself — not some explicit version. + +! go list -m all +stderr '^go: updates to go\.mod needed; to update it:\n\tgo mod tidy$' + + +# The suggested 'go mod tidy' command should succeed (not crash). + +go mod tidy + + +# We prune out redundant roots very early on in module loading, and at that +# point the indirect requirement on example.net/x v0.1.0 appears to be +# irrelevant. It should be pruned out; when the import of "example.net/x" is +# later resolved, it should resolve at the latest version (v0.2.0), not the +# version implied by the (former) misleading requirement on the older version of +# the main module. + +cmp go.mod go.mod.tidy + + +-- go.mod -- +module golang.org/issue/46078 + +go 1.17 + +replace ( + example.net/x v0.1.0 => ./x + example.net/x v0.2.0 => ./x + golang.org/issue/46078 v0.1.0 => ./old +) + +require golang.org/issue/46078 v0.1.0 +-- go.mod.tidy -- +module golang.org/issue/46078 + +go 1.17 + +replace ( + example.net/x v0.1.0 => ./x + example.net/x v0.2.0 => ./x + golang.org/issue/46078 v0.1.0 => ./old +) + +require example.net/x v0.2.0 +-- issue46078/issue.go -- +package issue46078 + +import _ "example.net/x" + +-- old/go.mod -- +module golang.org/issue/46078 + +go 1.17 + +require example.net/x v0.1.0 + +-- x/go.mod -- +module example.net/x + +go 1.17 +-- x/x.go -- +package x From 2c76a6f7f85365cefb5200b2b3408fd6bd421b3d Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Wed, 12 May 2021 17:55:42 +0200 Subject: [PATCH 009/100] all: add //go:build lines to assembly files Don't add them to files in vendor and cmd/vendor though. These will be pulled in by updating the respective dependencies. For #41184 Change-Id: Icc57458c9b3033c347124323f33084c85b224c70 Reviewed-on: https://go-review.googlesource.com/c/go/+/319389 Trust: Tobias Klauser Run-TryBot: Tobias Klauser TryBot-Result: Go Bot Reviewed-by: Russ Cox --- src/cmd/compile/internal/ssa/flags_amd64_test.s | 2 -- src/cmd/compile/internal/ssa/flags_arm64_test.s | 2 -- src/cmd/dist/vfp_arm.s | 3 ++- src/cmd/dist/vfp_default.s | 3 ++- src/crypto/cipher/xor_ppc64x.s | 1 + src/crypto/md5/md5block_ppc64x.s | 1 + src/crypto/x509/internal/macos/corefoundation.s | 1 + src/crypto/x509/internal/macos/security.s | 1 + src/internal/bytealg/compare_mips64x.s | 1 + src/internal/bytealg/compare_mipsx.s | 1 + src/internal/bytealg/compare_ppc64x.s | 1 + src/internal/bytealg/count_ppc64x.s | 1 + src/internal/bytealg/equal_mips64x.s | 1 + src/internal/bytealg/equal_mipsx.s | 1 + src/internal/bytealg/equal_ppc64x.s | 1 + src/internal/bytealg/index_ppc64x.s | 1 + src/internal/bytealg/indexbyte_mips64x.s | 1 + src/internal/bytealg/indexbyte_mipsx.s | 1 + src/internal/bytealg/indexbyte_ppc64x.s | 1 + src/internal/cpu/cpu_x86.s | 1 + src/math/big/arith_386.s | 1 + src/math/big/arith_amd64.s | 1 + src/math/big/arith_arm.s | 1 + src/math/big/arith_arm64.s | 1 + src/math/big/arith_mips64x.s | 4 +++- src/math/big/arith_mipsx.s | 4 +++- src/math/big/arith_ppc64x.s | 4 +++- src/math/big/arith_riscv64.s | 1 + src/math/big/arith_s390x.s | 3 ++- src/math/big/arith_wasm.s | 1 + src/math/floor_ppc64x.s | 1 + src/math/modf_ppc64x.s | 1 + src/math/sqrt_mipsx.s | 1 + src/math/sqrt_ppc64x.s | 1 + src/math/sqrt_riscv64.s | 2 -- src/reflect/asm_mips64x.s | 1 + src/reflect/asm_mipsx.s | 1 + src/reflect/asm_ppc64x.s | 1 + src/runtime/asm_mips64x.s | 1 + src/runtime/asm_mipsx.s | 1 + src/runtime/asm_ppc64x.s | 1 + src/runtime/atomic_mips64x.s | 1 + src/runtime/atomic_mipsx.s | 1 + src/runtime/atomic_ppc64x.s | 1 + src/runtime/cgo/asm_mips64x.s | 1 + src/runtime/cgo/asm_mipsx.s | 1 + src/runtime/cgo/asm_ppc64x.s | 1 + src/runtime/cgo/asm_riscv64.s | 2 -- src/runtime/duff_mips64x.s | 1 + src/runtime/duff_ppc64x.s | 1 + src/runtime/internal/atomic/atomic_mips64x.s | 1 + src/runtime/internal/atomic/atomic_mipsx.s | 1 + src/runtime/internal/atomic/atomic_ppc64x.s | 2 +- src/runtime/internal/atomic/sys_nonlinux_arm.s | 3 ++- src/runtime/libfuzzer_amd64.s | 1 + src/runtime/libfuzzer_arm64.s | 1 + src/runtime/memclr_386.s | 1 + src/runtime/memclr_amd64.s | 1 + src/runtime/memclr_mips64x.s | 1 + src/runtime/memclr_mipsx.s | 1 + src/runtime/memclr_ppc64x.s | 1 + src/runtime/memmove_386.s | 1 + src/runtime/memmove_amd64.s | 1 + src/runtime/memmove_mips64x.s | 1 + src/runtime/memmove_mipsx.s | 1 + src/runtime/memmove_ppc64x.s | 1 + src/runtime/mkduff.go | 2 ++ src/runtime/mkpreempt.go | 1 + src/runtime/msan_amd64.s | 1 + src/runtime/msan_arm64.s | 1 + src/runtime/preempt_mips64x.s | 1 + src/runtime/preempt_mipsx.s | 1 + src/runtime/preempt_ppc64x.s | 1 + src/runtime/race_amd64.s | 1 + src/runtime/race_arm64.s | 1 + src/runtime/race_ppc64le.s | 1 + src/runtime/rt0_linux_mips64x.s | 1 + src/runtime/rt0_linux_mipsx.s | 1 + src/runtime/sys_aix_ppc64.s | 3 --- src/runtime/sys_linux_mips64x.s | 1 + src/runtime/sys_linux_mipsx.s | 1 + src/runtime/sys_linux_ppc64x.s | 1 + src/runtime/tls_arm.s | 1 + src/runtime/tls_mips64x.s | 1 + src/runtime/tls_mipsx.s | 1 + src/runtime/tls_ppc64x.s | 1 + src/runtime/wincallback.go | 2 ++ src/runtime/zcallback_windows.s | 2 ++ src/sync/atomic/asm.s | 1 + src/sync/atomic/race.s | 1 + 90 files changed, 98 insertions(+), 19 deletions(-) diff --git a/src/cmd/compile/internal/ssa/flags_amd64_test.s b/src/cmd/compile/internal/ssa/flags_amd64_test.s index 8bd87019af7..7402f6badb1 100644 --- a/src/cmd/compile/internal/ssa/flags_amd64_test.s +++ b/src/cmd/compile/internal/ssa/flags_amd64_test.s @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build amd64 - #include "textflag.h" TEXT ·asmAddFlags(SB),NOSPLIT,$0-24 diff --git a/src/cmd/compile/internal/ssa/flags_arm64_test.s b/src/cmd/compile/internal/ssa/flags_arm64_test.s index f201bcc9943..639d7e3aedc 100644 --- a/src/cmd/compile/internal/ssa/flags_arm64_test.s +++ b/src/cmd/compile/internal/ssa/flags_arm64_test.s @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build arm64 - #include "textflag.h" TEXT ·asmAddFlags(SB),NOSPLIT,$0-24 diff --git a/src/cmd/dist/vfp_arm.s b/src/cmd/dist/vfp_arm.s index d571f8b82a2..525ee9b3661 100644 --- a/src/cmd/dist/vfp_arm.s +++ b/src/cmd/dist/vfp_arm.s @@ -2,7 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build gc,arm +//go:build gc +// +build gc #include "textflag.h" diff --git a/src/cmd/dist/vfp_default.s b/src/cmd/dist/vfp_default.s index 84829beeff3..0c1e16b0aa0 100644 --- a/src/cmd/dist/vfp_default.s +++ b/src/cmd/dist/vfp_default.s @@ -2,7 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build !arm,gc +//go:build gc && !arm +// +build gc,!arm #include "textflag.h" diff --git a/src/crypto/cipher/xor_ppc64x.s b/src/crypto/cipher/xor_ppc64x.s index 4cef31d0ee3..2ba6d9639c4 100644 --- a/src/crypto/cipher/xor_ppc64x.s +++ b/src/crypto/cipher/xor_ppc64x.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build ppc64 || ppc64le // +build ppc64 ppc64le #include "textflag.h" diff --git a/src/crypto/md5/md5block_ppc64x.s b/src/crypto/md5/md5block_ppc64x.s index e1f859e3376..8c28ec2473c 100644 --- a/src/crypto/md5/md5block_ppc64x.s +++ b/src/crypto/md5/md5block_ppc64x.s @@ -10,6 +10,7 @@ // Licence: I hereby disclaim the copyright on this code and place it // in the public domain. +//go:build ppc64 || ppc64le // +build ppc64 ppc64le #include "textflag.h" diff --git a/src/crypto/x509/internal/macos/corefoundation.s b/src/crypto/x509/internal/macos/corefoundation.s index a9efaa299d8..cda2336c9d1 100644 --- a/src/crypto/x509/internal/macos/corefoundation.s +++ b/src/crypto/x509/internal/macos/corefoundation.s @@ -2,6 +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 && !ios // +build darwin,!ios #include "textflag.h" diff --git a/src/crypto/x509/internal/macos/security.s b/src/crypto/x509/internal/macos/security.s index 09ce5c6c769..0038f25b277 100644 --- a/src/crypto/x509/internal/macos/security.s +++ b/src/crypto/x509/internal/macos/security.s @@ -2,6 +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 && !ios // +build darwin,!ios #include "textflag.h" diff --git a/src/internal/bytealg/compare_mips64x.s b/src/internal/bytealg/compare_mips64x.s index 4f05fceaca5..b472e510bce 100644 --- a/src/internal/bytealg/compare_mips64x.s +++ b/src/internal/bytealg/compare_mips64x.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build mips64 || mips64le // +build mips64 mips64le #include "go_asm.h" diff --git a/src/internal/bytealg/compare_mipsx.s b/src/internal/bytealg/compare_mipsx.s index 9ac5ba56877..dcc4916e567 100644 --- a/src/internal/bytealg/compare_mipsx.s +++ b/src/internal/bytealg/compare_mipsx.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build mips || mipsle // +build mips mipsle #include "go_asm.h" diff --git a/src/internal/bytealg/compare_ppc64x.s b/src/internal/bytealg/compare_ppc64x.s index 7819da31cd0..83444fa8260 100644 --- a/src/internal/bytealg/compare_ppc64x.s +++ b/src/internal/bytealg/compare_ppc64x.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build ppc64 || ppc64le // +build ppc64 ppc64le #include "go_asm.h" diff --git a/src/internal/bytealg/count_ppc64x.s b/src/internal/bytealg/count_ppc64x.s index a64d7d792d0..94163cbd8a3 100644 --- a/src/internal/bytealg/count_ppc64x.s +++ b/src/internal/bytealg/count_ppc64x.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build ppc64le || ppc64 // +build ppc64le ppc64 #include "go_asm.h" diff --git a/src/internal/bytealg/equal_mips64x.s b/src/internal/bytealg/equal_mips64x.s index 641e3ff06ca..c2f7d3997ed 100644 --- a/src/internal/bytealg/equal_mips64x.s +++ b/src/internal/bytealg/equal_mips64x.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build mips64 || mips64le // +build mips64 mips64le #include "go_asm.h" diff --git a/src/internal/bytealg/equal_mipsx.s b/src/internal/bytealg/equal_mipsx.s index 1cabc70178b..11e5549e45a 100644 --- a/src/internal/bytealg/equal_mipsx.s +++ b/src/internal/bytealg/equal_mipsx.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build mips || mipsle // +build mips mipsle #include "go_asm.h" diff --git a/src/internal/bytealg/equal_ppc64x.s b/src/internal/bytealg/equal_ppc64x.s index 18171eaedc9..5f0fea521b2 100644 --- a/src/internal/bytealg/equal_ppc64x.s +++ b/src/internal/bytealg/equal_ppc64x.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build ppc64 || ppc64le // +build ppc64 ppc64le #include "go_asm.h" diff --git a/src/internal/bytealg/index_ppc64x.s b/src/internal/bytealg/index_ppc64x.s index b7a1e2d7a22..3ed94421256 100644 --- a/src/internal/bytealg/index_ppc64x.s +++ b/src/internal/bytealg/index_ppc64x.s @@ -21,6 +21,7 @@ // work is still needed for a big endian // implementation on power9. +//go:build ppc64 || ppc64le // +build ppc64 ppc64le #include "go_asm.h" diff --git a/src/internal/bytealg/indexbyte_mips64x.s b/src/internal/bytealg/indexbyte_mips64x.s index 6ebf0dee24b..0f377f5a4c9 100644 --- a/src/internal/bytealg/indexbyte_mips64x.s +++ b/src/internal/bytealg/indexbyte_mips64x.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build mips64 || mips64le // +build mips64 mips64le #include "go_asm.h" diff --git a/src/internal/bytealg/indexbyte_mipsx.s b/src/internal/bytealg/indexbyte_mipsx.s index e44440b5f9e..bed015bbd6b 100644 --- a/src/internal/bytealg/indexbyte_mipsx.s +++ b/src/internal/bytealg/indexbyte_mipsx.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build mips || mipsle // +build mips mipsle #include "go_asm.h" diff --git a/src/internal/bytealg/indexbyte_ppc64x.s b/src/internal/bytealg/indexbyte_ppc64x.s index 6e14e80af13..8e13c5a56e3 100644 --- a/src/internal/bytealg/indexbyte_ppc64x.s +++ b/src/internal/bytealg/indexbyte_ppc64x.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build ppc64 || ppc64le // +build ppc64 ppc64le #include "go_asm.h" diff --git a/src/internal/cpu/cpu_x86.s b/src/internal/cpu/cpu_x86.s index 93c712d784c..0df5da1cc74 100644 --- a/src/internal/cpu/cpu_x86.s +++ b/src/internal/cpu/cpu_x86.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build 386 || amd64 // +build 386 amd64 #include "textflag.h" diff --git a/src/math/big/arith_386.s b/src/math/big/arith_386.s index d0ea949fe66..acf2b06665a 100644 --- a/src/math/big/arith_386.s +++ b/src/math/big/arith_386.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build !math_big_pure_go // +build !math_big_pure_go #include "textflag.h" diff --git a/src/math/big/arith_amd64.s b/src/math/big/arith_amd64.s index 61043ca2d97..59be952200f 100644 --- a/src/math/big/arith_amd64.s +++ b/src/math/big/arith_amd64.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build !math_big_pure_go // +build !math_big_pure_go #include "textflag.h" diff --git a/src/math/big/arith_arm.s b/src/math/big/arith_arm.s index cbf7445e7ab..f2872d80a1a 100644 --- a/src/math/big/arith_arm.s +++ b/src/math/big/arith_arm.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build !math_big_pure_go // +build !math_big_pure_go #include "textflag.h" diff --git a/src/math/big/arith_arm64.s b/src/math/big/arith_arm64.s index 22357d088e4..7bfe08e7b7c 100644 --- a/src/math/big/arith_arm64.s +++ b/src/math/big/arith_arm64.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build !math_big_pure_go // +build !math_big_pure_go #include "textflag.h" diff --git a/src/math/big/arith_mips64x.s b/src/math/big/arith_mips64x.s index 804b9fe06ed..4b5c502440f 100644 --- a/src/math/big/arith_mips64x.s +++ b/src/math/big/arith_mips64x.s @@ -2,7 +2,9 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build !math_big_pure_go,mips64 !math_big_pure_go,mips64le +//go:build !math_big_pure_go && (mips64 || mips64le) +// +build !math_big_pure_go +// +build mips64 mips64le #include "textflag.h" diff --git a/src/math/big/arith_mipsx.s b/src/math/big/arith_mipsx.s index efdecb80f32..e72e6d6377e 100644 --- a/src/math/big/arith_mipsx.s +++ b/src/math/big/arith_mipsx.s @@ -2,7 +2,9 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build !math_big_pure_go,mips !math_big_pure_go,mipsle +//go:build !math_big_pure_go && (mips || mipsle) +// +build !math_big_pure_go +// +build mips mipsle #include "textflag.h" diff --git a/src/math/big/arith_ppc64x.s b/src/math/big/arith_ppc64x.s index b299ccc2fb8..68c62864946 100644 --- a/src/math/big/arith_ppc64x.s +++ b/src/math/big/arith_ppc64x.s @@ -2,7 +2,9 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build !math_big_pure_go,ppc64 !math_big_pure_go,ppc64le +//go:build !math_big_pure_go && (ppc64 || ppc64le) +// +build !math_big_pure_go +// +build ppc64 ppc64le #include "textflag.h" diff --git a/src/math/big/arith_riscv64.s b/src/math/big/arith_riscv64.s index a2f7666c7b9..2e950ddd0f3 100644 --- a/src/math/big/arith_riscv64.s +++ b/src/math/big/arith_riscv64.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build !math_big_pure_go && riscv64 // +build !math_big_pure_go,riscv64 #include "textflag.h" diff --git a/src/math/big/arith_s390x.s b/src/math/big/arith_s390x.s index e96480699af..ad822f76b39 100644 --- a/src/math/big/arith_s390x.s +++ b/src/math/big/arith_s390x.s @@ -2,7 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build !math_big_pure_go,s390x +//go:build !math_big_pure_go +// +build !math_big_pure_go #include "textflag.h" diff --git a/src/math/big/arith_wasm.s b/src/math/big/arith_wasm.s index add10644690..e8605f1e153 100644 --- a/src/math/big/arith_wasm.s +++ b/src/math/big/arith_wasm.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build !math_big_pure_go // +build !math_big_pure_go #include "textflag.h" diff --git a/src/math/floor_ppc64x.s b/src/math/floor_ppc64x.s index 29b92a62c34..584c27e28f6 100644 --- a/src/math/floor_ppc64x.s +++ b/src/math/floor_ppc64x.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build ppc64 || ppc64le // +build ppc64 ppc64le #include "textflag.h" diff --git a/src/math/modf_ppc64x.s b/src/math/modf_ppc64x.s index caa435eef91..1303067661c 100644 --- a/src/math/modf_ppc64x.s +++ b/src/math/modf_ppc64x.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build ppc64 || ppc64le // +build ppc64 ppc64le #include "textflag.h" diff --git a/src/math/sqrt_mipsx.s b/src/math/sqrt_mipsx.s index c619c19ec22..291d4af39cf 100644 --- a/src/math/sqrt_mipsx.s +++ b/src/math/sqrt_mipsx.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build mips || mipsle // +build mips mipsle #include "textflag.h" diff --git a/src/math/sqrt_ppc64x.s b/src/math/sqrt_ppc64x.s index 174b63e35a5..c929da2159a 100644 --- a/src/math/sqrt_ppc64x.s +++ b/src/math/sqrt_ppc64x.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build ppc64 || ppc64le // +build ppc64 ppc64le #include "textflag.h" diff --git a/src/math/sqrt_riscv64.s b/src/math/sqrt_riscv64.s index f223510c424..0dbdbc99ed6 100644 --- a/src/math/sqrt_riscv64.s +++ b/src/math/sqrt_riscv64.s @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build riscv64 - #include "textflag.h" // func archSqrt(x float64) float64 diff --git a/src/reflect/asm_mips64x.s b/src/reflect/asm_mips64x.s index ae661262cb4..8d01c5fb7ed 100644 --- a/src/reflect/asm_mips64x.s +++ b/src/reflect/asm_mips64x.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build mips64 || mips64le // +build mips64 mips64le #include "textflag.h" diff --git a/src/reflect/asm_mipsx.s b/src/reflect/asm_mipsx.s index 47fef844a19..6ea82331084 100644 --- a/src/reflect/asm_mipsx.s +++ b/src/reflect/asm_mipsx.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build mips || mipsle // +build mips mipsle #include "textflag.h" diff --git a/src/reflect/asm_ppc64x.s b/src/reflect/asm_ppc64x.s index 010811c31a5..d955e4110f8 100644 --- a/src/reflect/asm_ppc64x.s +++ b/src/reflect/asm_ppc64x.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build ppc64 || ppc64le // +build ppc64 ppc64le #include "textflag.h" diff --git a/src/runtime/asm_mips64x.s b/src/runtime/asm_mips64x.s index c3b57e472a2..d4d22801055 100644 --- a/src/runtime/asm_mips64x.s +++ b/src/runtime/asm_mips64x.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build mips64 || mips64le // +build mips64 mips64le #include "go_asm.h" diff --git a/src/runtime/asm_mipsx.s b/src/runtime/asm_mipsx.s index 1d828b03cfb..ea7edf20cf9 100644 --- a/src/runtime/asm_mipsx.s +++ b/src/runtime/asm_mipsx.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build mips || mipsle // +build mips mipsle #include "go_asm.h" diff --git a/src/runtime/asm_ppc64x.s b/src/runtime/asm_ppc64x.s index 2c39b38912f..942cc14f17d 100644 --- a/src/runtime/asm_ppc64x.s +++ b/src/runtime/asm_ppc64x.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build ppc64 || ppc64le // +build ppc64 ppc64le #include "go_asm.h" diff --git a/src/runtime/atomic_mips64x.s b/src/runtime/atomic_mips64x.s index 6f42412502b..e2118e6a20b 100644 --- a/src/runtime/atomic_mips64x.s +++ b/src/runtime/atomic_mips64x.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build mips64 || mips64le // +build mips64 mips64le #include "textflag.h" diff --git a/src/runtime/atomic_mipsx.s b/src/runtime/atomic_mipsx.s index ed078a2d8a6..1eacd273b44 100644 --- a/src/runtime/atomic_mipsx.s +++ b/src/runtime/atomic_mipsx.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build mips || mipsle // +build mips mipsle #include "textflag.h" diff --git a/src/runtime/atomic_ppc64x.s b/src/runtime/atomic_ppc64x.s index 57f672f3301..b63de2dbd31 100644 --- a/src/runtime/atomic_ppc64x.s +++ b/src/runtime/atomic_ppc64x.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build ppc64 || ppc64le // +build ppc64 ppc64le #include "textflag.h" diff --git a/src/runtime/cgo/asm_mips64x.s b/src/runtime/cgo/asm_mips64x.s index e51cdf3d127..ba948071fa9 100644 --- a/src/runtime/cgo/asm_mips64x.s +++ b/src/runtime/cgo/asm_mips64x.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build mips64 || mips64le // +build mips64 mips64le #include "textflag.h" diff --git a/src/runtime/cgo/asm_mipsx.s b/src/runtime/cgo/asm_mipsx.s index 1127c8beb48..fd5d78ef97a 100644 --- a/src/runtime/cgo/asm_mipsx.s +++ b/src/runtime/cgo/asm_mipsx.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build mips || mipsle // +build mips mipsle #include "textflag.h" diff --git a/src/runtime/cgo/asm_ppc64x.s b/src/runtime/cgo/asm_ppc64x.s index f4efc1e67d6..9dec8d04ce1 100644 --- a/src/runtime/cgo/asm_ppc64x.s +++ b/src/runtime/cgo/asm_ppc64x.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build ppc64 || ppc64le // +build ppc64 ppc64le #include "textflag.h" diff --git a/src/runtime/cgo/asm_riscv64.s b/src/runtime/cgo/asm_riscv64.s index b4ddbb020f0..fcd1d36ca84 100644 --- a/src/runtime/cgo/asm_riscv64.s +++ b/src/runtime/cgo/asm_riscv64.s @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build riscv64 - #include "textflag.h" // Called by C code generated by cmd/cgo. diff --git a/src/runtime/duff_mips64x.s b/src/runtime/duff_mips64x.s index c4e04ccc9da..a897d7fd9bf 100644 --- a/src/runtime/duff_mips64x.s +++ b/src/runtime/duff_mips64x.s @@ -2,6 +2,7 @@ // Run go generate from src/runtime to update. // See mkduff.go for comments. +//go:build mips64 || mips64le // +build mips64 mips64le #include "textflag.h" diff --git a/src/runtime/duff_ppc64x.s b/src/runtime/duff_ppc64x.s index d6b89ba9401..d4e3b409d24 100644 --- a/src/runtime/duff_ppc64x.s +++ b/src/runtime/duff_ppc64x.s @@ -2,6 +2,7 @@ // Run go generate from src/runtime to update. // See mkduff.go for comments. +//go:build ppc64 || ppc64le // +build ppc64 ppc64le #include "textflag.h" diff --git a/src/runtime/internal/atomic/atomic_mips64x.s b/src/runtime/internal/atomic/atomic_mips64x.s index 2751c6f8082..fba668f94a8 100644 --- a/src/runtime/internal/atomic/atomic_mips64x.s +++ b/src/runtime/internal/atomic/atomic_mips64x.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build mips64 || mips64le // +build mips64 mips64le #include "textflag.h" diff --git a/src/runtime/internal/atomic/atomic_mipsx.s b/src/runtime/internal/atomic/atomic_mipsx.s index 3f613214507..c0835d66ed8 100644 --- a/src/runtime/internal/atomic/atomic_mipsx.s +++ b/src/runtime/internal/atomic/atomic_mipsx.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build mips || mipsle // +build mips mipsle #include "textflag.h" diff --git a/src/runtime/internal/atomic/atomic_ppc64x.s b/src/runtime/internal/atomic/atomic_ppc64x.s index 37c8515d37e..dca26cb334a 100644 --- a/src/runtime/internal/atomic/atomic_ppc64x.s +++ b/src/runtime/internal/atomic/atomic_ppc64x.s @@ -2,11 +2,11 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build ppc64 || ppc64le // +build ppc64 ppc64le #include "textflag.h" - // For more details about how various memory models are // enforced on POWER, the following paper provides more // details about how they enforce C/C++ like models. This diff --git a/src/runtime/internal/atomic/sys_nonlinux_arm.s b/src/runtime/internal/atomic/sys_nonlinux_arm.s index 57568b2238d..04036ca9702 100644 --- a/src/runtime/internal/atomic/sys_nonlinux_arm.s +++ b/src/runtime/internal/atomic/sys_nonlinux_arm.s @@ -2,7 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build !linux,arm +//go:build !linux +// +build !linux #include "textflag.h" diff --git a/src/runtime/libfuzzer_amd64.s b/src/runtime/libfuzzer_amd64.s index 890fde341bc..13645fc7af8 100644 --- a/src/runtime/libfuzzer_amd64.s +++ b/src/runtime/libfuzzer_amd64.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build libfuzzer // +build libfuzzer #include "go_asm.h" diff --git a/src/runtime/libfuzzer_arm64.s b/src/runtime/libfuzzer_arm64.s index 121673e0922..4ad8242804e 100644 --- a/src/runtime/libfuzzer_arm64.s +++ b/src/runtime/libfuzzer_arm64.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build libfuzzer // +build libfuzzer #include "go_asm.h" diff --git a/src/runtime/memclr_386.s b/src/runtime/memclr_386.s index d2ef17f7cee..046c3441198 100644 --- a/src/runtime/memclr_386.s +++ b/src/runtime/memclr_386.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build !plan9 // +build !plan9 #include "go_asm.h" diff --git a/src/runtime/memclr_amd64.s b/src/runtime/memclr_amd64.s index 5d2bebb901b..a10f57bd8cb 100644 --- a/src/runtime/memclr_amd64.s +++ b/src/runtime/memclr_amd64.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build !plan9 // +build !plan9 #include "go_asm.h" diff --git a/src/runtime/memclr_mips64x.s b/src/runtime/memclr_mips64x.s index d7a3251e204..bc037013fe7 100644 --- a/src/runtime/memclr_mips64x.s +++ b/src/runtime/memclr_mips64x.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build mips64 || mips64le // +build mips64 mips64le #include "go_asm.h" diff --git a/src/runtime/memclr_mipsx.s b/src/runtime/memclr_mipsx.s index eb2a8a7219c..3d21c3c414c 100644 --- a/src/runtime/memclr_mipsx.s +++ b/src/runtime/memclr_mipsx.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build mips || mipsle // +build mips mipsle #include "textflag.h" diff --git a/src/runtime/memclr_ppc64x.s b/src/runtime/memclr_ppc64x.s index 75126208942..65639322b2a 100644 --- a/src/runtime/memclr_ppc64x.s +++ b/src/runtime/memclr_ppc64x.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build ppc64 || ppc64le // +build ppc64 ppc64le #include "textflag.h" diff --git a/src/runtime/memmove_386.s b/src/runtime/memmove_386.s index d99546c6336..1a43a1f724d 100644 --- a/src/runtime/memmove_386.s +++ b/src/runtime/memmove_386.s @@ -23,6 +23,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +//go:build !plan9 // +build !plan9 #include "go_asm.h" diff --git a/src/runtime/memmove_amd64.s b/src/runtime/memmove_amd64.s index f1e34035962..24c6529f584 100644 --- a/src/runtime/memmove_amd64.s +++ b/src/runtime/memmove_amd64.s @@ -23,6 +23,7 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. +//go:build !plan9 // +build !plan9 #include "go_asm.h" diff --git a/src/runtime/memmove_mips64x.s b/src/runtime/memmove_mips64x.s index 8a1b88afba7..fef3c6be827 100644 --- a/src/runtime/memmove_mips64x.s +++ b/src/runtime/memmove_mips64x.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build mips64 || mips64le // +build mips64 mips64le #include "textflag.h" diff --git a/src/runtime/memmove_mipsx.s b/src/runtime/memmove_mipsx.s index 6c86558f8d2..cd02fc25c4b 100644 --- a/src/runtime/memmove_mipsx.s +++ b/src/runtime/memmove_mipsx.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build mips || mipsle // +build mips mipsle #include "textflag.h" diff --git a/src/runtime/memmove_ppc64x.s b/src/runtime/memmove_ppc64x.s index dbd835506f6..fd16ad8129b 100644 --- a/src/runtime/memmove_ppc64x.s +++ b/src/runtime/memmove_ppc64x.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build ppc64 || ppc64le // +build ppc64 ppc64le #include "textflag.h" diff --git a/src/runtime/mkduff.go b/src/runtime/mkduff.go index 8632fe08a3d..da191cc594c 100644 --- a/src/runtime/mkduff.go +++ b/src/runtime/mkduff.go @@ -179,6 +179,7 @@ func copyARM64(w io.Writer) { func tagsPPC64x(w io.Writer) { fmt.Fprintln(w) + fmt.Fprintln(w, "//go:build ppc64 || ppc64le") fmt.Fprintln(w, "// +build ppc64 ppc64le") fmt.Fprintln(w) } @@ -202,6 +203,7 @@ func copyPPC64x(w io.Writer) { func tagsMIPS64x(w io.Writer) { fmt.Fprintln(w) + fmt.Fprintln(w, "//go:build mips64 || mips64le") fmt.Fprintln(w, "// +build mips64 mips64le") fmt.Fprintln(w) } diff --git a/src/runtime/mkpreempt.go b/src/runtime/mkpreempt.go index 3a9e6cc4780..6c980540f57 100644 --- a/src/runtime/mkpreempt.go +++ b/src/runtime/mkpreempt.go @@ -123,6 +123,7 @@ func header(arch string) { fmt.Fprintf(out, "// Code generated by mkpreempt.go; DO NOT EDIT.\n\n") if beLe[arch] { base := arch[:len(arch)-1] + fmt.Fprintf(out, "//go:build %s || %sle\n", base, base) fmt.Fprintf(out, "// +build %s %sle\n\n", base, base) } fmt.Fprintf(out, "#include \"go_asm.h\"\n") diff --git a/src/runtime/msan_amd64.s b/src/runtime/msan_amd64.s index 669e9ca73f8..1bb57a3b7e8 100644 --- a/src/runtime/msan_amd64.s +++ b/src/runtime/msan_amd64.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build msan // +build msan #include "go_asm.h" diff --git a/src/runtime/msan_arm64.s b/src/runtime/msan_arm64.s index f19906cfc83..93ade8dd897 100644 --- a/src/runtime/msan_arm64.s +++ b/src/runtime/msan_arm64.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build msan // +build msan #include "go_asm.h" diff --git a/src/runtime/preempt_mips64x.s b/src/runtime/preempt_mips64x.s index 0d0c157c36c..b755425bc5d 100644 --- a/src/runtime/preempt_mips64x.s +++ b/src/runtime/preempt_mips64x.s @@ -1,5 +1,6 @@ // Code generated by mkpreempt.go; DO NOT EDIT. +//go:build mips64 || mips64le // +build mips64 mips64le #include "go_asm.h" diff --git a/src/runtime/preempt_mipsx.s b/src/runtime/preempt_mipsx.s index 86d3a918d33..c1bff608596 100644 --- a/src/runtime/preempt_mipsx.s +++ b/src/runtime/preempt_mipsx.s @@ -1,5 +1,6 @@ // Code generated by mkpreempt.go; DO NOT EDIT. +//go:build mips || mipsle // +build mips mipsle #include "go_asm.h" diff --git a/src/runtime/preempt_ppc64x.s b/src/runtime/preempt_ppc64x.s index 90634386dbf..70bd91982bf 100644 --- a/src/runtime/preempt_ppc64x.s +++ b/src/runtime/preempt_ppc64x.s @@ -1,5 +1,6 @@ // Code generated by mkpreempt.go; DO NOT EDIT. +//go:build ppc64 || ppc64le // +build ppc64 ppc64le #include "go_asm.h" diff --git a/src/runtime/race_amd64.s b/src/runtime/race_amd64.s index 58a919efe8d..8d4813eaddd 100644 --- a/src/runtime/race_amd64.s +++ b/src/runtime/race_amd64.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build race // +build race #include "go_asm.h" diff --git a/src/runtime/race_arm64.s b/src/runtime/race_arm64.s index 82e3caadc8f..c6d5b91edc0 100644 --- a/src/runtime/race_arm64.s +++ b/src/runtime/race_arm64.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build race // +build race #include "go_asm.h" diff --git a/src/runtime/race_ppc64le.s b/src/runtime/race_ppc64le.s index 069e4d86dd4..963e57099c9 100644 --- a/src/runtime/race_ppc64le.s +++ b/src/runtime/race_ppc64le.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build race // +build race #include "go_asm.h" diff --git a/src/runtime/rt0_linux_mips64x.s b/src/runtime/rt0_linux_mips64x.s index 55506755df2..fabd8570b57 100644 --- a/src/runtime/rt0_linux_mips64x.s +++ b/src/runtime/rt0_linux_mips64x.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build linux && (mips64 || mips64le) // +build linux // +build mips64 mips64le diff --git a/src/runtime/rt0_linux_mipsx.s b/src/runtime/rt0_linux_mipsx.s index 74b8f50b73f..9f5842b51a2 100644 --- a/src/runtime/rt0_linux_mipsx.s +++ b/src/runtime/rt0_linux_mipsx.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build linux && (mips || mipsle) // +build linux // +build mips mipsle diff --git a/src/runtime/sys_aix_ppc64.s b/src/runtime/sys_aix_ppc64.s index a56d043f425..c171c191c0e 100644 --- a/src/runtime/sys_aix_ppc64.s +++ b/src/runtime/sys_aix_ppc64.s @@ -2,9 +2,6 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -// +build aix -// +build ppc64 ppc64le - // // System calls and other sys.stuff for ppc64, Aix // diff --git a/src/runtime/sys_linux_mips64x.s b/src/runtime/sys_linux_mips64x.s index 0206cb88bd4..e18d2914456 100644 --- a/src/runtime/sys_linux_mips64x.s +++ b/src/runtime/sys_linux_mips64x.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build linux && (mips64 || mips64le) // +build linux // +build mips64 mips64le diff --git a/src/runtime/sys_linux_mipsx.s b/src/runtime/sys_linux_mipsx.s index d5317d39570..b3970be9cf8 100644 --- a/src/runtime/sys_linux_mipsx.s +++ b/src/runtime/sys_linux_mipsx.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build linux && (mips || mipsle) // +build linux // +build mips mipsle diff --git a/src/runtime/sys_linux_ppc64x.s b/src/runtime/sys_linux_ppc64x.s index 46387288d53..05b5916db41 100644 --- a/src/runtime/sys_linux_ppc64x.s +++ b/src/runtime/sys_linux_ppc64x.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build linux && (ppc64 || ppc64le) // +build linux // +build ppc64 ppc64le diff --git a/src/runtime/tls_arm.s b/src/runtime/tls_arm.s index e42de8deb4f..879caac9e16 100644 --- a/src/runtime/tls_arm.s +++ b/src/runtime/tls_arm.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build !windows // +build !windows #include "go_asm.h" diff --git a/src/runtime/tls_mips64x.s b/src/runtime/tls_mips64x.s index 888c0efec6a..779d64ba31a 100644 --- a/src/runtime/tls_mips64x.s +++ b/src/runtime/tls_mips64x.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build mips64 || mips64le // +build mips64 mips64le #include "go_asm.h" diff --git a/src/runtime/tls_mipsx.s b/src/runtime/tls_mipsx.s index d2ffcd954c9..ada8d06a9e7 100644 --- a/src/runtime/tls_mipsx.s +++ b/src/runtime/tls_mipsx.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build mips || mipsle // +build mips mipsle #include "go_asm.h" diff --git a/src/runtime/tls_ppc64x.s b/src/runtime/tls_ppc64x.s index 25d796fcc6e..7e935d0eb29 100644 --- a/src/runtime/tls_ppc64x.s +++ b/src/runtime/tls_ppc64x.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build ppc64 || ppc64le // +build ppc64 ppc64le #include "go_asm.h" diff --git a/src/runtime/wincallback.go b/src/runtime/wincallback.go index 8411c98412d..a7a787d8f6d 100644 --- a/src/runtime/wincallback.go +++ b/src/runtime/wincallback.go @@ -22,7 +22,9 @@ func genasm386Amd64() { buf.WriteString(`// Code generated by wincallback.go using 'go generate'. DO NOT EDIT. +//go:build 386 || amd64 // +build 386 amd64 + // runtime·callbackasm is called by external code to // execute Go implemented callback function. It is not // called from the start, instead runtime·compilecallback diff --git a/src/runtime/zcallback_windows.s b/src/runtime/zcallback_windows.s index 37ffb38aca5..e451c2b9d05 100644 --- a/src/runtime/zcallback_windows.s +++ b/src/runtime/zcallback_windows.s @@ -1,6 +1,8 @@ // Code generated by wincallback.go using 'go generate'. DO NOT EDIT. +//go:build 386 || amd64 // +build 386 amd64 + // runtime·callbackasm is called by external code to // execute Go implemented callback function. It is not // called from the start, instead runtime·compilecallback diff --git a/src/sync/atomic/asm.s b/src/sync/atomic/asm.s index f86726f3a1a..7b8c9b9430e 100644 --- a/src/sync/atomic/asm.s +++ b/src/sync/atomic/asm.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build !race // +build !race #include "textflag.h" diff --git a/src/sync/atomic/race.s b/src/sync/atomic/race.s index fd6ca22700c..0866487cc71 100644 --- a/src/sync/atomic/race.s +++ b/src/sync/atomic/race.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build race // +build race // This file is here only to allow external functions. From 0fa2302ee5db35b4caae6211656f81ebb92cdb0a Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Wed, 12 May 2021 18:07:43 +0200 Subject: [PATCH 010/100] cmd/vendor: update golang.org/x/sys to latest To pull in CL 318212. For #41184 Change-Id: Iec0d7bee2d3a5874c24a55ec20efd7746bf70902 Reviewed-on: https://go-review.googlesource.com/c/go/+/319410 Trust: Tobias Klauser Run-TryBot: Tobias Klauser TryBot-Result: Go Bot Reviewed-by: Ian Lance Taylor --- src/cmd/go.mod | 2 +- src/cmd/go.sum | 4 +- src/cmd/vendor/golang.org/x/sys/unix/mkall.sh | 12 - .../x/sys/unix/syscall_darwin.1_13.go | 4 +- .../x/sys/unix/syscall_darwin_386.go | 51 - .../x/sys/unix/syscall_darwin_arm.go | 51 - .../x/sys/unix/syscall_darwin_libSystem.go | 9 +- .../x/sys/unix/zerrors_darwin_386.go | 1789 ------------ .../x/sys/unix/zerrors_darwin_arm.go | 1789 ------------ .../x/sys/unix/zsyscall_darwin_386.1_13.go | 40 - .../x/sys/unix/zsyscall_darwin_386.1_13.s | 13 - .../x/sys/unix/zsyscall_darwin_386.go | 2431 ----------------- .../x/sys/unix/zsyscall_darwin_386.s | 291 -- .../x/sys/unix/zsyscall_darwin_amd64.1_13.go | 8 +- .../x/sys/unix/zsyscall_darwin_amd64.1_13.s | 18 +- .../x/sys/unix/zsyscall_darwin_amd64.go | 572 ++-- .../x/sys/unix/zsyscall_darwin_amd64.s | 852 +++++- .../x/sys/unix/zsyscall_darwin_arm.1_13.go | 40 - .../x/sys/unix/zsyscall_darwin_arm.1_13.s | 13 - .../x/sys/unix/zsyscall_darwin_arm.go | 2417 ---------------- .../x/sys/unix/zsyscall_darwin_arm.s | 289 -- .../x/sys/unix/zsyscall_darwin_arm64.1_13.go | 8 +- .../x/sys/unix/zsyscall_darwin_arm64.1_13.s | 18 +- .../x/sys/unix/zsyscall_darwin_arm64.go | 572 ++-- .../x/sys/unix/zsyscall_darwin_arm64.s | 852 +++++- .../x/sys/unix/zsysnum_darwin_386.go | 438 --- .../x/sys/unix/zsysnum_darwin_arm.go | 438 --- .../x/sys/unix/ztypes_darwin_386.go | 524 ---- .../x/sys/unix/ztypes_darwin_arm.go | 524 ---- .../vendor/golang.org/x/sys/windows/empty.s | 1 + src/cmd/vendor/modules.txt | 2 +- 31 files changed, 2038 insertions(+), 12034 deletions(-) delete mode 100644 src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin_386.go delete mode 100644 src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go delete mode 100644 src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_386.go delete mode 100644 src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go delete mode 100644 src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_13.go delete mode 100644 src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_13.s delete mode 100644 src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go delete mode 100644 src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.s delete mode 100644 src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_13.go delete mode 100644 src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_13.s delete mode 100644 src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go delete mode 100644 src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.s delete mode 100644 src/cmd/vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go delete mode 100644 src/cmd/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go delete mode 100644 src/cmd/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go delete mode 100644 src/cmd/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go diff --git a/src/cmd/go.mod b/src/cmd/go.mod index 7a96bc64095..c3617eea0b1 100644 --- a/src/cmd/go.mod +++ b/src/cmd/go.mod @@ -8,7 +8,7 @@ require ( golang.org/x/arch v0.0.0-20210502124803-cbf565b21d1e golang.org/x/crypto v0.0.0-20210503195802-e9a32991a82e // indirect golang.org/x/mod v0.4.3-0.20210504181020-67f1c1edc27a - golang.org/x/sys v0.0.0-20210503173754-0981d6026fa6 // indirect + golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744 // indirect golang.org/x/term v0.0.0-20210503060354-a79de5458b56 golang.org/x/tools v0.1.1-0.20210505014545-7cab0ef2e9a5 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect diff --git a/src/cmd/go.sum b/src/cmd/go.sum index 1c6e2248208..f42aac70d69 100644 --- a/src/cmd/go.sum +++ b/src/cmd/go.sum @@ -12,8 +12,8 @@ golang.org/x/crypto v0.0.0-20210503195802-e9a32991a82e/go.mod h1:P+XmwS30IXTQdn5 golang.org/x/mod v0.4.3-0.20210504181020-67f1c1edc27a h1:wbpC/7Wbo5WFVox32n+KjhRRLmTLq8YW/wRlL2iVAhk= golang.org/x/mod v0.4.3-0.20210504181020-67f1c1edc27a/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210503173754-0981d6026fa6 h1:cdsMqa2nXzqlgs183pHxtvoVwU7CyzaCTAUOg94af4c= -golang.org/x/sys v0.0.0-20210503173754-0981d6026fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744 h1:yhBbb4IRs2HS9PPlAg6DMC6mUOKexJBNsLf4Z+6En1Q= +golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20210503060354-a79de5458b56 h1:b8jxX3zqjpqb2LklXPzKSGJhzyxCOZSz8ncv8Nv+y7w= golang.org/x/term v0.0.0-20210503060354-a79de5458b56/go.mod h1:tfny5GFUkzUvx4ps4ajbZsCe5lw1metzhBm9T3x7oIY= golang.org/x/tools v0.1.1-0.20210505014545-7cab0ef2e9a5 h1:ImcI7RFHWLu2QWpFDXaReu0j+sQAHIy65vUFZImXiqY= diff --git a/src/cmd/vendor/golang.org/x/sys/unix/mkall.sh b/src/cmd/vendor/golang.org/x/sys/unix/mkall.sh index d727cad19c1..396aadf86de 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/mkall.sh +++ b/src/cmd/vendor/golang.org/x/sys/unix/mkall.sh @@ -70,23 +70,11 @@ aix_ppc64) mksyscall="go run mksyscall_aix_ppc64.go -aix" mktypes="GOARCH=$GOARCH go tool cgo -godefs" ;; -darwin_386) - mkerrors="$mkerrors -m32" - mksyscall="go run mksyscall.go -l32" - mktypes="GOARCH=$GOARCH go tool cgo -godefs" - mkasm="go run mkasm_darwin.go" - ;; darwin_amd64) mkerrors="$mkerrors -m64" mktypes="GOARCH=$GOARCH go tool cgo -godefs" mkasm="go run mkasm_darwin.go" ;; -darwin_arm) - mkerrors="$mkerrors" - mksyscall="go run mksyscall.go -l32" - mktypes="GOARCH=$GOARCH go tool cgo -godefs" - mkasm="go run mkasm_darwin.go" - ;; darwin_arm64) mkerrors="$mkerrors -m64" mktypes="GOARCH=$GOARCH go tool cgo -godefs" diff --git a/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin.1_13.go b/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin.1_13.go index 5fc3cda6fc8..1596426b1e2 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin.1_13.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin.1_13.go @@ -17,7 +17,7 @@ import ( //sys readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) func fdopendir(fd int) (dir uintptr, err error) { - r0, _, e1 := syscall_syscallPtr(funcPC(libc_fdopendir_trampoline), uintptr(fd), 0, 0) + r0, _, e1 := syscall_syscallPtr(libc_fdopendir_trampoline_addr, uintptr(fd), 0, 0) dir = uintptr(r0) if e1 != 0 { err = errnoErr(e1) @@ -25,7 +25,7 @@ func fdopendir(fd int) (dir uintptr, err error) { return } -func libc_fdopendir_trampoline() +var libc_fdopendir_trampoline_addr uintptr //go:cgo_import_dynamic libc_fdopendir fdopendir "/usr/lib/libSystem.B.dylib" diff --git a/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin_386.go b/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin_386.go deleted file mode 100644 index 64746771226..00000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin_386.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2009 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 386 && darwin -// +build 386,darwin - -package unix - -import "syscall" - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: int32(sec), Nsec: int32(nsec)} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: int32(sec), Usec: int32(usec)} -} - -func SetKevent(k *Kevent_t, fd, mode, flags int) { - k.Ident = uint32(fd) - k.Filter = int16(mode) - k.Flags = uint16(flags) -} - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint32(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = uint32(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = int32(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint32(length) -} - -func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) - -//sys Fstat(fd int, stat *Stat_t) (err error) = SYS_FSTAT64 -//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) = SYS_FSTATAT64 -//sys Fstatfs(fd int, stat *Statfs_t) (err error) = SYS_FSTATFS64 -//sys getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) = SYS_GETFSSTAT64 -//sys Lstat(path string, stat *Stat_t) (err error) = SYS_LSTAT64 -//sys ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) = SYS_ptrace -//sys Stat(path string, stat *Stat_t) (err error) = SYS_STAT64 -//sys Statfs(path string, stat *Statfs_t) (err error) = SYS_STATFS64 diff --git a/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go b/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go deleted file mode 100644 index d30735c5d63..00000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin_arm.go +++ /dev/null @@ -1,51 +0,0 @@ -// Copyright 2015 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 unix - -import "syscall" - -func ptrace1(request int, pid int, addr uintptr, data uintptr) error { - return ENOTSUP -} - -func setTimespec(sec, nsec int64) Timespec { - return Timespec{Sec: int32(sec), Nsec: int32(nsec)} -} - -func setTimeval(sec, usec int64) Timeval { - return Timeval{Sec: int32(sec), Usec: int32(usec)} -} - -func SetKevent(k *Kevent_t, fd, mode, flags int) { - k.Ident = uint32(fd) - k.Filter = int16(mode) - k.Flags = uint16(flags) -} - -func (iov *Iovec) SetLen(length int) { - iov.Len = uint32(length) -} - -func (msghdr *Msghdr) SetControllen(length int) { - msghdr.Controllen = uint32(length) -} - -func (msghdr *Msghdr) SetIovlen(length int) { - msghdr.Iovlen = int32(length) -} - -func (cmsg *Cmsghdr) SetLen(length int) { - cmsg.Len = uint32(length) -} - -func Syscall9(num, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err syscall.Errno) // sic - -//sys Fstat(fd int, stat *Stat_t) (err error) -//sys Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) -//sys Fstatfs(fd int, stat *Statfs_t) (err error) -//sys getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) = SYS_GETFSSTAT -//sys Lstat(path string, stat *Stat_t) (err error) -//sys Stat(path string, stat *Stat_t) (err error) -//sys Statfs(path string, stat *Statfs_t) (err error) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go b/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go index 38bec300262..53c96641f81 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/syscall_darwin_libSystem.go @@ -7,7 +7,7 @@ package unix -import "unsafe" +import _ "unsafe" // Implemented in the runtime package (runtime/sys_darwin.go) func syscall_syscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) @@ -25,10 +25,3 @@ func syscall_syscallPtr(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) //go:linkname syscall_rawSyscall syscall.rawSyscall //go:linkname syscall_rawSyscall6 syscall.rawSyscall6 //go:linkname syscall_syscallPtr syscall.syscallPtr - -// Find the entry point for f. See comments in runtime/proc.go for the -// function of the same name. -//go:nosplit -func funcPC(f func()) uintptr { - return **(**uintptr)(unsafe.Pointer(&f)) -} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_386.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_386.go deleted file mode 100644 index 7ee196f7fcc..00000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_386.go +++ /dev/null @@ -1,1789 +0,0 @@ -// mkerrors.sh -m32 -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build 386 && darwin -// +build 386,darwin - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- -m32 _const.go - -package unix - -import "syscall" - -const ( - AF_APPLETALK = 0x10 - AF_CCITT = 0xa - AF_CHAOS = 0x5 - AF_CNT = 0x15 - AF_COIP = 0x14 - AF_DATAKIT = 0x9 - AF_DECnet = 0xc - AF_DLI = 0xd - AF_E164 = 0x1c - AF_ECMA = 0x8 - AF_HYLINK = 0xf - AF_IEEE80211 = 0x25 - AF_IMPLINK = 0x3 - AF_INET = 0x2 - AF_INET6 = 0x1e - AF_IPX = 0x17 - AF_ISDN = 0x1c - AF_ISO = 0x7 - AF_LAT = 0xe - AF_LINK = 0x12 - AF_LOCAL = 0x1 - AF_MAX = 0x28 - AF_NATM = 0x1f - AF_NDRV = 0x1b - AF_NETBIOS = 0x21 - AF_NS = 0x6 - AF_OSI = 0x7 - AF_PPP = 0x22 - AF_PUP = 0x4 - AF_RESERVED_36 = 0x24 - AF_ROUTE = 0x11 - AF_SIP = 0x18 - AF_SNA = 0xb - AF_SYSTEM = 0x20 - AF_SYS_CONTROL = 0x2 - AF_UNIX = 0x1 - AF_UNSPEC = 0x0 - AF_UTUN = 0x26 - ALTWERASE = 0x200 - ATTR_BIT_MAP_COUNT = 0x5 - ATTR_CMN_ACCESSMASK = 0x20000 - ATTR_CMN_ACCTIME = 0x1000 - ATTR_CMN_ADDEDTIME = 0x10000000 - ATTR_CMN_BKUPTIME = 0x2000 - ATTR_CMN_CHGTIME = 0x800 - ATTR_CMN_CRTIME = 0x200 - ATTR_CMN_DATA_PROTECT_FLAGS = 0x40000000 - ATTR_CMN_DEVID = 0x2 - ATTR_CMN_DOCUMENT_ID = 0x100000 - ATTR_CMN_ERROR = 0x20000000 - ATTR_CMN_EXTENDED_SECURITY = 0x400000 - ATTR_CMN_FILEID = 0x2000000 - ATTR_CMN_FLAGS = 0x40000 - ATTR_CMN_FNDRINFO = 0x4000 - ATTR_CMN_FSID = 0x4 - ATTR_CMN_FULLPATH = 0x8000000 - ATTR_CMN_GEN_COUNT = 0x80000 - ATTR_CMN_GRPID = 0x10000 - ATTR_CMN_GRPUUID = 0x1000000 - ATTR_CMN_MODTIME = 0x400 - ATTR_CMN_NAME = 0x1 - ATTR_CMN_NAMEDATTRCOUNT = 0x80000 - ATTR_CMN_NAMEDATTRLIST = 0x100000 - ATTR_CMN_OBJID = 0x20 - ATTR_CMN_OBJPERMANENTID = 0x40 - ATTR_CMN_OBJTAG = 0x10 - ATTR_CMN_OBJTYPE = 0x8 - ATTR_CMN_OWNERID = 0x8000 - ATTR_CMN_PARENTID = 0x4000000 - ATTR_CMN_PAROBJID = 0x80 - ATTR_CMN_RETURNED_ATTRS = 0x80000000 - ATTR_CMN_SCRIPT = 0x100 - ATTR_CMN_SETMASK = 0x41c7ff00 - ATTR_CMN_USERACCESS = 0x200000 - ATTR_CMN_UUID = 0x800000 - ATTR_CMN_VALIDMASK = 0xffffffff - ATTR_CMN_VOLSETMASK = 0x6700 - ATTR_FILE_ALLOCSIZE = 0x4 - ATTR_FILE_CLUMPSIZE = 0x10 - ATTR_FILE_DATAALLOCSIZE = 0x400 - ATTR_FILE_DATAEXTENTS = 0x800 - ATTR_FILE_DATALENGTH = 0x200 - ATTR_FILE_DEVTYPE = 0x20 - ATTR_FILE_FILETYPE = 0x40 - ATTR_FILE_FORKCOUNT = 0x80 - ATTR_FILE_FORKLIST = 0x100 - ATTR_FILE_IOBLOCKSIZE = 0x8 - ATTR_FILE_LINKCOUNT = 0x1 - ATTR_FILE_RSRCALLOCSIZE = 0x2000 - ATTR_FILE_RSRCEXTENTS = 0x4000 - ATTR_FILE_RSRCLENGTH = 0x1000 - ATTR_FILE_SETMASK = 0x20 - ATTR_FILE_TOTALSIZE = 0x2 - ATTR_FILE_VALIDMASK = 0x37ff - ATTR_VOL_ALLOCATIONCLUMP = 0x40 - ATTR_VOL_ATTRIBUTES = 0x40000000 - ATTR_VOL_CAPABILITIES = 0x20000 - ATTR_VOL_DIRCOUNT = 0x400 - ATTR_VOL_ENCODINGSUSED = 0x10000 - ATTR_VOL_FILECOUNT = 0x200 - ATTR_VOL_FSTYPE = 0x1 - ATTR_VOL_INFO = 0x80000000 - ATTR_VOL_IOBLOCKSIZE = 0x80 - ATTR_VOL_MAXOBJCOUNT = 0x800 - ATTR_VOL_MINALLOCATION = 0x20 - ATTR_VOL_MOUNTEDDEVICE = 0x8000 - ATTR_VOL_MOUNTFLAGS = 0x4000 - ATTR_VOL_MOUNTPOINT = 0x1000 - ATTR_VOL_NAME = 0x2000 - ATTR_VOL_OBJCOUNT = 0x100 - ATTR_VOL_QUOTA_SIZE = 0x10000000 - ATTR_VOL_RESERVED_SIZE = 0x20000000 - ATTR_VOL_SETMASK = 0x80002000 - ATTR_VOL_SIGNATURE = 0x2 - ATTR_VOL_SIZE = 0x4 - ATTR_VOL_SPACEAVAIL = 0x10 - ATTR_VOL_SPACEFREE = 0x8 - ATTR_VOL_UUID = 0x40000 - ATTR_VOL_VALIDMASK = 0xf007ffff - B0 = 0x0 - B110 = 0x6e - B115200 = 0x1c200 - B1200 = 0x4b0 - B134 = 0x86 - B14400 = 0x3840 - B150 = 0x96 - B1800 = 0x708 - B19200 = 0x4b00 - B200 = 0xc8 - B230400 = 0x38400 - B2400 = 0x960 - B28800 = 0x7080 - B300 = 0x12c - B38400 = 0x9600 - B4800 = 0x12c0 - B50 = 0x32 - B57600 = 0xe100 - B600 = 0x258 - B7200 = 0x1c20 - B75 = 0x4b - B76800 = 0x12c00 - B9600 = 0x2580 - BIOCFLUSH = 0x20004268 - BIOCGBLEN = 0x40044266 - BIOCGDLT = 0x4004426a - BIOCGDLTLIST = 0xc00c4279 - BIOCGETIF = 0x4020426b - BIOCGHDRCMPLT = 0x40044274 - BIOCGRSIG = 0x40044272 - BIOCGRTIMEOUT = 0x4008426e - BIOCGSEESENT = 0x40044276 - BIOCGSTATS = 0x4008426f - BIOCIMMEDIATE = 0x80044270 - BIOCPROMISC = 0x20004269 - BIOCSBLEN = 0xc0044266 - BIOCSDLT = 0x80044278 - BIOCSETF = 0x80084267 - BIOCSETFNR = 0x8008427e - BIOCSETIF = 0x8020426c - BIOCSHDRCMPLT = 0x80044275 - BIOCSRSIG = 0x80044273 - BIOCSRTIMEOUT = 0x8008426d - BIOCSSEESENT = 0x80044277 - BIOCVERSION = 0x40044271 - BPF_A = 0x10 - BPF_ABS = 0x20 - BPF_ADD = 0x0 - BPF_ALIGNMENT = 0x4 - BPF_ALU = 0x4 - BPF_AND = 0x50 - BPF_B = 0x10 - BPF_DIV = 0x30 - BPF_H = 0x8 - BPF_IMM = 0x0 - BPF_IND = 0x40 - BPF_JA = 0x0 - BPF_JEQ = 0x10 - BPF_JGE = 0x30 - BPF_JGT = 0x20 - BPF_JMP = 0x5 - BPF_JSET = 0x40 - BPF_K = 0x0 - BPF_LD = 0x0 - BPF_LDX = 0x1 - BPF_LEN = 0x80 - BPF_LSH = 0x60 - BPF_MAJOR_VERSION = 0x1 - BPF_MAXBUFSIZE = 0x80000 - BPF_MAXINSNS = 0x200 - BPF_MEM = 0x60 - BPF_MEMWORDS = 0x10 - BPF_MINBUFSIZE = 0x20 - BPF_MINOR_VERSION = 0x1 - BPF_MISC = 0x7 - BPF_MSH = 0xa0 - BPF_MUL = 0x20 - BPF_NEG = 0x80 - BPF_OR = 0x40 - BPF_RELEASE = 0x30bb6 - BPF_RET = 0x6 - BPF_RSH = 0x70 - BPF_ST = 0x2 - BPF_STX = 0x3 - BPF_SUB = 0x10 - BPF_TAX = 0x0 - BPF_TXA = 0x80 - BPF_W = 0x0 - BPF_X = 0x8 - BRKINT = 0x2 - BS0 = 0x0 - BS1 = 0x8000 - BSDLY = 0x8000 - CFLUSH = 0xf - CLOCAL = 0x8000 - CLOCK_MONOTONIC = 0x6 - CLOCK_MONOTONIC_RAW = 0x4 - CLOCK_MONOTONIC_RAW_APPROX = 0x5 - CLOCK_PROCESS_CPUTIME_ID = 0xc - CLOCK_REALTIME = 0x0 - CLOCK_THREAD_CPUTIME_ID = 0x10 - CLOCK_UPTIME_RAW = 0x8 - CLOCK_UPTIME_RAW_APPROX = 0x9 - CLONE_NOFOLLOW = 0x1 - CLONE_NOOWNERCOPY = 0x2 - CR0 = 0x0 - CR1 = 0x1000 - CR2 = 0x2000 - CR3 = 0x3000 - CRDLY = 0x3000 - CREAD = 0x800 - CRTSCTS = 0x30000 - CS5 = 0x0 - CS6 = 0x100 - CS7 = 0x200 - CS8 = 0x300 - CSIZE = 0x300 - CSTART = 0x11 - CSTATUS = 0x14 - CSTOP = 0x13 - CSTOPB = 0x400 - CSUSP = 0x1a - CTLIOCGINFO = 0xc0644e03 - CTL_HW = 0x6 - CTL_KERN = 0x1 - CTL_MAXNAME = 0xc - CTL_NET = 0x4 - DLT_A429 = 0xb8 - DLT_A653_ICM = 0xb9 - DLT_AIRONET_HEADER = 0x78 - DLT_AOS = 0xde - DLT_APPLE_IP_OVER_IEEE1394 = 0x8a - DLT_ARCNET = 0x7 - DLT_ARCNET_LINUX = 0x81 - DLT_ATM_CLIP = 0x13 - DLT_ATM_RFC1483 = 0xb - DLT_AURORA = 0x7e - DLT_AX25 = 0x3 - DLT_AX25_KISS = 0xca - DLT_BACNET_MS_TP = 0xa5 - DLT_BLUETOOTH_HCI_H4 = 0xbb - DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 - DLT_CAN20B = 0xbe - DLT_CAN_SOCKETCAN = 0xe3 - DLT_CHAOS = 0x5 - DLT_CHDLC = 0x68 - DLT_CISCO_IOS = 0x76 - DLT_C_HDLC = 0x68 - DLT_C_HDLC_WITH_DIR = 0xcd - DLT_DBUS = 0xe7 - DLT_DECT = 0xdd - DLT_DOCSIS = 0x8f - DLT_DVB_CI = 0xeb - DLT_ECONET = 0x73 - DLT_EN10MB = 0x1 - DLT_EN3MB = 0x2 - DLT_ENC = 0x6d - DLT_ERF = 0xc5 - DLT_ERF_ETH = 0xaf - DLT_ERF_POS = 0xb0 - DLT_FC_2 = 0xe0 - DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 - DLT_FDDI = 0xa - DLT_FLEXRAY = 0xd2 - DLT_FRELAY = 0x6b - DLT_FRELAY_WITH_DIR = 0xce - DLT_GCOM_SERIAL = 0xad - DLT_GCOM_T1E1 = 0xac - DLT_GPF_F = 0xab - DLT_GPF_T = 0xaa - DLT_GPRS_LLC = 0xa9 - DLT_GSMTAP_ABIS = 0xda - DLT_GSMTAP_UM = 0xd9 - DLT_HHDLC = 0x79 - DLT_IBM_SN = 0x92 - DLT_IBM_SP = 0x91 - DLT_IEEE802 = 0x6 - DLT_IEEE802_11 = 0x69 - DLT_IEEE802_11_RADIO = 0x7f - DLT_IEEE802_11_RADIO_AVS = 0xa3 - DLT_IEEE802_15_4 = 0xc3 - DLT_IEEE802_15_4_LINUX = 0xbf - DLT_IEEE802_15_4_NOFCS = 0xe6 - DLT_IEEE802_15_4_NONASK_PHY = 0xd7 - DLT_IEEE802_16_MAC_CPS = 0xbc - DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 - DLT_IPFILTER = 0x74 - DLT_IPMB = 0xc7 - DLT_IPMB_LINUX = 0xd1 - DLT_IPNET = 0xe2 - DLT_IPOIB = 0xf2 - DLT_IPV4 = 0xe4 - DLT_IPV6 = 0xe5 - DLT_IP_OVER_FC = 0x7a - DLT_JUNIPER_ATM1 = 0x89 - DLT_JUNIPER_ATM2 = 0x87 - DLT_JUNIPER_ATM_CEMIC = 0xee - DLT_JUNIPER_CHDLC = 0xb5 - DLT_JUNIPER_ES = 0x84 - DLT_JUNIPER_ETHER = 0xb2 - DLT_JUNIPER_FIBRECHANNEL = 0xea - DLT_JUNIPER_FRELAY = 0xb4 - DLT_JUNIPER_GGSN = 0x85 - DLT_JUNIPER_ISM = 0xc2 - DLT_JUNIPER_MFR = 0x86 - DLT_JUNIPER_MLFR = 0x83 - DLT_JUNIPER_MLPPP = 0x82 - DLT_JUNIPER_MONITOR = 0xa4 - DLT_JUNIPER_PIC_PEER = 0xae - DLT_JUNIPER_PPP = 0xb3 - DLT_JUNIPER_PPPOE = 0xa7 - DLT_JUNIPER_PPPOE_ATM = 0xa8 - DLT_JUNIPER_SERVICES = 0x88 - DLT_JUNIPER_SRX_E2E = 0xe9 - DLT_JUNIPER_ST = 0xc8 - DLT_JUNIPER_VP = 0xb7 - DLT_JUNIPER_VS = 0xe8 - DLT_LAPB_WITH_DIR = 0xcf - DLT_LAPD = 0xcb - DLT_LIN = 0xd4 - DLT_LINUX_EVDEV = 0xd8 - DLT_LINUX_IRDA = 0x90 - DLT_LINUX_LAPD = 0xb1 - DLT_LINUX_PPP_WITHDIRECTION = 0xa6 - DLT_LINUX_SLL = 0x71 - DLT_LOOP = 0x6c - DLT_LTALK = 0x72 - DLT_MATCHING_MAX = 0xf5 - DLT_MATCHING_MIN = 0x68 - DLT_MFR = 0xb6 - DLT_MOST = 0xd3 - DLT_MPEG_2_TS = 0xf3 - DLT_MPLS = 0xdb - DLT_MTP2 = 0x8c - DLT_MTP2_WITH_PHDR = 0x8b - DLT_MTP3 = 0x8d - DLT_MUX27010 = 0xec - DLT_NETANALYZER = 0xf0 - DLT_NETANALYZER_TRANSPARENT = 0xf1 - DLT_NFC_LLCP = 0xf5 - DLT_NFLOG = 0xef - DLT_NG40 = 0xf4 - DLT_NULL = 0x0 - DLT_PCI_EXP = 0x7d - DLT_PFLOG = 0x75 - DLT_PFSYNC = 0x12 - DLT_PPI = 0xc0 - DLT_PPP = 0x9 - DLT_PPP_BSDOS = 0x10 - DLT_PPP_ETHER = 0x33 - DLT_PPP_PPPD = 0xa6 - DLT_PPP_SERIAL = 0x32 - DLT_PPP_WITH_DIR = 0xcc - DLT_PPP_WITH_DIRECTION = 0xa6 - DLT_PRISM_HEADER = 0x77 - DLT_PRONET = 0x4 - DLT_RAIF1 = 0xc6 - DLT_RAW = 0xc - DLT_RIO = 0x7c - DLT_SCCP = 0x8e - DLT_SITA = 0xc4 - DLT_SLIP = 0x8 - DLT_SLIP_BSDOS = 0xf - DLT_STANAG_5066_D_PDU = 0xed - DLT_SUNATM = 0x7b - DLT_SYMANTEC_FIREWALL = 0x63 - DLT_TZSP = 0x80 - DLT_USB = 0xba - DLT_USB_LINUX = 0xbd - DLT_USB_LINUX_MMAPPED = 0xdc - DLT_USER0 = 0x93 - DLT_USER1 = 0x94 - DLT_USER10 = 0x9d - DLT_USER11 = 0x9e - DLT_USER12 = 0x9f - DLT_USER13 = 0xa0 - DLT_USER14 = 0xa1 - DLT_USER15 = 0xa2 - DLT_USER2 = 0x95 - DLT_USER3 = 0x96 - DLT_USER4 = 0x97 - DLT_USER5 = 0x98 - DLT_USER6 = 0x99 - DLT_USER7 = 0x9a - DLT_USER8 = 0x9b - DLT_USER9 = 0x9c - DLT_WIHART = 0xdf - DLT_X2E_SERIAL = 0xd5 - DLT_X2E_XORAYA = 0xd6 - DT_BLK = 0x6 - DT_CHR = 0x2 - DT_DIR = 0x4 - DT_FIFO = 0x1 - DT_LNK = 0xa - DT_REG = 0x8 - DT_SOCK = 0xc - DT_UNKNOWN = 0x0 - DT_WHT = 0xe - ECHO = 0x8 - ECHOCTL = 0x40 - ECHOE = 0x2 - ECHOK = 0x4 - ECHOKE = 0x1 - ECHONL = 0x10 - ECHOPRT = 0x20 - EVFILT_AIO = -0x3 - EVFILT_EXCEPT = -0xf - EVFILT_FS = -0x9 - EVFILT_MACHPORT = -0x8 - EVFILT_PROC = -0x5 - EVFILT_READ = -0x1 - EVFILT_SIGNAL = -0x6 - EVFILT_SYSCOUNT = 0xf - EVFILT_THREADMARKER = 0xf - EVFILT_TIMER = -0x7 - EVFILT_USER = -0xa - EVFILT_VM = -0xc - EVFILT_VNODE = -0x4 - EVFILT_WRITE = -0x2 - EV_ADD = 0x1 - EV_CLEAR = 0x20 - EV_DELETE = 0x2 - EV_DISABLE = 0x8 - EV_DISPATCH = 0x80 - EV_DISPATCH2 = 0x180 - EV_ENABLE = 0x4 - EV_EOF = 0x8000 - EV_ERROR = 0x4000 - EV_FLAG0 = 0x1000 - EV_FLAG1 = 0x2000 - EV_ONESHOT = 0x10 - EV_OOBAND = 0x2000 - EV_POLL = 0x1000 - EV_RECEIPT = 0x40 - EV_SYSFLAGS = 0xf000 - EV_UDATA_SPECIFIC = 0x100 - EV_VANISHED = 0x200 - EXTA = 0x4b00 - EXTB = 0x9600 - EXTPROC = 0x800 - FD_CLOEXEC = 0x1 - FD_SETSIZE = 0x400 - FF0 = 0x0 - FF1 = 0x4000 - FFDLY = 0x4000 - FLUSHO = 0x800000 - FSOPT_ATTR_CMN_EXTENDED = 0x20 - FSOPT_NOFOLLOW = 0x1 - FSOPT_NOINMEMUPDATE = 0x2 - FSOPT_PACK_INVAL_ATTRS = 0x8 - FSOPT_REPORT_FULLSIZE = 0x4 - F_ADDFILESIGS = 0x3d - F_ADDFILESIGS_FOR_DYLD_SIM = 0x53 - F_ADDFILESIGS_RETURN = 0x61 - F_ADDSIGS = 0x3b - F_ALLOCATEALL = 0x4 - F_ALLOCATECONTIG = 0x2 - F_BARRIERFSYNC = 0x55 - F_CHECK_LV = 0x62 - F_CHKCLEAN = 0x29 - F_DUPFD = 0x0 - F_DUPFD_CLOEXEC = 0x43 - F_FINDSIGS = 0x4e - F_FLUSH_DATA = 0x28 - F_FREEZE_FS = 0x35 - F_FULLFSYNC = 0x33 - F_GETCODEDIR = 0x48 - F_GETFD = 0x1 - F_GETFL = 0x3 - F_GETLK = 0x7 - F_GETLKPID = 0x42 - F_GETNOSIGPIPE = 0x4a - F_GETOWN = 0x5 - F_GETPATH = 0x32 - F_GETPATH_MTMINFO = 0x47 - F_GETPROTECTIONCLASS = 0x3f - F_GETPROTECTIONLEVEL = 0x4d - F_GLOBAL_NOCACHE = 0x37 - F_LOG2PHYS = 0x31 - F_LOG2PHYS_EXT = 0x41 - F_NOCACHE = 0x30 - F_NODIRECT = 0x3e - F_OK = 0x0 - F_PATHPKG_CHECK = 0x34 - F_PEOFPOSMODE = 0x3 - F_PREALLOCATE = 0x2a - F_PUNCHHOLE = 0x63 - F_RDADVISE = 0x2c - F_RDAHEAD = 0x2d - F_RDLCK = 0x1 - F_SETBACKINGSTORE = 0x46 - F_SETFD = 0x2 - F_SETFL = 0x4 - F_SETLK = 0x8 - F_SETLKW = 0x9 - F_SETLKWTIMEOUT = 0xa - F_SETNOSIGPIPE = 0x49 - F_SETOWN = 0x6 - F_SETPROTECTIONCLASS = 0x40 - F_SETSIZE = 0x2b - F_SINGLE_WRITER = 0x4c - F_THAW_FS = 0x36 - F_TRANSCODEKEY = 0x4b - F_TRIM_ACTIVE_FILE = 0x64 - F_UNLCK = 0x2 - F_VOLPOSMODE = 0x4 - F_WRLCK = 0x3 - HUPCL = 0x4000 - HW_MACHINE = 0x1 - ICANON = 0x100 - ICMP6_FILTER = 0x12 - ICRNL = 0x100 - IEXTEN = 0x400 - IFF_ALLMULTI = 0x200 - IFF_ALTPHYS = 0x4000 - IFF_BROADCAST = 0x2 - IFF_DEBUG = 0x4 - IFF_LINK0 = 0x1000 - IFF_LINK1 = 0x2000 - IFF_LINK2 = 0x4000 - IFF_LOOPBACK = 0x8 - IFF_MULTICAST = 0x8000 - IFF_NOARP = 0x80 - IFF_NOTRAILERS = 0x20 - IFF_OACTIVE = 0x400 - IFF_POINTOPOINT = 0x10 - IFF_PROMISC = 0x100 - IFF_RUNNING = 0x40 - IFF_SIMPLEX = 0x800 - IFF_UP = 0x1 - IFNAMSIZ = 0x10 - IFT_1822 = 0x2 - IFT_AAL5 = 0x31 - IFT_ARCNET = 0x23 - IFT_ARCNETPLUS = 0x24 - IFT_ATM = 0x25 - IFT_BRIDGE = 0xd1 - IFT_CARP = 0xf8 - IFT_CELLULAR = 0xff - IFT_CEPT = 0x13 - IFT_DS3 = 0x1e - IFT_ENC = 0xf4 - IFT_EON = 0x19 - IFT_ETHER = 0x6 - IFT_FAITH = 0x38 - IFT_FDDI = 0xf - IFT_FRELAY = 0x20 - IFT_FRELAYDCE = 0x2c - IFT_GIF = 0x37 - IFT_HDH1822 = 0x3 - IFT_HIPPI = 0x2f - IFT_HSSI = 0x2e - IFT_HY = 0xe - IFT_IEEE1394 = 0x90 - IFT_IEEE8023ADLAG = 0x88 - IFT_ISDNBASIC = 0x14 - IFT_ISDNPRIMARY = 0x15 - IFT_ISO88022LLC = 0x29 - IFT_ISO88023 = 0x7 - IFT_ISO88024 = 0x8 - IFT_ISO88025 = 0x9 - IFT_ISO88026 = 0xa - IFT_L2VLAN = 0x87 - IFT_LAPB = 0x10 - IFT_LOCALTALK = 0x2a - IFT_LOOP = 0x18 - IFT_MIOX25 = 0x26 - IFT_MODEM = 0x30 - IFT_NSIP = 0x1b - IFT_OTHER = 0x1 - IFT_P10 = 0xc - IFT_P80 = 0xd - IFT_PARA = 0x22 - IFT_PDP = 0xff - IFT_PFLOG = 0xf5 - IFT_PFSYNC = 0xf6 - IFT_PKTAP = 0xfe - IFT_PPP = 0x17 - IFT_PROPMUX = 0x36 - IFT_PROPVIRTUAL = 0x35 - IFT_PTPSERIAL = 0x16 - IFT_RS232 = 0x21 - IFT_SDLC = 0x11 - IFT_SIP = 0x1f - IFT_SLIP = 0x1c - IFT_SMDSDXI = 0x2b - IFT_SMDSICIP = 0x34 - IFT_SONET = 0x27 - IFT_SONETPATH = 0x32 - IFT_SONETVT = 0x33 - IFT_STARLAN = 0xb - IFT_STF = 0x39 - IFT_T1 = 0x12 - IFT_ULTRA = 0x1d - IFT_V35 = 0x2d - IFT_X25 = 0x5 - IFT_X25DDN = 0x4 - IFT_X25PLE = 0x28 - IFT_XETHER = 0x1a - IGNBRK = 0x1 - IGNCR = 0x80 - IGNPAR = 0x4 - IMAXBEL = 0x2000 - INLCR = 0x40 - INPCK = 0x10 - IN_CLASSA_HOST = 0xffffff - IN_CLASSA_MAX = 0x80 - IN_CLASSA_NET = 0xff000000 - IN_CLASSA_NSHIFT = 0x18 - IN_CLASSB_HOST = 0xffff - IN_CLASSB_MAX = 0x10000 - IN_CLASSB_NET = 0xffff0000 - IN_CLASSB_NSHIFT = 0x10 - IN_CLASSC_HOST = 0xff - IN_CLASSC_NET = 0xffffff00 - IN_CLASSC_NSHIFT = 0x8 - IN_CLASSD_HOST = 0xfffffff - IN_CLASSD_NET = 0xf0000000 - IN_CLASSD_NSHIFT = 0x1c - IN_LINKLOCALNETNUM = 0xa9fe0000 - IN_LOOPBACKNET = 0x7f - IPPROTO_3PC = 0x22 - IPPROTO_ADFS = 0x44 - IPPROTO_AH = 0x33 - IPPROTO_AHIP = 0x3d - IPPROTO_APES = 0x63 - IPPROTO_ARGUS = 0xd - IPPROTO_AX25 = 0x5d - IPPROTO_BHA = 0x31 - IPPROTO_BLT = 0x1e - IPPROTO_BRSATMON = 0x4c - IPPROTO_CFTP = 0x3e - IPPROTO_CHAOS = 0x10 - IPPROTO_CMTP = 0x26 - IPPROTO_CPHB = 0x49 - IPPROTO_CPNX = 0x48 - IPPROTO_DDP = 0x25 - IPPROTO_DGP = 0x56 - IPPROTO_DIVERT = 0xfe - IPPROTO_DONE = 0x101 - IPPROTO_DSTOPTS = 0x3c - IPPROTO_EGP = 0x8 - IPPROTO_EMCON = 0xe - IPPROTO_ENCAP = 0x62 - IPPROTO_EON = 0x50 - IPPROTO_ESP = 0x32 - IPPROTO_ETHERIP = 0x61 - IPPROTO_FRAGMENT = 0x2c - IPPROTO_GGP = 0x3 - IPPROTO_GMTP = 0x64 - IPPROTO_GRE = 0x2f - IPPROTO_HELLO = 0x3f - IPPROTO_HMP = 0x14 - IPPROTO_HOPOPTS = 0x0 - IPPROTO_ICMP = 0x1 - IPPROTO_ICMPV6 = 0x3a - IPPROTO_IDP = 0x16 - IPPROTO_IDPR = 0x23 - IPPROTO_IDRP = 0x2d - IPPROTO_IGMP = 0x2 - IPPROTO_IGP = 0x55 - IPPROTO_IGRP = 0x58 - IPPROTO_IL = 0x28 - IPPROTO_INLSP = 0x34 - IPPROTO_INP = 0x20 - IPPROTO_IP = 0x0 - IPPROTO_IPCOMP = 0x6c - IPPROTO_IPCV = 0x47 - IPPROTO_IPEIP = 0x5e - IPPROTO_IPIP = 0x4 - IPPROTO_IPPC = 0x43 - IPPROTO_IPV4 = 0x4 - IPPROTO_IPV6 = 0x29 - IPPROTO_IRTP = 0x1c - IPPROTO_KRYPTOLAN = 0x41 - IPPROTO_LARP = 0x5b - IPPROTO_LEAF1 = 0x19 - IPPROTO_LEAF2 = 0x1a - IPPROTO_MAX = 0x100 - IPPROTO_MAXID = 0x34 - IPPROTO_MEAS = 0x13 - IPPROTO_MHRP = 0x30 - IPPROTO_MICP = 0x5f - IPPROTO_MTP = 0x5c - IPPROTO_MUX = 0x12 - IPPROTO_ND = 0x4d - IPPROTO_NHRP = 0x36 - IPPROTO_NONE = 0x3b - IPPROTO_NSP = 0x1f - IPPROTO_NVPII = 0xb - IPPROTO_OSPFIGP = 0x59 - IPPROTO_PGM = 0x71 - IPPROTO_PIGP = 0x9 - IPPROTO_PIM = 0x67 - IPPROTO_PRM = 0x15 - IPPROTO_PUP = 0xc - IPPROTO_PVP = 0x4b - IPPROTO_RAW = 0xff - IPPROTO_RCCMON = 0xa - IPPROTO_RDP = 0x1b - IPPROTO_ROUTING = 0x2b - IPPROTO_RSVP = 0x2e - IPPROTO_RVD = 0x42 - IPPROTO_SATEXPAK = 0x40 - IPPROTO_SATMON = 0x45 - IPPROTO_SCCSP = 0x60 - IPPROTO_SCTP = 0x84 - IPPROTO_SDRP = 0x2a - IPPROTO_SEP = 0x21 - IPPROTO_SRPC = 0x5a - IPPROTO_ST = 0x7 - IPPROTO_SVMTP = 0x52 - IPPROTO_SWIPE = 0x35 - IPPROTO_TCF = 0x57 - IPPROTO_TCP = 0x6 - IPPROTO_TP = 0x1d - IPPROTO_TPXX = 0x27 - IPPROTO_TRUNK1 = 0x17 - IPPROTO_TRUNK2 = 0x18 - IPPROTO_TTP = 0x54 - IPPROTO_UDP = 0x11 - IPPROTO_VINES = 0x53 - IPPROTO_VISA = 0x46 - IPPROTO_VMTP = 0x51 - IPPROTO_WBEXPAK = 0x4f - IPPROTO_WBMON = 0x4e - IPPROTO_WSN = 0x4a - IPPROTO_XNET = 0xf - IPPROTO_XTP = 0x24 - IPV6_2292DSTOPTS = 0x17 - IPV6_2292HOPLIMIT = 0x14 - IPV6_2292HOPOPTS = 0x16 - IPV6_2292NEXTHOP = 0x15 - IPV6_2292PKTINFO = 0x13 - IPV6_2292PKTOPTIONS = 0x19 - IPV6_2292RTHDR = 0x18 - IPV6_BINDV6ONLY = 0x1b - IPV6_BOUND_IF = 0x7d - IPV6_CHECKSUM = 0x1a - IPV6_DEFAULT_MULTICAST_HOPS = 0x1 - IPV6_DEFAULT_MULTICAST_LOOP = 0x1 - IPV6_DEFHLIM = 0x40 - IPV6_FAITH = 0x1d - IPV6_FLOWINFO_MASK = 0xffffff0f - IPV6_FLOWLABEL_MASK = 0xffff0f00 - IPV6_FLOW_ECN_MASK = 0x300 - IPV6_FRAGTTL = 0x3c - IPV6_FW_ADD = 0x1e - IPV6_FW_DEL = 0x1f - IPV6_FW_FLUSH = 0x20 - IPV6_FW_GET = 0x22 - IPV6_FW_ZERO = 0x21 - IPV6_HLIMDEC = 0x1 - IPV6_IPSEC_POLICY = 0x1c - IPV6_JOIN_GROUP = 0xc - IPV6_LEAVE_GROUP = 0xd - IPV6_MAXHLIM = 0xff - IPV6_MAXOPTHDR = 0x800 - IPV6_MAXPACKET = 0xffff - IPV6_MAX_GROUP_SRC_FILTER = 0x200 - IPV6_MAX_MEMBERSHIPS = 0xfff - IPV6_MAX_SOCK_SRC_FILTER = 0x80 - IPV6_MIN_MEMBERSHIPS = 0x1f - IPV6_MMTU = 0x500 - IPV6_MULTICAST_HOPS = 0xa - IPV6_MULTICAST_IF = 0x9 - IPV6_MULTICAST_LOOP = 0xb - IPV6_PORTRANGE = 0xe - IPV6_PORTRANGE_DEFAULT = 0x0 - IPV6_PORTRANGE_HIGH = 0x1 - IPV6_PORTRANGE_LOW = 0x2 - IPV6_RECVTCLASS = 0x23 - IPV6_RTHDR_LOOSE = 0x0 - IPV6_RTHDR_STRICT = 0x1 - IPV6_RTHDR_TYPE_0 = 0x0 - IPV6_SOCKOPT_RESERVED1 = 0x3 - IPV6_TCLASS = 0x24 - IPV6_UNICAST_HOPS = 0x4 - IPV6_V6ONLY = 0x1b - IPV6_VERSION = 0x60 - IPV6_VERSION_MASK = 0xf0 - IP_ADD_MEMBERSHIP = 0xc - IP_ADD_SOURCE_MEMBERSHIP = 0x46 - IP_BLOCK_SOURCE = 0x48 - IP_BOUND_IF = 0x19 - IP_DEFAULT_MULTICAST_LOOP = 0x1 - IP_DEFAULT_MULTICAST_TTL = 0x1 - IP_DF = 0x4000 - IP_DROP_MEMBERSHIP = 0xd - IP_DROP_SOURCE_MEMBERSHIP = 0x47 - IP_DUMMYNET_CONFIGURE = 0x3c - IP_DUMMYNET_DEL = 0x3d - IP_DUMMYNET_FLUSH = 0x3e - IP_DUMMYNET_GET = 0x40 - IP_FAITH = 0x16 - IP_FW_ADD = 0x28 - IP_FW_DEL = 0x29 - IP_FW_FLUSH = 0x2a - IP_FW_GET = 0x2c - IP_FW_RESETLOG = 0x2d - IP_FW_ZERO = 0x2b - IP_HDRINCL = 0x2 - IP_IPSEC_POLICY = 0x15 - IP_MAXPACKET = 0xffff - IP_MAX_GROUP_SRC_FILTER = 0x200 - IP_MAX_MEMBERSHIPS = 0xfff - IP_MAX_SOCK_MUTE_FILTER = 0x80 - IP_MAX_SOCK_SRC_FILTER = 0x80 - IP_MF = 0x2000 - IP_MIN_MEMBERSHIPS = 0x1f - IP_MSFILTER = 0x4a - IP_MSS = 0x240 - IP_MULTICAST_IF = 0x9 - IP_MULTICAST_IFINDEX = 0x42 - IP_MULTICAST_LOOP = 0xb - IP_MULTICAST_TTL = 0xa - IP_MULTICAST_VIF = 0xe - IP_NAT__XXX = 0x37 - IP_OFFMASK = 0x1fff - IP_OLD_FW_ADD = 0x32 - IP_OLD_FW_DEL = 0x33 - IP_OLD_FW_FLUSH = 0x34 - IP_OLD_FW_GET = 0x36 - IP_OLD_FW_RESETLOG = 0x38 - IP_OLD_FW_ZERO = 0x35 - IP_OPTIONS = 0x1 - IP_PKTINFO = 0x1a - IP_PORTRANGE = 0x13 - IP_PORTRANGE_DEFAULT = 0x0 - IP_PORTRANGE_HIGH = 0x1 - IP_PORTRANGE_LOW = 0x2 - IP_RECVDSTADDR = 0x7 - IP_RECVIF = 0x14 - IP_RECVOPTS = 0x5 - IP_RECVPKTINFO = 0x1a - IP_RECVRETOPTS = 0x6 - IP_RECVTOS = 0x1b - IP_RECVTTL = 0x18 - IP_RETOPTS = 0x8 - IP_RF = 0x8000 - IP_RSVP_OFF = 0x10 - IP_RSVP_ON = 0xf - IP_RSVP_VIF_OFF = 0x12 - IP_RSVP_VIF_ON = 0x11 - IP_STRIPHDR = 0x17 - IP_TOS = 0x3 - IP_TRAFFIC_MGT_BACKGROUND = 0x41 - IP_TTL = 0x4 - IP_UNBLOCK_SOURCE = 0x49 - ISIG = 0x80 - ISTRIP = 0x20 - IUTF8 = 0x4000 - IXANY = 0x800 - IXOFF = 0x400 - IXON = 0x200 - KERN_HOSTNAME = 0xa - KERN_OSRELEASE = 0x2 - KERN_OSTYPE = 0x1 - KERN_VERSION = 0x4 - LOCK_EX = 0x2 - LOCK_NB = 0x4 - LOCK_SH = 0x1 - LOCK_UN = 0x8 - MADV_CAN_REUSE = 0x9 - MADV_DONTNEED = 0x4 - MADV_FREE = 0x5 - MADV_FREE_REUSABLE = 0x7 - MADV_FREE_REUSE = 0x8 - MADV_NORMAL = 0x0 - MADV_PAGEOUT = 0xa - MADV_RANDOM = 0x1 - MADV_SEQUENTIAL = 0x2 - MADV_WILLNEED = 0x3 - MADV_ZERO_WIRED_PAGES = 0x6 - MAP_ANON = 0x1000 - MAP_ANONYMOUS = 0x1000 - MAP_COPY = 0x2 - MAP_FILE = 0x0 - MAP_FIXED = 0x10 - MAP_HASSEMAPHORE = 0x200 - MAP_JIT = 0x800 - MAP_NOCACHE = 0x400 - MAP_NOEXTEND = 0x100 - MAP_NORESERVE = 0x40 - MAP_PRIVATE = 0x2 - MAP_RENAME = 0x20 - MAP_RESERVED0080 = 0x80 - MAP_RESILIENT_CODESIGN = 0x2000 - MAP_RESILIENT_MEDIA = 0x4000 - MAP_SHARED = 0x1 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MNT_ASYNC = 0x40 - MNT_AUTOMOUNTED = 0x400000 - MNT_CMDFLAGS = 0xf0000 - MNT_CPROTECT = 0x80 - MNT_DEFWRITE = 0x2000000 - MNT_DONTBROWSE = 0x100000 - MNT_DOVOLFS = 0x8000 - MNT_DWAIT = 0x4 - MNT_EXPORTED = 0x100 - MNT_FORCE = 0x80000 - MNT_IGNORE_OWNERSHIP = 0x200000 - MNT_JOURNALED = 0x800000 - MNT_LOCAL = 0x1000 - MNT_MULTILABEL = 0x4000000 - MNT_NOATIME = 0x10000000 - MNT_NOBLOCK = 0x20000 - MNT_NODEV = 0x10 - MNT_NOEXEC = 0x4 - MNT_NOSUID = 0x8 - MNT_NOUSERXATTR = 0x1000000 - MNT_NOWAIT = 0x2 - MNT_QUARANTINE = 0x400 - MNT_QUOTA = 0x2000 - MNT_RDONLY = 0x1 - MNT_RELOAD = 0x40000 - MNT_ROOTFS = 0x4000 - MNT_SYNCHRONOUS = 0x2 - MNT_UNION = 0x20 - MNT_UNKNOWNPERMISSIONS = 0x200000 - MNT_UPDATE = 0x10000 - MNT_VISFLAGMASK = 0x17f0f5ff - MNT_WAIT = 0x1 - MSG_CTRUNC = 0x20 - MSG_DONTROUTE = 0x4 - MSG_DONTWAIT = 0x80 - MSG_EOF = 0x100 - MSG_EOR = 0x8 - MSG_FLUSH = 0x400 - MSG_HAVEMORE = 0x2000 - MSG_HOLD = 0x800 - MSG_NEEDSA = 0x10000 - MSG_OOB = 0x1 - MSG_PEEK = 0x2 - MSG_RCVMORE = 0x4000 - MSG_SEND = 0x1000 - MSG_TRUNC = 0x10 - MSG_WAITALL = 0x40 - MSG_WAITSTREAM = 0x200 - MS_ASYNC = 0x1 - MS_DEACTIVATE = 0x8 - MS_INVALIDATE = 0x2 - MS_KILLPAGES = 0x4 - MS_SYNC = 0x10 - NAME_MAX = 0xff - NET_RT_DUMP = 0x1 - NET_RT_DUMP2 = 0x7 - NET_RT_FLAGS = 0x2 - NET_RT_IFLIST = 0x3 - NET_RT_IFLIST2 = 0x6 - NET_RT_MAXID = 0xa - NET_RT_STAT = 0x4 - NET_RT_TRASH = 0x5 - NFDBITS = 0x20 - NL0 = 0x0 - NL1 = 0x100 - NL2 = 0x200 - NL3 = 0x300 - NLDLY = 0x300 - NOFLSH = 0x80000000 - NOKERNINFO = 0x2000000 - NOTE_ABSOLUTE = 0x8 - NOTE_ATTRIB = 0x8 - NOTE_BACKGROUND = 0x40 - NOTE_CHILD = 0x4 - NOTE_CRITICAL = 0x20 - NOTE_DELETE = 0x1 - NOTE_EXEC = 0x20000000 - NOTE_EXIT = 0x80000000 - NOTE_EXITSTATUS = 0x4000000 - NOTE_EXIT_CSERROR = 0x40000 - NOTE_EXIT_DECRYPTFAIL = 0x10000 - NOTE_EXIT_DETAIL = 0x2000000 - NOTE_EXIT_DETAIL_MASK = 0x70000 - NOTE_EXIT_MEMORY = 0x20000 - NOTE_EXIT_REPARENTED = 0x80000 - NOTE_EXTEND = 0x4 - NOTE_FFAND = 0x40000000 - NOTE_FFCOPY = 0xc0000000 - NOTE_FFCTRLMASK = 0xc0000000 - NOTE_FFLAGSMASK = 0xffffff - NOTE_FFNOP = 0x0 - NOTE_FFOR = 0x80000000 - NOTE_FORK = 0x40000000 - NOTE_FUNLOCK = 0x100 - NOTE_LEEWAY = 0x10 - NOTE_LINK = 0x10 - NOTE_LOWAT = 0x1 - NOTE_MACH_CONTINUOUS_TIME = 0x80 - NOTE_NONE = 0x80 - NOTE_NSECONDS = 0x4 - NOTE_OOB = 0x2 - NOTE_PCTRLMASK = -0x100000 - NOTE_PDATAMASK = 0xfffff - NOTE_REAP = 0x10000000 - NOTE_RENAME = 0x20 - NOTE_REVOKE = 0x40 - NOTE_SECONDS = 0x1 - NOTE_SIGNAL = 0x8000000 - NOTE_TRACK = 0x1 - NOTE_TRACKERR = 0x2 - NOTE_TRIGGER = 0x1000000 - NOTE_USECONDS = 0x2 - NOTE_VM_ERROR = 0x10000000 - NOTE_VM_PRESSURE = 0x80000000 - NOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000 - NOTE_VM_PRESSURE_TERMINATE = 0x40000000 - NOTE_WRITE = 0x2 - OCRNL = 0x10 - OFDEL = 0x20000 - OFILL = 0x80 - ONLCR = 0x2 - ONLRET = 0x40 - ONOCR = 0x20 - ONOEOT = 0x8 - OPOST = 0x1 - OXTABS = 0x4 - O_ACCMODE = 0x3 - O_ALERT = 0x20000000 - O_APPEND = 0x8 - O_ASYNC = 0x40 - O_CLOEXEC = 0x1000000 - O_CREAT = 0x200 - O_DIRECTORY = 0x100000 - O_DP_GETRAWENCRYPTED = 0x1 - O_DP_GETRAWUNENCRYPTED = 0x2 - O_DSYNC = 0x400000 - O_EVTONLY = 0x8000 - O_EXCL = 0x800 - O_EXLOCK = 0x20 - O_FSYNC = 0x80 - O_NDELAY = 0x4 - O_NOCTTY = 0x20000 - O_NOFOLLOW = 0x100 - O_NONBLOCK = 0x4 - O_POPUP = 0x80000000 - O_RDONLY = 0x0 - O_RDWR = 0x2 - O_SHLOCK = 0x10 - O_SYMLINK = 0x200000 - O_SYNC = 0x80 - O_TRUNC = 0x400 - O_WRONLY = 0x1 - PARENB = 0x1000 - PARMRK = 0x8 - PARODD = 0x2000 - PENDIN = 0x20000000 - PRIO_PGRP = 0x1 - PRIO_PROCESS = 0x0 - PRIO_USER = 0x2 - PROT_EXEC = 0x4 - PROT_NONE = 0x0 - PROT_READ = 0x1 - PROT_WRITE = 0x2 - PT_ATTACH = 0xa - PT_ATTACHEXC = 0xe - PT_CONTINUE = 0x7 - PT_DENY_ATTACH = 0x1f - PT_DETACH = 0xb - PT_FIRSTMACH = 0x20 - PT_FORCEQUOTA = 0x1e - PT_KILL = 0x8 - PT_READ_D = 0x2 - PT_READ_I = 0x1 - PT_READ_U = 0x3 - PT_SIGEXC = 0xc - PT_STEP = 0x9 - PT_THUPDATE = 0xd - PT_TRACE_ME = 0x0 - PT_WRITE_D = 0x5 - PT_WRITE_I = 0x4 - PT_WRITE_U = 0x6 - RLIMIT_AS = 0x5 - RLIMIT_CORE = 0x4 - RLIMIT_CPU = 0x0 - RLIMIT_CPU_USAGE_MONITOR = 0x2 - RLIMIT_DATA = 0x2 - RLIMIT_FSIZE = 0x1 - RLIMIT_MEMLOCK = 0x6 - RLIMIT_NOFILE = 0x8 - RLIMIT_NPROC = 0x7 - RLIMIT_RSS = 0x5 - RLIMIT_STACK = 0x3 - RLIM_INFINITY = 0x7fffffffffffffff - RTAX_AUTHOR = 0x6 - RTAX_BRD = 0x7 - RTAX_DST = 0x0 - RTAX_GATEWAY = 0x1 - RTAX_GENMASK = 0x3 - RTAX_IFA = 0x5 - RTAX_IFP = 0x4 - RTAX_MAX = 0x8 - RTAX_NETMASK = 0x2 - RTA_AUTHOR = 0x40 - RTA_BRD = 0x80 - RTA_DST = 0x1 - RTA_GATEWAY = 0x2 - RTA_GENMASK = 0x8 - RTA_IFA = 0x20 - RTA_IFP = 0x10 - RTA_NETMASK = 0x4 - RTF_BLACKHOLE = 0x1000 - RTF_BROADCAST = 0x400000 - RTF_CLONING = 0x100 - RTF_CONDEMNED = 0x2000000 - RTF_DELCLONE = 0x80 - RTF_DONE = 0x40 - RTF_DYNAMIC = 0x10 - RTF_GATEWAY = 0x2 - RTF_HOST = 0x4 - RTF_IFREF = 0x4000000 - RTF_IFSCOPE = 0x1000000 - RTF_LLINFO = 0x400 - RTF_LOCAL = 0x200000 - RTF_MODIFIED = 0x20 - RTF_MULTICAST = 0x800000 - RTF_NOIFREF = 0x2000 - RTF_PINNED = 0x100000 - RTF_PRCLONING = 0x10000 - RTF_PROTO1 = 0x8000 - RTF_PROTO2 = 0x4000 - RTF_PROTO3 = 0x40000 - RTF_PROXY = 0x8000000 - RTF_REJECT = 0x8 - RTF_ROUTER = 0x10000000 - RTF_STATIC = 0x800 - RTF_UP = 0x1 - RTF_WASCLONED = 0x20000 - RTF_XRESOLVE = 0x200 - RTM_ADD = 0x1 - RTM_CHANGE = 0x3 - RTM_DELADDR = 0xd - RTM_DELETE = 0x2 - RTM_DELMADDR = 0x10 - RTM_GET = 0x4 - RTM_GET2 = 0x14 - RTM_IFINFO = 0xe - RTM_IFINFO2 = 0x12 - RTM_LOCK = 0x8 - RTM_LOSING = 0x5 - RTM_MISS = 0x7 - RTM_NEWADDR = 0xc - RTM_NEWMADDR = 0xf - RTM_NEWMADDR2 = 0x13 - RTM_OLDADD = 0x9 - RTM_OLDDEL = 0xa - RTM_REDIRECT = 0x6 - RTM_RESOLVE = 0xb - RTM_RTTUNIT = 0xf4240 - RTM_VERSION = 0x5 - RTV_EXPIRE = 0x4 - RTV_HOPCOUNT = 0x2 - RTV_MTU = 0x1 - RTV_RPIPE = 0x8 - RTV_RTT = 0x40 - RTV_RTTVAR = 0x80 - RTV_SPIPE = 0x10 - RTV_SSTHRESH = 0x20 - RUSAGE_CHILDREN = -0x1 - RUSAGE_SELF = 0x0 - SCM_CREDS = 0x3 - SCM_RIGHTS = 0x1 - SCM_TIMESTAMP = 0x2 - SCM_TIMESTAMP_MONOTONIC = 0x4 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 - SIOCADDMULTI = 0x80206931 - SIOCAIFADDR = 0x8040691a - SIOCARPIPLL = 0xc0206928 - SIOCATMARK = 0x40047307 - SIOCAUTOADDR = 0xc0206926 - SIOCAUTONETMASK = 0x80206927 - SIOCDELMULTI = 0x80206932 - SIOCDIFADDR = 0x80206919 - SIOCDIFPHYADDR = 0x80206941 - SIOCGDRVSPEC = 0xc01c697b - SIOCGETVLAN = 0xc020697f - SIOCGHIWAT = 0x40047301 - SIOCGIFADDR = 0xc0206921 - SIOCGIFALTMTU = 0xc0206948 - SIOCGIFASYNCMAP = 0xc020697c - SIOCGIFBOND = 0xc0206947 - SIOCGIFBRDADDR = 0xc0206923 - SIOCGIFCAP = 0xc020695b - SIOCGIFCONF = 0xc0086924 - SIOCGIFDEVMTU = 0xc0206944 - SIOCGIFDSTADDR = 0xc0206922 - SIOCGIFFLAGS = 0xc0206911 - SIOCGIFGENERIC = 0xc020693a - SIOCGIFKPI = 0xc0206987 - SIOCGIFMAC = 0xc0206982 - SIOCGIFMEDIA = 0xc0286938 - SIOCGIFMETRIC = 0xc0206917 - SIOCGIFMTU = 0xc0206933 - SIOCGIFNETMASK = 0xc0206925 - SIOCGIFPDSTADDR = 0xc0206940 - SIOCGIFPHYS = 0xc0206935 - SIOCGIFPSRCADDR = 0xc020693f - SIOCGIFSTATUS = 0xc331693d - SIOCGIFVLAN = 0xc020697f - SIOCGIFWAKEFLAGS = 0xc0206988 - SIOCGLOWAT = 0x40047303 - SIOCGPGRP = 0x40047309 - SIOCIFCREATE = 0xc0206978 - SIOCIFCREATE2 = 0xc020697a - SIOCIFDESTROY = 0x80206979 - SIOCIFGCLONERS = 0xc00c6981 - SIOCRSLVMULTI = 0xc008693b - SIOCSDRVSPEC = 0x801c697b - SIOCSETVLAN = 0x8020697e - SIOCSHIWAT = 0x80047300 - SIOCSIFADDR = 0x8020690c - SIOCSIFALTMTU = 0x80206945 - SIOCSIFASYNCMAP = 0x8020697d - SIOCSIFBOND = 0x80206946 - SIOCSIFBRDADDR = 0x80206913 - SIOCSIFCAP = 0x8020695a - SIOCSIFDSTADDR = 0x8020690e - SIOCSIFFLAGS = 0x80206910 - SIOCSIFGENERIC = 0x80206939 - SIOCSIFKPI = 0x80206986 - SIOCSIFLLADDR = 0x8020693c - SIOCSIFMAC = 0x80206983 - SIOCSIFMEDIA = 0xc0206937 - SIOCSIFMETRIC = 0x80206918 - SIOCSIFMTU = 0x80206934 - SIOCSIFNETMASK = 0x80206916 - SIOCSIFPHYADDR = 0x8040693e - SIOCSIFPHYS = 0x80206936 - SIOCSIFVLAN = 0x8020697e - SIOCSLOWAT = 0x80047302 - SIOCSPGRP = 0x80047308 - SOCK_DGRAM = 0x2 - SOCK_MAXADDRLEN = 0xff - SOCK_RAW = 0x3 - SOCK_RDM = 0x4 - SOCK_SEQPACKET = 0x5 - SOCK_STREAM = 0x1 - SOL_SOCKET = 0xffff - SOMAXCONN = 0x80 - SO_ACCEPTCONN = 0x2 - SO_BROADCAST = 0x20 - SO_DEBUG = 0x1 - SO_DONTROUTE = 0x10 - SO_DONTTRUNC = 0x2000 - SO_ERROR = 0x1007 - SO_KEEPALIVE = 0x8 - SO_LABEL = 0x1010 - SO_LINGER = 0x80 - SO_LINGER_SEC = 0x1080 - SO_NETSVC_MARKING_LEVEL = 0x1119 - SO_NET_SERVICE_TYPE = 0x1116 - SO_NKE = 0x1021 - SO_NOADDRERR = 0x1023 - SO_NOSIGPIPE = 0x1022 - SO_NOTIFYCONFLICT = 0x1026 - SO_NP_EXTENSIONS = 0x1083 - SO_NREAD = 0x1020 - SO_NUMRCVPKT = 0x1112 - SO_NWRITE = 0x1024 - SO_OOBINLINE = 0x100 - SO_PEERLABEL = 0x1011 - SO_RANDOMPORT = 0x1082 - SO_RCVBUF = 0x1002 - SO_RCVLOWAT = 0x1004 - SO_RCVTIMEO = 0x1006 - SO_REUSEADDR = 0x4 - SO_REUSEPORT = 0x200 - SO_REUSESHAREUID = 0x1025 - SO_SNDBUF = 0x1001 - SO_SNDLOWAT = 0x1003 - SO_SNDTIMEO = 0x1005 - SO_TIMESTAMP = 0x400 - SO_TIMESTAMP_MONOTONIC = 0x800 - SO_TYPE = 0x1008 - SO_UPCALLCLOSEWAIT = 0x1027 - SO_USELOOPBACK = 0x40 - SO_WANTMORE = 0x4000 - SO_WANTOOBFLAG = 0x8000 - S_IEXEC = 0x40 - S_IFBLK = 0x6000 - S_IFCHR = 0x2000 - S_IFDIR = 0x4000 - S_IFIFO = 0x1000 - S_IFLNK = 0xa000 - S_IFMT = 0xf000 - S_IFREG = 0x8000 - S_IFSOCK = 0xc000 - S_IFWHT = 0xe000 - S_IREAD = 0x100 - S_IRGRP = 0x20 - S_IROTH = 0x4 - S_IRUSR = 0x100 - S_IRWXG = 0x38 - S_IRWXO = 0x7 - S_IRWXU = 0x1c0 - S_ISGID = 0x400 - S_ISTXT = 0x200 - S_ISUID = 0x800 - S_ISVTX = 0x200 - S_IWGRP = 0x10 - S_IWOTH = 0x2 - S_IWRITE = 0x80 - S_IWUSR = 0x80 - S_IXGRP = 0x8 - S_IXOTH = 0x1 - S_IXUSR = 0x40 - TAB0 = 0x0 - TAB1 = 0x400 - TAB2 = 0x800 - TAB3 = 0x4 - TABDLY = 0xc04 - TCIFLUSH = 0x1 - TCIOFF = 0x3 - TCIOFLUSH = 0x3 - TCION = 0x4 - TCOFLUSH = 0x2 - TCOOFF = 0x1 - TCOON = 0x2 - TCP_CONNECTIONTIMEOUT = 0x20 - TCP_CONNECTION_INFO = 0x106 - TCP_ENABLE_ECN = 0x104 - TCP_FASTOPEN = 0x105 - TCP_KEEPALIVE = 0x10 - TCP_KEEPCNT = 0x102 - TCP_KEEPINTVL = 0x101 - TCP_MAXHLEN = 0x3c - TCP_MAXOLEN = 0x28 - TCP_MAXSEG = 0x2 - TCP_MAXWIN = 0xffff - TCP_MAX_SACK = 0x4 - TCP_MAX_WINSHIFT = 0xe - TCP_MINMSS = 0xd8 - TCP_MSS = 0x200 - TCP_NODELAY = 0x1 - TCP_NOOPT = 0x8 - TCP_NOPUSH = 0x4 - TCP_NOTSENT_LOWAT = 0x201 - TCP_RXT_CONNDROPTIME = 0x80 - TCP_RXT_FINDROP = 0x100 - TCP_SENDMOREACKS = 0x103 - TCSAFLUSH = 0x2 - TIOCCBRK = 0x2000747a - TIOCCDTR = 0x20007478 - TIOCCONS = 0x80047462 - TIOCDCDTIMESTAMP = 0x40087458 - TIOCDRAIN = 0x2000745e - TIOCDSIMICROCODE = 0x20007455 - TIOCEXCL = 0x2000740d - TIOCEXT = 0x80047460 - TIOCFLUSH = 0x80047410 - TIOCGDRAINWAIT = 0x40047456 - TIOCGETA = 0x402c7413 - TIOCGETD = 0x4004741a - TIOCGPGRP = 0x40047477 - TIOCGWINSZ = 0x40087468 - TIOCIXOFF = 0x20007480 - TIOCIXON = 0x20007481 - TIOCMBIC = 0x8004746b - TIOCMBIS = 0x8004746c - TIOCMGDTRWAIT = 0x4004745a - TIOCMGET = 0x4004746a - TIOCMODG = 0x40047403 - TIOCMODS = 0x80047404 - TIOCMSDTRWAIT = 0x8004745b - TIOCMSET = 0x8004746d - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DSR = 0x100 - TIOCM_DTR = 0x2 - TIOCM_LE = 0x1 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_RTS = 0x4 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x20007471 - TIOCNXCL = 0x2000740e - TIOCOUTQ = 0x40047473 - TIOCPKT = 0x80047470 - TIOCPKT_DATA = 0x0 - TIOCPKT_DOSTOP = 0x20 - TIOCPKT_FLUSHREAD = 0x1 - TIOCPKT_FLUSHWRITE = 0x2 - TIOCPKT_IOCTL = 0x40 - TIOCPKT_NOSTOP = 0x10 - TIOCPKT_START = 0x8 - TIOCPKT_STOP = 0x4 - TIOCPTYGNAME = 0x40807453 - TIOCPTYGRANT = 0x20007454 - TIOCPTYUNLK = 0x20007452 - TIOCREMOTE = 0x80047469 - TIOCSBRK = 0x2000747b - TIOCSCONS = 0x20007463 - TIOCSCTTY = 0x20007461 - TIOCSDRAINWAIT = 0x80047457 - TIOCSDTR = 0x20007479 - TIOCSETA = 0x802c7414 - TIOCSETAF = 0x802c7416 - TIOCSETAW = 0x802c7415 - TIOCSETD = 0x8004741b - TIOCSIG = 0x2000745f - TIOCSPGRP = 0x80047476 - TIOCSTART = 0x2000746e - TIOCSTAT = 0x20007465 - TIOCSTI = 0x80017472 - TIOCSTOP = 0x2000746f - TIOCSWINSZ = 0x80087467 - TIOCTIMESTAMP = 0x40087459 - TIOCUCNTL = 0x80047466 - TOSTOP = 0x400000 - VDISCARD = 0xf - VDSUSP = 0xb - VEOF = 0x0 - VEOL = 0x1 - VEOL2 = 0x2 - VERASE = 0x3 - VINTR = 0x8 - VKILL = 0x5 - VLNEXT = 0xe - VMIN = 0x10 - VM_LOADAVG = 0x2 - VM_MACHFACTOR = 0x4 - VM_MAXID = 0x6 - VM_METER = 0x1 - VM_SWAPUSAGE = 0x5 - VQUIT = 0x9 - VREPRINT = 0x6 - VSTART = 0xc - VSTATUS = 0x12 - VSTOP = 0xd - VSUSP = 0xa - VT0 = 0x0 - VT1 = 0x10000 - VTDLY = 0x10000 - VTIME = 0x11 - VWERASE = 0x4 - WCONTINUED = 0x10 - WCOREFLAG = 0x80 - WEXITED = 0x4 - WNOHANG = 0x1 - WNOWAIT = 0x20 - WORDSIZE = 0x20 - WSTOPPED = 0x8 - WUNTRACED = 0x2 - XATTR_CREATE = 0x2 - XATTR_NODEFAULT = 0x10 - XATTR_NOFOLLOW = 0x1 - XATTR_NOSECURITY = 0x8 - XATTR_REPLACE = 0x4 - XATTR_SHOWCOMPRESSION = 0x20 -) - -// Errors -const ( - E2BIG = syscall.Errno(0x7) - EACCES = syscall.Errno(0xd) - EADDRINUSE = syscall.Errno(0x30) - EADDRNOTAVAIL = syscall.Errno(0x31) - EAFNOSUPPORT = syscall.Errno(0x2f) - EAGAIN = syscall.Errno(0x23) - EALREADY = syscall.Errno(0x25) - EAUTH = syscall.Errno(0x50) - EBADARCH = syscall.Errno(0x56) - EBADEXEC = syscall.Errno(0x55) - EBADF = syscall.Errno(0x9) - EBADMACHO = syscall.Errno(0x58) - EBADMSG = syscall.Errno(0x5e) - EBADRPC = syscall.Errno(0x48) - EBUSY = syscall.Errno(0x10) - ECANCELED = syscall.Errno(0x59) - ECHILD = syscall.Errno(0xa) - ECONNABORTED = syscall.Errno(0x35) - ECONNREFUSED = syscall.Errno(0x3d) - ECONNRESET = syscall.Errno(0x36) - EDEADLK = syscall.Errno(0xb) - EDESTADDRREQ = syscall.Errno(0x27) - EDEVERR = syscall.Errno(0x53) - EDOM = syscall.Errno(0x21) - EDQUOT = syscall.Errno(0x45) - EEXIST = syscall.Errno(0x11) - EFAULT = syscall.Errno(0xe) - EFBIG = syscall.Errno(0x1b) - EFTYPE = syscall.Errno(0x4f) - EHOSTDOWN = syscall.Errno(0x40) - EHOSTUNREACH = syscall.Errno(0x41) - EIDRM = syscall.Errno(0x5a) - EILSEQ = syscall.Errno(0x5c) - EINPROGRESS = syscall.Errno(0x24) - EINTR = syscall.Errno(0x4) - EINVAL = syscall.Errno(0x16) - EIO = syscall.Errno(0x5) - EISCONN = syscall.Errno(0x38) - EISDIR = syscall.Errno(0x15) - ELAST = syscall.Errno(0x6a) - ELOOP = syscall.Errno(0x3e) - EMFILE = syscall.Errno(0x18) - EMLINK = syscall.Errno(0x1f) - EMSGSIZE = syscall.Errno(0x28) - EMULTIHOP = syscall.Errno(0x5f) - ENAMETOOLONG = syscall.Errno(0x3f) - ENEEDAUTH = syscall.Errno(0x51) - ENETDOWN = syscall.Errno(0x32) - ENETRESET = syscall.Errno(0x34) - ENETUNREACH = syscall.Errno(0x33) - ENFILE = syscall.Errno(0x17) - ENOATTR = syscall.Errno(0x5d) - ENOBUFS = syscall.Errno(0x37) - ENODATA = syscall.Errno(0x60) - ENODEV = syscall.Errno(0x13) - ENOENT = syscall.Errno(0x2) - ENOEXEC = syscall.Errno(0x8) - ENOLCK = syscall.Errno(0x4d) - ENOLINK = syscall.Errno(0x61) - ENOMEM = syscall.Errno(0xc) - ENOMSG = syscall.Errno(0x5b) - ENOPOLICY = syscall.Errno(0x67) - ENOPROTOOPT = syscall.Errno(0x2a) - ENOSPC = syscall.Errno(0x1c) - ENOSR = syscall.Errno(0x62) - ENOSTR = syscall.Errno(0x63) - ENOSYS = syscall.Errno(0x4e) - ENOTBLK = syscall.Errno(0xf) - ENOTCONN = syscall.Errno(0x39) - ENOTDIR = syscall.Errno(0x14) - ENOTEMPTY = syscall.Errno(0x42) - ENOTRECOVERABLE = syscall.Errno(0x68) - ENOTSOCK = syscall.Errno(0x26) - ENOTSUP = syscall.Errno(0x2d) - ENOTTY = syscall.Errno(0x19) - ENXIO = syscall.Errno(0x6) - EOPNOTSUPP = syscall.Errno(0x66) - EOVERFLOW = syscall.Errno(0x54) - EOWNERDEAD = syscall.Errno(0x69) - EPERM = syscall.Errno(0x1) - EPFNOSUPPORT = syscall.Errno(0x2e) - EPIPE = syscall.Errno(0x20) - EPROCLIM = syscall.Errno(0x43) - EPROCUNAVAIL = syscall.Errno(0x4c) - EPROGMISMATCH = syscall.Errno(0x4b) - EPROGUNAVAIL = syscall.Errno(0x4a) - EPROTO = syscall.Errno(0x64) - EPROTONOSUPPORT = syscall.Errno(0x2b) - EPROTOTYPE = syscall.Errno(0x29) - EPWROFF = syscall.Errno(0x52) - EQFULL = syscall.Errno(0x6a) - ERANGE = syscall.Errno(0x22) - EREMOTE = syscall.Errno(0x47) - EROFS = syscall.Errno(0x1e) - ERPCMISMATCH = syscall.Errno(0x49) - ESHLIBVERS = syscall.Errno(0x57) - ESHUTDOWN = syscall.Errno(0x3a) - ESOCKTNOSUPPORT = syscall.Errno(0x2c) - ESPIPE = syscall.Errno(0x1d) - ESRCH = syscall.Errno(0x3) - ESTALE = syscall.Errno(0x46) - ETIME = syscall.Errno(0x65) - ETIMEDOUT = syscall.Errno(0x3c) - ETOOMANYREFS = syscall.Errno(0x3b) - ETXTBSY = syscall.Errno(0x1a) - EUSERS = syscall.Errno(0x44) - EWOULDBLOCK = syscall.Errno(0x23) - EXDEV = syscall.Errno(0x12) -) - -// Signals -const ( - SIGABRT = syscall.Signal(0x6) - SIGALRM = syscall.Signal(0xe) - SIGBUS = syscall.Signal(0xa) - SIGCHLD = syscall.Signal(0x14) - SIGCONT = syscall.Signal(0x13) - SIGEMT = syscall.Signal(0x7) - SIGFPE = syscall.Signal(0x8) - SIGHUP = syscall.Signal(0x1) - SIGILL = syscall.Signal(0x4) - SIGINFO = syscall.Signal(0x1d) - SIGINT = syscall.Signal(0x2) - SIGIO = syscall.Signal(0x17) - SIGIOT = syscall.Signal(0x6) - SIGKILL = syscall.Signal(0x9) - SIGPIPE = syscall.Signal(0xd) - SIGPROF = syscall.Signal(0x1b) - SIGQUIT = syscall.Signal(0x3) - SIGSEGV = syscall.Signal(0xb) - SIGSTOP = syscall.Signal(0x11) - SIGSYS = syscall.Signal(0xc) - SIGTERM = syscall.Signal(0xf) - SIGTRAP = syscall.Signal(0x5) - SIGTSTP = syscall.Signal(0x12) - SIGTTIN = syscall.Signal(0x15) - SIGTTOU = syscall.Signal(0x16) - SIGURG = syscall.Signal(0x10) - SIGUSR1 = syscall.Signal(0x1e) - SIGUSR2 = syscall.Signal(0x1f) - SIGVTALRM = syscall.Signal(0x1a) - SIGWINCH = syscall.Signal(0x1c) - SIGXCPU = syscall.Signal(0x18) - SIGXFSZ = syscall.Signal(0x19) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "device not configured"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EDEADLK", "resource deadlock avoided"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "resource busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "cross-device link"}, - {19, "ENODEV", "operation not supported by device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "result too large"}, - {35, "EAGAIN", "resource temporarily unavailable"}, - {36, "EINPROGRESS", "operation now in progress"}, - {37, "EALREADY", "operation already in progress"}, - {38, "ENOTSOCK", "socket operation on non-socket"}, - {39, "EDESTADDRREQ", "destination address required"}, - {40, "EMSGSIZE", "message too long"}, - {41, "EPROTOTYPE", "protocol wrong type for socket"}, - {42, "ENOPROTOOPT", "protocol not available"}, - {43, "EPROTONOSUPPORT", "protocol not supported"}, - {44, "ESOCKTNOSUPPORT", "socket type not supported"}, - {45, "ENOTSUP", "operation not supported"}, - {46, "EPFNOSUPPORT", "protocol family not supported"}, - {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, - {48, "EADDRINUSE", "address already in use"}, - {49, "EADDRNOTAVAIL", "can't assign requested address"}, - {50, "ENETDOWN", "network is down"}, - {51, "ENETUNREACH", "network is unreachable"}, - {52, "ENETRESET", "network dropped connection on reset"}, - {53, "ECONNABORTED", "software caused connection abort"}, - {54, "ECONNRESET", "connection reset by peer"}, - {55, "ENOBUFS", "no buffer space available"}, - {56, "EISCONN", "socket is already connected"}, - {57, "ENOTCONN", "socket is not connected"}, - {58, "ESHUTDOWN", "can't send after socket shutdown"}, - {59, "ETOOMANYREFS", "too many references: can't splice"}, - {60, "ETIMEDOUT", "operation timed out"}, - {61, "ECONNREFUSED", "connection refused"}, - {62, "ELOOP", "too many levels of symbolic links"}, - {63, "ENAMETOOLONG", "file name too long"}, - {64, "EHOSTDOWN", "host is down"}, - {65, "EHOSTUNREACH", "no route to host"}, - {66, "ENOTEMPTY", "directory not empty"}, - {67, "EPROCLIM", "too many processes"}, - {68, "EUSERS", "too many users"}, - {69, "EDQUOT", "disc quota exceeded"}, - {70, "ESTALE", "stale NFS file handle"}, - {71, "EREMOTE", "too many levels of remote in path"}, - {72, "EBADRPC", "RPC struct is bad"}, - {73, "ERPCMISMATCH", "RPC version wrong"}, - {74, "EPROGUNAVAIL", "RPC prog. not avail"}, - {75, "EPROGMISMATCH", "program version wrong"}, - {76, "EPROCUNAVAIL", "bad procedure for program"}, - {77, "ENOLCK", "no locks available"}, - {78, "ENOSYS", "function not implemented"}, - {79, "EFTYPE", "inappropriate file type or format"}, - {80, "EAUTH", "authentication error"}, - {81, "ENEEDAUTH", "need authenticator"}, - {82, "EPWROFF", "device power is off"}, - {83, "EDEVERR", "device error"}, - {84, "EOVERFLOW", "value too large to be stored in data type"}, - {85, "EBADEXEC", "bad executable (or shared library)"}, - {86, "EBADARCH", "bad CPU type in executable"}, - {87, "ESHLIBVERS", "shared library version mismatch"}, - {88, "EBADMACHO", "malformed Mach-o file"}, - {89, "ECANCELED", "operation canceled"}, - {90, "EIDRM", "identifier removed"}, - {91, "ENOMSG", "no message of desired type"}, - {92, "EILSEQ", "illegal byte sequence"}, - {93, "ENOATTR", "attribute not found"}, - {94, "EBADMSG", "bad message"}, - {95, "EMULTIHOP", "EMULTIHOP (Reserved)"}, - {96, "ENODATA", "no message available on STREAM"}, - {97, "ENOLINK", "ENOLINK (Reserved)"}, - {98, "ENOSR", "no STREAM resources"}, - {99, "ENOSTR", "not a STREAM"}, - {100, "EPROTO", "protocol error"}, - {101, "ETIME", "STREAM ioctl timeout"}, - {102, "EOPNOTSUPP", "operation not supported on socket"}, - {103, "ENOPOLICY", "policy not found"}, - {104, "ENOTRECOVERABLE", "state not recoverable"}, - {105, "EOWNERDEAD", "previous owner died"}, - {106, "EQFULL", "interface output queue is full"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/BPT trap"}, - {6, "SIGABRT", "abort trap"}, - {7, "SIGEMT", "EMT trap"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGBUS", "bus error"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGSYS", "bad system call"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGURG", "urgent I/O condition"}, - {17, "SIGSTOP", "suspended (signal)"}, - {18, "SIGTSTP", "suspended"}, - {19, "SIGCONT", "continued"}, - {20, "SIGCHLD", "child exited"}, - {21, "SIGTTIN", "stopped (tty input)"}, - {22, "SIGTTOU", "stopped (tty output)"}, - {23, "SIGIO", "I/O possible"}, - {24, "SIGXCPU", "cputime limit exceeded"}, - {25, "SIGXFSZ", "filesize limit exceeded"}, - {26, "SIGVTALRM", "virtual timer expired"}, - {27, "SIGPROF", "profiling timer expired"}, - {28, "SIGWINCH", "window size changes"}, - {29, "SIGINFO", "information request"}, - {30, "SIGUSR1", "user defined signal 1"}, - {31, "SIGUSR2", "user defined signal 2"}, -} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go b/src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go deleted file mode 100644 index e748cb11057..00000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/zerrors_darwin_arm.go +++ /dev/null @@ -1,1789 +0,0 @@ -// mkerrors.sh -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build arm && darwin -// +build arm,darwin - -// Code generated by cmd/cgo -godefs; DO NOT EDIT. -// cgo -godefs -- _const.go - -package unix - -import "syscall" - -const ( - AF_APPLETALK = 0x10 - AF_CCITT = 0xa - AF_CHAOS = 0x5 - AF_CNT = 0x15 - AF_COIP = 0x14 - AF_DATAKIT = 0x9 - AF_DECnet = 0xc - AF_DLI = 0xd - AF_E164 = 0x1c - AF_ECMA = 0x8 - AF_HYLINK = 0xf - AF_IEEE80211 = 0x25 - AF_IMPLINK = 0x3 - AF_INET = 0x2 - AF_INET6 = 0x1e - AF_IPX = 0x17 - AF_ISDN = 0x1c - AF_ISO = 0x7 - AF_LAT = 0xe - AF_LINK = 0x12 - AF_LOCAL = 0x1 - AF_MAX = 0x28 - AF_NATM = 0x1f - AF_NDRV = 0x1b - AF_NETBIOS = 0x21 - AF_NS = 0x6 - AF_OSI = 0x7 - AF_PPP = 0x22 - AF_PUP = 0x4 - AF_RESERVED_36 = 0x24 - AF_ROUTE = 0x11 - AF_SIP = 0x18 - AF_SNA = 0xb - AF_SYSTEM = 0x20 - AF_SYS_CONTROL = 0x2 - AF_UNIX = 0x1 - AF_UNSPEC = 0x0 - AF_UTUN = 0x26 - ALTWERASE = 0x200 - ATTR_BIT_MAP_COUNT = 0x5 - ATTR_CMN_ACCESSMASK = 0x20000 - ATTR_CMN_ACCTIME = 0x1000 - ATTR_CMN_ADDEDTIME = 0x10000000 - ATTR_CMN_BKUPTIME = 0x2000 - ATTR_CMN_CHGTIME = 0x800 - ATTR_CMN_CRTIME = 0x200 - ATTR_CMN_DATA_PROTECT_FLAGS = 0x40000000 - ATTR_CMN_DEVID = 0x2 - ATTR_CMN_DOCUMENT_ID = 0x100000 - ATTR_CMN_ERROR = 0x20000000 - ATTR_CMN_EXTENDED_SECURITY = 0x400000 - ATTR_CMN_FILEID = 0x2000000 - ATTR_CMN_FLAGS = 0x40000 - ATTR_CMN_FNDRINFO = 0x4000 - ATTR_CMN_FSID = 0x4 - ATTR_CMN_FULLPATH = 0x8000000 - ATTR_CMN_GEN_COUNT = 0x80000 - ATTR_CMN_GRPID = 0x10000 - ATTR_CMN_GRPUUID = 0x1000000 - ATTR_CMN_MODTIME = 0x400 - ATTR_CMN_NAME = 0x1 - ATTR_CMN_NAMEDATTRCOUNT = 0x80000 - ATTR_CMN_NAMEDATTRLIST = 0x100000 - ATTR_CMN_OBJID = 0x20 - ATTR_CMN_OBJPERMANENTID = 0x40 - ATTR_CMN_OBJTAG = 0x10 - ATTR_CMN_OBJTYPE = 0x8 - ATTR_CMN_OWNERID = 0x8000 - ATTR_CMN_PARENTID = 0x4000000 - ATTR_CMN_PAROBJID = 0x80 - ATTR_CMN_RETURNED_ATTRS = 0x80000000 - ATTR_CMN_SCRIPT = 0x100 - ATTR_CMN_SETMASK = 0x41c7ff00 - ATTR_CMN_USERACCESS = 0x200000 - ATTR_CMN_UUID = 0x800000 - ATTR_CMN_VALIDMASK = 0xffffffff - ATTR_CMN_VOLSETMASK = 0x6700 - ATTR_FILE_ALLOCSIZE = 0x4 - ATTR_FILE_CLUMPSIZE = 0x10 - ATTR_FILE_DATAALLOCSIZE = 0x400 - ATTR_FILE_DATAEXTENTS = 0x800 - ATTR_FILE_DATALENGTH = 0x200 - ATTR_FILE_DEVTYPE = 0x20 - ATTR_FILE_FILETYPE = 0x40 - ATTR_FILE_FORKCOUNT = 0x80 - ATTR_FILE_FORKLIST = 0x100 - ATTR_FILE_IOBLOCKSIZE = 0x8 - ATTR_FILE_LINKCOUNT = 0x1 - ATTR_FILE_RSRCALLOCSIZE = 0x2000 - ATTR_FILE_RSRCEXTENTS = 0x4000 - ATTR_FILE_RSRCLENGTH = 0x1000 - ATTR_FILE_SETMASK = 0x20 - ATTR_FILE_TOTALSIZE = 0x2 - ATTR_FILE_VALIDMASK = 0x37ff - ATTR_VOL_ALLOCATIONCLUMP = 0x40 - ATTR_VOL_ATTRIBUTES = 0x40000000 - ATTR_VOL_CAPABILITIES = 0x20000 - ATTR_VOL_DIRCOUNT = 0x400 - ATTR_VOL_ENCODINGSUSED = 0x10000 - ATTR_VOL_FILECOUNT = 0x200 - ATTR_VOL_FSTYPE = 0x1 - ATTR_VOL_INFO = 0x80000000 - ATTR_VOL_IOBLOCKSIZE = 0x80 - ATTR_VOL_MAXOBJCOUNT = 0x800 - ATTR_VOL_MINALLOCATION = 0x20 - ATTR_VOL_MOUNTEDDEVICE = 0x8000 - ATTR_VOL_MOUNTFLAGS = 0x4000 - ATTR_VOL_MOUNTPOINT = 0x1000 - ATTR_VOL_NAME = 0x2000 - ATTR_VOL_OBJCOUNT = 0x100 - ATTR_VOL_QUOTA_SIZE = 0x10000000 - ATTR_VOL_RESERVED_SIZE = 0x20000000 - ATTR_VOL_SETMASK = 0x80002000 - ATTR_VOL_SIGNATURE = 0x2 - ATTR_VOL_SIZE = 0x4 - ATTR_VOL_SPACEAVAIL = 0x10 - ATTR_VOL_SPACEFREE = 0x8 - ATTR_VOL_UUID = 0x40000 - ATTR_VOL_VALIDMASK = 0xf007ffff - B0 = 0x0 - B110 = 0x6e - B115200 = 0x1c200 - B1200 = 0x4b0 - B134 = 0x86 - B14400 = 0x3840 - B150 = 0x96 - B1800 = 0x708 - B19200 = 0x4b00 - B200 = 0xc8 - B230400 = 0x38400 - B2400 = 0x960 - B28800 = 0x7080 - B300 = 0x12c - B38400 = 0x9600 - B4800 = 0x12c0 - B50 = 0x32 - B57600 = 0xe100 - B600 = 0x258 - B7200 = 0x1c20 - B75 = 0x4b - B76800 = 0x12c00 - B9600 = 0x2580 - BIOCFLUSH = 0x20004268 - BIOCGBLEN = 0x40044266 - BIOCGDLT = 0x4004426a - BIOCGDLTLIST = 0xc00c4279 - BIOCGETIF = 0x4020426b - BIOCGHDRCMPLT = 0x40044274 - BIOCGRSIG = 0x40044272 - BIOCGRTIMEOUT = 0x4010426e - BIOCGSEESENT = 0x40044276 - BIOCGSTATS = 0x4008426f - BIOCIMMEDIATE = 0x80044270 - BIOCPROMISC = 0x20004269 - BIOCSBLEN = 0xc0044266 - BIOCSDLT = 0x80044278 - BIOCSETF = 0x80104267 - BIOCSETFNR = 0x8010427e - BIOCSETIF = 0x8020426c - BIOCSHDRCMPLT = 0x80044275 - BIOCSRSIG = 0x80044273 - BIOCSRTIMEOUT = 0x8010426d - BIOCSSEESENT = 0x80044277 - BIOCVERSION = 0x40044271 - BPF_A = 0x10 - BPF_ABS = 0x20 - BPF_ADD = 0x0 - BPF_ALIGNMENT = 0x4 - BPF_ALU = 0x4 - BPF_AND = 0x50 - BPF_B = 0x10 - BPF_DIV = 0x30 - BPF_H = 0x8 - BPF_IMM = 0x0 - BPF_IND = 0x40 - BPF_JA = 0x0 - BPF_JEQ = 0x10 - BPF_JGE = 0x30 - BPF_JGT = 0x20 - BPF_JMP = 0x5 - BPF_JSET = 0x40 - BPF_K = 0x0 - BPF_LD = 0x0 - BPF_LDX = 0x1 - BPF_LEN = 0x80 - BPF_LSH = 0x60 - BPF_MAJOR_VERSION = 0x1 - BPF_MAXBUFSIZE = 0x80000 - BPF_MAXINSNS = 0x200 - BPF_MEM = 0x60 - BPF_MEMWORDS = 0x10 - BPF_MINBUFSIZE = 0x20 - BPF_MINOR_VERSION = 0x1 - BPF_MISC = 0x7 - BPF_MSH = 0xa0 - BPF_MUL = 0x20 - BPF_NEG = 0x80 - BPF_OR = 0x40 - BPF_RELEASE = 0x30bb6 - BPF_RET = 0x6 - BPF_RSH = 0x70 - BPF_ST = 0x2 - BPF_STX = 0x3 - BPF_SUB = 0x10 - BPF_TAX = 0x0 - BPF_TXA = 0x80 - BPF_W = 0x0 - BPF_X = 0x8 - BRKINT = 0x2 - BS0 = 0x0 - BS1 = 0x8000 - BSDLY = 0x8000 - CFLUSH = 0xf - CLOCAL = 0x8000 - CLOCK_MONOTONIC = 0x6 - CLOCK_MONOTONIC_RAW = 0x4 - CLOCK_MONOTONIC_RAW_APPROX = 0x5 - CLOCK_PROCESS_CPUTIME_ID = 0xc - CLOCK_REALTIME = 0x0 - CLOCK_THREAD_CPUTIME_ID = 0x10 - CLOCK_UPTIME_RAW = 0x8 - CLOCK_UPTIME_RAW_APPROX = 0x9 - CLONE_NOFOLLOW = 0x1 - CLONE_NOOWNERCOPY = 0x2 - CR0 = 0x0 - CR1 = 0x1000 - CR2 = 0x2000 - CR3 = 0x3000 - CRDLY = 0x3000 - CREAD = 0x800 - CRTSCTS = 0x30000 - CS5 = 0x0 - CS6 = 0x100 - CS7 = 0x200 - CS8 = 0x300 - CSIZE = 0x300 - CSTART = 0x11 - CSTATUS = 0x14 - CSTOP = 0x13 - CSTOPB = 0x400 - CSUSP = 0x1a - CTLIOCGINFO = 0xc0644e03 - CTL_HW = 0x6 - CTL_KERN = 0x1 - CTL_MAXNAME = 0xc - CTL_NET = 0x4 - DLT_A429 = 0xb8 - DLT_A653_ICM = 0xb9 - DLT_AIRONET_HEADER = 0x78 - DLT_AOS = 0xde - DLT_APPLE_IP_OVER_IEEE1394 = 0x8a - DLT_ARCNET = 0x7 - DLT_ARCNET_LINUX = 0x81 - DLT_ATM_CLIP = 0x13 - DLT_ATM_RFC1483 = 0xb - DLT_AURORA = 0x7e - DLT_AX25 = 0x3 - DLT_AX25_KISS = 0xca - DLT_BACNET_MS_TP = 0xa5 - DLT_BLUETOOTH_HCI_H4 = 0xbb - DLT_BLUETOOTH_HCI_H4_WITH_PHDR = 0xc9 - DLT_CAN20B = 0xbe - DLT_CAN_SOCKETCAN = 0xe3 - DLT_CHAOS = 0x5 - DLT_CHDLC = 0x68 - DLT_CISCO_IOS = 0x76 - DLT_C_HDLC = 0x68 - DLT_C_HDLC_WITH_DIR = 0xcd - DLT_DBUS = 0xe7 - DLT_DECT = 0xdd - DLT_DOCSIS = 0x8f - DLT_DVB_CI = 0xeb - DLT_ECONET = 0x73 - DLT_EN10MB = 0x1 - DLT_EN3MB = 0x2 - DLT_ENC = 0x6d - DLT_ERF = 0xc5 - DLT_ERF_ETH = 0xaf - DLT_ERF_POS = 0xb0 - DLT_FC_2 = 0xe0 - DLT_FC_2_WITH_FRAME_DELIMS = 0xe1 - DLT_FDDI = 0xa - DLT_FLEXRAY = 0xd2 - DLT_FRELAY = 0x6b - DLT_FRELAY_WITH_DIR = 0xce - DLT_GCOM_SERIAL = 0xad - DLT_GCOM_T1E1 = 0xac - DLT_GPF_F = 0xab - DLT_GPF_T = 0xaa - DLT_GPRS_LLC = 0xa9 - DLT_GSMTAP_ABIS = 0xda - DLT_GSMTAP_UM = 0xd9 - DLT_HHDLC = 0x79 - DLT_IBM_SN = 0x92 - DLT_IBM_SP = 0x91 - DLT_IEEE802 = 0x6 - DLT_IEEE802_11 = 0x69 - DLT_IEEE802_11_RADIO = 0x7f - DLT_IEEE802_11_RADIO_AVS = 0xa3 - DLT_IEEE802_15_4 = 0xc3 - DLT_IEEE802_15_4_LINUX = 0xbf - DLT_IEEE802_15_4_NOFCS = 0xe6 - DLT_IEEE802_15_4_NONASK_PHY = 0xd7 - DLT_IEEE802_16_MAC_CPS = 0xbc - DLT_IEEE802_16_MAC_CPS_RADIO = 0xc1 - DLT_IPFILTER = 0x74 - DLT_IPMB = 0xc7 - DLT_IPMB_LINUX = 0xd1 - DLT_IPNET = 0xe2 - DLT_IPOIB = 0xf2 - DLT_IPV4 = 0xe4 - DLT_IPV6 = 0xe5 - DLT_IP_OVER_FC = 0x7a - DLT_JUNIPER_ATM1 = 0x89 - DLT_JUNIPER_ATM2 = 0x87 - DLT_JUNIPER_ATM_CEMIC = 0xee - DLT_JUNIPER_CHDLC = 0xb5 - DLT_JUNIPER_ES = 0x84 - DLT_JUNIPER_ETHER = 0xb2 - DLT_JUNIPER_FIBRECHANNEL = 0xea - DLT_JUNIPER_FRELAY = 0xb4 - DLT_JUNIPER_GGSN = 0x85 - DLT_JUNIPER_ISM = 0xc2 - DLT_JUNIPER_MFR = 0x86 - DLT_JUNIPER_MLFR = 0x83 - DLT_JUNIPER_MLPPP = 0x82 - DLT_JUNIPER_MONITOR = 0xa4 - DLT_JUNIPER_PIC_PEER = 0xae - DLT_JUNIPER_PPP = 0xb3 - DLT_JUNIPER_PPPOE = 0xa7 - DLT_JUNIPER_PPPOE_ATM = 0xa8 - DLT_JUNIPER_SERVICES = 0x88 - DLT_JUNIPER_SRX_E2E = 0xe9 - DLT_JUNIPER_ST = 0xc8 - DLT_JUNIPER_VP = 0xb7 - DLT_JUNIPER_VS = 0xe8 - DLT_LAPB_WITH_DIR = 0xcf - DLT_LAPD = 0xcb - DLT_LIN = 0xd4 - DLT_LINUX_EVDEV = 0xd8 - DLT_LINUX_IRDA = 0x90 - DLT_LINUX_LAPD = 0xb1 - DLT_LINUX_PPP_WITHDIRECTION = 0xa6 - DLT_LINUX_SLL = 0x71 - DLT_LOOP = 0x6c - DLT_LTALK = 0x72 - DLT_MATCHING_MAX = 0xf5 - DLT_MATCHING_MIN = 0x68 - DLT_MFR = 0xb6 - DLT_MOST = 0xd3 - DLT_MPEG_2_TS = 0xf3 - DLT_MPLS = 0xdb - DLT_MTP2 = 0x8c - DLT_MTP2_WITH_PHDR = 0x8b - DLT_MTP3 = 0x8d - DLT_MUX27010 = 0xec - DLT_NETANALYZER = 0xf0 - DLT_NETANALYZER_TRANSPARENT = 0xf1 - DLT_NFC_LLCP = 0xf5 - DLT_NFLOG = 0xef - DLT_NG40 = 0xf4 - DLT_NULL = 0x0 - DLT_PCI_EXP = 0x7d - DLT_PFLOG = 0x75 - DLT_PFSYNC = 0x12 - DLT_PPI = 0xc0 - DLT_PPP = 0x9 - DLT_PPP_BSDOS = 0x10 - DLT_PPP_ETHER = 0x33 - DLT_PPP_PPPD = 0xa6 - DLT_PPP_SERIAL = 0x32 - DLT_PPP_WITH_DIR = 0xcc - DLT_PPP_WITH_DIRECTION = 0xa6 - DLT_PRISM_HEADER = 0x77 - DLT_PRONET = 0x4 - DLT_RAIF1 = 0xc6 - DLT_RAW = 0xc - DLT_RIO = 0x7c - DLT_SCCP = 0x8e - DLT_SITA = 0xc4 - DLT_SLIP = 0x8 - DLT_SLIP_BSDOS = 0xf - DLT_STANAG_5066_D_PDU = 0xed - DLT_SUNATM = 0x7b - DLT_SYMANTEC_FIREWALL = 0x63 - DLT_TZSP = 0x80 - DLT_USB = 0xba - DLT_USB_LINUX = 0xbd - DLT_USB_LINUX_MMAPPED = 0xdc - DLT_USER0 = 0x93 - DLT_USER1 = 0x94 - DLT_USER10 = 0x9d - DLT_USER11 = 0x9e - DLT_USER12 = 0x9f - DLT_USER13 = 0xa0 - DLT_USER14 = 0xa1 - DLT_USER15 = 0xa2 - DLT_USER2 = 0x95 - DLT_USER3 = 0x96 - DLT_USER4 = 0x97 - DLT_USER5 = 0x98 - DLT_USER6 = 0x99 - DLT_USER7 = 0x9a - DLT_USER8 = 0x9b - DLT_USER9 = 0x9c - DLT_WIHART = 0xdf - DLT_X2E_SERIAL = 0xd5 - DLT_X2E_XORAYA = 0xd6 - DT_BLK = 0x6 - DT_CHR = 0x2 - DT_DIR = 0x4 - DT_FIFO = 0x1 - DT_LNK = 0xa - DT_REG = 0x8 - DT_SOCK = 0xc - DT_UNKNOWN = 0x0 - DT_WHT = 0xe - ECHO = 0x8 - ECHOCTL = 0x40 - ECHOE = 0x2 - ECHOK = 0x4 - ECHOKE = 0x1 - ECHONL = 0x10 - ECHOPRT = 0x20 - EVFILT_AIO = -0x3 - EVFILT_EXCEPT = -0xf - EVFILT_FS = -0x9 - EVFILT_MACHPORT = -0x8 - EVFILT_PROC = -0x5 - EVFILT_READ = -0x1 - EVFILT_SIGNAL = -0x6 - EVFILT_SYSCOUNT = 0xf - EVFILT_THREADMARKER = 0xf - EVFILT_TIMER = -0x7 - EVFILT_USER = -0xa - EVFILT_VM = -0xc - EVFILT_VNODE = -0x4 - EVFILT_WRITE = -0x2 - EV_ADD = 0x1 - EV_CLEAR = 0x20 - EV_DELETE = 0x2 - EV_DISABLE = 0x8 - EV_DISPATCH = 0x80 - EV_DISPATCH2 = 0x180 - EV_ENABLE = 0x4 - EV_EOF = 0x8000 - EV_ERROR = 0x4000 - EV_FLAG0 = 0x1000 - EV_FLAG1 = 0x2000 - EV_ONESHOT = 0x10 - EV_OOBAND = 0x2000 - EV_POLL = 0x1000 - EV_RECEIPT = 0x40 - EV_SYSFLAGS = 0xf000 - EV_UDATA_SPECIFIC = 0x100 - EV_VANISHED = 0x200 - EXTA = 0x4b00 - EXTB = 0x9600 - EXTPROC = 0x800 - FD_CLOEXEC = 0x1 - FD_SETSIZE = 0x400 - FF0 = 0x0 - FF1 = 0x4000 - FFDLY = 0x4000 - FLUSHO = 0x800000 - FSOPT_ATTR_CMN_EXTENDED = 0x20 - FSOPT_NOFOLLOW = 0x1 - FSOPT_NOINMEMUPDATE = 0x2 - FSOPT_PACK_INVAL_ATTRS = 0x8 - FSOPT_REPORT_FULLSIZE = 0x4 - F_ADDFILESIGS = 0x3d - F_ADDFILESIGS_FOR_DYLD_SIM = 0x53 - F_ADDFILESIGS_RETURN = 0x61 - F_ADDSIGS = 0x3b - F_ALLOCATEALL = 0x4 - F_ALLOCATECONTIG = 0x2 - F_BARRIERFSYNC = 0x55 - F_CHECK_LV = 0x62 - F_CHKCLEAN = 0x29 - F_DUPFD = 0x0 - F_DUPFD_CLOEXEC = 0x43 - F_FINDSIGS = 0x4e - F_FLUSH_DATA = 0x28 - F_FREEZE_FS = 0x35 - F_FULLFSYNC = 0x33 - F_GETCODEDIR = 0x48 - F_GETFD = 0x1 - F_GETFL = 0x3 - F_GETLK = 0x7 - F_GETLKPID = 0x42 - F_GETNOSIGPIPE = 0x4a - F_GETOWN = 0x5 - F_GETPATH = 0x32 - F_GETPATH_MTMINFO = 0x47 - F_GETPROTECTIONCLASS = 0x3f - F_GETPROTECTIONLEVEL = 0x4d - F_GLOBAL_NOCACHE = 0x37 - F_LOG2PHYS = 0x31 - F_LOG2PHYS_EXT = 0x41 - F_NOCACHE = 0x30 - F_NODIRECT = 0x3e - F_OK = 0x0 - F_PATHPKG_CHECK = 0x34 - F_PEOFPOSMODE = 0x3 - F_PREALLOCATE = 0x2a - F_PUNCHHOLE = 0x63 - F_RDADVISE = 0x2c - F_RDAHEAD = 0x2d - F_RDLCK = 0x1 - F_SETBACKINGSTORE = 0x46 - F_SETFD = 0x2 - F_SETFL = 0x4 - F_SETLK = 0x8 - F_SETLKW = 0x9 - F_SETLKWTIMEOUT = 0xa - F_SETNOSIGPIPE = 0x49 - F_SETOWN = 0x6 - F_SETPROTECTIONCLASS = 0x40 - F_SETSIZE = 0x2b - F_SINGLE_WRITER = 0x4c - F_THAW_FS = 0x36 - F_TRANSCODEKEY = 0x4b - F_TRIM_ACTIVE_FILE = 0x64 - F_UNLCK = 0x2 - F_VOLPOSMODE = 0x4 - F_WRLCK = 0x3 - HUPCL = 0x4000 - HW_MACHINE = 0x1 - ICANON = 0x100 - ICMP6_FILTER = 0x12 - ICRNL = 0x100 - IEXTEN = 0x400 - IFF_ALLMULTI = 0x200 - IFF_ALTPHYS = 0x4000 - IFF_BROADCAST = 0x2 - IFF_DEBUG = 0x4 - IFF_LINK0 = 0x1000 - IFF_LINK1 = 0x2000 - IFF_LINK2 = 0x4000 - IFF_LOOPBACK = 0x8 - IFF_MULTICAST = 0x8000 - IFF_NOARP = 0x80 - IFF_NOTRAILERS = 0x20 - IFF_OACTIVE = 0x400 - IFF_POINTOPOINT = 0x10 - IFF_PROMISC = 0x100 - IFF_RUNNING = 0x40 - IFF_SIMPLEX = 0x800 - IFF_UP = 0x1 - IFNAMSIZ = 0x10 - IFT_1822 = 0x2 - IFT_AAL5 = 0x31 - IFT_ARCNET = 0x23 - IFT_ARCNETPLUS = 0x24 - IFT_ATM = 0x25 - IFT_BRIDGE = 0xd1 - IFT_CARP = 0xf8 - IFT_CELLULAR = 0xff - IFT_CEPT = 0x13 - IFT_DS3 = 0x1e - IFT_ENC = 0xf4 - IFT_EON = 0x19 - IFT_ETHER = 0x6 - IFT_FAITH = 0x38 - IFT_FDDI = 0xf - IFT_FRELAY = 0x20 - IFT_FRELAYDCE = 0x2c - IFT_GIF = 0x37 - IFT_HDH1822 = 0x3 - IFT_HIPPI = 0x2f - IFT_HSSI = 0x2e - IFT_HY = 0xe - IFT_IEEE1394 = 0x90 - IFT_IEEE8023ADLAG = 0x88 - IFT_ISDNBASIC = 0x14 - IFT_ISDNPRIMARY = 0x15 - IFT_ISO88022LLC = 0x29 - IFT_ISO88023 = 0x7 - IFT_ISO88024 = 0x8 - IFT_ISO88025 = 0x9 - IFT_ISO88026 = 0xa - IFT_L2VLAN = 0x87 - IFT_LAPB = 0x10 - IFT_LOCALTALK = 0x2a - IFT_LOOP = 0x18 - IFT_MIOX25 = 0x26 - IFT_MODEM = 0x30 - IFT_NSIP = 0x1b - IFT_OTHER = 0x1 - IFT_P10 = 0xc - IFT_P80 = 0xd - IFT_PARA = 0x22 - IFT_PDP = 0xff - IFT_PFLOG = 0xf5 - IFT_PFSYNC = 0xf6 - IFT_PKTAP = 0xfe - IFT_PPP = 0x17 - IFT_PROPMUX = 0x36 - IFT_PROPVIRTUAL = 0x35 - IFT_PTPSERIAL = 0x16 - IFT_RS232 = 0x21 - IFT_SDLC = 0x11 - IFT_SIP = 0x1f - IFT_SLIP = 0x1c - IFT_SMDSDXI = 0x2b - IFT_SMDSICIP = 0x34 - IFT_SONET = 0x27 - IFT_SONETPATH = 0x32 - IFT_SONETVT = 0x33 - IFT_STARLAN = 0xb - IFT_STF = 0x39 - IFT_T1 = 0x12 - IFT_ULTRA = 0x1d - IFT_V35 = 0x2d - IFT_X25 = 0x5 - IFT_X25DDN = 0x4 - IFT_X25PLE = 0x28 - IFT_XETHER = 0x1a - IGNBRK = 0x1 - IGNCR = 0x80 - IGNPAR = 0x4 - IMAXBEL = 0x2000 - INLCR = 0x40 - INPCK = 0x10 - IN_CLASSA_HOST = 0xffffff - IN_CLASSA_MAX = 0x80 - IN_CLASSA_NET = 0xff000000 - IN_CLASSA_NSHIFT = 0x18 - IN_CLASSB_HOST = 0xffff - IN_CLASSB_MAX = 0x10000 - IN_CLASSB_NET = 0xffff0000 - IN_CLASSB_NSHIFT = 0x10 - IN_CLASSC_HOST = 0xff - IN_CLASSC_NET = 0xffffff00 - IN_CLASSC_NSHIFT = 0x8 - IN_CLASSD_HOST = 0xfffffff - IN_CLASSD_NET = 0xf0000000 - IN_CLASSD_NSHIFT = 0x1c - IN_LINKLOCALNETNUM = 0xa9fe0000 - IN_LOOPBACKNET = 0x7f - IPPROTO_3PC = 0x22 - IPPROTO_ADFS = 0x44 - IPPROTO_AH = 0x33 - IPPROTO_AHIP = 0x3d - IPPROTO_APES = 0x63 - IPPROTO_ARGUS = 0xd - IPPROTO_AX25 = 0x5d - IPPROTO_BHA = 0x31 - IPPROTO_BLT = 0x1e - IPPROTO_BRSATMON = 0x4c - IPPROTO_CFTP = 0x3e - IPPROTO_CHAOS = 0x10 - IPPROTO_CMTP = 0x26 - IPPROTO_CPHB = 0x49 - IPPROTO_CPNX = 0x48 - IPPROTO_DDP = 0x25 - IPPROTO_DGP = 0x56 - IPPROTO_DIVERT = 0xfe - IPPROTO_DONE = 0x101 - IPPROTO_DSTOPTS = 0x3c - IPPROTO_EGP = 0x8 - IPPROTO_EMCON = 0xe - IPPROTO_ENCAP = 0x62 - IPPROTO_EON = 0x50 - IPPROTO_ESP = 0x32 - IPPROTO_ETHERIP = 0x61 - IPPROTO_FRAGMENT = 0x2c - IPPROTO_GGP = 0x3 - IPPROTO_GMTP = 0x64 - IPPROTO_GRE = 0x2f - IPPROTO_HELLO = 0x3f - IPPROTO_HMP = 0x14 - IPPROTO_HOPOPTS = 0x0 - IPPROTO_ICMP = 0x1 - IPPROTO_ICMPV6 = 0x3a - IPPROTO_IDP = 0x16 - IPPROTO_IDPR = 0x23 - IPPROTO_IDRP = 0x2d - IPPROTO_IGMP = 0x2 - IPPROTO_IGP = 0x55 - IPPROTO_IGRP = 0x58 - IPPROTO_IL = 0x28 - IPPROTO_INLSP = 0x34 - IPPROTO_INP = 0x20 - IPPROTO_IP = 0x0 - IPPROTO_IPCOMP = 0x6c - IPPROTO_IPCV = 0x47 - IPPROTO_IPEIP = 0x5e - IPPROTO_IPIP = 0x4 - IPPROTO_IPPC = 0x43 - IPPROTO_IPV4 = 0x4 - IPPROTO_IPV6 = 0x29 - IPPROTO_IRTP = 0x1c - IPPROTO_KRYPTOLAN = 0x41 - IPPROTO_LARP = 0x5b - IPPROTO_LEAF1 = 0x19 - IPPROTO_LEAF2 = 0x1a - IPPROTO_MAX = 0x100 - IPPROTO_MAXID = 0x34 - IPPROTO_MEAS = 0x13 - IPPROTO_MHRP = 0x30 - IPPROTO_MICP = 0x5f - IPPROTO_MTP = 0x5c - IPPROTO_MUX = 0x12 - IPPROTO_ND = 0x4d - IPPROTO_NHRP = 0x36 - IPPROTO_NONE = 0x3b - IPPROTO_NSP = 0x1f - IPPROTO_NVPII = 0xb - IPPROTO_OSPFIGP = 0x59 - IPPROTO_PGM = 0x71 - IPPROTO_PIGP = 0x9 - IPPROTO_PIM = 0x67 - IPPROTO_PRM = 0x15 - IPPROTO_PUP = 0xc - IPPROTO_PVP = 0x4b - IPPROTO_RAW = 0xff - IPPROTO_RCCMON = 0xa - IPPROTO_RDP = 0x1b - IPPROTO_ROUTING = 0x2b - IPPROTO_RSVP = 0x2e - IPPROTO_RVD = 0x42 - IPPROTO_SATEXPAK = 0x40 - IPPROTO_SATMON = 0x45 - IPPROTO_SCCSP = 0x60 - IPPROTO_SCTP = 0x84 - IPPROTO_SDRP = 0x2a - IPPROTO_SEP = 0x21 - IPPROTO_SRPC = 0x5a - IPPROTO_ST = 0x7 - IPPROTO_SVMTP = 0x52 - IPPROTO_SWIPE = 0x35 - IPPROTO_TCF = 0x57 - IPPROTO_TCP = 0x6 - IPPROTO_TP = 0x1d - IPPROTO_TPXX = 0x27 - IPPROTO_TRUNK1 = 0x17 - IPPROTO_TRUNK2 = 0x18 - IPPROTO_TTP = 0x54 - IPPROTO_UDP = 0x11 - IPPROTO_VINES = 0x53 - IPPROTO_VISA = 0x46 - IPPROTO_VMTP = 0x51 - IPPROTO_WBEXPAK = 0x4f - IPPROTO_WBMON = 0x4e - IPPROTO_WSN = 0x4a - IPPROTO_XNET = 0xf - IPPROTO_XTP = 0x24 - IPV6_2292DSTOPTS = 0x17 - IPV6_2292HOPLIMIT = 0x14 - IPV6_2292HOPOPTS = 0x16 - IPV6_2292NEXTHOP = 0x15 - IPV6_2292PKTINFO = 0x13 - IPV6_2292PKTOPTIONS = 0x19 - IPV6_2292RTHDR = 0x18 - IPV6_BINDV6ONLY = 0x1b - IPV6_BOUND_IF = 0x7d - IPV6_CHECKSUM = 0x1a - IPV6_DEFAULT_MULTICAST_HOPS = 0x1 - IPV6_DEFAULT_MULTICAST_LOOP = 0x1 - IPV6_DEFHLIM = 0x40 - IPV6_FAITH = 0x1d - IPV6_FLOWINFO_MASK = 0xffffff0f - IPV6_FLOWLABEL_MASK = 0xffff0f00 - IPV6_FLOW_ECN_MASK = 0x300 - IPV6_FRAGTTL = 0x3c - IPV6_FW_ADD = 0x1e - IPV6_FW_DEL = 0x1f - IPV6_FW_FLUSH = 0x20 - IPV6_FW_GET = 0x22 - IPV6_FW_ZERO = 0x21 - IPV6_HLIMDEC = 0x1 - IPV6_IPSEC_POLICY = 0x1c - IPV6_JOIN_GROUP = 0xc - IPV6_LEAVE_GROUP = 0xd - IPV6_MAXHLIM = 0xff - IPV6_MAXOPTHDR = 0x800 - IPV6_MAXPACKET = 0xffff - IPV6_MAX_GROUP_SRC_FILTER = 0x200 - IPV6_MAX_MEMBERSHIPS = 0xfff - IPV6_MAX_SOCK_SRC_FILTER = 0x80 - IPV6_MIN_MEMBERSHIPS = 0x1f - IPV6_MMTU = 0x500 - IPV6_MULTICAST_HOPS = 0xa - IPV6_MULTICAST_IF = 0x9 - IPV6_MULTICAST_LOOP = 0xb - IPV6_PORTRANGE = 0xe - IPV6_PORTRANGE_DEFAULT = 0x0 - IPV6_PORTRANGE_HIGH = 0x1 - IPV6_PORTRANGE_LOW = 0x2 - IPV6_RECVTCLASS = 0x23 - IPV6_RTHDR_LOOSE = 0x0 - IPV6_RTHDR_STRICT = 0x1 - IPV6_RTHDR_TYPE_0 = 0x0 - IPV6_SOCKOPT_RESERVED1 = 0x3 - IPV6_TCLASS = 0x24 - IPV6_UNICAST_HOPS = 0x4 - IPV6_V6ONLY = 0x1b - IPV6_VERSION = 0x60 - IPV6_VERSION_MASK = 0xf0 - IP_ADD_MEMBERSHIP = 0xc - IP_ADD_SOURCE_MEMBERSHIP = 0x46 - IP_BLOCK_SOURCE = 0x48 - IP_BOUND_IF = 0x19 - IP_DEFAULT_MULTICAST_LOOP = 0x1 - IP_DEFAULT_MULTICAST_TTL = 0x1 - IP_DF = 0x4000 - IP_DROP_MEMBERSHIP = 0xd - IP_DROP_SOURCE_MEMBERSHIP = 0x47 - IP_DUMMYNET_CONFIGURE = 0x3c - IP_DUMMYNET_DEL = 0x3d - IP_DUMMYNET_FLUSH = 0x3e - IP_DUMMYNET_GET = 0x40 - IP_FAITH = 0x16 - IP_FW_ADD = 0x28 - IP_FW_DEL = 0x29 - IP_FW_FLUSH = 0x2a - IP_FW_GET = 0x2c - IP_FW_RESETLOG = 0x2d - IP_FW_ZERO = 0x2b - IP_HDRINCL = 0x2 - IP_IPSEC_POLICY = 0x15 - IP_MAXPACKET = 0xffff - IP_MAX_GROUP_SRC_FILTER = 0x200 - IP_MAX_MEMBERSHIPS = 0xfff - IP_MAX_SOCK_MUTE_FILTER = 0x80 - IP_MAX_SOCK_SRC_FILTER = 0x80 - IP_MF = 0x2000 - IP_MIN_MEMBERSHIPS = 0x1f - IP_MSFILTER = 0x4a - IP_MSS = 0x240 - IP_MULTICAST_IF = 0x9 - IP_MULTICAST_IFINDEX = 0x42 - IP_MULTICAST_LOOP = 0xb - IP_MULTICAST_TTL = 0xa - IP_MULTICAST_VIF = 0xe - IP_NAT__XXX = 0x37 - IP_OFFMASK = 0x1fff - IP_OLD_FW_ADD = 0x32 - IP_OLD_FW_DEL = 0x33 - IP_OLD_FW_FLUSH = 0x34 - IP_OLD_FW_GET = 0x36 - IP_OLD_FW_RESETLOG = 0x38 - IP_OLD_FW_ZERO = 0x35 - IP_OPTIONS = 0x1 - IP_PKTINFO = 0x1a - IP_PORTRANGE = 0x13 - IP_PORTRANGE_DEFAULT = 0x0 - IP_PORTRANGE_HIGH = 0x1 - IP_PORTRANGE_LOW = 0x2 - IP_RECVDSTADDR = 0x7 - IP_RECVIF = 0x14 - IP_RECVOPTS = 0x5 - IP_RECVPKTINFO = 0x1a - IP_RECVRETOPTS = 0x6 - IP_RECVTOS = 0x1b - IP_RECVTTL = 0x18 - IP_RETOPTS = 0x8 - IP_RF = 0x8000 - IP_RSVP_OFF = 0x10 - IP_RSVP_ON = 0xf - IP_RSVP_VIF_OFF = 0x12 - IP_RSVP_VIF_ON = 0x11 - IP_STRIPHDR = 0x17 - IP_TOS = 0x3 - IP_TRAFFIC_MGT_BACKGROUND = 0x41 - IP_TTL = 0x4 - IP_UNBLOCK_SOURCE = 0x49 - ISIG = 0x80 - ISTRIP = 0x20 - IUTF8 = 0x4000 - IXANY = 0x800 - IXOFF = 0x400 - IXON = 0x200 - KERN_HOSTNAME = 0xa - KERN_OSRELEASE = 0x2 - KERN_OSTYPE = 0x1 - KERN_VERSION = 0x4 - LOCK_EX = 0x2 - LOCK_NB = 0x4 - LOCK_SH = 0x1 - LOCK_UN = 0x8 - MADV_CAN_REUSE = 0x9 - MADV_DONTNEED = 0x4 - MADV_FREE = 0x5 - MADV_FREE_REUSABLE = 0x7 - MADV_FREE_REUSE = 0x8 - MADV_NORMAL = 0x0 - MADV_PAGEOUT = 0xa - MADV_RANDOM = 0x1 - MADV_SEQUENTIAL = 0x2 - MADV_WILLNEED = 0x3 - MADV_ZERO_WIRED_PAGES = 0x6 - MAP_ANON = 0x1000 - MAP_ANONYMOUS = 0x1000 - MAP_COPY = 0x2 - MAP_FILE = 0x0 - MAP_FIXED = 0x10 - MAP_HASSEMAPHORE = 0x200 - MAP_JIT = 0x800 - MAP_NOCACHE = 0x400 - MAP_NOEXTEND = 0x100 - MAP_NORESERVE = 0x40 - MAP_PRIVATE = 0x2 - MAP_RENAME = 0x20 - MAP_RESERVED0080 = 0x80 - MAP_RESILIENT_CODESIGN = 0x2000 - MAP_RESILIENT_MEDIA = 0x4000 - MAP_SHARED = 0x1 - MCL_CURRENT = 0x1 - MCL_FUTURE = 0x2 - MNT_ASYNC = 0x40 - MNT_AUTOMOUNTED = 0x400000 - MNT_CMDFLAGS = 0xf0000 - MNT_CPROTECT = 0x80 - MNT_DEFWRITE = 0x2000000 - MNT_DONTBROWSE = 0x100000 - MNT_DOVOLFS = 0x8000 - MNT_DWAIT = 0x4 - MNT_EXPORTED = 0x100 - MNT_FORCE = 0x80000 - MNT_IGNORE_OWNERSHIP = 0x200000 - MNT_JOURNALED = 0x800000 - MNT_LOCAL = 0x1000 - MNT_MULTILABEL = 0x4000000 - MNT_NOATIME = 0x10000000 - MNT_NOBLOCK = 0x20000 - MNT_NODEV = 0x10 - MNT_NOEXEC = 0x4 - MNT_NOSUID = 0x8 - MNT_NOUSERXATTR = 0x1000000 - MNT_NOWAIT = 0x2 - MNT_QUARANTINE = 0x400 - MNT_QUOTA = 0x2000 - MNT_RDONLY = 0x1 - MNT_RELOAD = 0x40000 - MNT_ROOTFS = 0x4000 - MNT_SYNCHRONOUS = 0x2 - MNT_UNION = 0x20 - MNT_UNKNOWNPERMISSIONS = 0x200000 - MNT_UPDATE = 0x10000 - MNT_VISFLAGMASK = 0x17f0f5ff - MNT_WAIT = 0x1 - MSG_CTRUNC = 0x20 - MSG_DONTROUTE = 0x4 - MSG_DONTWAIT = 0x80 - MSG_EOF = 0x100 - MSG_EOR = 0x8 - MSG_FLUSH = 0x400 - MSG_HAVEMORE = 0x2000 - MSG_HOLD = 0x800 - MSG_NEEDSA = 0x10000 - MSG_OOB = 0x1 - MSG_PEEK = 0x2 - MSG_RCVMORE = 0x4000 - MSG_SEND = 0x1000 - MSG_TRUNC = 0x10 - MSG_WAITALL = 0x40 - MSG_WAITSTREAM = 0x200 - MS_ASYNC = 0x1 - MS_DEACTIVATE = 0x8 - MS_INVALIDATE = 0x2 - MS_KILLPAGES = 0x4 - MS_SYNC = 0x10 - NAME_MAX = 0xff - NET_RT_DUMP = 0x1 - NET_RT_DUMP2 = 0x7 - NET_RT_FLAGS = 0x2 - NET_RT_IFLIST = 0x3 - NET_RT_IFLIST2 = 0x6 - NET_RT_MAXID = 0xa - NET_RT_STAT = 0x4 - NET_RT_TRASH = 0x5 - NFDBITS = 0x20 - NL0 = 0x0 - NL1 = 0x100 - NL2 = 0x200 - NL3 = 0x300 - NLDLY = 0x300 - NOFLSH = 0x80000000 - NOKERNINFO = 0x2000000 - NOTE_ABSOLUTE = 0x8 - NOTE_ATTRIB = 0x8 - NOTE_BACKGROUND = 0x40 - NOTE_CHILD = 0x4 - NOTE_CRITICAL = 0x20 - NOTE_DELETE = 0x1 - NOTE_EXEC = 0x20000000 - NOTE_EXIT = 0x80000000 - NOTE_EXITSTATUS = 0x4000000 - NOTE_EXIT_CSERROR = 0x40000 - NOTE_EXIT_DECRYPTFAIL = 0x10000 - NOTE_EXIT_DETAIL = 0x2000000 - NOTE_EXIT_DETAIL_MASK = 0x70000 - NOTE_EXIT_MEMORY = 0x20000 - NOTE_EXIT_REPARENTED = 0x80000 - NOTE_EXTEND = 0x4 - NOTE_FFAND = 0x40000000 - NOTE_FFCOPY = 0xc0000000 - NOTE_FFCTRLMASK = 0xc0000000 - NOTE_FFLAGSMASK = 0xffffff - NOTE_FFNOP = 0x0 - NOTE_FFOR = 0x80000000 - NOTE_FORK = 0x40000000 - NOTE_FUNLOCK = 0x100 - NOTE_LEEWAY = 0x10 - NOTE_LINK = 0x10 - NOTE_LOWAT = 0x1 - NOTE_MACH_CONTINUOUS_TIME = 0x80 - NOTE_NONE = 0x80 - NOTE_NSECONDS = 0x4 - NOTE_OOB = 0x2 - NOTE_PCTRLMASK = -0x100000 - NOTE_PDATAMASK = 0xfffff - NOTE_REAP = 0x10000000 - NOTE_RENAME = 0x20 - NOTE_REVOKE = 0x40 - NOTE_SECONDS = 0x1 - NOTE_SIGNAL = 0x8000000 - NOTE_TRACK = 0x1 - NOTE_TRACKERR = 0x2 - NOTE_TRIGGER = 0x1000000 - NOTE_USECONDS = 0x2 - NOTE_VM_ERROR = 0x10000000 - NOTE_VM_PRESSURE = 0x80000000 - NOTE_VM_PRESSURE_SUDDEN_TERMINATE = 0x20000000 - NOTE_VM_PRESSURE_TERMINATE = 0x40000000 - NOTE_WRITE = 0x2 - OCRNL = 0x10 - OFDEL = 0x20000 - OFILL = 0x80 - ONLCR = 0x2 - ONLRET = 0x40 - ONOCR = 0x20 - ONOEOT = 0x8 - OPOST = 0x1 - OXTABS = 0x4 - O_ACCMODE = 0x3 - O_ALERT = 0x20000000 - O_APPEND = 0x8 - O_ASYNC = 0x40 - O_CLOEXEC = 0x1000000 - O_CREAT = 0x200 - O_DIRECTORY = 0x100000 - O_DP_GETRAWENCRYPTED = 0x1 - O_DP_GETRAWUNENCRYPTED = 0x2 - O_DSYNC = 0x400000 - O_EVTONLY = 0x8000 - O_EXCL = 0x800 - O_EXLOCK = 0x20 - O_FSYNC = 0x80 - O_NDELAY = 0x4 - O_NOCTTY = 0x20000 - O_NOFOLLOW = 0x100 - O_NONBLOCK = 0x4 - O_POPUP = 0x80000000 - O_RDONLY = 0x0 - O_RDWR = 0x2 - O_SHLOCK = 0x10 - O_SYMLINK = 0x200000 - O_SYNC = 0x80 - O_TRUNC = 0x400 - O_WRONLY = 0x1 - PARENB = 0x1000 - PARMRK = 0x8 - PARODD = 0x2000 - PENDIN = 0x20000000 - PRIO_PGRP = 0x1 - PRIO_PROCESS = 0x0 - PRIO_USER = 0x2 - PROT_EXEC = 0x4 - PROT_NONE = 0x0 - PROT_READ = 0x1 - PROT_WRITE = 0x2 - PT_ATTACH = 0xa - PT_ATTACHEXC = 0xe - PT_CONTINUE = 0x7 - PT_DENY_ATTACH = 0x1f - PT_DETACH = 0xb - PT_FIRSTMACH = 0x20 - PT_FORCEQUOTA = 0x1e - PT_KILL = 0x8 - PT_READ_D = 0x2 - PT_READ_I = 0x1 - PT_READ_U = 0x3 - PT_SIGEXC = 0xc - PT_STEP = 0x9 - PT_THUPDATE = 0xd - PT_TRACE_ME = 0x0 - PT_WRITE_D = 0x5 - PT_WRITE_I = 0x4 - PT_WRITE_U = 0x6 - RLIMIT_AS = 0x5 - RLIMIT_CORE = 0x4 - RLIMIT_CPU = 0x0 - RLIMIT_CPU_USAGE_MONITOR = 0x2 - RLIMIT_DATA = 0x2 - RLIMIT_FSIZE = 0x1 - RLIMIT_MEMLOCK = 0x6 - RLIMIT_NOFILE = 0x8 - RLIMIT_NPROC = 0x7 - RLIMIT_RSS = 0x5 - RLIMIT_STACK = 0x3 - RLIM_INFINITY = 0x7fffffffffffffff - RTAX_AUTHOR = 0x6 - RTAX_BRD = 0x7 - RTAX_DST = 0x0 - RTAX_GATEWAY = 0x1 - RTAX_GENMASK = 0x3 - RTAX_IFA = 0x5 - RTAX_IFP = 0x4 - RTAX_MAX = 0x8 - RTAX_NETMASK = 0x2 - RTA_AUTHOR = 0x40 - RTA_BRD = 0x80 - RTA_DST = 0x1 - RTA_GATEWAY = 0x2 - RTA_GENMASK = 0x8 - RTA_IFA = 0x20 - RTA_IFP = 0x10 - RTA_NETMASK = 0x4 - RTF_BLACKHOLE = 0x1000 - RTF_BROADCAST = 0x400000 - RTF_CLONING = 0x100 - RTF_CONDEMNED = 0x2000000 - RTF_DELCLONE = 0x80 - RTF_DONE = 0x40 - RTF_DYNAMIC = 0x10 - RTF_GATEWAY = 0x2 - RTF_HOST = 0x4 - RTF_IFREF = 0x4000000 - RTF_IFSCOPE = 0x1000000 - RTF_LLINFO = 0x400 - RTF_LOCAL = 0x200000 - RTF_MODIFIED = 0x20 - RTF_MULTICAST = 0x800000 - RTF_NOIFREF = 0x2000 - RTF_PINNED = 0x100000 - RTF_PRCLONING = 0x10000 - RTF_PROTO1 = 0x8000 - RTF_PROTO2 = 0x4000 - RTF_PROTO3 = 0x40000 - RTF_PROXY = 0x8000000 - RTF_REJECT = 0x8 - RTF_ROUTER = 0x10000000 - RTF_STATIC = 0x800 - RTF_UP = 0x1 - RTF_WASCLONED = 0x20000 - RTF_XRESOLVE = 0x200 - RTM_ADD = 0x1 - RTM_CHANGE = 0x3 - RTM_DELADDR = 0xd - RTM_DELETE = 0x2 - RTM_DELMADDR = 0x10 - RTM_GET = 0x4 - RTM_GET2 = 0x14 - RTM_IFINFO = 0xe - RTM_IFINFO2 = 0x12 - RTM_LOCK = 0x8 - RTM_LOSING = 0x5 - RTM_MISS = 0x7 - RTM_NEWADDR = 0xc - RTM_NEWMADDR = 0xf - RTM_NEWMADDR2 = 0x13 - RTM_OLDADD = 0x9 - RTM_OLDDEL = 0xa - RTM_REDIRECT = 0x6 - RTM_RESOLVE = 0xb - RTM_RTTUNIT = 0xf4240 - RTM_VERSION = 0x5 - RTV_EXPIRE = 0x4 - RTV_HOPCOUNT = 0x2 - RTV_MTU = 0x1 - RTV_RPIPE = 0x8 - RTV_RTT = 0x40 - RTV_RTTVAR = 0x80 - RTV_SPIPE = 0x10 - RTV_SSTHRESH = 0x20 - RUSAGE_CHILDREN = -0x1 - RUSAGE_SELF = 0x0 - SCM_CREDS = 0x3 - SCM_RIGHTS = 0x1 - SCM_TIMESTAMP = 0x2 - SCM_TIMESTAMP_MONOTONIC = 0x4 - SHUT_RD = 0x0 - SHUT_RDWR = 0x2 - SHUT_WR = 0x1 - SIOCADDMULTI = 0x80206931 - SIOCAIFADDR = 0x8040691a - SIOCARPIPLL = 0xc0206928 - SIOCATMARK = 0x40047307 - SIOCAUTOADDR = 0xc0206926 - SIOCAUTONETMASK = 0x80206927 - SIOCDELMULTI = 0x80206932 - SIOCDIFADDR = 0x80206919 - SIOCDIFPHYADDR = 0x80206941 - SIOCGDRVSPEC = 0xc028697b - SIOCGETVLAN = 0xc020697f - SIOCGHIWAT = 0x40047301 - SIOCGIFADDR = 0xc0206921 - SIOCGIFALTMTU = 0xc0206948 - SIOCGIFASYNCMAP = 0xc020697c - SIOCGIFBOND = 0xc0206947 - SIOCGIFBRDADDR = 0xc0206923 - SIOCGIFCAP = 0xc020695b - SIOCGIFCONF = 0xc00c6924 - SIOCGIFDEVMTU = 0xc0206944 - SIOCGIFDSTADDR = 0xc0206922 - SIOCGIFFLAGS = 0xc0206911 - SIOCGIFGENERIC = 0xc020693a - SIOCGIFKPI = 0xc0206987 - SIOCGIFMAC = 0xc0206982 - SIOCGIFMEDIA = 0xc02c6938 - SIOCGIFMETRIC = 0xc0206917 - SIOCGIFMTU = 0xc0206933 - SIOCGIFNETMASK = 0xc0206925 - SIOCGIFPDSTADDR = 0xc0206940 - SIOCGIFPHYS = 0xc0206935 - SIOCGIFPSRCADDR = 0xc020693f - SIOCGIFSTATUS = 0xc331693d - SIOCGIFVLAN = 0xc020697f - SIOCGIFWAKEFLAGS = 0xc0206988 - SIOCGLOWAT = 0x40047303 - SIOCGPGRP = 0x40047309 - SIOCIFCREATE = 0xc0206978 - SIOCIFCREATE2 = 0xc020697a - SIOCIFDESTROY = 0x80206979 - SIOCIFGCLONERS = 0xc0106981 - SIOCRSLVMULTI = 0xc010693b - SIOCSDRVSPEC = 0x8028697b - SIOCSETVLAN = 0x8020697e - SIOCSHIWAT = 0x80047300 - SIOCSIFADDR = 0x8020690c - SIOCSIFALTMTU = 0x80206945 - SIOCSIFASYNCMAP = 0x8020697d - SIOCSIFBOND = 0x80206946 - SIOCSIFBRDADDR = 0x80206913 - SIOCSIFCAP = 0x8020695a - SIOCSIFDSTADDR = 0x8020690e - SIOCSIFFLAGS = 0x80206910 - SIOCSIFGENERIC = 0x80206939 - SIOCSIFKPI = 0x80206986 - SIOCSIFLLADDR = 0x8020693c - SIOCSIFMAC = 0x80206983 - SIOCSIFMEDIA = 0xc0206937 - SIOCSIFMETRIC = 0x80206918 - SIOCSIFMTU = 0x80206934 - SIOCSIFNETMASK = 0x80206916 - SIOCSIFPHYADDR = 0x8040693e - SIOCSIFPHYS = 0x80206936 - SIOCSIFVLAN = 0x8020697e - SIOCSLOWAT = 0x80047302 - SIOCSPGRP = 0x80047308 - SOCK_DGRAM = 0x2 - SOCK_MAXADDRLEN = 0xff - SOCK_RAW = 0x3 - SOCK_RDM = 0x4 - SOCK_SEQPACKET = 0x5 - SOCK_STREAM = 0x1 - SOL_SOCKET = 0xffff - SOMAXCONN = 0x80 - SO_ACCEPTCONN = 0x2 - SO_BROADCAST = 0x20 - SO_DEBUG = 0x1 - SO_DONTROUTE = 0x10 - SO_DONTTRUNC = 0x2000 - SO_ERROR = 0x1007 - SO_KEEPALIVE = 0x8 - SO_LABEL = 0x1010 - SO_LINGER = 0x80 - SO_LINGER_SEC = 0x1080 - SO_NETSVC_MARKING_LEVEL = 0x1119 - SO_NET_SERVICE_TYPE = 0x1116 - SO_NKE = 0x1021 - SO_NOADDRERR = 0x1023 - SO_NOSIGPIPE = 0x1022 - SO_NOTIFYCONFLICT = 0x1026 - SO_NP_EXTENSIONS = 0x1083 - SO_NREAD = 0x1020 - SO_NUMRCVPKT = 0x1112 - SO_NWRITE = 0x1024 - SO_OOBINLINE = 0x100 - SO_PEERLABEL = 0x1011 - SO_RANDOMPORT = 0x1082 - SO_RCVBUF = 0x1002 - SO_RCVLOWAT = 0x1004 - SO_RCVTIMEO = 0x1006 - SO_REUSEADDR = 0x4 - SO_REUSEPORT = 0x200 - SO_REUSESHAREUID = 0x1025 - SO_SNDBUF = 0x1001 - SO_SNDLOWAT = 0x1003 - SO_SNDTIMEO = 0x1005 - SO_TIMESTAMP = 0x400 - SO_TIMESTAMP_MONOTONIC = 0x800 - SO_TYPE = 0x1008 - SO_UPCALLCLOSEWAIT = 0x1027 - SO_USELOOPBACK = 0x40 - SO_WANTMORE = 0x4000 - SO_WANTOOBFLAG = 0x8000 - S_IEXEC = 0x40 - S_IFBLK = 0x6000 - S_IFCHR = 0x2000 - S_IFDIR = 0x4000 - S_IFIFO = 0x1000 - S_IFLNK = 0xa000 - S_IFMT = 0xf000 - S_IFREG = 0x8000 - S_IFSOCK = 0xc000 - S_IFWHT = 0xe000 - S_IREAD = 0x100 - S_IRGRP = 0x20 - S_IROTH = 0x4 - S_IRUSR = 0x100 - S_IRWXG = 0x38 - S_IRWXO = 0x7 - S_IRWXU = 0x1c0 - S_ISGID = 0x400 - S_ISTXT = 0x200 - S_ISUID = 0x800 - S_ISVTX = 0x200 - S_IWGRP = 0x10 - S_IWOTH = 0x2 - S_IWRITE = 0x80 - S_IWUSR = 0x80 - S_IXGRP = 0x8 - S_IXOTH = 0x1 - S_IXUSR = 0x40 - TAB0 = 0x0 - TAB1 = 0x400 - TAB2 = 0x800 - TAB3 = 0x4 - TABDLY = 0xc04 - TCIFLUSH = 0x1 - TCIOFF = 0x3 - TCIOFLUSH = 0x3 - TCION = 0x4 - TCOFLUSH = 0x2 - TCOOFF = 0x1 - TCOON = 0x2 - TCP_CONNECTIONTIMEOUT = 0x20 - TCP_CONNECTION_INFO = 0x106 - TCP_ENABLE_ECN = 0x104 - TCP_FASTOPEN = 0x105 - TCP_KEEPALIVE = 0x10 - TCP_KEEPCNT = 0x102 - TCP_KEEPINTVL = 0x101 - TCP_MAXHLEN = 0x3c - TCP_MAXOLEN = 0x28 - TCP_MAXSEG = 0x2 - TCP_MAXWIN = 0xffff - TCP_MAX_SACK = 0x4 - TCP_MAX_WINSHIFT = 0xe - TCP_MINMSS = 0xd8 - TCP_MSS = 0x200 - TCP_NODELAY = 0x1 - TCP_NOOPT = 0x8 - TCP_NOPUSH = 0x4 - TCP_NOTSENT_LOWAT = 0x201 - TCP_RXT_CONNDROPTIME = 0x80 - TCP_RXT_FINDROP = 0x100 - TCP_SENDMOREACKS = 0x103 - TCSAFLUSH = 0x2 - TIOCCBRK = 0x2000747a - TIOCCDTR = 0x20007478 - TIOCCONS = 0x80047462 - TIOCDCDTIMESTAMP = 0x40107458 - TIOCDRAIN = 0x2000745e - TIOCDSIMICROCODE = 0x20007455 - TIOCEXCL = 0x2000740d - TIOCEXT = 0x80047460 - TIOCFLUSH = 0x80047410 - TIOCGDRAINWAIT = 0x40047456 - TIOCGETA = 0x40487413 - TIOCGETD = 0x4004741a - TIOCGPGRP = 0x40047477 - TIOCGWINSZ = 0x40087468 - TIOCIXOFF = 0x20007480 - TIOCIXON = 0x20007481 - TIOCMBIC = 0x8004746b - TIOCMBIS = 0x8004746c - TIOCMGDTRWAIT = 0x4004745a - TIOCMGET = 0x4004746a - TIOCMODG = 0x40047403 - TIOCMODS = 0x80047404 - TIOCMSDTRWAIT = 0x8004745b - TIOCMSET = 0x8004746d - TIOCM_CAR = 0x40 - TIOCM_CD = 0x40 - TIOCM_CTS = 0x20 - TIOCM_DSR = 0x100 - TIOCM_DTR = 0x2 - TIOCM_LE = 0x1 - TIOCM_RI = 0x80 - TIOCM_RNG = 0x80 - TIOCM_RTS = 0x4 - TIOCM_SR = 0x10 - TIOCM_ST = 0x8 - TIOCNOTTY = 0x20007471 - TIOCNXCL = 0x2000740e - TIOCOUTQ = 0x40047473 - TIOCPKT = 0x80047470 - TIOCPKT_DATA = 0x0 - TIOCPKT_DOSTOP = 0x20 - TIOCPKT_FLUSHREAD = 0x1 - TIOCPKT_FLUSHWRITE = 0x2 - TIOCPKT_IOCTL = 0x40 - TIOCPKT_NOSTOP = 0x10 - TIOCPKT_START = 0x8 - TIOCPKT_STOP = 0x4 - TIOCPTYGNAME = 0x40807453 - TIOCPTYGRANT = 0x20007454 - TIOCPTYUNLK = 0x20007452 - TIOCREMOTE = 0x80047469 - TIOCSBRK = 0x2000747b - TIOCSCONS = 0x20007463 - TIOCSCTTY = 0x20007461 - TIOCSDRAINWAIT = 0x80047457 - TIOCSDTR = 0x20007479 - TIOCSETA = 0x80487414 - TIOCSETAF = 0x80487416 - TIOCSETAW = 0x80487415 - TIOCSETD = 0x8004741b - TIOCSIG = 0x2000745f - TIOCSPGRP = 0x80047476 - TIOCSTART = 0x2000746e - TIOCSTAT = 0x20007465 - TIOCSTI = 0x80017472 - TIOCSTOP = 0x2000746f - TIOCSWINSZ = 0x80087467 - TIOCTIMESTAMP = 0x40107459 - TIOCUCNTL = 0x80047466 - TOSTOP = 0x400000 - VDISCARD = 0xf - VDSUSP = 0xb - VEOF = 0x0 - VEOL = 0x1 - VEOL2 = 0x2 - VERASE = 0x3 - VINTR = 0x8 - VKILL = 0x5 - VLNEXT = 0xe - VMIN = 0x10 - VM_LOADAVG = 0x2 - VM_MACHFACTOR = 0x4 - VM_MAXID = 0x6 - VM_METER = 0x1 - VM_SWAPUSAGE = 0x5 - VQUIT = 0x9 - VREPRINT = 0x6 - VSTART = 0xc - VSTATUS = 0x12 - VSTOP = 0xd - VSUSP = 0xa - VT0 = 0x0 - VT1 = 0x10000 - VTDLY = 0x10000 - VTIME = 0x11 - VWERASE = 0x4 - WCONTINUED = 0x10 - WCOREFLAG = 0x80 - WEXITED = 0x4 - WNOHANG = 0x1 - WNOWAIT = 0x20 - WORDSIZE = 0x40 - WSTOPPED = 0x8 - WUNTRACED = 0x2 - XATTR_CREATE = 0x2 - XATTR_NODEFAULT = 0x10 - XATTR_NOFOLLOW = 0x1 - XATTR_NOSECURITY = 0x8 - XATTR_REPLACE = 0x4 - XATTR_SHOWCOMPRESSION = 0x20 -) - -// Errors -const ( - E2BIG = syscall.Errno(0x7) - EACCES = syscall.Errno(0xd) - EADDRINUSE = syscall.Errno(0x30) - EADDRNOTAVAIL = syscall.Errno(0x31) - EAFNOSUPPORT = syscall.Errno(0x2f) - EAGAIN = syscall.Errno(0x23) - EALREADY = syscall.Errno(0x25) - EAUTH = syscall.Errno(0x50) - EBADARCH = syscall.Errno(0x56) - EBADEXEC = syscall.Errno(0x55) - EBADF = syscall.Errno(0x9) - EBADMACHO = syscall.Errno(0x58) - EBADMSG = syscall.Errno(0x5e) - EBADRPC = syscall.Errno(0x48) - EBUSY = syscall.Errno(0x10) - ECANCELED = syscall.Errno(0x59) - ECHILD = syscall.Errno(0xa) - ECONNABORTED = syscall.Errno(0x35) - ECONNREFUSED = syscall.Errno(0x3d) - ECONNRESET = syscall.Errno(0x36) - EDEADLK = syscall.Errno(0xb) - EDESTADDRREQ = syscall.Errno(0x27) - EDEVERR = syscall.Errno(0x53) - EDOM = syscall.Errno(0x21) - EDQUOT = syscall.Errno(0x45) - EEXIST = syscall.Errno(0x11) - EFAULT = syscall.Errno(0xe) - EFBIG = syscall.Errno(0x1b) - EFTYPE = syscall.Errno(0x4f) - EHOSTDOWN = syscall.Errno(0x40) - EHOSTUNREACH = syscall.Errno(0x41) - EIDRM = syscall.Errno(0x5a) - EILSEQ = syscall.Errno(0x5c) - EINPROGRESS = syscall.Errno(0x24) - EINTR = syscall.Errno(0x4) - EINVAL = syscall.Errno(0x16) - EIO = syscall.Errno(0x5) - EISCONN = syscall.Errno(0x38) - EISDIR = syscall.Errno(0x15) - ELAST = syscall.Errno(0x6a) - ELOOP = syscall.Errno(0x3e) - EMFILE = syscall.Errno(0x18) - EMLINK = syscall.Errno(0x1f) - EMSGSIZE = syscall.Errno(0x28) - EMULTIHOP = syscall.Errno(0x5f) - ENAMETOOLONG = syscall.Errno(0x3f) - ENEEDAUTH = syscall.Errno(0x51) - ENETDOWN = syscall.Errno(0x32) - ENETRESET = syscall.Errno(0x34) - ENETUNREACH = syscall.Errno(0x33) - ENFILE = syscall.Errno(0x17) - ENOATTR = syscall.Errno(0x5d) - ENOBUFS = syscall.Errno(0x37) - ENODATA = syscall.Errno(0x60) - ENODEV = syscall.Errno(0x13) - ENOENT = syscall.Errno(0x2) - ENOEXEC = syscall.Errno(0x8) - ENOLCK = syscall.Errno(0x4d) - ENOLINK = syscall.Errno(0x61) - ENOMEM = syscall.Errno(0xc) - ENOMSG = syscall.Errno(0x5b) - ENOPOLICY = syscall.Errno(0x67) - ENOPROTOOPT = syscall.Errno(0x2a) - ENOSPC = syscall.Errno(0x1c) - ENOSR = syscall.Errno(0x62) - ENOSTR = syscall.Errno(0x63) - ENOSYS = syscall.Errno(0x4e) - ENOTBLK = syscall.Errno(0xf) - ENOTCONN = syscall.Errno(0x39) - ENOTDIR = syscall.Errno(0x14) - ENOTEMPTY = syscall.Errno(0x42) - ENOTRECOVERABLE = syscall.Errno(0x68) - ENOTSOCK = syscall.Errno(0x26) - ENOTSUP = syscall.Errno(0x2d) - ENOTTY = syscall.Errno(0x19) - ENXIO = syscall.Errno(0x6) - EOPNOTSUPP = syscall.Errno(0x66) - EOVERFLOW = syscall.Errno(0x54) - EOWNERDEAD = syscall.Errno(0x69) - EPERM = syscall.Errno(0x1) - EPFNOSUPPORT = syscall.Errno(0x2e) - EPIPE = syscall.Errno(0x20) - EPROCLIM = syscall.Errno(0x43) - EPROCUNAVAIL = syscall.Errno(0x4c) - EPROGMISMATCH = syscall.Errno(0x4b) - EPROGUNAVAIL = syscall.Errno(0x4a) - EPROTO = syscall.Errno(0x64) - EPROTONOSUPPORT = syscall.Errno(0x2b) - EPROTOTYPE = syscall.Errno(0x29) - EPWROFF = syscall.Errno(0x52) - EQFULL = syscall.Errno(0x6a) - ERANGE = syscall.Errno(0x22) - EREMOTE = syscall.Errno(0x47) - EROFS = syscall.Errno(0x1e) - ERPCMISMATCH = syscall.Errno(0x49) - ESHLIBVERS = syscall.Errno(0x57) - ESHUTDOWN = syscall.Errno(0x3a) - ESOCKTNOSUPPORT = syscall.Errno(0x2c) - ESPIPE = syscall.Errno(0x1d) - ESRCH = syscall.Errno(0x3) - ESTALE = syscall.Errno(0x46) - ETIME = syscall.Errno(0x65) - ETIMEDOUT = syscall.Errno(0x3c) - ETOOMANYREFS = syscall.Errno(0x3b) - ETXTBSY = syscall.Errno(0x1a) - EUSERS = syscall.Errno(0x44) - EWOULDBLOCK = syscall.Errno(0x23) - EXDEV = syscall.Errno(0x12) -) - -// Signals -const ( - SIGABRT = syscall.Signal(0x6) - SIGALRM = syscall.Signal(0xe) - SIGBUS = syscall.Signal(0xa) - SIGCHLD = syscall.Signal(0x14) - SIGCONT = syscall.Signal(0x13) - SIGEMT = syscall.Signal(0x7) - SIGFPE = syscall.Signal(0x8) - SIGHUP = syscall.Signal(0x1) - SIGILL = syscall.Signal(0x4) - SIGINFO = syscall.Signal(0x1d) - SIGINT = syscall.Signal(0x2) - SIGIO = syscall.Signal(0x17) - SIGIOT = syscall.Signal(0x6) - SIGKILL = syscall.Signal(0x9) - SIGPIPE = syscall.Signal(0xd) - SIGPROF = syscall.Signal(0x1b) - SIGQUIT = syscall.Signal(0x3) - SIGSEGV = syscall.Signal(0xb) - SIGSTOP = syscall.Signal(0x11) - SIGSYS = syscall.Signal(0xc) - SIGTERM = syscall.Signal(0xf) - SIGTRAP = syscall.Signal(0x5) - SIGTSTP = syscall.Signal(0x12) - SIGTTIN = syscall.Signal(0x15) - SIGTTOU = syscall.Signal(0x16) - SIGURG = syscall.Signal(0x10) - SIGUSR1 = syscall.Signal(0x1e) - SIGUSR2 = syscall.Signal(0x1f) - SIGVTALRM = syscall.Signal(0x1a) - SIGWINCH = syscall.Signal(0x1c) - SIGXCPU = syscall.Signal(0x18) - SIGXFSZ = syscall.Signal(0x19) -) - -// Error table -var errorList = [...]struct { - num syscall.Errno - name string - desc string -}{ - {1, "EPERM", "operation not permitted"}, - {2, "ENOENT", "no such file or directory"}, - {3, "ESRCH", "no such process"}, - {4, "EINTR", "interrupted system call"}, - {5, "EIO", "input/output error"}, - {6, "ENXIO", "device not configured"}, - {7, "E2BIG", "argument list too long"}, - {8, "ENOEXEC", "exec format error"}, - {9, "EBADF", "bad file descriptor"}, - {10, "ECHILD", "no child processes"}, - {11, "EDEADLK", "resource deadlock avoided"}, - {12, "ENOMEM", "cannot allocate memory"}, - {13, "EACCES", "permission denied"}, - {14, "EFAULT", "bad address"}, - {15, "ENOTBLK", "block device required"}, - {16, "EBUSY", "resource busy"}, - {17, "EEXIST", "file exists"}, - {18, "EXDEV", "cross-device link"}, - {19, "ENODEV", "operation not supported by device"}, - {20, "ENOTDIR", "not a directory"}, - {21, "EISDIR", "is a directory"}, - {22, "EINVAL", "invalid argument"}, - {23, "ENFILE", "too many open files in system"}, - {24, "EMFILE", "too many open files"}, - {25, "ENOTTY", "inappropriate ioctl for device"}, - {26, "ETXTBSY", "text file busy"}, - {27, "EFBIG", "file too large"}, - {28, "ENOSPC", "no space left on device"}, - {29, "ESPIPE", "illegal seek"}, - {30, "EROFS", "read-only file system"}, - {31, "EMLINK", "too many links"}, - {32, "EPIPE", "broken pipe"}, - {33, "EDOM", "numerical argument out of domain"}, - {34, "ERANGE", "result too large"}, - {35, "EAGAIN", "resource temporarily unavailable"}, - {36, "EINPROGRESS", "operation now in progress"}, - {37, "EALREADY", "operation already in progress"}, - {38, "ENOTSOCK", "socket operation on non-socket"}, - {39, "EDESTADDRREQ", "destination address required"}, - {40, "EMSGSIZE", "message too long"}, - {41, "EPROTOTYPE", "protocol wrong type for socket"}, - {42, "ENOPROTOOPT", "protocol not available"}, - {43, "EPROTONOSUPPORT", "protocol not supported"}, - {44, "ESOCKTNOSUPPORT", "socket type not supported"}, - {45, "ENOTSUP", "operation not supported"}, - {46, "EPFNOSUPPORT", "protocol family not supported"}, - {47, "EAFNOSUPPORT", "address family not supported by protocol family"}, - {48, "EADDRINUSE", "address already in use"}, - {49, "EADDRNOTAVAIL", "can't assign requested address"}, - {50, "ENETDOWN", "network is down"}, - {51, "ENETUNREACH", "network is unreachable"}, - {52, "ENETRESET", "network dropped connection on reset"}, - {53, "ECONNABORTED", "software caused connection abort"}, - {54, "ECONNRESET", "connection reset by peer"}, - {55, "ENOBUFS", "no buffer space available"}, - {56, "EISCONN", "socket is already connected"}, - {57, "ENOTCONN", "socket is not connected"}, - {58, "ESHUTDOWN", "can't send after socket shutdown"}, - {59, "ETOOMANYREFS", "too many references: can't splice"}, - {60, "ETIMEDOUT", "operation timed out"}, - {61, "ECONNREFUSED", "connection refused"}, - {62, "ELOOP", "too many levels of symbolic links"}, - {63, "ENAMETOOLONG", "file name too long"}, - {64, "EHOSTDOWN", "host is down"}, - {65, "EHOSTUNREACH", "no route to host"}, - {66, "ENOTEMPTY", "directory not empty"}, - {67, "EPROCLIM", "too many processes"}, - {68, "EUSERS", "too many users"}, - {69, "EDQUOT", "disc quota exceeded"}, - {70, "ESTALE", "stale NFS file handle"}, - {71, "EREMOTE", "too many levels of remote in path"}, - {72, "EBADRPC", "RPC struct is bad"}, - {73, "ERPCMISMATCH", "RPC version wrong"}, - {74, "EPROGUNAVAIL", "RPC prog. not avail"}, - {75, "EPROGMISMATCH", "program version wrong"}, - {76, "EPROCUNAVAIL", "bad procedure for program"}, - {77, "ENOLCK", "no locks available"}, - {78, "ENOSYS", "function not implemented"}, - {79, "EFTYPE", "inappropriate file type or format"}, - {80, "EAUTH", "authentication error"}, - {81, "ENEEDAUTH", "need authenticator"}, - {82, "EPWROFF", "device power is off"}, - {83, "EDEVERR", "device error"}, - {84, "EOVERFLOW", "value too large to be stored in data type"}, - {85, "EBADEXEC", "bad executable (or shared library)"}, - {86, "EBADARCH", "bad CPU type in executable"}, - {87, "ESHLIBVERS", "shared library version mismatch"}, - {88, "EBADMACHO", "malformed Mach-o file"}, - {89, "ECANCELED", "operation canceled"}, - {90, "EIDRM", "identifier removed"}, - {91, "ENOMSG", "no message of desired type"}, - {92, "EILSEQ", "illegal byte sequence"}, - {93, "ENOATTR", "attribute not found"}, - {94, "EBADMSG", "bad message"}, - {95, "EMULTIHOP", "EMULTIHOP (Reserved)"}, - {96, "ENODATA", "no message available on STREAM"}, - {97, "ENOLINK", "ENOLINK (Reserved)"}, - {98, "ENOSR", "no STREAM resources"}, - {99, "ENOSTR", "not a STREAM"}, - {100, "EPROTO", "protocol error"}, - {101, "ETIME", "STREAM ioctl timeout"}, - {102, "EOPNOTSUPP", "operation not supported on socket"}, - {103, "ENOPOLICY", "policy not found"}, - {104, "ENOTRECOVERABLE", "state not recoverable"}, - {105, "EOWNERDEAD", "previous owner died"}, - {106, "EQFULL", "interface output queue is full"}, -} - -// Signal table -var signalList = [...]struct { - num syscall.Signal - name string - desc string -}{ - {1, "SIGHUP", "hangup"}, - {2, "SIGINT", "interrupt"}, - {3, "SIGQUIT", "quit"}, - {4, "SIGILL", "illegal instruction"}, - {5, "SIGTRAP", "trace/BPT trap"}, - {6, "SIGABRT", "abort trap"}, - {7, "SIGEMT", "EMT trap"}, - {8, "SIGFPE", "floating point exception"}, - {9, "SIGKILL", "killed"}, - {10, "SIGBUS", "bus error"}, - {11, "SIGSEGV", "segmentation fault"}, - {12, "SIGSYS", "bad system call"}, - {13, "SIGPIPE", "broken pipe"}, - {14, "SIGALRM", "alarm clock"}, - {15, "SIGTERM", "terminated"}, - {16, "SIGURG", "urgent I/O condition"}, - {17, "SIGSTOP", "suspended (signal)"}, - {18, "SIGTSTP", "suspended"}, - {19, "SIGCONT", "continued"}, - {20, "SIGCHLD", "child exited"}, - {21, "SIGTTIN", "stopped (tty input)"}, - {22, "SIGTTOU", "stopped (tty output)"}, - {23, "SIGIO", "I/O possible"}, - {24, "SIGXCPU", "cputime limit exceeded"}, - {25, "SIGXFSZ", "filesize limit exceeded"}, - {26, "SIGVTALRM", "virtual timer expired"}, - {27, "SIGPROF", "profiling timer expired"}, - {28, "SIGWINCH", "window size changes"}, - {29, "SIGINFO", "information request"}, - {30, "SIGUSR1", "user defined signal 1"}, - {31, "SIGUSR2", "user defined signal 2"}, -} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_13.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_13.go deleted file mode 100644 index 48a62e39062..00000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_13.go +++ /dev/null @@ -1,40 +0,0 @@ -// go run mksyscall.go -l32 -tags darwin,386,go1.13 syscall_darwin.1_13.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build darwin && 386 && go1.13 -// +build darwin,386,go1.13 - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func closedir(dir uintptr) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_closedir_trampoline), uintptr(dir), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_closedir_trampoline() - -//go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) { - r0, _, _ := syscall_syscall(funcPC(libc_readdir_r_trampoline), uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result))) - res = Errno(r0) - return -} - -func libc_readdir_r_trampoline() - -//go:cgo_import_dynamic libc_readdir_r readdir_r "/usr/lib/libSystem.B.dylib" diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_13.s b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_13.s deleted file mode 100644 index 1c73a1921d7..00000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.1_13.s +++ /dev/null @@ -1,13 +0,0 @@ -// go run mkasm_darwin.go 386 -// Code generated by the command above; DO NOT EDIT. - -//go:build go1.13 -// +build go1.13 - -#include "textflag.h" -TEXT ·libc_fdopendir_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fdopendir(SB) -TEXT ·libc_closedir_trampoline(SB),NOSPLIT,$0-0 - JMP libc_closedir(SB) -TEXT ·libc_readdir_r_trampoline(SB),NOSPLIT,$0-0 - JMP libc_readdir_r(SB) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go deleted file mode 100644 index a266636af67..00000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.go +++ /dev/null @@ -1,2431 +0,0 @@ -// go run mksyscall.go -l32 -tags darwin,386,go1.12 syscall_bsd.go syscall_darwin.go syscall_darwin_386.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build darwin && 386 && go1.12 -// +build darwin,386,go1.12 - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(ngid int, gid *_Gid_t) (n int, err error) { - r0, _, e1 := syscall_rawSyscall(funcPC(libc_getgroups_trampoline), uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_getgroups_trampoline() - -//go:cgo_import_dynamic libc_getgroups getgroups "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(ngid int, gid *_Gid_t) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_setgroups_trampoline), uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_setgroups_trampoline() - -//go:cgo_import_dynamic libc_setgroups setgroups "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { - r0, _, e1 := syscall_syscall6(funcPC(libc_wait4_trampoline), uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) - wpid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_wait4_trampoline() - -//go:cgo_import_dynamic libc_wait4 wait4 "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_accept_trampoline), uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_accept_trampoline() - -//go:cgo_import_dynamic libc_accept accept "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_bind_trampoline), uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_bind_trampoline() - -//go:cgo_import_dynamic libc_bind bind "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_connect_trampoline), uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_connect_trampoline() - -//go:cgo_import_dynamic libc_connect connect "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := syscall_rawSyscall(funcPC(libc_socket_trampoline), uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_socket_trampoline() - -//go:cgo_import_dynamic libc_socket socket "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := syscall_syscall6(funcPC(libc_getsockopt_trampoline), uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_getsockopt_trampoline() - -//go:cgo_import_dynamic libc_getsockopt getsockopt "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := syscall_syscall6(funcPC(libc_setsockopt_trampoline), uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_setsockopt_trampoline() - -//go:cgo_import_dynamic libc_setsockopt setsockopt "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_getpeername_trampoline), uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_getpeername_trampoline() - -//go:cgo_import_dynamic libc_getpeername getpeername "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_getsockname_trampoline), uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_getsockname_trampoline() - -//go:cgo_import_dynamic libc_getsockname getsockname "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(s int, how int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_shutdown_trampoline), uintptr(s), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_shutdown_trampoline() - -//go:cgo_import_dynamic libc_shutdown shutdown "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := syscall_rawSyscall6(funcPC(libc_socketpair_trampoline), uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_socketpair_trampoline() - -//go:cgo_import_dynamic libc_socketpair socketpair "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(funcPC(libc_recvfrom_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_recvfrom_trampoline() - -//go:cgo_import_dynamic libc_recvfrom recvfrom "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall6(funcPC(libc_sendto_trampoline), uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_sendto_trampoline() - -//go:cgo_import_dynamic libc_sendto sendto "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_recvmsg_trampoline), uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_recvmsg_trampoline() - -//go:cgo_import_dynamic libc_recvmsg recvmsg "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_sendmsg_trampoline), uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_sendmsg_trampoline() - -//go:cgo_import_dynamic libc_sendmsg sendmsg "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { - r0, _, e1 := syscall_syscall6(funcPC(libc_kevent_trampoline), uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_kevent_trampoline() - -//go:cgo_import_dynamic libc_kevent kevent "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, timeval *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_utimes_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_utimes_trampoline() - -//go:cgo_import_dynamic libc_utimes utimes "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func futimes(fd int, timeval *[2]Timeval) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_futimes_trampoline), uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_futimes_trampoline() - -//go:cgo_import_dynamic libc_futimes futimes "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_poll_trampoline), uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_poll_trampoline() - -//go:cgo_import_dynamic libc_poll poll "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Madvise(b []byte, behav int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(funcPC(libc_madvise_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(behav)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_madvise_trampoline() - -//go:cgo_import_dynamic libc_madvise madvise "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(funcPC(libc_mlock_trampoline), uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_mlock_trampoline() - -//go:cgo_import_dynamic libc_mlock mlock "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_mlockall_trampoline), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_mlockall_trampoline() - -//go:cgo_import_dynamic libc_mlockall mlockall "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(funcPC(libc_mprotect_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(prot)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_mprotect_trampoline() - -//go:cgo_import_dynamic libc_mprotect mprotect "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Msync(b []byte, flags int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(funcPC(libc_msync_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_msync_trampoline() - -//go:cgo_import_dynamic libc_msync msync "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(funcPC(libc_munlock_trampoline), uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_munlock_trampoline() - -//go:cgo_import_dynamic libc_munlock munlock "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlockall() (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_munlockall_trampoline), 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_munlockall_trampoline() - -//go:cgo_import_dynamic libc_munlockall munlockall "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pipe(p *[2]int32) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_pipe_trampoline), uintptr(unsafe.Pointer(p)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_pipe_trampoline() - -//go:cgo_import_dynamic libc_pipe pipe "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attr) - if err != nil { - return - } - r0, _, e1 := syscall_syscall6(funcPC(libc_getxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options)) - sz = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_getxattr_trampoline() - -//go:cgo_import_dynamic libc_getxattr getxattr "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attr) - if err != nil { - return - } - r0, _, e1 := syscall_syscall6(funcPC(libc_fgetxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options)) - sz = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_fgetxattr_trampoline() - -//go:cgo_import_dynamic libc_fgetxattr fgetxattr "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attr) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(funcPC(libc_setxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_setxattr_trampoline() - -//go:cgo_import_dynamic libc_setxattr setxattr "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attr) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(funcPC(libc_fsetxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_fsetxattr_trampoline() - -//go:cgo_import_dynamic libc_fsetxattr fsetxattr "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func removexattr(path string, attr string, options int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attr) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_removexattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_removexattr_trampoline() - -//go:cgo_import_dynamic libc_removexattr removexattr "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fremovexattr(fd int, attr string, options int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attr) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_fremovexattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_fremovexattr_trampoline() - -//go:cgo_import_dynamic libc_fremovexattr fremovexattr "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func listxattr(path string, dest *byte, size int, options int) (sz int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := syscall_syscall6(funcPC(libc_listxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0) - sz = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_listxattr_trampoline() - -//go:cgo_import_dynamic libc_listxattr listxattr "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) { - r0, _, e1 := syscall_syscall6(funcPC(libc_flistxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0) - sz = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_flistxattr_trampoline() - -//go:cgo_import_dynamic libc_flistxattr flistxattr "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) { - _, _, e1 := syscall_syscall6(funcPC(libc_setattrlist_trampoline), uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_setattrlist_trampoline() - -//go:cgo_import_dynamic libc_setattrlist setattrlist "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fcntl(fd int, cmd int, arg int) (val int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_fcntl_trampoline), uintptr(fd), uintptr(cmd), uintptr(arg)) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_fcntl_trampoline() - -//go:cgo_import_dynamic libc_fcntl fcntl "/usr/lib/libSystem.B.dylib" - -// 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(funcPC(libc_kill_trampoline), uintptr(pid), uintptr(signum), uintptr(posix)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_kill_trampoline() - -//go:cgo_import_dynamic libc_kill kill "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ioctl(fd int, req uint, arg uintptr) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_ioctl_trampoline), uintptr(fd), uintptr(req), uintptr(arg)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_ioctl_trampoline() - -//go:cgo_import_dynamic libc_ioctl ioctl "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { - _p0 = unsafe.Pointer(&mib[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall6(funcPC(libc_sysctl_trampoline), uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_sysctl_trampoline() - -//go:cgo_import_dynamic libc_sysctl sysctl "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) { - _, _, e1 := syscall_syscall9(funcPC(libc_sendfile_trampoline), uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(offset>>32), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_sendfile_trampoline() - -//go:cgo_import_dynamic libc_sendfile sendfile "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Access(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_access_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_access_trampoline() - -//go:cgo_import_dynamic libc_access access "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_adjtime_trampoline), uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_adjtime_trampoline() - -//go:cgo_import_dynamic libc_adjtime adjtime "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_chdir_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_chdir_trampoline() - -//go:cgo_import_dynamic libc_chdir chdir "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chflags(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_chflags_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_chflags_trampoline() - -//go:cgo_import_dynamic libc_chflags chflags "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chmod(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_chmod_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_chmod_trampoline() - -//go:cgo_import_dynamic libc_chmod chmod "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_chown_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_chown_trampoline() - -//go:cgo_import_dynamic libc_chown chown "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chroot(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_chroot_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_chroot_trampoline() - -//go:cgo_import_dynamic libc_chroot chroot "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ClockGettime(clockid int32, time *Timespec) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_clock_gettime_trampoline), uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_clock_gettime_trampoline() - -//go:cgo_import_dynamic libc_clock_gettime clock_gettime "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Close(fd int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_close_trampoline), uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_close_trampoline() - -//go:cgo_import_dynamic libc_close close "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Clonefile(src string, dst string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(src) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(dst) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_clonefile_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_clonefile_trampoline() - -//go:cgo_import_dynamic libc_clonefile clonefile "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Clonefileat(srcDirfd int, src string, dstDirfd int, dst string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(src) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(dst) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(funcPC(libc_clonefileat_trampoline), uintptr(srcDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(dstDirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_clonefileat_trampoline() - -//go:cgo_import_dynamic libc_clonefileat clonefileat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup(fd int) (nfd int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_dup_trampoline), uintptr(fd), 0, 0) - nfd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_dup_trampoline() - -//go:cgo_import_dynamic libc_dup dup "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup2(from int, to int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_dup2_trampoline), uintptr(from), uintptr(to), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_dup2_trampoline() - -//go:cgo_import_dynamic libc_dup2 dup2 "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Exchangedata(path1 string, path2 string, options int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path1) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(path2) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_exchangedata_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_exchangedata_trampoline() - -//go:cgo_import_dynamic libc_exchangedata exchangedata "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Exit(code int) { - syscall_syscall(funcPC(libc_exit_trampoline), uintptr(code), 0, 0) - return -} - -func libc_exit_trampoline() - -//go:cgo_import_dynamic libc_exit exit "/usr/lib/libSystem.B.dylib" - -// 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) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(funcPC(libc_faccessat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_faccessat_trampoline() - -//go:cgo_import_dynamic libc_faccessat faccessat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchdir(fd int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_fchdir_trampoline), uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_fchdir_trampoline() - -//go:cgo_import_dynamic libc_fchdir fchdir "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchflags(fd int, flags int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_fchflags_trampoline), uintptr(fd), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_fchflags_trampoline() - -//go:cgo_import_dynamic libc_fchflags fchflags "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmod(fd int, mode uint32) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_fchmod_trampoline), uintptr(fd), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_fchmod_trampoline() - -//go:cgo_import_dynamic libc_fchmod fchmod "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(funcPC(libc_fchmodat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_fchmodat_trampoline() - -//go:cgo_import_dynamic libc_fchmodat fchmodat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_fchown_trampoline), uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_fchown_trampoline() - -//go:cgo_import_dynamic libc_fchown fchown "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(funcPC(libc_fchownat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_fchownat_trampoline() - -//go:cgo_import_dynamic libc_fchownat fchownat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fclonefileat(srcDirfd int, dstDirfd int, dst string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(dst) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(funcPC(libc_fclonefileat_trampoline), uintptr(srcDirfd), uintptr(dstDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_fclonefileat_trampoline() - -//go:cgo_import_dynamic libc_fclonefileat fclonefileat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Flock(fd int, how int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_flock_trampoline), uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_flock_trampoline() - -//go:cgo_import_dynamic libc_flock flock "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fpathconf(fd int, name int) (val int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_fpathconf_trampoline), uintptr(fd), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_fpathconf_trampoline() - -//go:cgo_import_dynamic libc_fpathconf fpathconf "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fsync(fd int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_fsync_trampoline), uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_fsync_trampoline() - -//go:cgo_import_dynamic libc_fsync fsync "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_ftruncate_trampoline), uintptr(fd), uintptr(length), uintptr(length>>32)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_ftruncate_trampoline() - -//go:cgo_import_dynamic libc_ftruncate ftruncate "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getcwd(buf []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(funcPC(libc_getcwd_trampoline), uintptr(_p0), uintptr(len(buf)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_getcwd_trampoline() - -//go:cgo_import_dynamic libc_getcwd getcwd "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getdtablesize() (size int) { - r0, _, _ := syscall_syscall(funcPC(libc_getdtablesize_trampoline), 0, 0, 0) - size = int(r0) - return -} - -func libc_getdtablesize_trampoline() - -//go:cgo_import_dynamic libc_getdtablesize getdtablesize "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _, _ := syscall_rawSyscall(funcPC(libc_getegid_trampoline), 0, 0, 0) - egid = int(r0) - return -} - -func libc_getegid_trampoline() - -//go:cgo_import_dynamic libc_getegid getegid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (uid int) { - r0, _, _ := syscall_rawSyscall(funcPC(libc_geteuid_trampoline), 0, 0, 0) - uid = int(r0) - return -} - -func libc_geteuid_trampoline() - -//go:cgo_import_dynamic libc_geteuid geteuid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _, _ := syscall_rawSyscall(funcPC(libc_getgid_trampoline), 0, 0, 0) - gid = int(r0) - return -} - -func libc_getgid_trampoline() - -//go:cgo_import_dynamic libc_getgid getgid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgid(pid int) (pgid int, err error) { - r0, _, e1 := syscall_rawSyscall(funcPC(libc_getpgid_trampoline), uintptr(pid), 0, 0) - pgid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_getpgid_trampoline() - -//go:cgo_import_dynamic libc_getpgid getpgid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgrp() (pgrp int) { - r0, _, _ := syscall_rawSyscall(funcPC(libc_getpgrp_trampoline), 0, 0, 0) - pgrp = int(r0) - return -} - -func libc_getpgrp_trampoline() - -//go:cgo_import_dynamic libc_getpgrp getpgrp "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpid() (pid int) { - r0, _, _ := syscall_rawSyscall(funcPC(libc_getpid_trampoline), 0, 0, 0) - pid = int(r0) - return -} - -func libc_getpid_trampoline() - -//go:cgo_import_dynamic libc_getpid getpid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getppid() (ppid int) { - r0, _, _ := syscall_rawSyscall(funcPC(libc_getppid_trampoline), 0, 0, 0) - ppid = int(r0) - return -} - -func libc_getppid_trampoline() - -//go:cgo_import_dynamic libc_getppid getppid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpriority(which int, who int) (prio int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_getpriority_trampoline), uintptr(which), uintptr(who), 0) - prio = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_getpriority_trampoline() - -//go:cgo_import_dynamic libc_getpriority getpriority "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_getrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_getrlimit_trampoline() - -//go:cgo_import_dynamic libc_getrlimit getrlimit "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrusage(who int, rusage *Rusage) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_getrusage_trampoline), uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_getrusage_trampoline() - -//go:cgo_import_dynamic libc_getrusage getrusage "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getsid(pid int) (sid int, err error) { - r0, _, e1 := syscall_rawSyscall(funcPC(libc_getsid_trampoline), uintptr(pid), 0, 0) - sid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_getsid_trampoline() - -//go:cgo_import_dynamic libc_getsid getsid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tp *Timeval) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_gettimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_gettimeofday_trampoline() - -//go:cgo_import_dynamic libc_gettimeofday gettimeofday "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _, _ := syscall_rawSyscall(funcPC(libc_getuid_trampoline), 0, 0, 0) - uid = int(r0) - return -} - -func libc_getuid_trampoline() - -//go:cgo_import_dynamic libc_getuid getuid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Issetugid() (tainted bool) { - r0, _, _ := syscall_rawSyscall(funcPC(libc_issetugid_trampoline), 0, 0, 0) - tainted = bool(r0 != 0) - return -} - -func libc_issetugid_trampoline() - -//go:cgo_import_dynamic libc_issetugid issetugid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kqueue() (fd int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_kqueue_trampoline), 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_kqueue_trampoline() - -//go:cgo_import_dynamic libc_kqueue kqueue "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_lchown_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_lchown_trampoline() - -//go:cgo_import_dynamic libc_lchown lchown "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Link(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_link_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_link_trampoline() - -//go:cgo_import_dynamic libc_link link "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(funcPC(libc_linkat_trampoline), uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_linkat_trampoline() - -//go:cgo_import_dynamic libc_linkat linkat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, backlog int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_listen_trampoline), uintptr(s), uintptr(backlog), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_listen_trampoline() - -//go:cgo_import_dynamic libc_listen listen "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdir(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_mkdir_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_mkdir_trampoline() - -//go:cgo_import_dynamic libc_mkdir mkdir "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdirat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_mkdirat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_mkdirat_trampoline() - -//go:cgo_import_dynamic libc_mkdirat mkdirat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkfifo(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_mkfifo_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_mkfifo_trampoline() - -//go:cgo_import_dynamic libc_mkfifo mkfifo "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknod(path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_mknod_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_mknod_trampoline() - -//go:cgo_import_dynamic libc_mknod mknod "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Open(path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := syscall_syscall(funcPC(libc_open_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_open_trampoline() - -//go:cgo_import_dynamic libc_open open "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := syscall_syscall6(funcPC(libc_openat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_openat_trampoline() - -//go:cgo_import_dynamic libc_openat openat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pathconf(path string, name int) (val int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := syscall_syscall(funcPC(libc_pathconf_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_pathconf_trampoline() - -//go:cgo_import_dynamic libc_pathconf pathconf "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(funcPC(libc_pread_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_pread_trampoline() - -//go:cgo_import_dynamic libc_pread pread "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(funcPC(libc_pwrite_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_pwrite_trampoline() - -//go:cgo_import_dynamic libc_pwrite pwrite "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func read(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(funcPC(libc_read_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_read_trampoline() - -//go:cgo_import_dynamic libc_read read "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlink(path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(funcPC(libc_readlink_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_readlink_trampoline() - -//go:cgo_import_dynamic libc_readlink readlink "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(funcPC(libc_readlinkat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_readlinkat_trampoline() - -//go:cgo_import_dynamic libc_readlinkat readlinkat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rename(from string, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_rename_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_rename_trampoline() - -//go:cgo_import_dynamic libc_rename rename "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(fromfd int, from string, tofd int, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(funcPC(libc_renameat_trampoline), uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_renameat_trampoline() - -//go:cgo_import_dynamic libc_renameat renameat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Revoke(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_revoke_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_revoke_trampoline() - -//go:cgo_import_dynamic libc_revoke revoke "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rmdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_rmdir_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_rmdir_trampoline() - -//go:cgo_import_dynamic libc_rmdir rmdir "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { - r0, r1, e1 := syscall_syscall6(funcPC(libc_lseek_trampoline), uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0) - newoffset = int64(int64(r1)<<32 | int64(r0)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_lseek_trampoline() - -//go:cgo_import_dynamic libc_lseek lseek "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := syscall_syscall6(funcPC(libc_select_trampoline), uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_select_trampoline() - -//go:cgo_import_dynamic libc_select select "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setegid(egid int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_setegid_trampoline), uintptr(egid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_setegid_trampoline() - -//go:cgo_import_dynamic libc_setegid setegid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seteuid(euid int) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_seteuid_trampoline), uintptr(euid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_seteuid_trampoline() - -//go:cgo_import_dynamic libc_seteuid seteuid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setgid(gid int) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_setgid_trampoline), uintptr(gid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_setgid_trampoline() - -//go:cgo_import_dynamic libc_setgid setgid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setlogin(name string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(name) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_setlogin_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_setlogin_trampoline() - -//go:cgo_import_dynamic libc_setlogin setlogin "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpgid(pid int, pgid int) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_setpgid_trampoline), uintptr(pid), uintptr(pgid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_setpgid_trampoline() - -//go:cgo_import_dynamic libc_setpgid setpgid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpriority(which int, who int, prio int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_setpriority_trampoline), uintptr(which), uintptr(who), uintptr(prio)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_setpriority_trampoline() - -//go:cgo_import_dynamic libc_setpriority setpriority "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setprivexec(flag int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_setprivexec_trampoline), uintptr(flag), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_setprivexec_trampoline() - -//go:cgo_import_dynamic libc_setprivexec setprivexec "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_setregid_trampoline), uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_setregid_trampoline() - -//go:cgo_import_dynamic libc_setregid setregid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_setreuid_trampoline), uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_setreuid_trampoline() - -//go:cgo_import_dynamic libc_setreuid setreuid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_setrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_setrlimit_trampoline() - -//go:cgo_import_dynamic libc_setrlimit setrlimit "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setsid() (pid int, err error) { - r0, _, e1 := syscall_rawSyscall(funcPC(libc_setsid_trampoline), 0, 0, 0) - pid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_setsid_trampoline() - -//go:cgo_import_dynamic libc_setsid setsid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Settimeofday(tp *Timeval) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_settimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_settimeofday_trampoline() - -//go:cgo_import_dynamic libc_settimeofday settimeofday "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setuid(uid int) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_setuid_trampoline), uintptr(uid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_setuid_trampoline() - -//go:cgo_import_dynamic libc_setuid setuid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlink(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_symlink_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_symlink_trampoline() - -//go:cgo_import_dynamic libc_symlink symlink "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_symlinkat_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_symlinkat_trampoline() - -//go:cgo_import_dynamic libc_symlinkat symlinkat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Sync() (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_sync_trampoline), 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_sync_trampoline() - -//go:cgo_import_dynamic libc_sync sync "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_truncate_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_truncate_trampoline() - -//go:cgo_import_dynamic libc_truncate truncate "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Umask(newmask int) (oldmask int) { - r0, _, _ := syscall_syscall(funcPC(libc_umask_trampoline), uintptr(newmask), 0, 0) - oldmask = int(r0) - return -} - -func libc_umask_trampoline() - -//go:cgo_import_dynamic libc_umask umask "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Undelete(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_undelete_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_undelete_trampoline() - -//go:cgo_import_dynamic libc_undelete undelete "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlink(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_unlink_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_unlink_trampoline() - -//go:cgo_import_dynamic libc_unlink unlink "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlinkat(dirfd int, path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_unlinkat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_unlinkat_trampoline() - -//go:cgo_import_dynamic libc_unlinkat unlinkat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unmount(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_unmount_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_unmount_trampoline() - -//go:cgo_import_dynamic libc_unmount unmount "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func write(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(funcPC(libc_write_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_write_trampoline() - -//go:cgo_import_dynamic libc_write write "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { - r0, _, e1 := syscall_syscall9(funcPC(libc_mmap_trampoline), uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0) - ret = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_mmap_trampoline() - -//go:cgo_import_dynamic libc_mmap mmap "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func munmap(addr uintptr, length uintptr) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_munmap_trampoline), uintptr(addr), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_munmap_trampoline() - -//go:cgo_import_dynamic libc_munmap munmap "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func readlen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_read_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func writelen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_write_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_fstat64_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_fstat64_trampoline() - -//go:cgo_import_dynamic libc_fstat64 fstat64 "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(funcPC(libc_fstatat64_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_fstatat64_trampoline() - -//go:cgo_import_dynamic libc_fstatat64 fstatat64 "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatfs(fd int, stat *Statfs_t) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_fstatfs64_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_fstatfs64_trampoline() - -//go:cgo_import_dynamic libc_fstatfs64 fstatfs64 "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_getfsstat64_trampoline), uintptr(buf), uintptr(size), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_getfsstat64_trampoline() - -//go:cgo_import_dynamic libc_getfsstat64 getfsstat64 "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lstat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_lstat64_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_lstat64_trampoline() - -//go:cgo_import_dynamic libc_lstat64 lstat64 "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) { - _, _, e1 := syscall_syscall6(funcPC(libc_ptrace_trampoline), uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_ptrace_trampoline() - -//go:cgo_import_dynamic libc_ptrace ptrace "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Stat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_stat64_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_stat64_trampoline() - -//go:cgo_import_dynamic libc_stat64 stat64 "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statfs(path string, stat *Statfs_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_statfs64_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_statfs64_trampoline() - -//go:cgo_import_dynamic libc_statfs64 statfs64 "/usr/lib/libSystem.B.dylib" diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.s b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.s deleted file mode 100644 index 8cc7928d929..00000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_386.s +++ /dev/null @@ -1,291 +0,0 @@ -// go run mkasm_darwin.go 386 -// Code generated by the command above; DO NOT EDIT. - -//go:build go1.12 -// +build go1.12 - -#include "textflag.h" -TEXT ·libc_getgroups_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getgroups(SB) -TEXT ·libc_setgroups_trampoline(SB),NOSPLIT,$0-0 - JMP libc_setgroups(SB) -TEXT ·libc_wait4_trampoline(SB),NOSPLIT,$0-0 - JMP libc_wait4(SB) -TEXT ·libc_accept_trampoline(SB),NOSPLIT,$0-0 - JMP libc_accept(SB) -TEXT ·libc_bind_trampoline(SB),NOSPLIT,$0-0 - JMP libc_bind(SB) -TEXT ·libc_connect_trampoline(SB),NOSPLIT,$0-0 - JMP libc_connect(SB) -TEXT ·libc_socket_trampoline(SB),NOSPLIT,$0-0 - JMP libc_socket(SB) -TEXT ·libc_getsockopt_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getsockopt(SB) -TEXT ·libc_setsockopt_trampoline(SB),NOSPLIT,$0-0 - JMP libc_setsockopt(SB) -TEXT ·libc_getpeername_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getpeername(SB) -TEXT ·libc_getsockname_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getsockname(SB) -TEXT ·libc_shutdown_trampoline(SB),NOSPLIT,$0-0 - JMP libc_shutdown(SB) -TEXT ·libc_socketpair_trampoline(SB),NOSPLIT,$0-0 - JMP libc_socketpair(SB) -TEXT ·libc_recvfrom_trampoline(SB),NOSPLIT,$0-0 - JMP libc_recvfrom(SB) -TEXT ·libc_sendto_trampoline(SB),NOSPLIT,$0-0 - JMP libc_sendto(SB) -TEXT ·libc_recvmsg_trampoline(SB),NOSPLIT,$0-0 - JMP libc_recvmsg(SB) -TEXT ·libc_sendmsg_trampoline(SB),NOSPLIT,$0-0 - JMP libc_sendmsg(SB) -TEXT ·libc_kevent_trampoline(SB),NOSPLIT,$0-0 - JMP libc_kevent(SB) -TEXT ·libc_utimes_trampoline(SB),NOSPLIT,$0-0 - JMP libc_utimes(SB) -TEXT ·libc_futimes_trampoline(SB),NOSPLIT,$0-0 - JMP libc_futimes(SB) -TEXT ·libc_poll_trampoline(SB),NOSPLIT,$0-0 - JMP libc_poll(SB) -TEXT ·libc_madvise_trampoline(SB),NOSPLIT,$0-0 - JMP libc_madvise(SB) -TEXT ·libc_mlock_trampoline(SB),NOSPLIT,$0-0 - JMP libc_mlock(SB) -TEXT ·libc_mlockall_trampoline(SB),NOSPLIT,$0-0 - JMP libc_mlockall(SB) -TEXT ·libc_mprotect_trampoline(SB),NOSPLIT,$0-0 - JMP libc_mprotect(SB) -TEXT ·libc_msync_trampoline(SB),NOSPLIT,$0-0 - JMP libc_msync(SB) -TEXT ·libc_munlock_trampoline(SB),NOSPLIT,$0-0 - JMP libc_munlock(SB) -TEXT ·libc_munlockall_trampoline(SB),NOSPLIT,$0-0 - JMP libc_munlockall(SB) -TEXT ·libc_pipe_trampoline(SB),NOSPLIT,$0-0 - JMP libc_pipe(SB) -TEXT ·libc_getxattr_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getxattr(SB) -TEXT ·libc_fgetxattr_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fgetxattr(SB) -TEXT ·libc_setxattr_trampoline(SB),NOSPLIT,$0-0 - JMP libc_setxattr(SB) -TEXT ·libc_fsetxattr_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fsetxattr(SB) -TEXT ·libc_removexattr_trampoline(SB),NOSPLIT,$0-0 - JMP libc_removexattr(SB) -TEXT ·libc_fremovexattr_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fremovexattr(SB) -TEXT ·libc_listxattr_trampoline(SB),NOSPLIT,$0-0 - JMP libc_listxattr(SB) -TEXT ·libc_flistxattr_trampoline(SB),NOSPLIT,$0-0 - JMP libc_flistxattr(SB) -TEXT ·libc_setattrlist_trampoline(SB),NOSPLIT,$0-0 - JMP libc_setattrlist(SB) -TEXT ·libc_fcntl_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fcntl(SB) -TEXT ·libc_kill_trampoline(SB),NOSPLIT,$0-0 - JMP libc_kill(SB) -TEXT ·libc_ioctl_trampoline(SB),NOSPLIT,$0-0 - JMP libc_ioctl(SB) -TEXT ·libc_sysctl_trampoline(SB),NOSPLIT,$0-0 - JMP libc_sysctl(SB) -TEXT ·libc_sendfile_trampoline(SB),NOSPLIT,$0-0 - JMP libc_sendfile(SB) -TEXT ·libc_access_trampoline(SB),NOSPLIT,$0-0 - JMP libc_access(SB) -TEXT ·libc_adjtime_trampoline(SB),NOSPLIT,$0-0 - JMP libc_adjtime(SB) -TEXT ·libc_chdir_trampoline(SB),NOSPLIT,$0-0 - JMP libc_chdir(SB) -TEXT ·libc_chflags_trampoline(SB),NOSPLIT,$0-0 - JMP libc_chflags(SB) -TEXT ·libc_chmod_trampoline(SB),NOSPLIT,$0-0 - JMP libc_chmod(SB) -TEXT ·libc_chown_trampoline(SB),NOSPLIT,$0-0 - JMP libc_chown(SB) -TEXT ·libc_chroot_trampoline(SB),NOSPLIT,$0-0 - JMP libc_chroot(SB) -TEXT ·libc_clock_gettime_trampoline(SB),NOSPLIT,$0-0 - JMP libc_clock_gettime(SB) -TEXT ·libc_close_trampoline(SB),NOSPLIT,$0-0 - JMP libc_close(SB) -TEXT ·libc_clonefile_trampoline(SB),NOSPLIT,$0-0 - JMP libc_clonefile(SB) -TEXT ·libc_clonefileat_trampoline(SB),NOSPLIT,$0-0 - JMP libc_clonefileat(SB) -TEXT ·libc_dup_trampoline(SB),NOSPLIT,$0-0 - JMP libc_dup(SB) -TEXT ·libc_dup2_trampoline(SB),NOSPLIT,$0-0 - JMP libc_dup2(SB) -TEXT ·libc_exchangedata_trampoline(SB),NOSPLIT,$0-0 - JMP libc_exchangedata(SB) -TEXT ·libc_exit_trampoline(SB),NOSPLIT,$0-0 - JMP libc_exit(SB) -TEXT ·libc_faccessat_trampoline(SB),NOSPLIT,$0-0 - JMP libc_faccessat(SB) -TEXT ·libc_fchdir_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fchdir(SB) -TEXT ·libc_fchflags_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fchflags(SB) -TEXT ·libc_fchmod_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fchmod(SB) -TEXT ·libc_fchmodat_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fchmodat(SB) -TEXT ·libc_fchown_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fchown(SB) -TEXT ·libc_fchownat_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fchownat(SB) -TEXT ·libc_fclonefileat_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fclonefileat(SB) -TEXT ·libc_flock_trampoline(SB),NOSPLIT,$0-0 - JMP libc_flock(SB) -TEXT ·libc_fpathconf_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fpathconf(SB) -TEXT ·libc_fsync_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fsync(SB) -TEXT ·libc_ftruncate_trampoline(SB),NOSPLIT,$0-0 - JMP libc_ftruncate(SB) -TEXT ·libc_getcwd_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getcwd(SB) -TEXT ·libc_getdtablesize_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getdtablesize(SB) -TEXT ·libc_getegid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getegid(SB) -TEXT ·libc_geteuid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_geteuid(SB) -TEXT ·libc_getgid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getgid(SB) -TEXT ·libc_getpgid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getpgid(SB) -TEXT ·libc_getpgrp_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getpgrp(SB) -TEXT ·libc_getpid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getpid(SB) -TEXT ·libc_getppid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getppid(SB) -TEXT ·libc_getpriority_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getpriority(SB) -TEXT ·libc_getrlimit_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getrlimit(SB) -TEXT ·libc_getrusage_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getrusage(SB) -TEXT ·libc_getsid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getsid(SB) -TEXT ·libc_gettimeofday_trampoline(SB),NOSPLIT,$0-0 - JMP libc_gettimeofday(SB) -TEXT ·libc_getuid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getuid(SB) -TEXT ·libc_issetugid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_issetugid(SB) -TEXT ·libc_kqueue_trampoline(SB),NOSPLIT,$0-0 - JMP libc_kqueue(SB) -TEXT ·libc_lchown_trampoline(SB),NOSPLIT,$0-0 - JMP libc_lchown(SB) -TEXT ·libc_link_trampoline(SB),NOSPLIT,$0-0 - JMP libc_link(SB) -TEXT ·libc_linkat_trampoline(SB),NOSPLIT,$0-0 - JMP libc_linkat(SB) -TEXT ·libc_listen_trampoline(SB),NOSPLIT,$0-0 - JMP libc_listen(SB) -TEXT ·libc_mkdir_trampoline(SB),NOSPLIT,$0-0 - JMP libc_mkdir(SB) -TEXT ·libc_mkdirat_trampoline(SB),NOSPLIT,$0-0 - JMP libc_mkdirat(SB) -TEXT ·libc_mkfifo_trampoline(SB),NOSPLIT,$0-0 - JMP libc_mkfifo(SB) -TEXT ·libc_mknod_trampoline(SB),NOSPLIT,$0-0 - JMP libc_mknod(SB) -TEXT ·libc_open_trampoline(SB),NOSPLIT,$0-0 - JMP libc_open(SB) -TEXT ·libc_openat_trampoline(SB),NOSPLIT,$0-0 - JMP libc_openat(SB) -TEXT ·libc_pathconf_trampoline(SB),NOSPLIT,$0-0 - JMP libc_pathconf(SB) -TEXT ·libc_pread_trampoline(SB),NOSPLIT,$0-0 - JMP libc_pread(SB) -TEXT ·libc_pwrite_trampoline(SB),NOSPLIT,$0-0 - JMP libc_pwrite(SB) -TEXT ·libc_read_trampoline(SB),NOSPLIT,$0-0 - JMP libc_read(SB) -TEXT ·libc_readlink_trampoline(SB),NOSPLIT,$0-0 - JMP libc_readlink(SB) -TEXT ·libc_readlinkat_trampoline(SB),NOSPLIT,$0-0 - JMP libc_readlinkat(SB) -TEXT ·libc_rename_trampoline(SB),NOSPLIT,$0-0 - JMP libc_rename(SB) -TEXT ·libc_renameat_trampoline(SB),NOSPLIT,$0-0 - JMP libc_renameat(SB) -TEXT ·libc_revoke_trampoline(SB),NOSPLIT,$0-0 - JMP libc_revoke(SB) -TEXT ·libc_rmdir_trampoline(SB),NOSPLIT,$0-0 - JMP libc_rmdir(SB) -TEXT ·libc_lseek_trampoline(SB),NOSPLIT,$0-0 - JMP libc_lseek(SB) -TEXT ·libc_select_trampoline(SB),NOSPLIT,$0-0 - JMP libc_select(SB) -TEXT ·libc_setegid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_setegid(SB) -TEXT ·libc_seteuid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_seteuid(SB) -TEXT ·libc_setgid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_setgid(SB) -TEXT ·libc_setlogin_trampoline(SB),NOSPLIT,$0-0 - JMP libc_setlogin(SB) -TEXT ·libc_setpgid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_setpgid(SB) -TEXT ·libc_setpriority_trampoline(SB),NOSPLIT,$0-0 - JMP libc_setpriority(SB) -TEXT ·libc_setprivexec_trampoline(SB),NOSPLIT,$0-0 - JMP libc_setprivexec(SB) -TEXT ·libc_setregid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_setregid(SB) -TEXT ·libc_setreuid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_setreuid(SB) -TEXT ·libc_setrlimit_trampoline(SB),NOSPLIT,$0-0 - JMP libc_setrlimit(SB) -TEXT ·libc_setsid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_setsid(SB) -TEXT ·libc_settimeofday_trampoline(SB),NOSPLIT,$0-0 - JMP libc_settimeofday(SB) -TEXT ·libc_setuid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_setuid(SB) -TEXT ·libc_symlink_trampoline(SB),NOSPLIT,$0-0 - JMP libc_symlink(SB) -TEXT ·libc_symlinkat_trampoline(SB),NOSPLIT,$0-0 - JMP libc_symlinkat(SB) -TEXT ·libc_sync_trampoline(SB),NOSPLIT,$0-0 - JMP libc_sync(SB) -TEXT ·libc_truncate_trampoline(SB),NOSPLIT,$0-0 - JMP libc_truncate(SB) -TEXT ·libc_umask_trampoline(SB),NOSPLIT,$0-0 - JMP libc_umask(SB) -TEXT ·libc_undelete_trampoline(SB),NOSPLIT,$0-0 - JMP libc_undelete(SB) -TEXT ·libc_unlink_trampoline(SB),NOSPLIT,$0-0 - JMP libc_unlink(SB) -TEXT ·libc_unlinkat_trampoline(SB),NOSPLIT,$0-0 - JMP libc_unlinkat(SB) -TEXT ·libc_unmount_trampoline(SB),NOSPLIT,$0-0 - JMP libc_unmount(SB) -TEXT ·libc_write_trampoline(SB),NOSPLIT,$0-0 - JMP libc_write(SB) -TEXT ·libc_mmap_trampoline(SB),NOSPLIT,$0-0 - JMP libc_mmap(SB) -TEXT ·libc_munmap_trampoline(SB),NOSPLIT,$0-0 - JMP libc_munmap(SB) -TEXT ·libc_fstat64_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fstat64(SB) -TEXT ·libc_fstatat64_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fstatat64(SB) -TEXT ·libc_fstatfs64_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fstatfs64(SB) -TEXT ·libc_getfsstat64_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getfsstat64(SB) -TEXT ·libc_lstat64_trampoline(SB),NOSPLIT,$0-0 - JMP libc_lstat64(SB) -TEXT ·libc_ptrace_trampoline(SB),NOSPLIT,$0-0 - JMP libc_ptrace(SB) -TEXT ·libc_stat64_trampoline(SB),NOSPLIT,$0-0 - JMP libc_stat64(SB) -TEXT ·libc_statfs64_trampoline(SB),NOSPLIT,$0-0 - JMP libc_statfs64(SB) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.go index e36299ead09..a06eb093242 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.go @@ -16,25 +16,25 @@ var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func closedir(dir uintptr) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_closedir_trampoline), uintptr(dir), 0, 0) + _, _, e1 := syscall_syscall(libc_closedir_trampoline_addr, uintptr(dir), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_closedir_trampoline() +var libc_closedir_trampoline_addr uintptr //go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) { - r0, _, _ := syscall_syscall(funcPC(libc_readdir_r_trampoline), uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall_syscall(libc_readdir_r_trampoline_addr, uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result))) res = Errno(r0) return } -func libc_readdir_r_trampoline() +var libc_readdir_r_trampoline_addr uintptr //go:cgo_import_dynamic libc_readdir_r readdir_r "/usr/lib/libSystem.B.dylib" diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.s b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.s index ab59833fcd2..d6c3e25c018 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.s +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.1_13.s @@ -5,9 +5,21 @@ // +build go1.13 #include "textflag.h" -TEXT ·libc_fdopendir_trampoline(SB),NOSPLIT,$0-0 + +TEXT libc_fdopendir_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fdopendir(SB) -TEXT ·libc_closedir_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fdopendir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fdopendir_trampoline_addr(SB)/8, $libc_fdopendir_trampoline<>(SB) + +TEXT libc_closedir_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_closedir(SB) -TEXT ·libc_readdir_r_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_closedir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_closedir_trampoline_addr(SB)/8, $libc_closedir_trampoline<>(SB) + +TEXT libc_readdir_r_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_readdir_r(SB) + +GLOBL ·libc_readdir_r_trampoline_addr(SB), RODATA, $8 +DATA ·libc_readdir_r_trampoline_addr(SB)/8, $libc_readdir_r_trampoline<>(SB) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go index f4111628823..d4efe8d457a 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go @@ -16,7 +16,7 @@ var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func getgroups(ngid int, gid *_Gid_t) (n int, err error) { - r0, _, e1 := syscall_rawSyscall(funcPC(libc_getgroups_trampoline), uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + r0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -24,28 +24,28 @@ func getgroups(ngid int, gid *_Gid_t) (n int, err error) { return } -func libc_getgroups_trampoline() +var libc_getgroups_trampoline_addr uintptr //go:cgo_import_dynamic libc_getgroups getgroups "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func setgroups(ngid int, gid *_Gid_t) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_setgroups_trampoline), uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + _, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_setgroups_trampoline() +var libc_setgroups_trampoline_addr uintptr //go:cgo_import_dynamic libc_setgroups setgroups "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { - r0, _, e1 := syscall_syscall6(funcPC(libc_wait4_trampoline), uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + r0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) wpid = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -53,14 +53,14 @@ func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err return } -func libc_wait4_trampoline() +var libc_wait4_trampoline_addr uintptr //go:cgo_import_dynamic libc_wait4 wait4 "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_accept_trampoline), uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + r0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -68,42 +68,42 @@ func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { return } -func libc_accept_trampoline() +var libc_accept_trampoline_addr uintptr //go:cgo_import_dynamic libc_accept accept "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_bind_trampoline), uintptr(s), uintptr(addr), uintptr(addrlen)) + _, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_bind_trampoline() +var libc_bind_trampoline_addr uintptr //go:cgo_import_dynamic libc_bind bind "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_connect_trampoline), uintptr(s), uintptr(addr), uintptr(addrlen)) + _, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_connect_trampoline() +var libc_connect_trampoline_addr uintptr //go:cgo_import_dynamic libc_connect connect "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := syscall_rawSyscall(funcPC(libc_socket_trampoline), uintptr(domain), uintptr(typ), uintptr(proto)) + r0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto)) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -111,91 +111,91 @@ func socket(domain int, typ int, proto int) (fd int, err error) { return } -func libc_socket_trampoline() +var libc_socket_trampoline_addr uintptr //go:cgo_import_dynamic libc_socket socket "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := syscall_syscall6(funcPC(libc_getsockopt_trampoline), uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + _, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_getsockopt_trampoline() +var libc_getsockopt_trampoline_addr uintptr //go:cgo_import_dynamic libc_getsockopt getsockopt "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := syscall_syscall6(funcPC(libc_setsockopt_trampoline), uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + _, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_setsockopt_trampoline() +var libc_setsockopt_trampoline_addr uintptr //go:cgo_import_dynamic libc_setsockopt setsockopt "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_getpeername_trampoline), uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + _, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) if e1 != 0 { err = errnoErr(e1) } return } -func libc_getpeername_trampoline() +var libc_getpeername_trampoline_addr uintptr //go:cgo_import_dynamic libc_getpeername getpeername "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_getsockname_trampoline), uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + _, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) if e1 != 0 { err = errnoErr(e1) } return } -func libc_getsockname_trampoline() +var libc_getsockname_trampoline_addr uintptr //go:cgo_import_dynamic libc_getsockname getsockname "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Shutdown(s int, how int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_shutdown_trampoline), uintptr(s), uintptr(how), 0) + _, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_shutdown_trampoline() +var libc_shutdown_trampoline_addr uintptr //go:cgo_import_dynamic libc_shutdown shutdown "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := syscall_rawSyscall6(funcPC(libc_socketpair_trampoline), uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + _, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_socketpair_trampoline() +var libc_socketpair_trampoline_addr uintptr //go:cgo_import_dynamic libc_socketpair socketpair "/usr/lib/libSystem.B.dylib" @@ -208,7 +208,7 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := syscall_syscall6(funcPC(libc_recvfrom_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + r0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -216,7 +216,7 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl return } -func libc_recvfrom_trampoline() +var libc_recvfrom_trampoline_addr uintptr //go:cgo_import_dynamic libc_recvfrom recvfrom "/usr/lib/libSystem.B.dylib" @@ -229,21 +229,21 @@ func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) ( } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := syscall_syscall6(funcPC(libc_sendto_trampoline), uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + _, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_sendto_trampoline() +var libc_sendto_trampoline_addr uintptr //go:cgo_import_dynamic libc_sendto sendto "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_recvmsg_trampoline), uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + r0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -251,14 +251,14 @@ func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { return } -func libc_recvmsg_trampoline() +var libc_recvmsg_trampoline_addr uintptr //go:cgo_import_dynamic libc_recvmsg recvmsg "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_sendmsg_trampoline), uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + r0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -266,14 +266,14 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { return } -func libc_sendmsg_trampoline() +var libc_sendmsg_trampoline_addr uintptr //go:cgo_import_dynamic libc_sendmsg sendmsg "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { - r0, _, e1 := syscall_syscall6(funcPC(libc_kevent_trampoline), uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + r0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -281,7 +281,7 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne return } -func libc_kevent_trampoline() +var libc_kevent_trampoline_addr uintptr //go:cgo_import_dynamic libc_kevent kevent "/usr/lib/libSystem.B.dylib" @@ -293,35 +293,35 @@ func utimes(path string, timeval *[2]Timeval) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_utimes_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + _, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_utimes_trampoline() +var libc_utimes_trampoline_addr uintptr //go:cgo_import_dynamic libc_utimes utimes "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func futimes(fd int, timeval *[2]Timeval) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_futimes_trampoline), uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + _, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_futimes_trampoline() +var libc_futimes_trampoline_addr uintptr //go:cgo_import_dynamic libc_futimes futimes "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_poll_trampoline), uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + r0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -329,7 +329,7 @@ func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { return } -func libc_poll_trampoline() +var libc_poll_trampoline_addr uintptr //go:cgo_import_dynamic libc_poll poll "/usr/lib/libSystem.B.dylib" @@ -342,14 +342,14 @@ func Madvise(b []byte, behav int) (err error) { } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := syscall_syscall(funcPC(libc_madvise_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(behav)) + _, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_madvise_trampoline() +var libc_madvise_trampoline_addr uintptr //go:cgo_import_dynamic libc_madvise madvise "/usr/lib/libSystem.B.dylib" @@ -362,28 +362,28 @@ func Mlock(b []byte) (err error) { } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := syscall_syscall(funcPC(libc_mlock_trampoline), uintptr(_p0), uintptr(len(b)), 0) + _, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_mlock_trampoline() +var libc_mlock_trampoline_addr uintptr //go:cgo_import_dynamic libc_mlock mlock "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mlockall(flags int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_mlockall_trampoline), uintptr(flags), 0, 0) + _, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_mlockall_trampoline() +var libc_mlockall_trampoline_addr uintptr //go:cgo_import_dynamic libc_mlockall mlockall "/usr/lib/libSystem.B.dylib" @@ -396,14 +396,14 @@ func Mprotect(b []byte, prot int) (err error) { } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := syscall_syscall(funcPC(libc_mprotect_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(prot)) + _, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_mprotect_trampoline() +var libc_mprotect_trampoline_addr uintptr //go:cgo_import_dynamic libc_mprotect mprotect "/usr/lib/libSystem.B.dylib" @@ -416,14 +416,14 @@ func Msync(b []byte, flags int) (err error) { } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := syscall_syscall(funcPC(libc_msync_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(flags)) + _, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_msync_trampoline() +var libc_msync_trampoline_addr uintptr //go:cgo_import_dynamic libc_msync msync "/usr/lib/libSystem.B.dylib" @@ -436,42 +436,42 @@ func Munlock(b []byte) (err error) { } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := syscall_syscall(funcPC(libc_munlock_trampoline), uintptr(_p0), uintptr(len(b)), 0) + _, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_munlock_trampoline() +var libc_munlock_trampoline_addr uintptr //go:cgo_import_dynamic libc_munlock munlock "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Munlockall() (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_munlockall_trampoline), 0, 0, 0) + _, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_munlockall_trampoline() +var libc_munlockall_trampoline_addr uintptr //go:cgo_import_dynamic libc_munlockall munlockall "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func pipe(p *[2]int32) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_pipe_trampoline), uintptr(unsafe.Pointer(p)), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_pipe_trampoline_addr, uintptr(unsafe.Pointer(p)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_pipe_trampoline() +var libc_pipe_trampoline_addr uintptr //go:cgo_import_dynamic libc_pipe pipe "/usr/lib/libSystem.B.dylib" @@ -488,7 +488,7 @@ func getxattr(path string, attr string, dest *byte, size int, position uint32, o if err != nil { return } - r0, _, e1 := syscall_syscall6(funcPC(libc_getxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options)) + r0, _, e1 := syscall_syscall6(libc_getxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options)) sz = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -496,7 +496,7 @@ func getxattr(path string, attr string, dest *byte, size int, position uint32, o return } -func libc_getxattr_trampoline() +var libc_getxattr_trampoline_addr uintptr //go:cgo_import_dynamic libc_getxattr getxattr "/usr/lib/libSystem.B.dylib" @@ -508,7 +508,7 @@ func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, optio if err != nil { return } - r0, _, e1 := syscall_syscall6(funcPC(libc_fgetxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options)) + r0, _, e1 := syscall_syscall6(libc_fgetxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options)) sz = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -516,7 +516,7 @@ func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, optio return } -func libc_fgetxattr_trampoline() +var libc_fgetxattr_trampoline_addr uintptr //go:cgo_import_dynamic libc_fgetxattr fgetxattr "/usr/lib/libSystem.B.dylib" @@ -533,14 +533,14 @@ func setxattr(path string, attr string, data *byte, size int, position uint32, o if err != nil { return } - _, _, e1 := syscall_syscall6(funcPC(libc_setxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options)) + _, _, e1 := syscall_syscall6(libc_setxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_setxattr_trampoline() +var libc_setxattr_trampoline_addr uintptr //go:cgo_import_dynamic libc_setxattr setxattr "/usr/lib/libSystem.B.dylib" @@ -552,14 +552,14 @@ func fsetxattr(fd int, attr string, data *byte, size int, position uint32, optio if err != nil { return } - _, _, e1 := syscall_syscall6(funcPC(libc_fsetxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options)) + _, _, e1 := syscall_syscall6(libc_fsetxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_fsetxattr_trampoline() +var libc_fsetxattr_trampoline_addr uintptr //go:cgo_import_dynamic libc_fsetxattr fsetxattr "/usr/lib/libSystem.B.dylib" @@ -576,14 +576,14 @@ func removexattr(path string, attr string, options int) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_removexattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) + _, _, e1 := syscall_syscall(libc_removexattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_removexattr_trampoline() +var libc_removexattr_trampoline_addr uintptr //go:cgo_import_dynamic libc_removexattr removexattr "/usr/lib/libSystem.B.dylib" @@ -595,14 +595,14 @@ func fremovexattr(fd int, attr string, options int) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_fremovexattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options)) + _, _, e1 := syscall_syscall(libc_fremovexattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_fremovexattr_trampoline() +var libc_fremovexattr_trampoline_addr uintptr //go:cgo_import_dynamic libc_fremovexattr fremovexattr "/usr/lib/libSystem.B.dylib" @@ -614,7 +614,7 @@ func listxattr(path string, dest *byte, size int, options int) (sz int, err erro if err != nil { return } - r0, _, e1 := syscall_syscall6(funcPC(libc_listxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0) + r0, _, e1 := syscall_syscall6(libc_listxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0) sz = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -622,14 +622,14 @@ func listxattr(path string, dest *byte, size int, options int) (sz int, err erro return } -func libc_listxattr_trampoline() +var libc_listxattr_trampoline_addr uintptr //go:cgo_import_dynamic libc_listxattr listxattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) { - r0, _, e1 := syscall_syscall6(funcPC(libc_flistxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0) + r0, _, e1 := syscall_syscall6(libc_flistxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0) sz = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -637,28 +637,28 @@ func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) { return } -func libc_flistxattr_trampoline() +var libc_flistxattr_trampoline_addr uintptr //go:cgo_import_dynamic libc_flistxattr flistxattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) { - _, _, e1 := syscall_syscall6(funcPC(libc_setattrlist_trampoline), uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0) + _, _, e1 := syscall_syscall6(libc_setattrlist_trampoline_addr, uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_setattrlist_trampoline() +var libc_setattrlist_trampoline_addr uintptr //go:cgo_import_dynamic libc_setattrlist setattrlist "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func fcntl(fd int, cmd int, arg int) (val int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_fcntl_trampoline), uintptr(fd), uintptr(cmd), uintptr(arg)) + r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg)) val = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -666,35 +666,35 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) { return } -func libc_fcntl_trampoline() +var libc_fcntl_trampoline_addr uintptr //go:cgo_import_dynamic libc_fcntl fcntl "/usr/lib/libSystem.B.dylib" // 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(funcPC(libc_kill_trampoline), uintptr(pid), uintptr(signum), uintptr(posix)) + _, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), uintptr(posix)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_kill_trampoline() +var libc_kill_trampoline_addr uintptr //go:cgo_import_dynamic libc_kill kill "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func ioctl(fd int, req uint, arg uintptr) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_ioctl_trampoline), uintptr(fd), uintptr(req), uintptr(arg)) + _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_ioctl_trampoline() +var libc_ioctl_trampoline_addr uintptr //go:cgo_import_dynamic libc_ioctl ioctl "/usr/lib/libSystem.B.dylib" @@ -707,28 +707,28 @@ func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := syscall_syscall6(funcPC(libc_sysctl_trampoline), uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + _, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_sysctl_trampoline() +var libc_sysctl_trampoline_addr uintptr //go:cgo_import_dynamic libc_sysctl sysctl "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) { - _, _, e1 := syscall_syscall6(funcPC(libc_sendfile_trampoline), uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags)) + _, _, e1 := syscall_syscall6(libc_sendfile_trampoline_addr, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_sendfile_trampoline() +var libc_sendfile_trampoline_addr uintptr //go:cgo_import_dynamic libc_sendfile sendfile "/usr/lib/libSystem.B.dylib" @@ -740,28 +740,28 @@ func Access(path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_access_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + _, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_access_trampoline() +var libc_access_trampoline_addr uintptr //go:cgo_import_dynamic libc_access access "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_adjtime_trampoline), uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + _, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_adjtime_trampoline() +var libc_adjtime_trampoline_addr uintptr //go:cgo_import_dynamic libc_adjtime adjtime "/usr/lib/libSystem.B.dylib" @@ -773,14 +773,14 @@ func Chdir(path string) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_chdir_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_chdir_trampoline() +var libc_chdir_trampoline_addr uintptr //go:cgo_import_dynamic libc_chdir chdir "/usr/lib/libSystem.B.dylib" @@ -792,14 +792,14 @@ func Chflags(path string, flags int) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_chflags_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + _, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_chflags_trampoline() +var libc_chflags_trampoline_addr uintptr //go:cgo_import_dynamic libc_chflags chflags "/usr/lib/libSystem.B.dylib" @@ -811,14 +811,14 @@ func Chmod(path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_chmod_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + _, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_chmod_trampoline() +var libc_chmod_trampoline_addr uintptr //go:cgo_import_dynamic libc_chmod chmod "/usr/lib/libSystem.B.dylib" @@ -830,14 +830,14 @@ func Chown(path string, uid int, gid int) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_chown_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + _, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_chown_trampoline() +var libc_chown_trampoline_addr uintptr //go:cgo_import_dynamic libc_chown chown "/usr/lib/libSystem.B.dylib" @@ -849,42 +849,42 @@ func Chroot(path string) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_chroot_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_chroot_trampoline() +var libc_chroot_trampoline_addr uintptr //go:cgo_import_dynamic libc_chroot chroot "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func ClockGettime(clockid int32, time *Timespec) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_clock_gettime_trampoline), uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + _, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_clock_gettime_trampoline() +var libc_clock_gettime_trampoline_addr uintptr //go:cgo_import_dynamic libc_clock_gettime clock_gettime "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Close(fd int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_close_trampoline), uintptr(fd), 0, 0) + _, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_close_trampoline() +var libc_close_trampoline_addr uintptr //go:cgo_import_dynamic libc_close close "/usr/lib/libSystem.B.dylib" @@ -901,14 +901,14 @@ func Clonefile(src string, dst string, flags int) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_clonefile_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags)) + _, _, e1 := syscall_syscall(libc_clonefile_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_clonefile_trampoline() +var libc_clonefile_trampoline_addr uintptr //go:cgo_import_dynamic libc_clonefile clonefile "/usr/lib/libSystem.B.dylib" @@ -925,21 +925,21 @@ func Clonefileat(srcDirfd int, src string, dstDirfd int, dst string, flags int) if err != nil { return } - _, _, e1 := syscall_syscall6(funcPC(libc_clonefileat_trampoline), uintptr(srcDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(dstDirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + _, _, e1 := syscall_syscall6(libc_clonefileat_trampoline_addr, uintptr(srcDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(dstDirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_clonefileat_trampoline() +var libc_clonefileat_trampoline_addr uintptr //go:cgo_import_dynamic libc_clonefileat clonefileat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Dup(fd int) (nfd int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_dup_trampoline), uintptr(fd), 0, 0) + r0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0) nfd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -947,21 +947,21 @@ func Dup(fd int) (nfd int, err error) { return } -func libc_dup_trampoline() +var libc_dup_trampoline_addr uintptr //go:cgo_import_dynamic libc_dup dup "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Dup2(from int, to int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_dup2_trampoline), uintptr(from), uintptr(to), 0) + _, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_dup2_trampoline() +var libc_dup2_trampoline_addr uintptr //go:cgo_import_dynamic libc_dup2 dup2 "/usr/lib/libSystem.B.dylib" @@ -978,25 +978,25 @@ func Exchangedata(path1 string, path2 string, options int) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_exchangedata_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) + _, _, e1 := syscall_syscall(libc_exchangedata_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_exchangedata_trampoline() +var libc_exchangedata_trampoline_addr uintptr //go:cgo_import_dynamic libc_exchangedata exchangedata "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Exit(code int) { - syscall_syscall(funcPC(libc_exit_trampoline), uintptr(code), 0, 0) + syscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0) return } -func libc_exit_trampoline() +var libc_exit_trampoline_addr uintptr //go:cgo_import_dynamic libc_exit exit "/usr/lib/libSystem.B.dylib" @@ -1008,56 +1008,56 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall6(funcPC(libc_faccessat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + _, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_faccessat_trampoline() +var libc_faccessat_trampoline_addr uintptr //go:cgo_import_dynamic libc_faccessat faccessat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fchdir(fd int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_fchdir_trampoline), uintptr(fd), 0, 0) + _, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_fchdir_trampoline() +var libc_fchdir_trampoline_addr uintptr //go:cgo_import_dynamic libc_fchdir fchdir "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fchflags(fd int, flags int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_fchflags_trampoline), uintptr(fd), uintptr(flags), 0) + _, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_fchflags_trampoline() +var libc_fchflags_trampoline_addr uintptr //go:cgo_import_dynamic libc_fchflags fchflags "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fchmod(fd int, mode uint32) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_fchmod_trampoline), uintptr(fd), uintptr(mode), 0) + _, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_fchmod_trampoline() +var libc_fchmod_trampoline_addr uintptr //go:cgo_import_dynamic libc_fchmod fchmod "/usr/lib/libSystem.B.dylib" @@ -1069,28 +1069,28 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall6(funcPC(libc_fchmodat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + _, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_fchmodat_trampoline() +var libc_fchmodat_trampoline_addr uintptr //go:cgo_import_dynamic libc_fchmodat fchmodat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_fchown_trampoline), uintptr(fd), uintptr(uid), uintptr(gid)) + _, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_fchown_trampoline() +var libc_fchown_trampoline_addr uintptr //go:cgo_import_dynamic libc_fchown fchown "/usr/lib/libSystem.B.dylib" @@ -1102,14 +1102,14 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall6(funcPC(libc_fchownat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + _, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_fchownat_trampoline() +var libc_fchownat_trampoline_addr uintptr //go:cgo_import_dynamic libc_fchownat fchownat "/usr/lib/libSystem.B.dylib" @@ -1121,35 +1121,35 @@ func Fclonefileat(srcDirfd int, dstDirfd int, dst string, flags int) (err error) if err != nil { return } - _, _, e1 := syscall_syscall6(funcPC(libc_fclonefileat_trampoline), uintptr(srcDirfd), uintptr(dstDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0) + _, _, e1 := syscall_syscall6(libc_fclonefileat_trampoline_addr, uintptr(srcDirfd), uintptr(dstDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_fclonefileat_trampoline() +var libc_fclonefileat_trampoline_addr uintptr //go:cgo_import_dynamic libc_fclonefileat fclonefileat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Flock(fd int, how int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_flock_trampoline), uintptr(fd), uintptr(how), 0) + _, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_flock_trampoline() +var libc_flock_trampoline_addr uintptr //go:cgo_import_dynamic libc_flock flock "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fpathconf(fd int, name int) (val int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_fpathconf_trampoline), uintptr(fd), uintptr(name), 0) + r0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0) val = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1157,35 +1157,35 @@ func Fpathconf(fd int, name int) (val int, err error) { return } -func libc_fpathconf_trampoline() +var libc_fpathconf_trampoline_addr uintptr //go:cgo_import_dynamic libc_fpathconf fpathconf "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fsync(fd int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_fsync_trampoline), uintptr(fd), 0, 0) + _, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_fsync_trampoline() +var libc_fsync_trampoline_addr uintptr //go:cgo_import_dynamic libc_fsync fsync "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_ftruncate_trampoline), uintptr(fd), uintptr(length), 0) + _, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_ftruncate_trampoline() +var libc_ftruncate_trampoline_addr uintptr //go:cgo_import_dynamic libc_ftruncate ftruncate "/usr/lib/libSystem.B.dylib" @@ -1198,7 +1198,7 @@ func Getcwd(buf []byte) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := syscall_syscall(funcPC(libc_getcwd_trampoline), uintptr(_p0), uintptr(len(buf)), 0) + r0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1206,62 +1206,62 @@ func Getcwd(buf []byte) (n int, err error) { return } -func libc_getcwd_trampoline() +var libc_getcwd_trampoline_addr uintptr //go:cgo_import_dynamic libc_getcwd getcwd "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getdtablesize() (size int) { - r0, _, _ := syscall_syscall(funcPC(libc_getdtablesize_trampoline), 0, 0, 0) + r0, _, _ := syscall_syscall(libc_getdtablesize_trampoline_addr, 0, 0, 0) size = int(r0) return } -func libc_getdtablesize_trampoline() +var libc_getdtablesize_trampoline_addr uintptr //go:cgo_import_dynamic libc_getdtablesize getdtablesize "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getegid() (egid int) { - r0, _, _ := syscall_rawSyscall(funcPC(libc_getegid_trampoline), 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0) egid = int(r0) return } -func libc_getegid_trampoline() +var libc_getegid_trampoline_addr uintptr //go:cgo_import_dynamic libc_getegid getegid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Geteuid() (uid int) { - r0, _, _ := syscall_rawSyscall(funcPC(libc_geteuid_trampoline), 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0) uid = int(r0) return } -func libc_geteuid_trampoline() +var libc_geteuid_trampoline_addr uintptr //go:cgo_import_dynamic libc_geteuid geteuid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getgid() (gid int) { - r0, _, _ := syscall_rawSyscall(funcPC(libc_getgid_trampoline), 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0) gid = int(r0) return } -func libc_getgid_trampoline() +var libc_getgid_trampoline_addr uintptr //go:cgo_import_dynamic libc_getgid getgid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpgid(pid int) (pgid int, err error) { - r0, _, e1 := syscall_rawSyscall(funcPC(libc_getpgid_trampoline), uintptr(pid), 0, 0) + r0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0) pgid = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1269,50 +1269,50 @@ func Getpgid(pid int) (pgid int, err error) { return } -func libc_getpgid_trampoline() +var libc_getpgid_trampoline_addr uintptr //go:cgo_import_dynamic libc_getpgid getpgid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpgrp() (pgrp int) { - r0, _, _ := syscall_rawSyscall(funcPC(libc_getpgrp_trampoline), 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0) pgrp = int(r0) return } -func libc_getpgrp_trampoline() +var libc_getpgrp_trampoline_addr uintptr //go:cgo_import_dynamic libc_getpgrp getpgrp "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpid() (pid int) { - r0, _, _ := syscall_rawSyscall(funcPC(libc_getpid_trampoline), 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0) pid = int(r0) return } -func libc_getpid_trampoline() +var libc_getpid_trampoline_addr uintptr //go:cgo_import_dynamic libc_getpid getpid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getppid() (ppid int) { - r0, _, _ := syscall_rawSyscall(funcPC(libc_getppid_trampoline), 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0) ppid = int(r0) return } -func libc_getppid_trampoline() +var libc_getppid_trampoline_addr uintptr //go:cgo_import_dynamic libc_getppid getppid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpriority(which int, who int) (prio int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_getpriority_trampoline), uintptr(which), uintptr(who), 0) + r0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0) prio = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1320,42 +1320,42 @@ func Getpriority(which int, who int) (prio int, err error) { return } -func libc_getpriority_trampoline() +var libc_getpriority_trampoline_addr uintptr //go:cgo_import_dynamic libc_getpriority getpriority "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_getrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + _, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_getrlimit_trampoline() +var libc_getrlimit_trampoline_addr uintptr //go:cgo_import_dynamic libc_getrlimit getrlimit "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getrusage(who int, rusage *Rusage) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_getrusage_trampoline), uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + _, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_getrusage_trampoline() +var libc_getrusage_trampoline_addr uintptr //go:cgo_import_dynamic libc_getrusage getrusage "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getsid(pid int) (sid int, err error) { - r0, _, e1 := syscall_rawSyscall(funcPC(libc_getsid_trampoline), uintptr(pid), 0, 0) + r0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0) sid = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1363,52 +1363,52 @@ func Getsid(pid int) (sid int, err error) { return } -func libc_getsid_trampoline() +var libc_getsid_trampoline_addr uintptr //go:cgo_import_dynamic libc_getsid getsid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Gettimeofday(tp *Timeval) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_gettimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_gettimeofday_trampoline() +var libc_gettimeofday_trampoline_addr uintptr //go:cgo_import_dynamic libc_gettimeofday gettimeofday "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getuid() (uid int) { - r0, _, _ := syscall_rawSyscall(funcPC(libc_getuid_trampoline), 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0) uid = int(r0) return } -func libc_getuid_trampoline() +var libc_getuid_trampoline_addr uintptr //go:cgo_import_dynamic libc_getuid getuid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Issetugid() (tainted bool) { - r0, _, _ := syscall_rawSyscall(funcPC(libc_issetugid_trampoline), 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_issetugid_trampoline_addr, 0, 0, 0) tainted = bool(r0 != 0) return } -func libc_issetugid_trampoline() +var libc_issetugid_trampoline_addr uintptr //go:cgo_import_dynamic libc_issetugid issetugid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Kqueue() (fd int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_kqueue_trampoline), 0, 0, 0) + r0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1416,7 +1416,7 @@ func Kqueue() (fd int, err error) { return } -func libc_kqueue_trampoline() +var libc_kqueue_trampoline_addr uintptr //go:cgo_import_dynamic libc_kqueue kqueue "/usr/lib/libSystem.B.dylib" @@ -1428,14 +1428,14 @@ func Lchown(path string, uid int, gid int) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_lchown_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + _, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_lchown_trampoline() +var libc_lchown_trampoline_addr uintptr //go:cgo_import_dynamic libc_lchown lchown "/usr/lib/libSystem.B.dylib" @@ -1452,14 +1452,14 @@ func Link(path string, link string) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_link_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + _, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_link_trampoline() +var libc_link_trampoline_addr uintptr //go:cgo_import_dynamic libc_link link "/usr/lib/libSystem.B.dylib" @@ -1476,28 +1476,28 @@ func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err er if err != nil { return } - _, _, e1 := syscall_syscall6(funcPC(libc_linkat_trampoline), uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + _, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_linkat_trampoline() +var libc_linkat_trampoline_addr uintptr //go:cgo_import_dynamic libc_linkat linkat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Listen(s int, backlog int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_listen_trampoline), uintptr(s), uintptr(backlog), 0) + _, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_listen_trampoline() +var libc_listen_trampoline_addr uintptr //go:cgo_import_dynamic libc_listen listen "/usr/lib/libSystem.B.dylib" @@ -1509,14 +1509,14 @@ func Mkdir(path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_mkdir_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + _, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_mkdir_trampoline() +var libc_mkdir_trampoline_addr uintptr //go:cgo_import_dynamic libc_mkdir mkdir "/usr/lib/libSystem.B.dylib" @@ -1528,14 +1528,14 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_mkdirat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + _, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_mkdirat_trampoline() +var libc_mkdirat_trampoline_addr uintptr //go:cgo_import_dynamic libc_mkdirat mkdirat "/usr/lib/libSystem.B.dylib" @@ -1547,14 +1547,14 @@ func Mkfifo(path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_mkfifo_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + _, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_mkfifo_trampoline() +var libc_mkfifo_trampoline_addr uintptr //go:cgo_import_dynamic libc_mkfifo mkfifo "/usr/lib/libSystem.B.dylib" @@ -1566,14 +1566,14 @@ func Mknod(path string, mode uint32, dev int) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_mknod_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + _, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_mknod_trampoline() +var libc_mknod_trampoline_addr uintptr //go:cgo_import_dynamic libc_mknod mknod "/usr/lib/libSystem.B.dylib" @@ -1585,7 +1585,7 @@ func Open(path string, mode int, perm uint32) (fd int, err error) { if err != nil { return } - r0, _, e1 := syscall_syscall(funcPC(libc_open_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + r0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1593,7 +1593,7 @@ func Open(path string, mode int, perm uint32) (fd int, err error) { return } -func libc_open_trampoline() +var libc_open_trampoline_addr uintptr //go:cgo_import_dynamic libc_open open "/usr/lib/libSystem.B.dylib" @@ -1605,7 +1605,7 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { if err != nil { return } - r0, _, e1 := syscall_syscall6(funcPC(libc_openat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + r0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1613,7 +1613,7 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { return } -func libc_openat_trampoline() +var libc_openat_trampoline_addr uintptr //go:cgo_import_dynamic libc_openat openat "/usr/lib/libSystem.B.dylib" @@ -1625,7 +1625,7 @@ func Pathconf(path string, name int) (val int, err error) { if err != nil { return } - r0, _, e1 := syscall_syscall(funcPC(libc_pathconf_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + r0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) val = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1633,7 +1633,7 @@ func Pathconf(path string, name int) (val int, err error) { return } -func libc_pathconf_trampoline() +var libc_pathconf_trampoline_addr uintptr //go:cgo_import_dynamic libc_pathconf pathconf "/usr/lib/libSystem.B.dylib" @@ -1646,7 +1646,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := syscall_syscall6(funcPC(libc_pread_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + r0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1654,7 +1654,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { return } -func libc_pread_trampoline() +var libc_pread_trampoline_addr uintptr //go:cgo_import_dynamic libc_pread pread "/usr/lib/libSystem.B.dylib" @@ -1667,7 +1667,7 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := syscall_syscall6(funcPC(libc_pwrite_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + r0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1675,7 +1675,7 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) { return } -func libc_pwrite_trampoline() +var libc_pwrite_trampoline_addr uintptr //go:cgo_import_dynamic libc_pwrite pwrite "/usr/lib/libSystem.B.dylib" @@ -1688,7 +1688,7 @@ func read(fd int, p []byte) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := syscall_syscall(funcPC(libc_read_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p))) + r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1696,7 +1696,7 @@ func read(fd int, p []byte) (n int, err error) { return } -func libc_read_trampoline() +var libc_read_trampoline_addr uintptr //go:cgo_import_dynamic libc_read read "/usr/lib/libSystem.B.dylib" @@ -1714,7 +1714,7 @@ func Readlink(path string, buf []byte) (n int, err error) { } else { _p1 = unsafe.Pointer(&_zero) } - r0, _, e1 := syscall_syscall(funcPC(libc_readlink_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + r0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1722,7 +1722,7 @@ func Readlink(path string, buf []byte) (n int, err error) { return } -func libc_readlink_trampoline() +var libc_readlink_trampoline_addr uintptr //go:cgo_import_dynamic libc_readlink readlink "/usr/lib/libSystem.B.dylib" @@ -1740,7 +1740,7 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { } else { _p1 = unsafe.Pointer(&_zero) } - r0, _, e1 := syscall_syscall6(funcPC(libc_readlinkat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + r0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1748,7 +1748,7 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { return } -func libc_readlinkat_trampoline() +var libc_readlinkat_trampoline_addr uintptr //go:cgo_import_dynamic libc_readlinkat readlinkat "/usr/lib/libSystem.B.dylib" @@ -1765,14 +1765,14 @@ func Rename(from string, to string) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_rename_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + _, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_rename_trampoline() +var libc_rename_trampoline_addr uintptr //go:cgo_import_dynamic libc_rename rename "/usr/lib/libSystem.B.dylib" @@ -1789,14 +1789,14 @@ func Renameat(fromfd int, from string, tofd int, to string) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall6(funcPC(libc_renameat_trampoline), uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + _, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_renameat_trampoline() +var libc_renameat_trampoline_addr uintptr //go:cgo_import_dynamic libc_renameat renameat "/usr/lib/libSystem.B.dylib" @@ -1808,14 +1808,14 @@ func Revoke(path string) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_revoke_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_revoke_trampoline() +var libc_revoke_trampoline_addr uintptr //go:cgo_import_dynamic libc_revoke revoke "/usr/lib/libSystem.B.dylib" @@ -1827,21 +1827,21 @@ func Rmdir(path string) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_rmdir_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_rmdir_trampoline() +var libc_rmdir_trampoline_addr uintptr //go:cgo_import_dynamic libc_rmdir rmdir "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_lseek_trampoline), uintptr(fd), uintptr(offset), uintptr(whence)) + r0, _, e1 := syscall_syscall(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(whence)) newoffset = int64(r0) if e1 != 0 { err = errnoErr(e1) @@ -1849,14 +1849,14 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { return } -func libc_lseek_trampoline() +var libc_lseek_trampoline_addr uintptr //go:cgo_import_dynamic libc_lseek lseek "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := syscall_syscall6(funcPC(libc_select_trampoline), uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + r0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1864,49 +1864,49 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err return } -func libc_select_trampoline() +var libc_select_trampoline_addr uintptr //go:cgo_import_dynamic libc_select select "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setegid(egid int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_setegid_trampoline), uintptr(egid), 0, 0) + _, _, e1 := syscall_syscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_setegid_trampoline() +var libc_setegid_trampoline_addr uintptr //go:cgo_import_dynamic libc_setegid setegid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Seteuid(euid int) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_seteuid_trampoline), uintptr(euid), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_seteuid_trampoline() +var libc_seteuid_trampoline_addr uintptr //go:cgo_import_dynamic libc_seteuid seteuid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setgid(gid int) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_setgid_trampoline), uintptr(gid), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_setgid_trampoline() +var libc_setgid_trampoline_addr uintptr //go:cgo_import_dynamic libc_setgid setgid "/usr/lib/libSystem.B.dylib" @@ -1918,105 +1918,105 @@ func Setlogin(name string) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_setlogin_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_setlogin_trampoline() +var libc_setlogin_trampoline_addr uintptr //go:cgo_import_dynamic libc_setlogin setlogin "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setpgid(pid int, pgid int) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_setpgid_trampoline), uintptr(pid), uintptr(pgid), 0) + _, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_setpgid_trampoline() +var libc_setpgid_trampoline_addr uintptr //go:cgo_import_dynamic libc_setpgid setpgid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setpriority(which int, who int, prio int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_setpriority_trampoline), uintptr(which), uintptr(who), uintptr(prio)) + _, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_setpriority_trampoline() +var libc_setpriority_trampoline_addr uintptr //go:cgo_import_dynamic libc_setpriority setpriority "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setprivexec(flag int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_setprivexec_trampoline), uintptr(flag), 0, 0) + _, _, e1 := syscall_syscall(libc_setprivexec_trampoline_addr, uintptr(flag), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_setprivexec_trampoline() +var libc_setprivexec_trampoline_addr uintptr //go:cgo_import_dynamic libc_setprivexec setprivexec "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setregid(rgid int, egid int) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_setregid_trampoline), uintptr(rgid), uintptr(egid), 0) + _, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_setregid_trampoline() +var libc_setregid_trampoline_addr uintptr //go:cgo_import_dynamic libc_setregid setregid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_setreuid_trampoline), uintptr(ruid), uintptr(euid), 0) + _, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_setreuid_trampoline() +var libc_setreuid_trampoline_addr uintptr //go:cgo_import_dynamic libc_setreuid setreuid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_setrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_setrlimit_trampoline() +var libc_setrlimit_trampoline_addr uintptr //go:cgo_import_dynamic libc_setrlimit setrlimit "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setsid() (pid int, err error) { - r0, _, e1 := syscall_rawSyscall(funcPC(libc_setsid_trampoline), 0, 0, 0) + r0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0) pid = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -2024,35 +2024,35 @@ func Setsid() (pid int, err error) { return } -func libc_setsid_trampoline() +var libc_setsid_trampoline_addr uintptr //go:cgo_import_dynamic libc_setsid setsid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Settimeofday(tp *Timeval) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_settimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_settimeofday_trampoline() +var libc_settimeofday_trampoline_addr uintptr //go:cgo_import_dynamic libc_settimeofday settimeofday "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setuid(uid int) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_setuid_trampoline), uintptr(uid), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_setuid_trampoline() +var libc_setuid_trampoline_addr uintptr //go:cgo_import_dynamic libc_setuid setuid "/usr/lib/libSystem.B.dylib" @@ -2069,14 +2069,14 @@ func Symlink(path string, link string) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_symlink_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + _, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_symlink_trampoline() +var libc_symlink_trampoline_addr uintptr //go:cgo_import_dynamic libc_symlink symlink "/usr/lib/libSystem.B.dylib" @@ -2093,28 +2093,28 @@ func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_symlinkat_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + _, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) if e1 != 0 { err = errnoErr(e1) } return } -func libc_symlinkat_trampoline() +var libc_symlinkat_trampoline_addr uintptr //go:cgo_import_dynamic libc_symlinkat symlinkat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Sync() (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_sync_trampoline), 0, 0, 0) + _, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_sync_trampoline() +var libc_sync_trampoline_addr uintptr //go:cgo_import_dynamic libc_sync sync "/usr/lib/libSystem.B.dylib" @@ -2126,26 +2126,26 @@ func Truncate(path string, length int64) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_truncate_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + _, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_truncate_trampoline() +var libc_truncate_trampoline_addr uintptr //go:cgo_import_dynamic libc_truncate truncate "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Umask(newmask int) (oldmask int) { - r0, _, _ := syscall_syscall(funcPC(libc_umask_trampoline), uintptr(newmask), 0, 0) + r0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0) oldmask = int(r0) return } -func libc_umask_trampoline() +var libc_umask_trampoline_addr uintptr //go:cgo_import_dynamic libc_umask umask "/usr/lib/libSystem.B.dylib" @@ -2157,14 +2157,14 @@ func Undelete(path string) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_undelete_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_undelete_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_undelete_trampoline() +var libc_undelete_trampoline_addr uintptr //go:cgo_import_dynamic libc_undelete undelete "/usr/lib/libSystem.B.dylib" @@ -2176,14 +2176,14 @@ func Unlink(path string) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_unlink_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_unlink_trampoline() +var libc_unlink_trampoline_addr uintptr //go:cgo_import_dynamic libc_unlink unlink "/usr/lib/libSystem.B.dylib" @@ -2195,14 +2195,14 @@ func Unlinkat(dirfd int, path string, flags int) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_unlinkat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + _, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_unlinkat_trampoline() +var libc_unlinkat_trampoline_addr uintptr //go:cgo_import_dynamic libc_unlinkat unlinkat "/usr/lib/libSystem.B.dylib" @@ -2214,14 +2214,14 @@ func Unmount(path string, flags int) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_unmount_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + _, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_unmount_trampoline() +var libc_unmount_trampoline_addr uintptr //go:cgo_import_dynamic libc_unmount unmount "/usr/lib/libSystem.B.dylib" @@ -2234,7 +2234,7 @@ func write(fd int, p []byte) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := syscall_syscall(funcPC(libc_write_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p))) + r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -2242,14 +2242,14 @@ func write(fd int, p []byte) (n int, err error) { return } -func libc_write_trampoline() +var libc_write_trampoline_addr uintptr //go:cgo_import_dynamic libc_write write "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { - r0, _, e1 := syscall_syscall6(funcPC(libc_mmap_trampoline), uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) + r0, _, e1 := syscall_syscall6(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) ret = uintptr(r0) if e1 != 0 { err = errnoErr(e1) @@ -2257,28 +2257,28 @@ func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) ( return } -func libc_mmap_trampoline() +var libc_mmap_trampoline_addr uintptr //go:cgo_import_dynamic libc_mmap mmap "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func munmap(addr uintptr, length uintptr) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_munmap_trampoline), uintptr(addr), uintptr(length), 0) + _, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_munmap_trampoline() +var libc_munmap_trampoline_addr uintptr //go:cgo_import_dynamic libc_munmap munmap "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func readlen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_read_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -2289,7 +2289,7 @@ func readlen(fd int, buf *byte, nbuf int) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func writelen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_write_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -2300,14 +2300,14 @@ func writelen(fd int, buf *byte, nbuf int) (n 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_syscall(funcPC(libc_fstat64_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := syscall_syscall(libc_fstat64_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_fstat64_trampoline() +var libc_fstat64_trampoline_addr uintptr //go:cgo_import_dynamic libc_fstat64 fstat64 "/usr/lib/libSystem.B.dylib" @@ -2319,35 +2319,35 @@ func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall6(funcPC(libc_fstatat64_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + _, _, e1 := syscall_syscall6(libc_fstatat64_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_fstatat64_trampoline() +var libc_fstatat64_trampoline_addr uintptr //go:cgo_import_dynamic libc_fstatat64 fstatat64 "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fstatfs(fd int, stat *Statfs_t) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_fstatfs64_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := syscall_syscall(libc_fstatfs64_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_fstatfs64_trampoline() +var libc_fstatfs64_trampoline_addr uintptr //go:cgo_import_dynamic libc_fstatfs64 fstatfs64 "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_getfsstat64_trampoline), uintptr(buf), uintptr(size), uintptr(flags)) + r0, _, e1 := syscall_syscall(libc_getfsstat64_trampoline_addr, uintptr(buf), uintptr(size), uintptr(flags)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -2355,7 +2355,7 @@ func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) { return } -func libc_getfsstat64_trampoline() +var libc_getfsstat64_trampoline_addr uintptr //go:cgo_import_dynamic libc_getfsstat64 getfsstat64 "/usr/lib/libSystem.B.dylib" @@ -2367,28 +2367,28 @@ func Lstat(path string, stat *Stat_t) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_lstat64_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := syscall_syscall(libc_lstat64_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_lstat64_trampoline() +var libc_lstat64_trampoline_addr uintptr //go:cgo_import_dynamic libc_lstat64 lstat64 "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) { - _, _, e1 := syscall_syscall6(funcPC(libc_ptrace_trampoline), uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + _, _, e1 := syscall_syscall6(libc_ptrace_trampoline_addr, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_ptrace_trampoline() +var libc_ptrace_trampoline_addr uintptr //go:cgo_import_dynamic libc_ptrace ptrace "/usr/lib/libSystem.B.dylib" @@ -2400,14 +2400,14 @@ func Stat(path string, stat *Stat_t) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_stat64_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := syscall_syscall(libc_stat64_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_stat64_trampoline() +var libc_stat64_trampoline_addr uintptr //go:cgo_import_dynamic libc_stat64 stat64 "/usr/lib/libSystem.B.dylib" @@ -2419,13 +2419,13 @@ func Statfs(path string, stat *Statfs_t) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_statfs64_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := syscall_syscall(libc_statfs64_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_statfs64_trampoline() +var libc_statfs64_trampoline_addr uintptr //go:cgo_import_dynamic libc_statfs64 statfs64 "/usr/lib/libSystem.B.dylib" diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s index b8f316e676d..bc169c2ab9c 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s @@ -5,287 +5,855 @@ // +build go1.12 #include "textflag.h" -TEXT ·libc_getgroups_trampoline(SB),NOSPLIT,$0-0 + +TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getgroups(SB) -TEXT ·libc_setgroups_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getgroups_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB) + +TEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setgroups(SB) -TEXT ·libc_wait4_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_setgroups_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB) + +TEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_wait4(SB) -TEXT ·libc_accept_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_wait4_trampoline_addr(SB), RODATA, $8 +DATA ·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB) + +TEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_accept(SB) -TEXT ·libc_bind_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_accept_trampoline_addr(SB), RODATA, $8 +DATA ·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB) + +TEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_bind(SB) -TEXT ·libc_connect_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_bind_trampoline_addr(SB), RODATA, $8 +DATA ·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB) + +TEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_connect(SB) -TEXT ·libc_socket_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_connect_trampoline_addr(SB), RODATA, $8 +DATA ·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB) + +TEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_socket(SB) -TEXT ·libc_getsockopt_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_socket_trampoline_addr(SB), RODATA, $8 +DATA ·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB) + +TEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getsockopt(SB) -TEXT ·libc_setsockopt_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getsockopt_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB) + +TEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setsockopt(SB) -TEXT ·libc_getpeername_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_setsockopt_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB) + +TEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getpeername(SB) -TEXT ·libc_getsockname_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getpeername_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB) + +TEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getsockname(SB) -TEXT ·libc_shutdown_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getsockname_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB) + +TEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_shutdown(SB) -TEXT ·libc_socketpair_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_shutdown_trampoline_addr(SB), RODATA, $8 +DATA ·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB) + +TEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_socketpair(SB) -TEXT ·libc_recvfrom_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_socketpair_trampoline_addr(SB), RODATA, $8 +DATA ·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB) + +TEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_recvfrom(SB) -TEXT ·libc_sendto_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_recvfrom_trampoline_addr(SB), RODATA, $8 +DATA ·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB) + +TEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_sendto(SB) -TEXT ·libc_recvmsg_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_sendto_trampoline_addr(SB), RODATA, $8 +DATA ·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB) + +TEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_recvmsg(SB) -TEXT ·libc_sendmsg_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_recvmsg_trampoline_addr(SB), RODATA, $8 +DATA ·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB) + +TEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_sendmsg(SB) -TEXT ·libc_kevent_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_sendmsg_trampoline_addr(SB), RODATA, $8 +DATA ·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB) + +TEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_kevent(SB) -TEXT ·libc_utimes_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_kevent_trampoline_addr(SB), RODATA, $8 +DATA ·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB) + +TEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_utimes(SB) -TEXT ·libc_futimes_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_utimes_trampoline_addr(SB), RODATA, $8 +DATA ·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB) + +TEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_futimes(SB) -TEXT ·libc_poll_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_futimes_trampoline_addr(SB), RODATA, $8 +DATA ·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB) + +TEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_poll(SB) -TEXT ·libc_madvise_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_poll_trampoline_addr(SB), RODATA, $8 +DATA ·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB) + +TEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_madvise(SB) -TEXT ·libc_mlock_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_madvise_trampoline_addr(SB), RODATA, $8 +DATA ·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB) + +TEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_mlock(SB) -TEXT ·libc_mlockall_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_mlock_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB) + +TEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_mlockall(SB) -TEXT ·libc_mprotect_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_mlockall_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB) + +TEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_mprotect(SB) -TEXT ·libc_msync_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_mprotect_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB) + +TEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_msync(SB) -TEXT ·libc_munlock_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_msync_trampoline_addr(SB), RODATA, $8 +DATA ·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB) + +TEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_munlock(SB) -TEXT ·libc_munlockall_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_munlock_trampoline_addr(SB), RODATA, $8 +DATA ·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB) + +TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_munlockall(SB) -TEXT ·libc_pipe_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_munlockall_trampoline_addr(SB), RODATA, $8 +DATA ·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB) + +TEXT libc_pipe_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_pipe(SB) -TEXT ·libc_getxattr_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_pipe_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pipe_trampoline_addr(SB)/8, $libc_pipe_trampoline<>(SB) + +TEXT libc_getxattr_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getxattr(SB) -TEXT ·libc_fgetxattr_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getxattr_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getxattr_trampoline_addr(SB)/8, $libc_getxattr_trampoline<>(SB) + +TEXT libc_fgetxattr_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fgetxattr(SB) -TEXT ·libc_setxattr_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fgetxattr_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fgetxattr_trampoline_addr(SB)/8, $libc_fgetxattr_trampoline<>(SB) + +TEXT libc_setxattr_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setxattr(SB) -TEXT ·libc_fsetxattr_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_setxattr_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setxattr_trampoline_addr(SB)/8, $libc_setxattr_trampoline<>(SB) + +TEXT libc_fsetxattr_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fsetxattr(SB) -TEXT ·libc_removexattr_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fsetxattr_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fsetxattr_trampoline_addr(SB)/8, $libc_fsetxattr_trampoline<>(SB) + +TEXT libc_removexattr_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_removexattr(SB) -TEXT ·libc_fremovexattr_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_removexattr_trampoline_addr(SB), RODATA, $8 +DATA ·libc_removexattr_trampoline_addr(SB)/8, $libc_removexattr_trampoline<>(SB) + +TEXT libc_fremovexattr_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fremovexattr(SB) -TEXT ·libc_listxattr_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fremovexattr_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fremovexattr_trampoline_addr(SB)/8, $libc_fremovexattr_trampoline<>(SB) + +TEXT libc_listxattr_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_listxattr(SB) -TEXT ·libc_flistxattr_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_listxattr_trampoline_addr(SB), RODATA, $8 +DATA ·libc_listxattr_trampoline_addr(SB)/8, $libc_listxattr_trampoline<>(SB) + +TEXT libc_flistxattr_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_flistxattr(SB) -TEXT ·libc_setattrlist_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_flistxattr_trampoline_addr(SB), RODATA, $8 +DATA ·libc_flistxattr_trampoline_addr(SB)/8, $libc_flistxattr_trampoline<>(SB) + +TEXT libc_setattrlist_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setattrlist(SB) -TEXT ·libc_fcntl_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_setattrlist_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setattrlist_trampoline_addr(SB)/8, $libc_setattrlist_trampoline<>(SB) + +TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fcntl(SB) -TEXT ·libc_kill_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fcntl_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB) + +TEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_kill(SB) -TEXT ·libc_ioctl_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_kill_trampoline_addr(SB), RODATA, $8 +DATA ·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB) + +TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_ioctl(SB) -TEXT ·libc_sysctl_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $8 +DATA ·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB) + +TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_sysctl(SB) -TEXT ·libc_sendfile_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 +DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB) + +TEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_sendfile(SB) -TEXT ·libc_access_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_sendfile_trampoline_addr(SB), RODATA, $8 +DATA ·libc_sendfile_trampoline_addr(SB)/8, $libc_sendfile_trampoline<>(SB) + +TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_access(SB) -TEXT ·libc_adjtime_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_access_trampoline_addr(SB), RODATA, $8 +DATA ·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB) + +TEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_adjtime(SB) -TEXT ·libc_chdir_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_adjtime_trampoline_addr(SB), RODATA, $8 +DATA ·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB) + +TEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_chdir(SB) -TEXT ·libc_chflags_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_chdir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB) + +TEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_chflags(SB) -TEXT ·libc_chmod_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_chflags_trampoline_addr(SB), RODATA, $8 +DATA ·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB) + +TEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_chmod(SB) -TEXT ·libc_chown_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_chmod_trampoline_addr(SB), RODATA, $8 +DATA ·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB) + +TEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_chown(SB) -TEXT ·libc_chroot_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_chown_trampoline_addr(SB), RODATA, $8 +DATA ·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB) + +TEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_chroot(SB) -TEXT ·libc_clock_gettime_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_chroot_trampoline_addr(SB), RODATA, $8 +DATA ·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB) + +TEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_clock_gettime(SB) -TEXT ·libc_close_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_clock_gettime_trampoline_addr(SB), RODATA, $8 +DATA ·libc_clock_gettime_trampoline_addr(SB)/8, $libc_clock_gettime_trampoline<>(SB) + +TEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_close(SB) -TEXT ·libc_clonefile_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_close_trampoline_addr(SB), RODATA, $8 +DATA ·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB) + +TEXT libc_clonefile_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_clonefile(SB) -TEXT ·libc_clonefileat_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_clonefile_trampoline_addr(SB), RODATA, $8 +DATA ·libc_clonefile_trampoline_addr(SB)/8, $libc_clonefile_trampoline<>(SB) + +TEXT libc_clonefileat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_clonefileat(SB) -TEXT ·libc_dup_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_clonefileat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_clonefileat_trampoline_addr(SB)/8, $libc_clonefileat_trampoline<>(SB) + +TEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_dup(SB) -TEXT ·libc_dup2_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_dup_trampoline_addr(SB), RODATA, $8 +DATA ·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB) + +TEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_dup2(SB) -TEXT ·libc_exchangedata_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_dup2_trampoline_addr(SB), RODATA, $8 +DATA ·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB) + +TEXT libc_exchangedata_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_exchangedata(SB) -TEXT ·libc_exit_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_exchangedata_trampoline_addr(SB), RODATA, $8 +DATA ·libc_exchangedata_trampoline_addr(SB)/8, $libc_exchangedata_trampoline<>(SB) + +TEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_exit(SB) -TEXT ·libc_faccessat_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_exit_trampoline_addr(SB), RODATA, $8 +DATA ·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB) + +TEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_faccessat(SB) -TEXT ·libc_fchdir_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_faccessat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB) + +TEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fchdir(SB) -TEXT ·libc_fchflags_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fchdir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB) + +TEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fchflags(SB) -TEXT ·libc_fchmod_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fchflags_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB) + +TEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fchmod(SB) -TEXT ·libc_fchmodat_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fchmod_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB) + +TEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fchmodat(SB) -TEXT ·libc_fchown_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fchmodat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB) + +TEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fchown(SB) -TEXT ·libc_fchownat_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fchown_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB) + +TEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fchownat(SB) -TEXT ·libc_fclonefileat_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fchownat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB) + +TEXT libc_fclonefileat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fclonefileat(SB) -TEXT ·libc_flock_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fclonefileat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fclonefileat_trampoline_addr(SB)/8, $libc_fclonefileat_trampoline<>(SB) + +TEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_flock(SB) -TEXT ·libc_fpathconf_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_flock_trampoline_addr(SB), RODATA, $8 +DATA ·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB) + +TEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fpathconf(SB) -TEXT ·libc_fsync_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fpathconf_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB) + +TEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fsync(SB) -TEXT ·libc_ftruncate_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fsync_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB) + +TEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_ftruncate(SB) -TEXT ·libc_getcwd_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_ftruncate_trampoline_addr(SB), RODATA, $8 +DATA ·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB) + +TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getcwd(SB) -TEXT ·libc_getdtablesize_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getcwd_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB) + +TEXT libc_getdtablesize_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getdtablesize(SB) -TEXT ·libc_getegid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getdtablesize_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getdtablesize_trampoline_addr(SB)/8, $libc_getdtablesize_trampoline<>(SB) + +TEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getegid(SB) -TEXT ·libc_geteuid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getegid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB) + +TEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_geteuid(SB) -TEXT ·libc_getgid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_geteuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB) + +TEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getgid(SB) -TEXT ·libc_getpgid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getgid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB) + +TEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getpgid(SB) -TEXT ·libc_getpgrp_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getpgid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB) + +TEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getpgrp(SB) -TEXT ·libc_getpid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getpgrp_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB) + +TEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getpid(SB) -TEXT ·libc_getppid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getpid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB) + +TEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getppid(SB) -TEXT ·libc_getpriority_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getppid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB) + +TEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getpriority(SB) -TEXT ·libc_getrlimit_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getpriority_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB) + +TEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getrlimit(SB) -TEXT ·libc_getrusage_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getrlimit_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB) + +TEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getrusage(SB) -TEXT ·libc_getsid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getrusage_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB) + +TEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getsid(SB) -TEXT ·libc_gettimeofday_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getsid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB) + +TEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_gettimeofday(SB) -TEXT ·libc_getuid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_gettimeofday_trampoline_addr(SB), RODATA, $8 +DATA ·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB) + +TEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getuid(SB) -TEXT ·libc_issetugid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB) + +TEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_issetugid(SB) -TEXT ·libc_kqueue_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_issetugid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB) + +TEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_kqueue(SB) -TEXT ·libc_lchown_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_kqueue_trampoline_addr(SB), RODATA, $8 +DATA ·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB) + +TEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_lchown(SB) -TEXT ·libc_link_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_lchown_trampoline_addr(SB), RODATA, $8 +DATA ·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB) + +TEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_link(SB) -TEXT ·libc_linkat_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_link_trampoline_addr(SB), RODATA, $8 +DATA ·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB) + +TEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_linkat(SB) -TEXT ·libc_listen_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_linkat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB) + +TEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_listen(SB) -TEXT ·libc_mkdir_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_listen_trampoline_addr(SB), RODATA, $8 +DATA ·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB) + +TEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_mkdir(SB) -TEXT ·libc_mkdirat_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_mkdir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB) + +TEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_mkdirat(SB) -TEXT ·libc_mkfifo_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_mkdirat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB) + +TEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_mkfifo(SB) -TEXT ·libc_mknod_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_mkfifo_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB) + +TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_mknod(SB) -TEXT ·libc_open_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_mknod_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB) + +TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_open(SB) -TEXT ·libc_openat_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_open_trampoline_addr(SB), RODATA, $8 +DATA ·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB) + +TEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_openat(SB) -TEXT ·libc_pathconf_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_openat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB) + +TEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_pathconf(SB) -TEXT ·libc_pread_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_pathconf_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB) + +TEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_pread(SB) -TEXT ·libc_pwrite_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_pread_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB) + +TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_pwrite(SB) -TEXT ·libc_read_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB) + +TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_read(SB) -TEXT ·libc_readlink_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_read_trampoline_addr(SB), RODATA, $8 +DATA ·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB) + +TEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_readlink(SB) -TEXT ·libc_readlinkat_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_readlink_trampoline_addr(SB), RODATA, $8 +DATA ·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB) + +TEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_readlinkat(SB) -TEXT ·libc_rename_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_readlinkat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB) + +TEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_rename(SB) -TEXT ·libc_renameat_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_rename_trampoline_addr(SB), RODATA, $8 +DATA ·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB) + +TEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_renameat(SB) -TEXT ·libc_revoke_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_renameat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB) + +TEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_revoke(SB) -TEXT ·libc_rmdir_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_revoke_trampoline_addr(SB), RODATA, $8 +DATA ·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB) + +TEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_rmdir(SB) -TEXT ·libc_lseek_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_rmdir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB) + +TEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_lseek(SB) -TEXT ·libc_select_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_lseek_trampoline_addr(SB), RODATA, $8 +DATA ·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB) + +TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_select(SB) -TEXT ·libc_setegid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_select_trampoline_addr(SB), RODATA, $8 +DATA ·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB) + +TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setegid(SB) -TEXT ·libc_seteuid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_setegid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB) + +TEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_seteuid(SB) -TEXT ·libc_setgid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_seteuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB) + +TEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setgid(SB) -TEXT ·libc_setlogin_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_setgid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB) + +TEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setlogin(SB) -TEXT ·libc_setpgid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_setlogin_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB) + +TEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setpgid(SB) -TEXT ·libc_setpriority_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_setpgid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB) + +TEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setpriority(SB) -TEXT ·libc_setprivexec_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_setpriority_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB) + +TEXT libc_setprivexec_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setprivexec(SB) -TEXT ·libc_setregid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_setprivexec_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setprivexec_trampoline_addr(SB)/8, $libc_setprivexec_trampoline<>(SB) + +TEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setregid(SB) -TEXT ·libc_setreuid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_setregid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB) + +TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setreuid(SB) -TEXT ·libc_setrlimit_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_setreuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB) + +TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setrlimit(SB) -TEXT ·libc_setsid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setrlimit_trampoline_addr(SB)/8, $libc_setrlimit_trampoline<>(SB) + +TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setsid(SB) -TEXT ·libc_settimeofday_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_setsid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB) + +TEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_settimeofday(SB) -TEXT ·libc_setuid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_settimeofday_trampoline_addr(SB), RODATA, $8 +DATA ·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB) + +TEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setuid(SB) -TEXT ·libc_symlink_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_setuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB) + +TEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_symlink(SB) -TEXT ·libc_symlinkat_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_symlink_trampoline_addr(SB), RODATA, $8 +DATA ·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB) + +TEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_symlinkat(SB) -TEXT ·libc_sync_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_symlinkat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB) + +TEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_sync(SB) -TEXT ·libc_truncate_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_sync_trampoline_addr(SB), RODATA, $8 +DATA ·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB) + +TEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_truncate(SB) -TEXT ·libc_umask_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_truncate_trampoline_addr(SB), RODATA, $8 +DATA ·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB) + +TEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_umask(SB) -TEXT ·libc_undelete_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_umask_trampoline_addr(SB), RODATA, $8 +DATA ·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB) + +TEXT libc_undelete_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_undelete(SB) -TEXT ·libc_unlink_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_undelete_trampoline_addr(SB), RODATA, $8 +DATA ·libc_undelete_trampoline_addr(SB)/8, $libc_undelete_trampoline<>(SB) + +TEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_unlink(SB) -TEXT ·libc_unlinkat_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_unlink_trampoline_addr(SB), RODATA, $8 +DATA ·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB) + +TEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_unlinkat(SB) -TEXT ·libc_unmount_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_unlinkat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB) + +TEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_unmount(SB) -TEXT ·libc_write_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_unmount_trampoline_addr(SB), RODATA, $8 +DATA ·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB) + +TEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_write(SB) -TEXT ·libc_mmap_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_write_trampoline_addr(SB), RODATA, $8 +DATA ·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB) + +TEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_mmap(SB) -TEXT ·libc_munmap_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_mmap_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB) + +TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_munmap(SB) -TEXT ·libc_fstat64_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $8 +DATA ·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB) + +TEXT libc_fstat64_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fstat64(SB) -TEXT ·libc_fstatat64_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fstat64_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fstat64_trampoline_addr(SB)/8, $libc_fstat64_trampoline<>(SB) + +TEXT libc_fstatat64_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fstatat64(SB) -TEXT ·libc_fstatfs64_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fstatat64_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fstatat64_trampoline_addr(SB)/8, $libc_fstatat64_trampoline<>(SB) + +TEXT libc_fstatfs64_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fstatfs64(SB) -TEXT ·libc_getfsstat64_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fstatfs64_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fstatfs64_trampoline_addr(SB)/8, $libc_fstatfs64_trampoline<>(SB) + +TEXT libc_getfsstat64_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getfsstat64(SB) -TEXT ·libc_lstat64_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getfsstat64_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getfsstat64_trampoline_addr(SB)/8, $libc_getfsstat64_trampoline<>(SB) + +TEXT libc_lstat64_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_lstat64(SB) -TEXT ·libc_ptrace_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_lstat64_trampoline_addr(SB), RODATA, $8 +DATA ·libc_lstat64_trampoline_addr(SB)/8, $libc_lstat64_trampoline<>(SB) + +TEXT libc_ptrace_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_ptrace(SB) -TEXT ·libc_stat64_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_ptrace_trampoline_addr(SB), RODATA, $8 +DATA ·libc_ptrace_trampoline_addr(SB)/8, $libc_ptrace_trampoline<>(SB) + +TEXT libc_stat64_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_stat64(SB) -TEXT ·libc_statfs64_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_stat64_trampoline_addr(SB), RODATA, $8 +DATA ·libc_stat64_trampoline_addr(SB)/8, $libc_stat64_trampoline<>(SB) + +TEXT libc_statfs64_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_statfs64(SB) + +GLOBL ·libc_statfs64_trampoline_addr(SB), RODATA, $8 +DATA ·libc_statfs64_trampoline_addr(SB)/8, $libc_statfs64_trampoline<>(SB) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_13.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_13.go deleted file mode 100644 index ed437f89a9e..00000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_13.go +++ /dev/null @@ -1,40 +0,0 @@ -// go run mksyscall.go -l32 -tags darwin,arm,go1.13 syscall_darwin.1_13.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build darwin && arm && go1.13 -// +build darwin,arm,go1.13 - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func closedir(dir uintptr) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_closedir_trampoline), uintptr(dir), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_closedir_trampoline() - -//go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) { - r0, _, _ := syscall_syscall(funcPC(libc_readdir_r_trampoline), uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result))) - res = Errno(r0) - return -} - -func libc_readdir_r_trampoline() - -//go:cgo_import_dynamic libc_readdir_r readdir_r "/usr/lib/libSystem.B.dylib" diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_13.s b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_13.s deleted file mode 100644 index 0cc80ad87ea..00000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.1_13.s +++ /dev/null @@ -1,13 +0,0 @@ -// go run mkasm_darwin.go arm -// Code generated by the command above; DO NOT EDIT. - -//go:build go1.13 -// +build go1.13 - -#include "textflag.h" -TEXT ·libc_fdopendir_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fdopendir(SB) -TEXT ·libc_closedir_trampoline(SB),NOSPLIT,$0-0 - JMP libc_closedir(SB) -TEXT ·libc_readdir_r_trampoline(SB),NOSPLIT,$0-0 - JMP libc_readdir_r(SB) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go deleted file mode 100644 index 7f88cb5ea22..00000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.go +++ /dev/null @@ -1,2417 +0,0 @@ -// go run mksyscall.go -l32 -tags darwin,arm,go1.12 syscall_bsd.go syscall_darwin.go syscall_darwin_arm.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build darwin && arm && go1.12 -// +build darwin,arm,go1.12 - -package unix - -import ( - "syscall" - "unsafe" -) - -var _ syscall.Errno - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getgroups(ngid int, gid *_Gid_t) (n int, err error) { - r0, _, e1 := syscall_rawSyscall(funcPC(libc_getgroups_trampoline), uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_getgroups_trampoline() - -//go:cgo_import_dynamic libc_getgroups getgroups "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setgroups(ngid int, gid *_Gid_t) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_setgroups_trampoline), uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_setgroups_trampoline() - -//go:cgo_import_dynamic libc_setgroups setgroups "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { - r0, _, e1 := syscall_syscall6(funcPC(libc_wait4_trampoline), uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) - wpid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_wait4_trampoline() - -//go:cgo_import_dynamic libc_wait4 wait4 "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_accept_trampoline), uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_accept_trampoline() - -//go:cgo_import_dynamic libc_accept accept "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_bind_trampoline), uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_bind_trampoline() - -//go:cgo_import_dynamic libc_bind bind "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_connect_trampoline), uintptr(s), uintptr(addr), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_connect_trampoline() - -//go:cgo_import_dynamic libc_connect connect "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := syscall_rawSyscall(funcPC(libc_socket_trampoline), uintptr(domain), uintptr(typ), uintptr(proto)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_socket_trampoline() - -//go:cgo_import_dynamic libc_socket socket "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := syscall_syscall6(funcPC(libc_getsockopt_trampoline), uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_getsockopt_trampoline() - -//go:cgo_import_dynamic libc_getsockopt getsockopt "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := syscall_syscall6(funcPC(libc_setsockopt_trampoline), uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_setsockopt_trampoline() - -//go:cgo_import_dynamic libc_setsockopt setsockopt "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_getpeername_trampoline), uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_getpeername_trampoline() - -//go:cgo_import_dynamic libc_getpeername getpeername "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_getsockname_trampoline), uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_getsockname_trampoline() - -//go:cgo_import_dynamic libc_getsockname getsockname "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Shutdown(s int, how int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_shutdown_trampoline), uintptr(s), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_shutdown_trampoline() - -//go:cgo_import_dynamic libc_shutdown shutdown "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := syscall_rawSyscall6(funcPC(libc_socketpair_trampoline), uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_socketpair_trampoline() - -//go:cgo_import_dynamic libc_socketpair socketpair "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Socklen) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(funcPC(libc_recvfrom_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_recvfrom_trampoline() - -//go:cgo_import_dynamic libc_recvfrom recvfrom "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) (err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall6(funcPC(libc_sendto_trampoline), uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_sendto_trampoline() - -//go:cgo_import_dynamic libc_sendto sendto "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_recvmsg_trampoline), uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_recvmsg_trampoline() - -//go:cgo_import_dynamic libc_recvmsg recvmsg "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_sendmsg_trampoline), uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_sendmsg_trampoline() - -//go:cgo_import_dynamic libc_sendmsg sendmsg "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { - r0, _, e1 := syscall_syscall6(funcPC(libc_kevent_trampoline), uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_kevent_trampoline() - -//go:cgo_import_dynamic libc_kevent kevent "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func utimes(path string, timeval *[2]Timeval) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_utimes_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_utimes_trampoline() - -//go:cgo_import_dynamic libc_utimes utimes "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func futimes(fd int, timeval *[2]Timeval) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_futimes_trampoline), uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_futimes_trampoline() - -//go:cgo_import_dynamic libc_futimes futimes "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_poll_trampoline), uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_poll_trampoline() - -//go:cgo_import_dynamic libc_poll poll "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Madvise(b []byte, behav int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(funcPC(libc_madvise_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(behav)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_madvise_trampoline() - -//go:cgo_import_dynamic libc_madvise madvise "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(funcPC(libc_mlock_trampoline), uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_mlock_trampoline() - -//go:cgo_import_dynamic libc_mlock mlock "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mlockall(flags int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_mlockall_trampoline), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_mlockall_trampoline() - -//go:cgo_import_dynamic libc_mlockall mlockall "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mprotect(b []byte, prot int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(funcPC(libc_mprotect_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(prot)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_mprotect_trampoline() - -//go:cgo_import_dynamic libc_mprotect mprotect "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Msync(b []byte, flags int) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(funcPC(libc_msync_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_msync_trampoline() - -//go:cgo_import_dynamic libc_msync msync "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlock(b []byte) (err error) { - var _p0 unsafe.Pointer - if len(b) > 0 { - _p0 = unsafe.Pointer(&b[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall(funcPC(libc_munlock_trampoline), uintptr(_p0), uintptr(len(b)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_munlock_trampoline() - -//go:cgo_import_dynamic libc_munlock munlock "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Munlockall() (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_munlockall_trampoline), 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_munlockall_trampoline() - -//go:cgo_import_dynamic libc_munlockall munlockall "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func pipe(p *[2]int32) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_pipe_trampoline), uintptr(unsafe.Pointer(p)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_pipe_trampoline() - -//go:cgo_import_dynamic libc_pipe pipe "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getxattr(path string, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attr) - if err != nil { - return - } - r0, _, e1 := syscall_syscall6(funcPC(libc_getxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options)) - sz = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_getxattr_trampoline() - -//go:cgo_import_dynamic libc_getxattr getxattr "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, options int) (sz int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attr) - if err != nil { - return - } - r0, _, e1 := syscall_syscall6(funcPC(libc_fgetxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options)) - sz = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_fgetxattr_trampoline() - -//go:cgo_import_dynamic libc_fgetxattr fgetxattr "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setxattr(path string, attr string, data *byte, size int, position uint32, options int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attr) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(funcPC(libc_setxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_setxattr_trampoline() - -//go:cgo_import_dynamic libc_setxattr setxattr "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fsetxattr(fd int, attr string, data *byte, size int, position uint32, options int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attr) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(funcPC(libc_fsetxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_fsetxattr_trampoline() - -//go:cgo_import_dynamic libc_fsetxattr fsetxattr "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func removexattr(path string, attr string, options int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(attr) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_removexattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_removexattr_trampoline() - -//go:cgo_import_dynamic libc_removexattr removexattr "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fremovexattr(fd int, attr string, options int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(attr) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_fremovexattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_fremovexattr_trampoline() - -//go:cgo_import_dynamic libc_fremovexattr fremovexattr "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func listxattr(path string, dest *byte, size int, options int) (sz int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := syscall_syscall6(funcPC(libc_listxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0) - sz = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_listxattr_trampoline() - -//go:cgo_import_dynamic libc_listxattr listxattr "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) { - r0, _, e1 := syscall_syscall6(funcPC(libc_flistxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0) - sz = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_flistxattr_trampoline() - -//go:cgo_import_dynamic libc_flistxattr flistxattr "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) { - _, _, e1 := syscall_syscall6(funcPC(libc_setattrlist_trampoline), uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_setattrlist_trampoline() - -//go:cgo_import_dynamic libc_setattrlist setattrlist "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func fcntl(fd int, cmd int, arg int) (val int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_fcntl_trampoline), uintptr(fd), uintptr(cmd), uintptr(arg)) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_fcntl_trampoline() - -//go:cgo_import_dynamic libc_fcntl fcntl "/usr/lib/libSystem.B.dylib" - -// 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(funcPC(libc_kill_trampoline), uintptr(pid), uintptr(signum), uintptr(posix)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_kill_trampoline() - -//go:cgo_import_dynamic libc_kill kill "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ioctl(fd int, req uint, arg uintptr) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_ioctl_trampoline), uintptr(fd), uintptr(req), uintptr(arg)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_ioctl_trampoline() - -//go:cgo_import_dynamic libc_ioctl ioctl "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { - var _p0 unsafe.Pointer - if len(mib) > 0 { - _p0 = unsafe.Pointer(&mib[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - _, _, e1 := syscall_syscall6(funcPC(libc_sysctl_trampoline), uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_sysctl_trampoline() - -//go:cgo_import_dynamic libc_sysctl sysctl "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) { - _, _, e1 := syscall_syscall9(funcPC(libc_sendfile_trampoline), uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(offset>>32), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_sendfile_trampoline() - -//go:cgo_import_dynamic libc_sendfile sendfile "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Access(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_access_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_access_trampoline() - -//go:cgo_import_dynamic libc_access access "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_adjtime_trampoline), uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_adjtime_trampoline() - -//go:cgo_import_dynamic libc_adjtime adjtime "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_chdir_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_chdir_trampoline() - -//go:cgo_import_dynamic libc_chdir chdir "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chflags(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_chflags_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_chflags_trampoline() - -//go:cgo_import_dynamic libc_chflags chflags "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chmod(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_chmod_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_chmod_trampoline() - -//go:cgo_import_dynamic libc_chmod chmod "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_chown_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_chown_trampoline() - -//go:cgo_import_dynamic libc_chown chown "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Chroot(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_chroot_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_chroot_trampoline() - -//go:cgo_import_dynamic libc_chroot chroot "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func ClockGettime(clockid int32, time *Timespec) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_clock_gettime_trampoline), uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_clock_gettime_trampoline() - -//go:cgo_import_dynamic libc_clock_gettime clock_gettime "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Close(fd int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_close_trampoline), uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_close_trampoline() - -//go:cgo_import_dynamic libc_close close "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Clonefile(src string, dst string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(src) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(dst) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_clonefile_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_clonefile_trampoline() - -//go:cgo_import_dynamic libc_clonefile clonefile "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Clonefileat(srcDirfd int, src string, dstDirfd int, dst string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(src) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(dst) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(funcPC(libc_clonefileat_trampoline), uintptr(srcDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(dstDirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_clonefileat_trampoline() - -//go:cgo_import_dynamic libc_clonefileat clonefileat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup(fd int) (nfd int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_dup_trampoline), uintptr(fd), 0, 0) - nfd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_dup_trampoline() - -//go:cgo_import_dynamic libc_dup dup "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Dup2(from int, to int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_dup2_trampoline), uintptr(from), uintptr(to), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_dup2_trampoline() - -//go:cgo_import_dynamic libc_dup2 dup2 "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Exchangedata(path1 string, path2 string, options int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path1) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(path2) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_exchangedata_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_exchangedata_trampoline() - -//go:cgo_import_dynamic libc_exchangedata exchangedata "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Exit(code int) { - syscall_syscall(funcPC(libc_exit_trampoline), uintptr(code), 0, 0) - return -} - -func libc_exit_trampoline() - -//go:cgo_import_dynamic libc_exit exit "/usr/lib/libSystem.B.dylib" - -// 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) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(funcPC(libc_faccessat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_faccessat_trampoline() - -//go:cgo_import_dynamic libc_faccessat faccessat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchdir(fd int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_fchdir_trampoline), uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_fchdir_trampoline() - -//go:cgo_import_dynamic libc_fchdir fchdir "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchflags(fd int, flags int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_fchflags_trampoline), uintptr(fd), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_fchflags_trampoline() - -//go:cgo_import_dynamic libc_fchflags fchflags "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmod(fd int, mode uint32) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_fchmod_trampoline), uintptr(fd), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_fchmod_trampoline() - -//go:cgo_import_dynamic libc_fchmod fchmod "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(funcPC(libc_fchmodat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_fchmodat_trampoline() - -//go:cgo_import_dynamic libc_fchmodat fchmodat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_fchown_trampoline), uintptr(fd), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_fchown_trampoline() - -//go:cgo_import_dynamic libc_fchown fchown "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(funcPC(libc_fchownat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_fchownat_trampoline() - -//go:cgo_import_dynamic libc_fchownat fchownat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fclonefileat(srcDirfd int, dstDirfd int, dst string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(dst) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(funcPC(libc_fclonefileat_trampoline), uintptr(srcDirfd), uintptr(dstDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_fclonefileat_trampoline() - -//go:cgo_import_dynamic libc_fclonefileat fclonefileat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Flock(fd int, how int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_flock_trampoline), uintptr(fd), uintptr(how), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_flock_trampoline() - -//go:cgo_import_dynamic libc_flock flock "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fpathconf(fd int, name int) (val int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_fpathconf_trampoline), uintptr(fd), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_fpathconf_trampoline() - -//go:cgo_import_dynamic libc_fpathconf fpathconf "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fsync(fd int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_fsync_trampoline), uintptr(fd), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_fsync_trampoline() - -//go:cgo_import_dynamic libc_fsync fsync "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_ftruncate_trampoline), uintptr(fd), uintptr(length), uintptr(length>>32)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_ftruncate_trampoline() - -//go:cgo_import_dynamic libc_ftruncate ftruncate "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getcwd(buf []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(funcPC(libc_getcwd_trampoline), uintptr(_p0), uintptr(len(buf)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_getcwd_trampoline() - -//go:cgo_import_dynamic libc_getcwd getcwd "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getdtablesize() (size int) { - r0, _, _ := syscall_syscall(funcPC(libc_getdtablesize_trampoline), 0, 0, 0) - size = int(r0) - return -} - -func libc_getdtablesize_trampoline() - -//go:cgo_import_dynamic libc_getdtablesize getdtablesize "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getegid() (egid int) { - r0, _, _ := syscall_rawSyscall(funcPC(libc_getegid_trampoline), 0, 0, 0) - egid = int(r0) - return -} - -func libc_getegid_trampoline() - -//go:cgo_import_dynamic libc_getegid getegid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Geteuid() (uid int) { - r0, _, _ := syscall_rawSyscall(funcPC(libc_geteuid_trampoline), 0, 0, 0) - uid = int(r0) - return -} - -func libc_geteuid_trampoline() - -//go:cgo_import_dynamic libc_geteuid geteuid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getgid() (gid int) { - r0, _, _ := syscall_rawSyscall(funcPC(libc_getgid_trampoline), 0, 0, 0) - gid = int(r0) - return -} - -func libc_getgid_trampoline() - -//go:cgo_import_dynamic libc_getgid getgid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgid(pid int) (pgid int, err error) { - r0, _, e1 := syscall_rawSyscall(funcPC(libc_getpgid_trampoline), uintptr(pid), 0, 0) - pgid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_getpgid_trampoline() - -//go:cgo_import_dynamic libc_getpgid getpgid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpgrp() (pgrp int) { - r0, _, _ := syscall_rawSyscall(funcPC(libc_getpgrp_trampoline), 0, 0, 0) - pgrp = int(r0) - return -} - -func libc_getpgrp_trampoline() - -//go:cgo_import_dynamic libc_getpgrp getpgrp "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpid() (pid int) { - r0, _, _ := syscall_rawSyscall(funcPC(libc_getpid_trampoline), 0, 0, 0) - pid = int(r0) - return -} - -func libc_getpid_trampoline() - -//go:cgo_import_dynamic libc_getpid getpid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getppid() (ppid int) { - r0, _, _ := syscall_rawSyscall(funcPC(libc_getppid_trampoline), 0, 0, 0) - ppid = int(r0) - return -} - -func libc_getppid_trampoline() - -//go:cgo_import_dynamic libc_getppid getppid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getpriority(which int, who int) (prio int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_getpriority_trampoline), uintptr(which), uintptr(who), 0) - prio = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_getpriority_trampoline() - -//go:cgo_import_dynamic libc_getpriority getpriority "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_getrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_getrlimit_trampoline() - -//go:cgo_import_dynamic libc_getrlimit getrlimit "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getrusage(who int, rusage *Rusage) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_getrusage_trampoline), uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_getrusage_trampoline() - -//go:cgo_import_dynamic libc_getrusage getrusage "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getsid(pid int) (sid int, err error) { - r0, _, e1 := syscall_rawSyscall(funcPC(libc_getsid_trampoline), uintptr(pid), 0, 0) - sid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_getsid_trampoline() - -//go:cgo_import_dynamic libc_getsid getsid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Gettimeofday(tp *Timeval) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_gettimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_gettimeofday_trampoline() - -//go:cgo_import_dynamic libc_gettimeofday gettimeofday "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Getuid() (uid int) { - r0, _, _ := syscall_rawSyscall(funcPC(libc_getuid_trampoline), 0, 0, 0) - uid = int(r0) - return -} - -func libc_getuid_trampoline() - -//go:cgo_import_dynamic libc_getuid getuid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Issetugid() (tainted bool) { - r0, _, _ := syscall_rawSyscall(funcPC(libc_issetugid_trampoline), 0, 0, 0) - tainted = bool(r0 != 0) - return -} - -func libc_issetugid_trampoline() - -//go:cgo_import_dynamic libc_issetugid issetugid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Kqueue() (fd int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_kqueue_trampoline), 0, 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_kqueue_trampoline() - -//go:cgo_import_dynamic libc_kqueue kqueue "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lchown(path string, uid int, gid int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_lchown_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_lchown_trampoline() - -//go:cgo_import_dynamic libc_lchown lchown "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Link(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_link_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_link_trampoline() - -//go:cgo_import_dynamic libc_link link "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(funcPC(libc_linkat_trampoline), uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_linkat_trampoline() - -//go:cgo_import_dynamic libc_linkat linkat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Listen(s int, backlog int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_listen_trampoline), uintptr(s), uintptr(backlog), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_listen_trampoline() - -//go:cgo_import_dynamic libc_listen listen "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdir(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_mkdir_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_mkdir_trampoline() - -//go:cgo_import_dynamic libc_mkdir mkdir "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkdirat(dirfd int, path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_mkdirat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_mkdirat_trampoline() - -//go:cgo_import_dynamic libc_mkdirat mkdirat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mkfifo(path string, mode uint32) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_mkfifo_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_mkfifo_trampoline() - -//go:cgo_import_dynamic libc_mkfifo mkfifo "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Mknod(path string, mode uint32, dev int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_mknod_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_mknod_trampoline() - -//go:cgo_import_dynamic libc_mknod mknod "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Open(path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := syscall_syscall(funcPC(libc_open_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_open_trampoline() - -//go:cgo_import_dynamic libc_open open "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := syscall_syscall6(funcPC(libc_openat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) - fd = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_openat_trampoline() - -//go:cgo_import_dynamic libc_openat openat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pathconf(path string, name int) (val int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - r0, _, e1 := syscall_syscall(funcPC(libc_pathconf_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) - val = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_pathconf_trampoline() - -//go:cgo_import_dynamic libc_pathconf pathconf "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pread(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(funcPC(libc_pread_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_pread_trampoline() - -//go:cgo_import_dynamic libc_pread pread "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Pwrite(fd int, p []byte, offset int64) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(funcPC(libc_pwrite_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), uintptr(offset>>32), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_pwrite_trampoline() - -//go:cgo_import_dynamic libc_pwrite pwrite "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func read(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(funcPC(libc_read_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_read_trampoline() - -//go:cgo_import_dynamic libc_read read "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlink(path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(funcPC(libc_readlink_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_readlink_trampoline() - -//go:cgo_import_dynamic libc_readlink readlink "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 unsafe.Pointer - if len(buf) > 0 { - _p1 = unsafe.Pointer(&buf[0]) - } else { - _p1 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall6(funcPC(libc_readlinkat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_readlinkat_trampoline() - -//go:cgo_import_dynamic libc_readlinkat readlinkat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rename(from string, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_rename_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_rename_trampoline() - -//go:cgo_import_dynamic libc_rename rename "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Renameat(fromfd int, from string, tofd int, to string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(from) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(to) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(funcPC(libc_renameat_trampoline), uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_renameat_trampoline() - -//go:cgo_import_dynamic libc_renameat renameat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Revoke(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_revoke_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_revoke_trampoline() - -//go:cgo_import_dynamic libc_revoke revoke "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Rmdir(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_rmdir_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_rmdir_trampoline() - -//go:cgo_import_dynamic libc_rmdir rmdir "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { - r0, r1, e1 := syscall_syscall6(funcPC(libc_lseek_trampoline), uintptr(fd), uintptr(offset), uintptr(offset>>32), uintptr(whence), 0, 0) - newoffset = int64(int64(r1)<<32 | int64(r0)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_lseek_trampoline() - -//go:cgo_import_dynamic libc_lseek lseek "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := syscall_syscall6(funcPC(libc_select_trampoline), uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_select_trampoline() - -//go:cgo_import_dynamic libc_select select "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setegid(egid int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_setegid_trampoline), uintptr(egid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_setegid_trampoline() - -//go:cgo_import_dynamic libc_setegid setegid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Seteuid(euid int) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_seteuid_trampoline), uintptr(euid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_seteuid_trampoline() - -//go:cgo_import_dynamic libc_seteuid seteuid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setgid(gid int) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_setgid_trampoline), uintptr(gid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_setgid_trampoline() - -//go:cgo_import_dynamic libc_setgid setgid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setlogin(name string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(name) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_setlogin_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_setlogin_trampoline() - -//go:cgo_import_dynamic libc_setlogin setlogin "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpgid(pid int, pgid int) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_setpgid_trampoline), uintptr(pid), uintptr(pgid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_setpgid_trampoline() - -//go:cgo_import_dynamic libc_setpgid setpgid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setpriority(which int, who int, prio int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_setpriority_trampoline), uintptr(which), uintptr(who), uintptr(prio)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_setpriority_trampoline() - -//go:cgo_import_dynamic libc_setpriority setpriority "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setprivexec(flag int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_setprivexec_trampoline), uintptr(flag), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_setprivexec_trampoline() - -//go:cgo_import_dynamic libc_setprivexec setprivexec "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setregid(rgid int, egid int) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_setregid_trampoline), uintptr(rgid), uintptr(egid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_setregid_trampoline() - -//go:cgo_import_dynamic libc_setregid setregid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_setreuid_trampoline), uintptr(ruid), uintptr(euid), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_setreuid_trampoline() - -//go:cgo_import_dynamic libc_setreuid setreuid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_setrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_setrlimit_trampoline() - -//go:cgo_import_dynamic libc_setrlimit setrlimit "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setsid() (pid int, err error) { - r0, _, e1 := syscall_rawSyscall(funcPC(libc_setsid_trampoline), 0, 0, 0) - pid = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_setsid_trampoline() - -//go:cgo_import_dynamic libc_setsid setsid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Settimeofday(tp *Timeval) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_settimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_settimeofday_trampoline() - -//go:cgo_import_dynamic libc_settimeofday settimeofday "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Setuid(uid int) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_setuid_trampoline), uintptr(uid), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_setuid_trampoline() - -//go:cgo_import_dynamic libc_setuid setuid "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlink(path string, link string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(link) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_symlink_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_symlink_trampoline() - -//go:cgo_import_dynamic libc_symlink symlink "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(oldpath) - if err != nil { - return - } - var _p1 *byte - _p1, err = BytePtrFromString(newpath) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_symlinkat_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_symlinkat_trampoline() - -//go:cgo_import_dynamic libc_symlinkat symlinkat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Sync() (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_sync_trampoline), 0, 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_sync_trampoline() - -//go:cgo_import_dynamic libc_sync sync "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Truncate(path string, length int64) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_truncate_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(length), uintptr(length>>32)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_truncate_trampoline() - -//go:cgo_import_dynamic libc_truncate truncate "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Umask(newmask int) (oldmask int) { - r0, _, _ := syscall_syscall(funcPC(libc_umask_trampoline), uintptr(newmask), 0, 0) - oldmask = int(r0) - return -} - -func libc_umask_trampoline() - -//go:cgo_import_dynamic libc_umask umask "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Undelete(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_undelete_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_undelete_trampoline() - -//go:cgo_import_dynamic libc_undelete undelete "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlink(path string) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_unlink_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_unlink_trampoline() - -//go:cgo_import_dynamic libc_unlink unlink "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unlinkat(dirfd int, path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_unlinkat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_unlinkat_trampoline() - -//go:cgo_import_dynamic libc_unlinkat unlinkat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Unmount(path string, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_unmount_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_unmount_trampoline() - -//go:cgo_import_dynamic libc_unmount unmount "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func write(fd int, p []byte) (n int, err error) { - var _p0 unsafe.Pointer - if len(p) > 0 { - _p0 = unsafe.Pointer(&p[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := syscall_syscall(funcPC(libc_write_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p))) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_write_trampoline() - -//go:cgo_import_dynamic libc_write write "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { - r0, _, e1 := syscall_syscall9(funcPC(libc_mmap_trampoline), uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos), uintptr(pos>>32), 0, 0) - ret = uintptr(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_mmap_trampoline() - -//go:cgo_import_dynamic libc_mmap mmap "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func munmap(addr uintptr, length uintptr) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_munmap_trampoline), uintptr(addr), uintptr(length), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_munmap_trampoline() - -//go:cgo_import_dynamic libc_munmap munmap "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func readlen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_read_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func writelen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_write_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstat(fd int, stat *Stat_t) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_fstat_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_fstat_trampoline() - -//go:cgo_import_dynamic libc_fstat fstat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall6(funcPC(libc_fstatat_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_fstatat_trampoline() - -//go:cgo_import_dynamic libc_fstatat fstatat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Fstatfs(fd int, stat *Statfs_t) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_fstatfs_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_fstatfs_trampoline() - -//go:cgo_import_dynamic libc_fstatfs fstatfs "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_getfsstat_trampoline), uintptr(buf), uintptr(size), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_getfsstat_trampoline() - -//go:cgo_import_dynamic libc_getfsstat getfsstat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Lstat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_lstat_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_lstat_trampoline() - -//go:cgo_import_dynamic libc_lstat lstat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Stat(path string, stat *Stat_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_stat_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_stat_trampoline() - -//go:cgo_import_dynamic libc_stat stat "/usr/lib/libSystem.B.dylib" - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - -func Statfs(path string, stat *Statfs_t) (err error) { - var _p0 *byte - _p0, err = BytePtrFromString(path) - if err != nil { - return - } - _, _, e1 := syscall_syscall(funcPC(libc_statfs_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -func libc_statfs_trampoline() - -//go:cgo_import_dynamic libc_statfs statfs "/usr/lib/libSystem.B.dylib" diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.s b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.s deleted file mode 100644 index a99f9c1113e..00000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm.s +++ /dev/null @@ -1,289 +0,0 @@ -// go run mkasm_darwin.go arm -// Code generated by the command above; DO NOT EDIT. - -//go:build go1.12 -// +build go1.12 - -#include "textflag.h" -TEXT ·libc_getgroups_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getgroups(SB) -TEXT ·libc_setgroups_trampoline(SB),NOSPLIT,$0-0 - JMP libc_setgroups(SB) -TEXT ·libc_wait4_trampoline(SB),NOSPLIT,$0-0 - JMP libc_wait4(SB) -TEXT ·libc_accept_trampoline(SB),NOSPLIT,$0-0 - JMP libc_accept(SB) -TEXT ·libc_bind_trampoline(SB),NOSPLIT,$0-0 - JMP libc_bind(SB) -TEXT ·libc_connect_trampoline(SB),NOSPLIT,$0-0 - JMP libc_connect(SB) -TEXT ·libc_socket_trampoline(SB),NOSPLIT,$0-0 - JMP libc_socket(SB) -TEXT ·libc_getsockopt_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getsockopt(SB) -TEXT ·libc_setsockopt_trampoline(SB),NOSPLIT,$0-0 - JMP libc_setsockopt(SB) -TEXT ·libc_getpeername_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getpeername(SB) -TEXT ·libc_getsockname_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getsockname(SB) -TEXT ·libc_shutdown_trampoline(SB),NOSPLIT,$0-0 - JMP libc_shutdown(SB) -TEXT ·libc_socketpair_trampoline(SB),NOSPLIT,$0-0 - JMP libc_socketpair(SB) -TEXT ·libc_recvfrom_trampoline(SB),NOSPLIT,$0-0 - JMP libc_recvfrom(SB) -TEXT ·libc_sendto_trampoline(SB),NOSPLIT,$0-0 - JMP libc_sendto(SB) -TEXT ·libc_recvmsg_trampoline(SB),NOSPLIT,$0-0 - JMP libc_recvmsg(SB) -TEXT ·libc_sendmsg_trampoline(SB),NOSPLIT,$0-0 - JMP libc_sendmsg(SB) -TEXT ·libc_kevent_trampoline(SB),NOSPLIT,$0-0 - JMP libc_kevent(SB) -TEXT ·libc_utimes_trampoline(SB),NOSPLIT,$0-0 - JMP libc_utimes(SB) -TEXT ·libc_futimes_trampoline(SB),NOSPLIT,$0-0 - JMP libc_futimes(SB) -TEXT ·libc_poll_trampoline(SB),NOSPLIT,$0-0 - JMP libc_poll(SB) -TEXT ·libc_madvise_trampoline(SB),NOSPLIT,$0-0 - JMP libc_madvise(SB) -TEXT ·libc_mlock_trampoline(SB),NOSPLIT,$0-0 - JMP libc_mlock(SB) -TEXT ·libc_mlockall_trampoline(SB),NOSPLIT,$0-0 - JMP libc_mlockall(SB) -TEXT ·libc_mprotect_trampoline(SB),NOSPLIT,$0-0 - JMP libc_mprotect(SB) -TEXT ·libc_msync_trampoline(SB),NOSPLIT,$0-0 - JMP libc_msync(SB) -TEXT ·libc_munlock_trampoline(SB),NOSPLIT,$0-0 - JMP libc_munlock(SB) -TEXT ·libc_munlockall_trampoline(SB),NOSPLIT,$0-0 - JMP libc_munlockall(SB) -TEXT ·libc_pipe_trampoline(SB),NOSPLIT,$0-0 - JMP libc_pipe(SB) -TEXT ·libc_getxattr_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getxattr(SB) -TEXT ·libc_fgetxattr_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fgetxattr(SB) -TEXT ·libc_setxattr_trampoline(SB),NOSPLIT,$0-0 - JMP libc_setxattr(SB) -TEXT ·libc_fsetxattr_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fsetxattr(SB) -TEXT ·libc_removexattr_trampoline(SB),NOSPLIT,$0-0 - JMP libc_removexattr(SB) -TEXT ·libc_fremovexattr_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fremovexattr(SB) -TEXT ·libc_listxattr_trampoline(SB),NOSPLIT,$0-0 - JMP libc_listxattr(SB) -TEXT ·libc_flistxattr_trampoline(SB),NOSPLIT,$0-0 - JMP libc_flistxattr(SB) -TEXT ·libc_setattrlist_trampoline(SB),NOSPLIT,$0-0 - JMP libc_setattrlist(SB) -TEXT ·libc_fcntl_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fcntl(SB) -TEXT ·libc_kill_trampoline(SB),NOSPLIT,$0-0 - JMP libc_kill(SB) -TEXT ·libc_ioctl_trampoline(SB),NOSPLIT,$0-0 - JMP libc_ioctl(SB) -TEXT ·libc_sysctl_trampoline(SB),NOSPLIT,$0-0 - JMP libc_sysctl(SB) -TEXT ·libc_sendfile_trampoline(SB),NOSPLIT,$0-0 - JMP libc_sendfile(SB) -TEXT ·libc_access_trampoline(SB),NOSPLIT,$0-0 - JMP libc_access(SB) -TEXT ·libc_adjtime_trampoline(SB),NOSPLIT,$0-0 - JMP libc_adjtime(SB) -TEXT ·libc_chdir_trampoline(SB),NOSPLIT,$0-0 - JMP libc_chdir(SB) -TEXT ·libc_chflags_trampoline(SB),NOSPLIT,$0-0 - JMP libc_chflags(SB) -TEXT ·libc_chmod_trampoline(SB),NOSPLIT,$0-0 - JMP libc_chmod(SB) -TEXT ·libc_chown_trampoline(SB),NOSPLIT,$0-0 - JMP libc_chown(SB) -TEXT ·libc_chroot_trampoline(SB),NOSPLIT,$0-0 - JMP libc_chroot(SB) -TEXT ·libc_clock_gettime_trampoline(SB),NOSPLIT,$0-0 - JMP libc_clock_gettime(SB) -TEXT ·libc_close_trampoline(SB),NOSPLIT,$0-0 - JMP libc_close(SB) -TEXT ·libc_clonefile_trampoline(SB),NOSPLIT,$0-0 - JMP libc_clonefile(SB) -TEXT ·libc_clonefileat_trampoline(SB),NOSPLIT,$0-0 - JMP libc_clonefileat(SB) -TEXT ·libc_dup_trampoline(SB),NOSPLIT,$0-0 - JMP libc_dup(SB) -TEXT ·libc_dup2_trampoline(SB),NOSPLIT,$0-0 - JMP libc_dup2(SB) -TEXT ·libc_exchangedata_trampoline(SB),NOSPLIT,$0-0 - JMP libc_exchangedata(SB) -TEXT ·libc_exit_trampoline(SB),NOSPLIT,$0-0 - JMP libc_exit(SB) -TEXT ·libc_faccessat_trampoline(SB),NOSPLIT,$0-0 - JMP libc_faccessat(SB) -TEXT ·libc_fchdir_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fchdir(SB) -TEXT ·libc_fchflags_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fchflags(SB) -TEXT ·libc_fchmod_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fchmod(SB) -TEXT ·libc_fchmodat_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fchmodat(SB) -TEXT ·libc_fchown_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fchown(SB) -TEXT ·libc_fchownat_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fchownat(SB) -TEXT ·libc_fclonefileat_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fclonefileat(SB) -TEXT ·libc_flock_trampoline(SB),NOSPLIT,$0-0 - JMP libc_flock(SB) -TEXT ·libc_fpathconf_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fpathconf(SB) -TEXT ·libc_fsync_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fsync(SB) -TEXT ·libc_ftruncate_trampoline(SB),NOSPLIT,$0-0 - JMP libc_ftruncate(SB) -TEXT ·libc_getcwd_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getcwd(SB) -TEXT ·libc_getdtablesize_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getdtablesize(SB) -TEXT ·libc_getegid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getegid(SB) -TEXT ·libc_geteuid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_geteuid(SB) -TEXT ·libc_getgid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getgid(SB) -TEXT ·libc_getpgid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getpgid(SB) -TEXT ·libc_getpgrp_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getpgrp(SB) -TEXT ·libc_getpid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getpid(SB) -TEXT ·libc_getppid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getppid(SB) -TEXT ·libc_getpriority_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getpriority(SB) -TEXT ·libc_getrlimit_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getrlimit(SB) -TEXT ·libc_getrusage_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getrusage(SB) -TEXT ·libc_getsid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getsid(SB) -TEXT ·libc_gettimeofday_trampoline(SB),NOSPLIT,$0-0 - JMP libc_gettimeofday(SB) -TEXT ·libc_getuid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getuid(SB) -TEXT ·libc_issetugid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_issetugid(SB) -TEXT ·libc_kqueue_trampoline(SB),NOSPLIT,$0-0 - JMP libc_kqueue(SB) -TEXT ·libc_lchown_trampoline(SB),NOSPLIT,$0-0 - JMP libc_lchown(SB) -TEXT ·libc_link_trampoline(SB),NOSPLIT,$0-0 - JMP libc_link(SB) -TEXT ·libc_linkat_trampoline(SB),NOSPLIT,$0-0 - JMP libc_linkat(SB) -TEXT ·libc_listen_trampoline(SB),NOSPLIT,$0-0 - JMP libc_listen(SB) -TEXT ·libc_mkdir_trampoline(SB),NOSPLIT,$0-0 - JMP libc_mkdir(SB) -TEXT ·libc_mkdirat_trampoline(SB),NOSPLIT,$0-0 - JMP libc_mkdirat(SB) -TEXT ·libc_mkfifo_trampoline(SB),NOSPLIT,$0-0 - JMP libc_mkfifo(SB) -TEXT ·libc_mknod_trampoline(SB),NOSPLIT,$0-0 - JMP libc_mknod(SB) -TEXT ·libc_open_trampoline(SB),NOSPLIT,$0-0 - JMP libc_open(SB) -TEXT ·libc_openat_trampoline(SB),NOSPLIT,$0-0 - JMP libc_openat(SB) -TEXT ·libc_pathconf_trampoline(SB),NOSPLIT,$0-0 - JMP libc_pathconf(SB) -TEXT ·libc_pread_trampoline(SB),NOSPLIT,$0-0 - JMP libc_pread(SB) -TEXT ·libc_pwrite_trampoline(SB),NOSPLIT,$0-0 - JMP libc_pwrite(SB) -TEXT ·libc_read_trampoline(SB),NOSPLIT,$0-0 - JMP libc_read(SB) -TEXT ·libc_readlink_trampoline(SB),NOSPLIT,$0-0 - JMP libc_readlink(SB) -TEXT ·libc_readlinkat_trampoline(SB),NOSPLIT,$0-0 - JMP libc_readlinkat(SB) -TEXT ·libc_rename_trampoline(SB),NOSPLIT,$0-0 - JMP libc_rename(SB) -TEXT ·libc_renameat_trampoline(SB),NOSPLIT,$0-0 - JMP libc_renameat(SB) -TEXT ·libc_revoke_trampoline(SB),NOSPLIT,$0-0 - JMP libc_revoke(SB) -TEXT ·libc_rmdir_trampoline(SB),NOSPLIT,$0-0 - JMP libc_rmdir(SB) -TEXT ·libc_lseek_trampoline(SB),NOSPLIT,$0-0 - JMP libc_lseek(SB) -TEXT ·libc_select_trampoline(SB),NOSPLIT,$0-0 - JMP libc_select(SB) -TEXT ·libc_setegid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_setegid(SB) -TEXT ·libc_seteuid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_seteuid(SB) -TEXT ·libc_setgid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_setgid(SB) -TEXT ·libc_setlogin_trampoline(SB),NOSPLIT,$0-0 - JMP libc_setlogin(SB) -TEXT ·libc_setpgid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_setpgid(SB) -TEXT ·libc_setpriority_trampoline(SB),NOSPLIT,$0-0 - JMP libc_setpriority(SB) -TEXT ·libc_setprivexec_trampoline(SB),NOSPLIT,$0-0 - JMP libc_setprivexec(SB) -TEXT ·libc_setregid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_setregid(SB) -TEXT ·libc_setreuid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_setreuid(SB) -TEXT ·libc_setrlimit_trampoline(SB),NOSPLIT,$0-0 - JMP libc_setrlimit(SB) -TEXT ·libc_setsid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_setsid(SB) -TEXT ·libc_settimeofday_trampoline(SB),NOSPLIT,$0-0 - JMP libc_settimeofday(SB) -TEXT ·libc_setuid_trampoline(SB),NOSPLIT,$0-0 - JMP libc_setuid(SB) -TEXT ·libc_symlink_trampoline(SB),NOSPLIT,$0-0 - JMP libc_symlink(SB) -TEXT ·libc_symlinkat_trampoline(SB),NOSPLIT,$0-0 - JMP libc_symlinkat(SB) -TEXT ·libc_sync_trampoline(SB),NOSPLIT,$0-0 - JMP libc_sync(SB) -TEXT ·libc_truncate_trampoline(SB),NOSPLIT,$0-0 - JMP libc_truncate(SB) -TEXT ·libc_umask_trampoline(SB),NOSPLIT,$0-0 - JMP libc_umask(SB) -TEXT ·libc_undelete_trampoline(SB),NOSPLIT,$0-0 - JMP libc_undelete(SB) -TEXT ·libc_unlink_trampoline(SB),NOSPLIT,$0-0 - JMP libc_unlink(SB) -TEXT ·libc_unlinkat_trampoline(SB),NOSPLIT,$0-0 - JMP libc_unlinkat(SB) -TEXT ·libc_unmount_trampoline(SB),NOSPLIT,$0-0 - JMP libc_unmount(SB) -TEXT ·libc_write_trampoline(SB),NOSPLIT,$0-0 - JMP libc_write(SB) -TEXT ·libc_mmap_trampoline(SB),NOSPLIT,$0-0 - JMP libc_mmap(SB) -TEXT ·libc_munmap_trampoline(SB),NOSPLIT,$0-0 - JMP libc_munmap(SB) -TEXT ·libc_fstat_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fstat(SB) -TEXT ·libc_fstatat_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fstatat(SB) -TEXT ·libc_fstatfs_trampoline(SB),NOSPLIT,$0-0 - JMP libc_fstatfs(SB) -TEXT ·libc_getfsstat_trampoline(SB),NOSPLIT,$0-0 - JMP libc_getfsstat(SB) -TEXT ·libc_lstat_trampoline(SB),NOSPLIT,$0-0 - JMP libc_lstat(SB) -TEXT ·libc_stat_trampoline(SB),NOSPLIT,$0-0 - JMP libc_stat(SB) -TEXT ·libc_statfs_trampoline(SB),NOSPLIT,$0-0 - JMP libc_statfs(SB) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.go index d30ec4e29a0..cec595d553a 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.go @@ -16,25 +16,25 @@ var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func closedir(dir uintptr) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_closedir_trampoline), uintptr(dir), 0, 0) + _, _, e1 := syscall_syscall(libc_closedir_trampoline_addr, uintptr(dir), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_closedir_trampoline() +var libc_closedir_trampoline_addr uintptr //go:cgo_import_dynamic libc_closedir closedir "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func readdir_r(dir uintptr, entry *Dirent, result **Dirent) (res Errno) { - r0, _, _ := syscall_syscall(funcPC(libc_readdir_r_trampoline), uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result))) + r0, _, _ := syscall_syscall(libc_readdir_r_trampoline_addr, uintptr(dir), uintptr(unsafe.Pointer(entry)), uintptr(unsafe.Pointer(result))) res = Errno(r0) return } -func libc_readdir_r_trampoline() +var libc_readdir_r_trampoline_addr uintptr //go:cgo_import_dynamic libc_readdir_r readdir_r "/usr/lib/libSystem.B.dylib" diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.s b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.s index a5f96ffb07d..357989722cf 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.s +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.1_13.s @@ -5,9 +5,21 @@ // +build go1.13 #include "textflag.h" -TEXT ·libc_fdopendir_trampoline(SB),NOSPLIT,$0-0 + +TEXT libc_fdopendir_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fdopendir(SB) -TEXT ·libc_closedir_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fdopendir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fdopendir_trampoline_addr(SB)/8, $libc_fdopendir_trampoline<>(SB) + +TEXT libc_closedir_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_closedir(SB) -TEXT ·libc_readdir_r_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_closedir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_closedir_trampoline_addr(SB)/8, $libc_closedir_trampoline<>(SB) + +TEXT libc_readdir_r_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_readdir_r(SB) + +GLOBL ·libc_readdir_r_trampoline_addr(SB), RODATA, $8 +DATA ·libc_readdir_r_trampoline_addr(SB)/8, $libc_readdir_r_trampoline<>(SB) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go index a10df58d00e..f2ee2bd33b9 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go @@ -16,7 +16,7 @@ var _ syscall.Errno // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func getgroups(ngid int, gid *_Gid_t) (n int, err error) { - r0, _, e1 := syscall_rawSyscall(funcPC(libc_getgroups_trampoline), uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + r0, _, e1 := syscall_rawSyscall(libc_getgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -24,28 +24,28 @@ func getgroups(ngid int, gid *_Gid_t) (n int, err error) { return } -func libc_getgroups_trampoline() +var libc_getgroups_trampoline_addr uintptr //go:cgo_import_dynamic libc_getgroups getgroups "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func setgroups(ngid int, gid *_Gid_t) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_setgroups_trampoline), uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) + _, _, e1 := syscall_rawSyscall(libc_setgroups_trampoline_addr, uintptr(ngid), uintptr(unsafe.Pointer(gid)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_setgroups_trampoline() +var libc_setgroups_trampoline_addr uintptr //go:cgo_import_dynamic libc_setgroups setgroups "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err error) { - r0, _, e1 := syscall_syscall6(funcPC(libc_wait4_trampoline), uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) + r0, _, e1 := syscall_syscall6(libc_wait4_trampoline_addr, uintptr(pid), uintptr(unsafe.Pointer(wstatus)), uintptr(options), uintptr(unsafe.Pointer(rusage)), 0, 0) wpid = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -53,14 +53,14 @@ func wait4(pid int, wstatus *_C_int, options int, rusage *Rusage) (wpid int, err return } -func libc_wait4_trampoline() +var libc_wait4_trampoline_addr uintptr //go:cgo_import_dynamic libc_wait4 wait4 "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_accept_trampoline), uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + r0, _, e1 := syscall_syscall(libc_accept_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -68,42 +68,42 @@ func accept(s int, rsa *RawSockaddrAny, addrlen *_Socklen) (fd int, err error) { return } -func libc_accept_trampoline() +var libc_accept_trampoline_addr uintptr //go:cgo_import_dynamic libc_accept accept "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func bind(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_bind_trampoline), uintptr(s), uintptr(addr), uintptr(addrlen)) + _, _, e1 := syscall_syscall(libc_bind_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_bind_trampoline() +var libc_bind_trampoline_addr uintptr //go:cgo_import_dynamic libc_bind bind "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func connect(s int, addr unsafe.Pointer, addrlen _Socklen) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_connect_trampoline), uintptr(s), uintptr(addr), uintptr(addrlen)) + _, _, e1 := syscall_syscall(libc_connect_trampoline_addr, uintptr(s), uintptr(addr), uintptr(addrlen)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_connect_trampoline() +var libc_connect_trampoline_addr uintptr //go:cgo_import_dynamic libc_connect connect "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func socket(domain int, typ int, proto int) (fd int, err error) { - r0, _, e1 := syscall_rawSyscall(funcPC(libc_socket_trampoline), uintptr(domain), uintptr(typ), uintptr(proto)) + r0, _, e1 := syscall_rawSyscall(libc_socket_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto)) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -111,91 +111,91 @@ func socket(domain int, typ int, proto int) (fd int, err error) { return } -func libc_socket_trampoline() +var libc_socket_trampoline_addr uintptr //go:cgo_import_dynamic libc_socket socket "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func getsockopt(s int, level int, name int, val unsafe.Pointer, vallen *_Socklen) (err error) { - _, _, e1 := syscall_syscall6(funcPC(libc_getsockopt_trampoline), uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) + _, _, e1 := syscall_syscall6(libc_getsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(unsafe.Pointer(vallen)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_getsockopt_trampoline() +var libc_getsockopt_trampoline_addr uintptr //go:cgo_import_dynamic libc_getsockopt getsockopt "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func setsockopt(s int, level int, name int, val unsafe.Pointer, vallen uintptr) (err error) { - _, _, e1 := syscall_syscall6(funcPC(libc_setsockopt_trampoline), uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) + _, _, e1 := syscall_syscall6(libc_setsockopt_trampoline_addr, uintptr(s), uintptr(level), uintptr(name), uintptr(val), uintptr(vallen), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_setsockopt_trampoline() +var libc_setsockopt_trampoline_addr uintptr //go:cgo_import_dynamic libc_setsockopt setsockopt "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func getpeername(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_getpeername_trampoline), uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + _, _, e1 := syscall_rawSyscall(libc_getpeername_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) if e1 != 0 { err = errnoErr(e1) } return } -func libc_getpeername_trampoline() +var libc_getpeername_trampoline_addr uintptr //go:cgo_import_dynamic libc_getpeername getpeername "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func getsockname(fd int, rsa *RawSockaddrAny, addrlen *_Socklen) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_getsockname_trampoline), uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + _, _, e1 := syscall_rawSyscall(libc_getsockname_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) if e1 != 0 { err = errnoErr(e1) } return } -func libc_getsockname_trampoline() +var libc_getsockname_trampoline_addr uintptr //go:cgo_import_dynamic libc_getsockname getsockname "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Shutdown(s int, how int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_shutdown_trampoline), uintptr(s), uintptr(how), 0) + _, _, e1 := syscall_syscall(libc_shutdown_trampoline_addr, uintptr(s), uintptr(how), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_shutdown_trampoline() +var libc_shutdown_trampoline_addr uintptr //go:cgo_import_dynamic libc_shutdown shutdown "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func socketpair(domain int, typ int, proto int, fd *[2]int32) (err error) { - _, _, e1 := syscall_rawSyscall6(funcPC(libc_socketpair_trampoline), uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) + _, _, e1 := syscall_rawSyscall6(libc_socketpair_trampoline_addr, uintptr(domain), uintptr(typ), uintptr(proto), uintptr(unsafe.Pointer(fd)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_socketpair_trampoline() +var libc_socketpair_trampoline_addr uintptr //go:cgo_import_dynamic libc_socketpair socketpair "/usr/lib/libSystem.B.dylib" @@ -208,7 +208,7 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := syscall_syscall6(funcPC(libc_recvfrom_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + r0, _, e1 := syscall_syscall6(libc_recvfrom_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -216,7 +216,7 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl return } -func libc_recvfrom_trampoline() +var libc_recvfrom_trampoline_addr uintptr //go:cgo_import_dynamic libc_recvfrom recvfrom "/usr/lib/libSystem.B.dylib" @@ -229,21 +229,21 @@ func sendto(s int, buf []byte, flags int, to unsafe.Pointer, addrlen _Socklen) ( } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := syscall_syscall6(funcPC(libc_sendto_trampoline), uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) + _, _, e1 := syscall_syscall6(libc_sendto_trampoline_addr, uintptr(s), uintptr(_p0), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(addrlen)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_sendto_trampoline() +var libc_sendto_trampoline_addr uintptr //go:cgo_import_dynamic libc_sendto sendto "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_recvmsg_trampoline), uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + r0, _, e1 := syscall_syscall(libc_recvmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -251,14 +251,14 @@ func recvmsg(s int, msg *Msghdr, flags int) (n int, err error) { return } -func libc_recvmsg_trampoline() +var libc_recvmsg_trampoline_addr uintptr //go:cgo_import_dynamic libc_recvmsg recvmsg "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_sendmsg_trampoline), uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) + r0, _, e1 := syscall_syscall(libc_sendmsg_trampoline_addr, uintptr(s), uintptr(unsafe.Pointer(msg)), uintptr(flags)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -266,14 +266,14 @@ func sendmsg(s int, msg *Msghdr, flags int) (n int, err error) { return } -func libc_sendmsg_trampoline() +var libc_sendmsg_trampoline_addr uintptr //go:cgo_import_dynamic libc_sendmsg sendmsg "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, nevent int, timeout *Timespec) (n int, err error) { - r0, _, e1 := syscall_syscall6(funcPC(libc_kevent_trampoline), uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) + r0, _, e1 := syscall_syscall6(libc_kevent_trampoline_addr, uintptr(kq), uintptr(change), uintptr(nchange), uintptr(event), uintptr(nevent), uintptr(unsafe.Pointer(timeout))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -281,7 +281,7 @@ func kevent(kq int, change unsafe.Pointer, nchange int, event unsafe.Pointer, ne return } -func libc_kevent_trampoline() +var libc_kevent_trampoline_addr uintptr //go:cgo_import_dynamic libc_kevent kevent "/usr/lib/libSystem.B.dylib" @@ -293,35 +293,35 @@ func utimes(path string, timeval *[2]Timeval) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_utimes_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) + _, _, e1 := syscall_syscall(libc_utimes_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(timeval)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_utimes_trampoline() +var libc_utimes_trampoline_addr uintptr //go:cgo_import_dynamic libc_utimes utimes "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func futimes(fd int, timeval *[2]Timeval) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_futimes_trampoline), uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) + _, _, e1 := syscall_syscall(libc_futimes_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(timeval)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_futimes_trampoline() +var libc_futimes_trampoline_addr uintptr //go:cgo_import_dynamic libc_futimes futimes "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_poll_trampoline), uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) + r0, _, e1 := syscall_syscall(libc_poll_trampoline_addr, uintptr(unsafe.Pointer(fds)), uintptr(nfds), uintptr(timeout)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -329,7 +329,7 @@ func poll(fds *PollFd, nfds int, timeout int) (n int, err error) { return } -func libc_poll_trampoline() +var libc_poll_trampoline_addr uintptr //go:cgo_import_dynamic libc_poll poll "/usr/lib/libSystem.B.dylib" @@ -342,14 +342,14 @@ func Madvise(b []byte, behav int) (err error) { } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := syscall_syscall(funcPC(libc_madvise_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(behav)) + _, _, e1 := syscall_syscall(libc_madvise_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(behav)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_madvise_trampoline() +var libc_madvise_trampoline_addr uintptr //go:cgo_import_dynamic libc_madvise madvise "/usr/lib/libSystem.B.dylib" @@ -362,28 +362,28 @@ func Mlock(b []byte) (err error) { } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := syscall_syscall(funcPC(libc_mlock_trampoline), uintptr(_p0), uintptr(len(b)), 0) + _, _, e1 := syscall_syscall(libc_mlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_mlock_trampoline() +var libc_mlock_trampoline_addr uintptr //go:cgo_import_dynamic libc_mlock mlock "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Mlockall(flags int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_mlockall_trampoline), uintptr(flags), 0, 0) + _, _, e1 := syscall_syscall(libc_mlockall_trampoline_addr, uintptr(flags), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_mlockall_trampoline() +var libc_mlockall_trampoline_addr uintptr //go:cgo_import_dynamic libc_mlockall mlockall "/usr/lib/libSystem.B.dylib" @@ -396,14 +396,14 @@ func Mprotect(b []byte, prot int) (err error) { } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := syscall_syscall(funcPC(libc_mprotect_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(prot)) + _, _, e1 := syscall_syscall(libc_mprotect_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(prot)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_mprotect_trampoline() +var libc_mprotect_trampoline_addr uintptr //go:cgo_import_dynamic libc_mprotect mprotect "/usr/lib/libSystem.B.dylib" @@ -416,14 +416,14 @@ func Msync(b []byte, flags int) (err error) { } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := syscall_syscall(funcPC(libc_msync_trampoline), uintptr(_p0), uintptr(len(b)), uintptr(flags)) + _, _, e1 := syscall_syscall(libc_msync_trampoline_addr, uintptr(_p0), uintptr(len(b)), uintptr(flags)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_msync_trampoline() +var libc_msync_trampoline_addr uintptr //go:cgo_import_dynamic libc_msync msync "/usr/lib/libSystem.B.dylib" @@ -436,42 +436,42 @@ func Munlock(b []byte) (err error) { } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := syscall_syscall(funcPC(libc_munlock_trampoline), uintptr(_p0), uintptr(len(b)), 0) + _, _, e1 := syscall_syscall(libc_munlock_trampoline_addr, uintptr(_p0), uintptr(len(b)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_munlock_trampoline() +var libc_munlock_trampoline_addr uintptr //go:cgo_import_dynamic libc_munlock munlock "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Munlockall() (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_munlockall_trampoline), 0, 0, 0) + _, _, e1 := syscall_syscall(libc_munlockall_trampoline_addr, 0, 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_munlockall_trampoline() +var libc_munlockall_trampoline_addr uintptr //go:cgo_import_dynamic libc_munlockall munlockall "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func pipe(p *[2]int32) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_pipe_trampoline), uintptr(unsafe.Pointer(p)), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_pipe_trampoline_addr, uintptr(unsafe.Pointer(p)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_pipe_trampoline() +var libc_pipe_trampoline_addr uintptr //go:cgo_import_dynamic libc_pipe pipe "/usr/lib/libSystem.B.dylib" @@ -488,7 +488,7 @@ func getxattr(path string, attr string, dest *byte, size int, position uint32, o if err != nil { return } - r0, _, e1 := syscall_syscall6(funcPC(libc_getxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options)) + r0, _, e1 := syscall_syscall6(libc_getxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options)) sz = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -496,7 +496,7 @@ func getxattr(path string, attr string, dest *byte, size int, position uint32, o return } -func libc_getxattr_trampoline() +var libc_getxattr_trampoline_addr uintptr //go:cgo_import_dynamic libc_getxattr getxattr "/usr/lib/libSystem.B.dylib" @@ -508,7 +508,7 @@ func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, optio if err != nil { return } - r0, _, e1 := syscall_syscall6(funcPC(libc_fgetxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options)) + r0, _, e1 := syscall_syscall6(libc_fgetxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(position), uintptr(options)) sz = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -516,7 +516,7 @@ func fgetxattr(fd int, attr string, dest *byte, size int, position uint32, optio return } -func libc_fgetxattr_trampoline() +var libc_fgetxattr_trampoline_addr uintptr //go:cgo_import_dynamic libc_fgetxattr fgetxattr "/usr/lib/libSystem.B.dylib" @@ -533,14 +533,14 @@ func setxattr(path string, attr string, data *byte, size int, position uint32, o if err != nil { return } - _, _, e1 := syscall_syscall6(funcPC(libc_setxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options)) + _, _, e1 := syscall_syscall6(libc_setxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_setxattr_trampoline() +var libc_setxattr_trampoline_addr uintptr //go:cgo_import_dynamic libc_setxattr setxattr "/usr/lib/libSystem.B.dylib" @@ -552,14 +552,14 @@ func fsetxattr(fd int, attr string, data *byte, size int, position uint32, optio if err != nil { return } - _, _, e1 := syscall_syscall6(funcPC(libc_fsetxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options)) + _, _, e1 := syscall_syscall6(libc_fsetxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(data)), uintptr(size), uintptr(position), uintptr(options)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_fsetxattr_trampoline() +var libc_fsetxattr_trampoline_addr uintptr //go:cgo_import_dynamic libc_fsetxattr fsetxattr "/usr/lib/libSystem.B.dylib" @@ -576,14 +576,14 @@ func removexattr(path string, attr string, options int) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_removexattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) + _, _, e1 := syscall_syscall(libc_removexattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_removexattr_trampoline() +var libc_removexattr_trampoline_addr uintptr //go:cgo_import_dynamic libc_removexattr removexattr "/usr/lib/libSystem.B.dylib" @@ -595,14 +595,14 @@ func fremovexattr(fd int, attr string, options int) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_fremovexattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options)) + _, _, e1 := syscall_syscall(libc_fremovexattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(options)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_fremovexattr_trampoline() +var libc_fremovexattr_trampoline_addr uintptr //go:cgo_import_dynamic libc_fremovexattr fremovexattr "/usr/lib/libSystem.B.dylib" @@ -614,7 +614,7 @@ func listxattr(path string, dest *byte, size int, options int) (sz int, err erro if err != nil { return } - r0, _, e1 := syscall_syscall6(funcPC(libc_listxattr_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0) + r0, _, e1 := syscall_syscall6(libc_listxattr_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0) sz = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -622,14 +622,14 @@ func listxattr(path string, dest *byte, size int, options int) (sz int, err erro return } -func libc_listxattr_trampoline() +var libc_listxattr_trampoline_addr uintptr //go:cgo_import_dynamic libc_listxattr listxattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) { - r0, _, e1 := syscall_syscall6(funcPC(libc_flistxattr_trampoline), uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0) + r0, _, e1 := syscall_syscall6(libc_flistxattr_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(dest)), uintptr(size), uintptr(options), 0, 0) sz = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -637,28 +637,28 @@ func flistxattr(fd int, dest *byte, size int, options int) (sz int, err error) { return } -func libc_flistxattr_trampoline() +var libc_flistxattr_trampoline_addr uintptr //go:cgo_import_dynamic libc_flistxattr flistxattr "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func setattrlist(path *byte, list unsafe.Pointer, buf unsafe.Pointer, size uintptr, options int) (err error) { - _, _, e1 := syscall_syscall6(funcPC(libc_setattrlist_trampoline), uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0) + _, _, e1 := syscall_syscall6(libc_setattrlist_trampoline_addr, uintptr(unsafe.Pointer(path)), uintptr(list), uintptr(buf), uintptr(size), uintptr(options), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_setattrlist_trampoline() +var libc_setattrlist_trampoline_addr uintptr //go:cgo_import_dynamic libc_setattrlist setattrlist "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func fcntl(fd int, cmd int, arg int) (val int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_fcntl_trampoline), uintptr(fd), uintptr(cmd), uintptr(arg)) + r0, _, e1 := syscall_syscall(libc_fcntl_trampoline_addr, uintptr(fd), uintptr(cmd), uintptr(arg)) val = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -666,35 +666,35 @@ func fcntl(fd int, cmd int, arg int) (val int, err error) { return } -func libc_fcntl_trampoline() +var libc_fcntl_trampoline_addr uintptr //go:cgo_import_dynamic libc_fcntl fcntl "/usr/lib/libSystem.B.dylib" // 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(funcPC(libc_kill_trampoline), uintptr(pid), uintptr(signum), uintptr(posix)) + _, _, e1 := syscall_syscall(libc_kill_trampoline_addr, uintptr(pid), uintptr(signum), uintptr(posix)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_kill_trampoline() +var libc_kill_trampoline_addr uintptr //go:cgo_import_dynamic libc_kill kill "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func ioctl(fd int, req uint, arg uintptr) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_ioctl_trampoline), uintptr(fd), uintptr(req), uintptr(arg)) + _, _, e1 := syscall_syscall(libc_ioctl_trampoline_addr, uintptr(fd), uintptr(req), uintptr(arg)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_ioctl_trampoline() +var libc_ioctl_trampoline_addr uintptr //go:cgo_import_dynamic libc_ioctl ioctl "/usr/lib/libSystem.B.dylib" @@ -707,28 +707,28 @@ func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) } else { _p0 = unsafe.Pointer(&_zero) } - _, _, e1 := syscall_syscall6(funcPC(libc_sysctl_trampoline), uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) + _, _, e1 := syscall_syscall6(libc_sysctl_trampoline_addr, uintptr(_p0), uintptr(len(mib)), uintptr(unsafe.Pointer(old)), uintptr(unsafe.Pointer(oldlen)), uintptr(unsafe.Pointer(new)), uintptr(newlen)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_sysctl_trampoline() +var libc_sysctl_trampoline_addr uintptr //go:cgo_import_dynamic libc_sysctl sysctl "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) { - _, _, e1 := syscall_syscall6(funcPC(libc_sendfile_trampoline), uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags)) + _, _, e1 := syscall_syscall6(libc_sendfile_trampoline_addr, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_sendfile_trampoline() +var libc_sendfile_trampoline_addr uintptr //go:cgo_import_dynamic libc_sendfile sendfile "/usr/lib/libSystem.B.dylib" @@ -740,28 +740,28 @@ func Access(path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_access_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + _, _, e1 := syscall_syscall(libc_access_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_access_trampoline() +var libc_access_trampoline_addr uintptr //go:cgo_import_dynamic libc_access access "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Adjtime(delta *Timeval, olddelta *Timeval) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_adjtime_trampoline), uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) + _, _, e1 := syscall_syscall(libc_adjtime_trampoline_addr, uintptr(unsafe.Pointer(delta)), uintptr(unsafe.Pointer(olddelta)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_adjtime_trampoline() +var libc_adjtime_trampoline_addr uintptr //go:cgo_import_dynamic libc_adjtime adjtime "/usr/lib/libSystem.B.dylib" @@ -773,14 +773,14 @@ func Chdir(path string) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_chdir_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_chdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_chdir_trampoline() +var libc_chdir_trampoline_addr uintptr //go:cgo_import_dynamic libc_chdir chdir "/usr/lib/libSystem.B.dylib" @@ -792,14 +792,14 @@ func Chflags(path string, flags int) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_chflags_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + _, _, e1 := syscall_syscall(libc_chflags_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_chflags_trampoline() +var libc_chflags_trampoline_addr uintptr //go:cgo_import_dynamic libc_chflags chflags "/usr/lib/libSystem.B.dylib" @@ -811,14 +811,14 @@ func Chmod(path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_chmod_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + _, _, e1 := syscall_syscall(libc_chmod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_chmod_trampoline() +var libc_chmod_trampoline_addr uintptr //go:cgo_import_dynamic libc_chmod chmod "/usr/lib/libSystem.B.dylib" @@ -830,14 +830,14 @@ func Chown(path string, uid int, gid int) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_chown_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + _, _, e1 := syscall_syscall(libc_chown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_chown_trampoline() +var libc_chown_trampoline_addr uintptr //go:cgo_import_dynamic libc_chown chown "/usr/lib/libSystem.B.dylib" @@ -849,42 +849,42 @@ func Chroot(path string) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_chroot_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_chroot_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_chroot_trampoline() +var libc_chroot_trampoline_addr uintptr //go:cgo_import_dynamic libc_chroot chroot "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func ClockGettime(clockid int32, time *Timespec) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_clock_gettime_trampoline), uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + _, _, e1 := syscall_syscall(libc_clock_gettime_trampoline_addr, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_clock_gettime_trampoline() +var libc_clock_gettime_trampoline_addr uintptr //go:cgo_import_dynamic libc_clock_gettime clock_gettime "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Close(fd int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_close_trampoline), uintptr(fd), 0, 0) + _, _, e1 := syscall_syscall(libc_close_trampoline_addr, uintptr(fd), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_close_trampoline() +var libc_close_trampoline_addr uintptr //go:cgo_import_dynamic libc_close close "/usr/lib/libSystem.B.dylib" @@ -901,14 +901,14 @@ func Clonefile(src string, dst string, flags int) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_clonefile_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags)) + _, _, e1 := syscall_syscall(libc_clonefile_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_clonefile_trampoline() +var libc_clonefile_trampoline_addr uintptr //go:cgo_import_dynamic libc_clonefile clonefile "/usr/lib/libSystem.B.dylib" @@ -925,21 +925,21 @@ func Clonefileat(srcDirfd int, src string, dstDirfd int, dst string, flags int) if err != nil { return } - _, _, e1 := syscall_syscall6(funcPC(libc_clonefileat_trampoline), uintptr(srcDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(dstDirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + _, _, e1 := syscall_syscall6(libc_clonefileat_trampoline_addr, uintptr(srcDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(dstDirfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_clonefileat_trampoline() +var libc_clonefileat_trampoline_addr uintptr //go:cgo_import_dynamic libc_clonefileat clonefileat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Dup(fd int) (nfd int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_dup_trampoline), uintptr(fd), 0, 0) + r0, _, e1 := syscall_syscall(libc_dup_trampoline_addr, uintptr(fd), 0, 0) nfd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -947,21 +947,21 @@ func Dup(fd int) (nfd int, err error) { return } -func libc_dup_trampoline() +var libc_dup_trampoline_addr uintptr //go:cgo_import_dynamic libc_dup dup "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Dup2(from int, to int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_dup2_trampoline), uintptr(from), uintptr(to), 0) + _, _, e1 := syscall_syscall(libc_dup2_trampoline_addr, uintptr(from), uintptr(to), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_dup2_trampoline() +var libc_dup2_trampoline_addr uintptr //go:cgo_import_dynamic libc_dup2 dup2 "/usr/lib/libSystem.B.dylib" @@ -978,25 +978,25 @@ func Exchangedata(path1 string, path2 string, options int) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_exchangedata_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) + _, _, e1 := syscall_syscall(libc_exchangedata_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(options)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_exchangedata_trampoline() +var libc_exchangedata_trampoline_addr uintptr //go:cgo_import_dynamic libc_exchangedata exchangedata "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Exit(code int) { - syscall_syscall(funcPC(libc_exit_trampoline), uintptr(code), 0, 0) + syscall_syscall(libc_exit_trampoline_addr, uintptr(code), 0, 0) return } -func libc_exit_trampoline() +var libc_exit_trampoline_addr uintptr //go:cgo_import_dynamic libc_exit exit "/usr/lib/libSystem.B.dylib" @@ -1008,56 +1008,56 @@ func Faccessat(dirfd int, path string, mode uint32, flags int) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall6(funcPC(libc_faccessat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + _, _, e1 := syscall_syscall6(libc_faccessat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_faccessat_trampoline() +var libc_faccessat_trampoline_addr uintptr //go:cgo_import_dynamic libc_faccessat faccessat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fchdir(fd int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_fchdir_trampoline), uintptr(fd), 0, 0) + _, _, e1 := syscall_syscall(libc_fchdir_trampoline_addr, uintptr(fd), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_fchdir_trampoline() +var libc_fchdir_trampoline_addr uintptr //go:cgo_import_dynamic libc_fchdir fchdir "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fchflags(fd int, flags int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_fchflags_trampoline), uintptr(fd), uintptr(flags), 0) + _, _, e1 := syscall_syscall(libc_fchflags_trampoline_addr, uintptr(fd), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_fchflags_trampoline() +var libc_fchflags_trampoline_addr uintptr //go:cgo_import_dynamic libc_fchflags fchflags "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fchmod(fd int, mode uint32) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_fchmod_trampoline), uintptr(fd), uintptr(mode), 0) + _, _, e1 := syscall_syscall(libc_fchmod_trampoline_addr, uintptr(fd), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_fchmod_trampoline() +var libc_fchmod_trampoline_addr uintptr //go:cgo_import_dynamic libc_fchmod fchmod "/usr/lib/libSystem.B.dylib" @@ -1069,28 +1069,28 @@ func Fchmodat(dirfd int, path string, mode uint32, flags int) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall6(funcPC(libc_fchmodat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) + _, _, e1 := syscall_syscall6(libc_fchmodat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(flags), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_fchmodat_trampoline() +var libc_fchmodat_trampoline_addr uintptr //go:cgo_import_dynamic libc_fchmodat fchmodat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fchown(fd int, uid int, gid int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_fchown_trampoline), uintptr(fd), uintptr(uid), uintptr(gid)) + _, _, e1 := syscall_syscall(libc_fchown_trampoline_addr, uintptr(fd), uintptr(uid), uintptr(gid)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_fchown_trampoline() +var libc_fchown_trampoline_addr uintptr //go:cgo_import_dynamic libc_fchown fchown "/usr/lib/libSystem.B.dylib" @@ -1102,14 +1102,14 @@ func Fchownat(dirfd int, path string, uid int, gid int, flags int) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall6(funcPC(libc_fchownat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) + _, _, e1 := syscall_syscall6(libc_fchownat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_fchownat_trampoline() +var libc_fchownat_trampoline_addr uintptr //go:cgo_import_dynamic libc_fchownat fchownat "/usr/lib/libSystem.B.dylib" @@ -1121,35 +1121,35 @@ func Fclonefileat(srcDirfd int, dstDirfd int, dst string, flags int) (err error) if err != nil { return } - _, _, e1 := syscall_syscall6(funcPC(libc_fclonefileat_trampoline), uintptr(srcDirfd), uintptr(dstDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0) + _, _, e1 := syscall_syscall6(libc_fclonefileat_trampoline_addr, uintptr(srcDirfd), uintptr(dstDirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_fclonefileat_trampoline() +var libc_fclonefileat_trampoline_addr uintptr //go:cgo_import_dynamic libc_fclonefileat fclonefileat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Flock(fd int, how int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_flock_trampoline), uintptr(fd), uintptr(how), 0) + _, _, e1 := syscall_syscall(libc_flock_trampoline_addr, uintptr(fd), uintptr(how), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_flock_trampoline() +var libc_flock_trampoline_addr uintptr //go:cgo_import_dynamic libc_flock flock "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fpathconf(fd int, name int) (val int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_fpathconf_trampoline), uintptr(fd), uintptr(name), 0) + r0, _, e1 := syscall_syscall(libc_fpathconf_trampoline_addr, uintptr(fd), uintptr(name), 0) val = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1157,35 +1157,35 @@ func Fpathconf(fd int, name int) (val int, err error) { return } -func libc_fpathconf_trampoline() +var libc_fpathconf_trampoline_addr uintptr //go:cgo_import_dynamic libc_fpathconf fpathconf "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fsync(fd int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_fsync_trampoline), uintptr(fd), 0, 0) + _, _, e1 := syscall_syscall(libc_fsync_trampoline_addr, uintptr(fd), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_fsync_trampoline() +var libc_fsync_trampoline_addr uintptr //go:cgo_import_dynamic libc_fsync fsync "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Ftruncate(fd int, length int64) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_ftruncate_trampoline), uintptr(fd), uintptr(length), 0) + _, _, e1 := syscall_syscall(libc_ftruncate_trampoline_addr, uintptr(fd), uintptr(length), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_ftruncate_trampoline() +var libc_ftruncate_trampoline_addr uintptr //go:cgo_import_dynamic libc_ftruncate ftruncate "/usr/lib/libSystem.B.dylib" @@ -1198,7 +1198,7 @@ func Getcwd(buf []byte) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := syscall_syscall(funcPC(libc_getcwd_trampoline), uintptr(_p0), uintptr(len(buf)), 0) + r0, _, e1 := syscall_syscall(libc_getcwd_trampoline_addr, uintptr(_p0), uintptr(len(buf)), 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1206,62 +1206,62 @@ func Getcwd(buf []byte) (n int, err error) { return } -func libc_getcwd_trampoline() +var libc_getcwd_trampoline_addr uintptr //go:cgo_import_dynamic libc_getcwd getcwd "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getdtablesize() (size int) { - r0, _, _ := syscall_syscall(funcPC(libc_getdtablesize_trampoline), 0, 0, 0) + r0, _, _ := syscall_syscall(libc_getdtablesize_trampoline_addr, 0, 0, 0) size = int(r0) return } -func libc_getdtablesize_trampoline() +var libc_getdtablesize_trampoline_addr uintptr //go:cgo_import_dynamic libc_getdtablesize getdtablesize "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getegid() (egid int) { - r0, _, _ := syscall_rawSyscall(funcPC(libc_getegid_trampoline), 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getegid_trampoline_addr, 0, 0, 0) egid = int(r0) return } -func libc_getegid_trampoline() +var libc_getegid_trampoline_addr uintptr //go:cgo_import_dynamic libc_getegid getegid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Geteuid() (uid int) { - r0, _, _ := syscall_rawSyscall(funcPC(libc_geteuid_trampoline), 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_geteuid_trampoline_addr, 0, 0, 0) uid = int(r0) return } -func libc_geteuid_trampoline() +var libc_geteuid_trampoline_addr uintptr //go:cgo_import_dynamic libc_geteuid geteuid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getgid() (gid int) { - r0, _, _ := syscall_rawSyscall(funcPC(libc_getgid_trampoline), 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getgid_trampoline_addr, 0, 0, 0) gid = int(r0) return } -func libc_getgid_trampoline() +var libc_getgid_trampoline_addr uintptr //go:cgo_import_dynamic libc_getgid getgid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpgid(pid int) (pgid int, err error) { - r0, _, e1 := syscall_rawSyscall(funcPC(libc_getpgid_trampoline), uintptr(pid), 0, 0) + r0, _, e1 := syscall_rawSyscall(libc_getpgid_trampoline_addr, uintptr(pid), 0, 0) pgid = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1269,50 +1269,50 @@ func Getpgid(pid int) (pgid int, err error) { return } -func libc_getpgid_trampoline() +var libc_getpgid_trampoline_addr uintptr //go:cgo_import_dynamic libc_getpgid getpgid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpgrp() (pgrp int) { - r0, _, _ := syscall_rawSyscall(funcPC(libc_getpgrp_trampoline), 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getpgrp_trampoline_addr, 0, 0, 0) pgrp = int(r0) return } -func libc_getpgrp_trampoline() +var libc_getpgrp_trampoline_addr uintptr //go:cgo_import_dynamic libc_getpgrp getpgrp "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpid() (pid int) { - r0, _, _ := syscall_rawSyscall(funcPC(libc_getpid_trampoline), 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getpid_trampoline_addr, 0, 0, 0) pid = int(r0) return } -func libc_getpid_trampoline() +var libc_getpid_trampoline_addr uintptr //go:cgo_import_dynamic libc_getpid getpid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getppid() (ppid int) { - r0, _, _ := syscall_rawSyscall(funcPC(libc_getppid_trampoline), 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getppid_trampoline_addr, 0, 0, 0) ppid = int(r0) return } -func libc_getppid_trampoline() +var libc_getppid_trampoline_addr uintptr //go:cgo_import_dynamic libc_getppid getppid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getpriority(which int, who int) (prio int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_getpriority_trampoline), uintptr(which), uintptr(who), 0) + r0, _, e1 := syscall_syscall(libc_getpriority_trampoline_addr, uintptr(which), uintptr(who), 0) prio = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1320,42 +1320,42 @@ func Getpriority(which int, who int) (prio int, err error) { return } -func libc_getpriority_trampoline() +var libc_getpriority_trampoline_addr uintptr //go:cgo_import_dynamic libc_getpriority getpriority "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_getrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + _, _, e1 := syscall_rawSyscall(libc_getrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_getrlimit_trampoline() +var libc_getrlimit_trampoline_addr uintptr //go:cgo_import_dynamic libc_getrlimit getrlimit "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getrusage(who int, rusage *Rusage) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_getrusage_trampoline), uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) + _, _, e1 := syscall_rawSyscall(libc_getrusage_trampoline_addr, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_getrusage_trampoline() +var libc_getrusage_trampoline_addr uintptr //go:cgo_import_dynamic libc_getrusage getrusage "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getsid(pid int) (sid int, err error) { - r0, _, e1 := syscall_rawSyscall(funcPC(libc_getsid_trampoline), uintptr(pid), 0, 0) + r0, _, e1 := syscall_rawSyscall(libc_getsid_trampoline_addr, uintptr(pid), 0, 0) sid = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1363,52 +1363,52 @@ func Getsid(pid int) (sid int, err error) { return } -func libc_getsid_trampoline() +var libc_getsid_trampoline_addr uintptr //go:cgo_import_dynamic libc_getsid getsid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Gettimeofday(tp *Timeval) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_gettimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_gettimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_gettimeofday_trampoline() +var libc_gettimeofday_trampoline_addr uintptr //go:cgo_import_dynamic libc_gettimeofday gettimeofday "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Getuid() (uid int) { - r0, _, _ := syscall_rawSyscall(funcPC(libc_getuid_trampoline), 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_getuid_trampoline_addr, 0, 0, 0) uid = int(r0) return } -func libc_getuid_trampoline() +var libc_getuid_trampoline_addr uintptr //go:cgo_import_dynamic libc_getuid getuid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Issetugid() (tainted bool) { - r0, _, _ := syscall_rawSyscall(funcPC(libc_issetugid_trampoline), 0, 0, 0) + r0, _, _ := syscall_rawSyscall(libc_issetugid_trampoline_addr, 0, 0, 0) tainted = bool(r0 != 0) return } -func libc_issetugid_trampoline() +var libc_issetugid_trampoline_addr uintptr //go:cgo_import_dynamic libc_issetugid issetugid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Kqueue() (fd int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_kqueue_trampoline), 0, 0, 0) + r0, _, e1 := syscall_syscall(libc_kqueue_trampoline_addr, 0, 0, 0) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1416,7 +1416,7 @@ func Kqueue() (fd int, err error) { return } -func libc_kqueue_trampoline() +var libc_kqueue_trampoline_addr uintptr //go:cgo_import_dynamic libc_kqueue kqueue "/usr/lib/libSystem.B.dylib" @@ -1428,14 +1428,14 @@ func Lchown(path string, uid int, gid int) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_lchown_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) + _, _, e1 := syscall_syscall(libc_lchown_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(uid), uintptr(gid)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_lchown_trampoline() +var libc_lchown_trampoline_addr uintptr //go:cgo_import_dynamic libc_lchown lchown "/usr/lib/libSystem.B.dylib" @@ -1452,14 +1452,14 @@ func Link(path string, link string) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_link_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + _, _, e1 := syscall_syscall(libc_link_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_link_trampoline() +var libc_link_trampoline_addr uintptr //go:cgo_import_dynamic libc_link link "/usr/lib/libSystem.B.dylib" @@ -1476,28 +1476,28 @@ func Linkat(pathfd int, path string, linkfd int, link string, flags int) (err er if err != nil { return } - _, _, e1 := syscall_syscall6(funcPC(libc_linkat_trampoline), uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) + _, _, e1 := syscall_syscall6(libc_linkat_trampoline_addr, uintptr(pathfd), uintptr(unsafe.Pointer(_p0)), uintptr(linkfd), uintptr(unsafe.Pointer(_p1)), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_linkat_trampoline() +var libc_linkat_trampoline_addr uintptr //go:cgo_import_dynamic libc_linkat linkat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Listen(s int, backlog int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_listen_trampoline), uintptr(s), uintptr(backlog), 0) + _, _, e1 := syscall_syscall(libc_listen_trampoline_addr, uintptr(s), uintptr(backlog), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_listen_trampoline() +var libc_listen_trampoline_addr uintptr //go:cgo_import_dynamic libc_listen listen "/usr/lib/libSystem.B.dylib" @@ -1509,14 +1509,14 @@ func Mkdir(path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_mkdir_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + _, _, e1 := syscall_syscall(libc_mkdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_mkdir_trampoline() +var libc_mkdir_trampoline_addr uintptr //go:cgo_import_dynamic libc_mkdir mkdir "/usr/lib/libSystem.B.dylib" @@ -1528,14 +1528,14 @@ func Mkdirat(dirfd int, path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_mkdirat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) + _, _, e1 := syscall_syscall(libc_mkdirat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_mkdirat_trampoline() +var libc_mkdirat_trampoline_addr uintptr //go:cgo_import_dynamic libc_mkdirat mkdirat "/usr/lib/libSystem.B.dylib" @@ -1547,14 +1547,14 @@ func Mkfifo(path string, mode uint32) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_mkfifo_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) + _, _, e1 := syscall_syscall(libc_mkfifo_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_mkfifo_trampoline() +var libc_mkfifo_trampoline_addr uintptr //go:cgo_import_dynamic libc_mkfifo mkfifo "/usr/lib/libSystem.B.dylib" @@ -1566,14 +1566,14 @@ func Mknod(path string, mode uint32, dev int) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_mknod_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) + _, _, e1 := syscall_syscall(libc_mknod_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(dev)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_mknod_trampoline() +var libc_mknod_trampoline_addr uintptr //go:cgo_import_dynamic libc_mknod mknod "/usr/lib/libSystem.B.dylib" @@ -1585,7 +1585,7 @@ func Open(path string, mode int, perm uint32) (fd int, err error) { if err != nil { return } - r0, _, e1 := syscall_syscall(funcPC(libc_open_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) + r0, _, e1 := syscall_syscall(libc_open_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm)) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1593,7 +1593,7 @@ func Open(path string, mode int, perm uint32) (fd int, err error) { return } -func libc_open_trampoline() +var libc_open_trampoline_addr uintptr //go:cgo_import_dynamic libc_open open "/usr/lib/libSystem.B.dylib" @@ -1605,7 +1605,7 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { if err != nil { return } - r0, _, e1 := syscall_syscall6(funcPC(libc_openat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) + r0, _, e1 := syscall_syscall6(libc_openat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(mode), uintptr(perm), 0, 0) fd = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1613,7 +1613,7 @@ func Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) { return } -func libc_openat_trampoline() +var libc_openat_trampoline_addr uintptr //go:cgo_import_dynamic libc_openat openat "/usr/lib/libSystem.B.dylib" @@ -1625,7 +1625,7 @@ func Pathconf(path string, name int) (val int, err error) { if err != nil { return } - r0, _, e1 := syscall_syscall(funcPC(libc_pathconf_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) + r0, _, e1 := syscall_syscall(libc_pathconf_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(name), 0) val = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1633,7 +1633,7 @@ func Pathconf(path string, name int) (val int, err error) { return } -func libc_pathconf_trampoline() +var libc_pathconf_trampoline_addr uintptr //go:cgo_import_dynamic libc_pathconf pathconf "/usr/lib/libSystem.B.dylib" @@ -1646,7 +1646,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := syscall_syscall6(funcPC(libc_pread_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + r0, _, e1 := syscall_syscall6(libc_pread_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1654,7 +1654,7 @@ func Pread(fd int, p []byte, offset int64) (n int, err error) { return } -func libc_pread_trampoline() +var libc_pread_trampoline_addr uintptr //go:cgo_import_dynamic libc_pread pread "/usr/lib/libSystem.B.dylib" @@ -1667,7 +1667,7 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := syscall_syscall6(funcPC(libc_pwrite_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) + r0, _, e1 := syscall_syscall6(libc_pwrite_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p)), uintptr(offset), 0, 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1675,7 +1675,7 @@ func Pwrite(fd int, p []byte, offset int64) (n int, err error) { return } -func libc_pwrite_trampoline() +var libc_pwrite_trampoline_addr uintptr //go:cgo_import_dynamic libc_pwrite pwrite "/usr/lib/libSystem.B.dylib" @@ -1688,7 +1688,7 @@ func read(fd int, p []byte) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := syscall_syscall(funcPC(libc_read_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p))) + r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1696,7 +1696,7 @@ func read(fd int, p []byte) (n int, err error) { return } -func libc_read_trampoline() +var libc_read_trampoline_addr uintptr //go:cgo_import_dynamic libc_read read "/usr/lib/libSystem.B.dylib" @@ -1714,7 +1714,7 @@ func Readlink(path string, buf []byte) (n int, err error) { } else { _p1 = unsafe.Pointer(&_zero) } - r0, _, e1 := syscall_syscall(funcPC(libc_readlink_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) + r0, _, e1 := syscall_syscall(libc_readlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1722,7 +1722,7 @@ func Readlink(path string, buf []byte) (n int, err error) { return } -func libc_readlink_trampoline() +var libc_readlink_trampoline_addr uintptr //go:cgo_import_dynamic libc_readlink readlink "/usr/lib/libSystem.B.dylib" @@ -1740,7 +1740,7 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { } else { _p1 = unsafe.Pointer(&_zero) } - r0, _, e1 := syscall_syscall6(funcPC(libc_readlinkat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) + r0, _, e1 := syscall_syscall6(libc_readlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(_p1), uintptr(len(buf)), 0, 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1748,7 +1748,7 @@ func Readlinkat(dirfd int, path string, buf []byte) (n int, err error) { return } -func libc_readlinkat_trampoline() +var libc_readlinkat_trampoline_addr uintptr //go:cgo_import_dynamic libc_readlinkat readlinkat "/usr/lib/libSystem.B.dylib" @@ -1765,14 +1765,14 @@ func Rename(from string, to string) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_rename_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + _, _, e1 := syscall_syscall(libc_rename_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_rename_trampoline() +var libc_rename_trampoline_addr uintptr //go:cgo_import_dynamic libc_rename rename "/usr/lib/libSystem.B.dylib" @@ -1789,14 +1789,14 @@ func Renameat(fromfd int, from string, tofd int, to string) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall6(funcPC(libc_renameat_trampoline), uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) + _, _, e1 := syscall_syscall6(libc_renameat_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_renameat_trampoline() +var libc_renameat_trampoline_addr uintptr //go:cgo_import_dynamic libc_renameat renameat "/usr/lib/libSystem.B.dylib" @@ -1808,14 +1808,14 @@ func Revoke(path string) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_revoke_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_revoke_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_revoke_trampoline() +var libc_revoke_trampoline_addr uintptr //go:cgo_import_dynamic libc_revoke revoke "/usr/lib/libSystem.B.dylib" @@ -1827,21 +1827,21 @@ func Rmdir(path string) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_rmdir_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_rmdir_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_rmdir_trampoline() +var libc_rmdir_trampoline_addr uintptr //go:cgo_import_dynamic libc_rmdir rmdir "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_lseek_trampoline), uintptr(fd), uintptr(offset), uintptr(whence)) + r0, _, e1 := syscall_syscall(libc_lseek_trampoline_addr, uintptr(fd), uintptr(offset), uintptr(whence)) newoffset = int64(r0) if e1 != 0 { err = errnoErr(e1) @@ -1849,14 +1849,14 @@ func Seek(fd int, offset int64, whence int) (newoffset int64, err error) { return } -func libc_lseek_trampoline() +var libc_lseek_trampoline_addr uintptr //go:cgo_import_dynamic libc_lseek lseek "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err error) { - r0, _, e1 := syscall_syscall6(funcPC(libc_select_trampoline), uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) + r0, _, e1 := syscall_syscall6(libc_select_trampoline_addr, uintptr(nfd), uintptr(unsafe.Pointer(r)), uintptr(unsafe.Pointer(w)), uintptr(unsafe.Pointer(e)), uintptr(unsafe.Pointer(timeout)), 0) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -1864,49 +1864,49 @@ func Select(nfd int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (n int, err return } -func libc_select_trampoline() +var libc_select_trampoline_addr uintptr //go:cgo_import_dynamic libc_select select "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setegid(egid int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_setegid_trampoline), uintptr(egid), 0, 0) + _, _, e1 := syscall_syscall(libc_setegid_trampoline_addr, uintptr(egid), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_setegid_trampoline() +var libc_setegid_trampoline_addr uintptr //go:cgo_import_dynamic libc_setegid setegid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Seteuid(euid int) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_seteuid_trampoline), uintptr(euid), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_seteuid_trampoline_addr, uintptr(euid), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_seteuid_trampoline() +var libc_seteuid_trampoline_addr uintptr //go:cgo_import_dynamic libc_seteuid seteuid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setgid(gid int) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_setgid_trampoline), uintptr(gid), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_setgid_trampoline_addr, uintptr(gid), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_setgid_trampoline() +var libc_setgid_trampoline_addr uintptr //go:cgo_import_dynamic libc_setgid setgid "/usr/lib/libSystem.B.dylib" @@ -1918,105 +1918,105 @@ func Setlogin(name string) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_setlogin_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_setlogin_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_setlogin_trampoline() +var libc_setlogin_trampoline_addr uintptr //go:cgo_import_dynamic libc_setlogin setlogin "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setpgid(pid int, pgid int) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_setpgid_trampoline), uintptr(pid), uintptr(pgid), 0) + _, _, e1 := syscall_rawSyscall(libc_setpgid_trampoline_addr, uintptr(pid), uintptr(pgid), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_setpgid_trampoline() +var libc_setpgid_trampoline_addr uintptr //go:cgo_import_dynamic libc_setpgid setpgid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setpriority(which int, who int, prio int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_setpriority_trampoline), uintptr(which), uintptr(who), uintptr(prio)) + _, _, e1 := syscall_syscall(libc_setpriority_trampoline_addr, uintptr(which), uintptr(who), uintptr(prio)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_setpriority_trampoline() +var libc_setpriority_trampoline_addr uintptr //go:cgo_import_dynamic libc_setpriority setpriority "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setprivexec(flag int) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_setprivexec_trampoline), uintptr(flag), 0, 0) + _, _, e1 := syscall_syscall(libc_setprivexec_trampoline_addr, uintptr(flag), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_setprivexec_trampoline() +var libc_setprivexec_trampoline_addr uintptr //go:cgo_import_dynamic libc_setprivexec setprivexec "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setregid(rgid int, egid int) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_setregid_trampoline), uintptr(rgid), uintptr(egid), 0) + _, _, e1 := syscall_rawSyscall(libc_setregid_trampoline_addr, uintptr(rgid), uintptr(egid), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_setregid_trampoline() +var libc_setregid_trampoline_addr uintptr //go:cgo_import_dynamic libc_setregid setregid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setreuid(ruid int, euid int) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_setreuid_trampoline), uintptr(ruid), uintptr(euid), 0) + _, _, e1 := syscall_rawSyscall(libc_setreuid_trampoline_addr, uintptr(ruid), uintptr(euid), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_setreuid_trampoline() +var libc_setreuid_trampoline_addr uintptr //go:cgo_import_dynamic libc_setreuid setreuid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setrlimit(which int, lim *Rlimit) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_setrlimit_trampoline), uintptr(which), uintptr(unsafe.Pointer(lim)), 0) + _, _, e1 := syscall_rawSyscall(libc_setrlimit_trampoline_addr, uintptr(which), uintptr(unsafe.Pointer(lim)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_setrlimit_trampoline() +var libc_setrlimit_trampoline_addr uintptr //go:cgo_import_dynamic libc_setrlimit setrlimit "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setsid() (pid int, err error) { - r0, _, e1 := syscall_rawSyscall(funcPC(libc_setsid_trampoline), 0, 0, 0) + r0, _, e1 := syscall_rawSyscall(libc_setsid_trampoline_addr, 0, 0, 0) pid = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -2024,35 +2024,35 @@ func Setsid() (pid int, err error) { return } -func libc_setsid_trampoline() +var libc_setsid_trampoline_addr uintptr //go:cgo_import_dynamic libc_setsid setsid "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Settimeofday(tp *Timeval) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_settimeofday_trampoline), uintptr(unsafe.Pointer(tp)), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_settimeofday_trampoline_addr, uintptr(unsafe.Pointer(tp)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_settimeofday_trampoline() +var libc_settimeofday_trampoline_addr uintptr //go:cgo_import_dynamic libc_settimeofday settimeofday "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Setuid(uid int) (err error) { - _, _, e1 := syscall_rawSyscall(funcPC(libc_setuid_trampoline), uintptr(uid), 0, 0) + _, _, e1 := syscall_rawSyscall(libc_setuid_trampoline_addr, uintptr(uid), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_setuid_trampoline() +var libc_setuid_trampoline_addr uintptr //go:cgo_import_dynamic libc_setuid setuid "/usr/lib/libSystem.B.dylib" @@ -2069,14 +2069,14 @@ func Symlink(path string, link string) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_symlink_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) + _, _, e1 := syscall_syscall(libc_symlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_symlink_trampoline() +var libc_symlink_trampoline_addr uintptr //go:cgo_import_dynamic libc_symlink symlink "/usr/lib/libSystem.B.dylib" @@ -2093,28 +2093,28 @@ func Symlinkat(oldpath string, newdirfd int, newpath string) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_symlinkat_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) + _, _, e1 := syscall_syscall(libc_symlinkat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(newdirfd), uintptr(unsafe.Pointer(_p1))) if e1 != 0 { err = errnoErr(e1) } return } -func libc_symlinkat_trampoline() +var libc_symlinkat_trampoline_addr uintptr //go:cgo_import_dynamic libc_symlinkat symlinkat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Sync() (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_sync_trampoline), 0, 0, 0) + _, _, e1 := syscall_syscall(libc_sync_trampoline_addr, 0, 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_sync_trampoline() +var libc_sync_trampoline_addr uintptr //go:cgo_import_dynamic libc_sync sync "/usr/lib/libSystem.B.dylib" @@ -2126,26 +2126,26 @@ func Truncate(path string, length int64) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_truncate_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) + _, _, e1 := syscall_syscall(libc_truncate_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(length), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_truncate_trampoline() +var libc_truncate_trampoline_addr uintptr //go:cgo_import_dynamic libc_truncate truncate "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Umask(newmask int) (oldmask int) { - r0, _, _ := syscall_syscall(funcPC(libc_umask_trampoline), uintptr(newmask), 0, 0) + r0, _, _ := syscall_syscall(libc_umask_trampoline_addr, uintptr(newmask), 0, 0) oldmask = int(r0) return } -func libc_umask_trampoline() +var libc_umask_trampoline_addr uintptr //go:cgo_import_dynamic libc_umask umask "/usr/lib/libSystem.B.dylib" @@ -2157,14 +2157,14 @@ func Undelete(path string) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_undelete_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_undelete_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_undelete_trampoline() +var libc_undelete_trampoline_addr uintptr //go:cgo_import_dynamic libc_undelete undelete "/usr/lib/libSystem.B.dylib" @@ -2176,14 +2176,14 @@ func Unlink(path string) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_unlink_trampoline), uintptr(unsafe.Pointer(_p0)), 0, 0) + _, _, e1 := syscall_syscall(libc_unlink_trampoline_addr, uintptr(unsafe.Pointer(_p0)), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_unlink_trampoline() +var libc_unlink_trampoline_addr uintptr //go:cgo_import_dynamic libc_unlink unlink "/usr/lib/libSystem.B.dylib" @@ -2195,14 +2195,14 @@ func Unlinkat(dirfd int, path string, flags int) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_unlinkat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) + _, _, e1 := syscall_syscall(libc_unlinkat_trampoline_addr, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(flags)) if e1 != 0 { err = errnoErr(e1) } return } -func libc_unlinkat_trampoline() +var libc_unlinkat_trampoline_addr uintptr //go:cgo_import_dynamic libc_unlinkat unlinkat "/usr/lib/libSystem.B.dylib" @@ -2214,14 +2214,14 @@ func Unmount(path string, flags int) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_unmount_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) + _, _, e1 := syscall_syscall(libc_unmount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(flags), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_unmount_trampoline() +var libc_unmount_trampoline_addr uintptr //go:cgo_import_dynamic libc_unmount unmount "/usr/lib/libSystem.B.dylib" @@ -2234,7 +2234,7 @@ func write(fd int, p []byte) (n int, err error) { } else { _p0 = unsafe.Pointer(&_zero) } - r0, _, e1 := syscall_syscall(funcPC(libc_write_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(p))) + r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(p))) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -2242,14 +2242,14 @@ func write(fd int, p []byte) (n int, err error) { return } -func libc_write_trampoline() +var libc_write_trampoline_addr uintptr //go:cgo_import_dynamic libc_write write "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) { - r0, _, e1 := syscall_syscall6(funcPC(libc_mmap_trampoline), uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) + r0, _, e1 := syscall_syscall6(libc_mmap_trampoline_addr, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos)) ret = uintptr(r0) if e1 != 0 { err = errnoErr(e1) @@ -2257,28 +2257,28 @@ func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) ( return } -func libc_mmap_trampoline() +var libc_mmap_trampoline_addr uintptr //go:cgo_import_dynamic libc_mmap mmap "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func munmap(addr uintptr, length uintptr) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_munmap_trampoline), uintptr(addr), uintptr(length), 0) + _, _, e1 := syscall_syscall(libc_munmap_trampoline_addr, uintptr(addr), uintptr(length), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_munmap_trampoline() +var libc_munmap_trampoline_addr uintptr //go:cgo_import_dynamic libc_munmap munmap "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func readlen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_read_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + r0, _, e1 := syscall_syscall(libc_read_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -2289,7 +2289,7 @@ func readlen(fd int, buf *byte, nbuf int) (n int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func writelen(fd int, buf *byte, nbuf int) (n int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_write_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) + r0, _, e1 := syscall_syscall(libc_write_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -2300,14 +2300,14 @@ func writelen(fd int, buf *byte, nbuf int) (n 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_syscall(funcPC(libc_fstat_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_fstat_trampoline() +var libc_fstat_trampoline_addr uintptr //go:cgo_import_dynamic libc_fstat fstat "/usr/lib/libSystem.B.dylib" @@ -2319,35 +2319,35 @@ func Fstatat(fd int, path string, stat *Stat_t, flags int) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall6(funcPC(libc_fstatat_trampoline), uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) + _, _, e1 := syscall_syscall6(libc_fstatat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), uintptr(flags), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_fstatat_trampoline() +var libc_fstatat_trampoline_addr uintptr //go:cgo_import_dynamic libc_fstatat fstatat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Fstatfs(fd int, stat *Statfs_t) (err error) { - _, _, e1 := syscall_syscall(funcPC(libc_fstatfs_trampoline), uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := syscall_syscall(libc_fstatfs_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_fstatfs_trampoline() +var libc_fstatfs_trampoline_addr uintptr //go:cgo_import_dynamic libc_fstatfs fstatfs "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) { - r0, _, e1 := syscall_syscall(funcPC(libc_getfsstat_trampoline), uintptr(buf), uintptr(size), uintptr(flags)) + r0, _, e1 := syscall_syscall(libc_getfsstat_trampoline_addr, uintptr(buf), uintptr(size), uintptr(flags)) n = int(r0) if e1 != 0 { err = errnoErr(e1) @@ -2355,7 +2355,7 @@ func getfsstat(buf unsafe.Pointer, size uintptr, flags int) (n int, err error) { return } -func libc_getfsstat_trampoline() +var libc_getfsstat_trampoline_addr uintptr //go:cgo_import_dynamic libc_getfsstat getfsstat "/usr/lib/libSystem.B.dylib" @@ -2367,28 +2367,28 @@ func Lstat(path string, stat *Stat_t) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_lstat_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := syscall_syscall(libc_lstat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_lstat_trampoline() +var libc_lstat_trampoline_addr uintptr //go:cgo_import_dynamic libc_lstat lstat "/usr/lib/libSystem.B.dylib" // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func ptrace1(request int, pid int, addr uintptr, data uintptr) (err error) { - _, _, e1 := syscall_syscall6(funcPC(libc_ptrace_trampoline), uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) + _, _, e1 := syscall_syscall6(libc_ptrace_trampoline_addr, uintptr(request), uintptr(pid), uintptr(addr), uintptr(data), 0, 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_ptrace_trampoline() +var libc_ptrace_trampoline_addr uintptr //go:cgo_import_dynamic libc_ptrace ptrace "/usr/lib/libSystem.B.dylib" @@ -2400,14 +2400,14 @@ func Stat(path string, stat *Stat_t) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_stat_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := syscall_syscall(libc_stat_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_stat_trampoline() +var libc_stat_trampoline_addr uintptr //go:cgo_import_dynamic libc_stat stat "/usr/lib/libSystem.B.dylib" @@ -2419,13 +2419,13 @@ func Statfs(path string, stat *Statfs_t) (err error) { if err != nil { return } - _, _, e1 := syscall_syscall(funcPC(libc_statfs_trampoline), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) + _, _, e1 := syscall_syscall(libc_statfs_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { err = errnoErr(e1) } return } -func libc_statfs_trampoline() +var libc_statfs_trampoline_addr uintptr //go:cgo_import_dynamic libc_statfs statfs "/usr/lib/libSystem.B.dylib" diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s index e30a6974071..33e19776db4 100644 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s +++ b/src/cmd/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s @@ -5,287 +5,855 @@ // +build go1.12 #include "textflag.h" -TEXT ·libc_getgroups_trampoline(SB),NOSPLIT,$0-0 + +TEXT libc_getgroups_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getgroups(SB) -TEXT ·libc_setgroups_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getgroups_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getgroups_trampoline_addr(SB)/8, $libc_getgroups_trampoline<>(SB) + +TEXT libc_setgroups_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setgroups(SB) -TEXT ·libc_wait4_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_setgroups_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setgroups_trampoline_addr(SB)/8, $libc_setgroups_trampoline<>(SB) + +TEXT libc_wait4_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_wait4(SB) -TEXT ·libc_accept_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_wait4_trampoline_addr(SB), RODATA, $8 +DATA ·libc_wait4_trampoline_addr(SB)/8, $libc_wait4_trampoline<>(SB) + +TEXT libc_accept_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_accept(SB) -TEXT ·libc_bind_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_accept_trampoline_addr(SB), RODATA, $8 +DATA ·libc_accept_trampoline_addr(SB)/8, $libc_accept_trampoline<>(SB) + +TEXT libc_bind_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_bind(SB) -TEXT ·libc_connect_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_bind_trampoline_addr(SB), RODATA, $8 +DATA ·libc_bind_trampoline_addr(SB)/8, $libc_bind_trampoline<>(SB) + +TEXT libc_connect_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_connect(SB) -TEXT ·libc_socket_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_connect_trampoline_addr(SB), RODATA, $8 +DATA ·libc_connect_trampoline_addr(SB)/8, $libc_connect_trampoline<>(SB) + +TEXT libc_socket_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_socket(SB) -TEXT ·libc_getsockopt_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_socket_trampoline_addr(SB), RODATA, $8 +DATA ·libc_socket_trampoline_addr(SB)/8, $libc_socket_trampoline<>(SB) + +TEXT libc_getsockopt_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getsockopt(SB) -TEXT ·libc_setsockopt_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getsockopt_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getsockopt_trampoline_addr(SB)/8, $libc_getsockopt_trampoline<>(SB) + +TEXT libc_setsockopt_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setsockopt(SB) -TEXT ·libc_getpeername_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_setsockopt_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setsockopt_trampoline_addr(SB)/8, $libc_setsockopt_trampoline<>(SB) + +TEXT libc_getpeername_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getpeername(SB) -TEXT ·libc_getsockname_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getpeername_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getpeername_trampoline_addr(SB)/8, $libc_getpeername_trampoline<>(SB) + +TEXT libc_getsockname_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getsockname(SB) -TEXT ·libc_shutdown_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getsockname_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getsockname_trampoline_addr(SB)/8, $libc_getsockname_trampoline<>(SB) + +TEXT libc_shutdown_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_shutdown(SB) -TEXT ·libc_socketpair_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_shutdown_trampoline_addr(SB), RODATA, $8 +DATA ·libc_shutdown_trampoline_addr(SB)/8, $libc_shutdown_trampoline<>(SB) + +TEXT libc_socketpair_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_socketpair(SB) -TEXT ·libc_recvfrom_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_socketpair_trampoline_addr(SB), RODATA, $8 +DATA ·libc_socketpair_trampoline_addr(SB)/8, $libc_socketpair_trampoline<>(SB) + +TEXT libc_recvfrom_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_recvfrom(SB) -TEXT ·libc_sendto_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_recvfrom_trampoline_addr(SB), RODATA, $8 +DATA ·libc_recvfrom_trampoline_addr(SB)/8, $libc_recvfrom_trampoline<>(SB) + +TEXT libc_sendto_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_sendto(SB) -TEXT ·libc_recvmsg_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_sendto_trampoline_addr(SB), RODATA, $8 +DATA ·libc_sendto_trampoline_addr(SB)/8, $libc_sendto_trampoline<>(SB) + +TEXT libc_recvmsg_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_recvmsg(SB) -TEXT ·libc_sendmsg_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_recvmsg_trampoline_addr(SB), RODATA, $8 +DATA ·libc_recvmsg_trampoline_addr(SB)/8, $libc_recvmsg_trampoline<>(SB) + +TEXT libc_sendmsg_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_sendmsg(SB) -TEXT ·libc_kevent_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_sendmsg_trampoline_addr(SB), RODATA, $8 +DATA ·libc_sendmsg_trampoline_addr(SB)/8, $libc_sendmsg_trampoline<>(SB) + +TEXT libc_kevent_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_kevent(SB) -TEXT ·libc_utimes_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_kevent_trampoline_addr(SB), RODATA, $8 +DATA ·libc_kevent_trampoline_addr(SB)/8, $libc_kevent_trampoline<>(SB) + +TEXT libc_utimes_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_utimes(SB) -TEXT ·libc_futimes_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_utimes_trampoline_addr(SB), RODATA, $8 +DATA ·libc_utimes_trampoline_addr(SB)/8, $libc_utimes_trampoline<>(SB) + +TEXT libc_futimes_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_futimes(SB) -TEXT ·libc_poll_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_futimes_trampoline_addr(SB), RODATA, $8 +DATA ·libc_futimes_trampoline_addr(SB)/8, $libc_futimes_trampoline<>(SB) + +TEXT libc_poll_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_poll(SB) -TEXT ·libc_madvise_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_poll_trampoline_addr(SB), RODATA, $8 +DATA ·libc_poll_trampoline_addr(SB)/8, $libc_poll_trampoline<>(SB) + +TEXT libc_madvise_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_madvise(SB) -TEXT ·libc_mlock_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_madvise_trampoline_addr(SB), RODATA, $8 +DATA ·libc_madvise_trampoline_addr(SB)/8, $libc_madvise_trampoline<>(SB) + +TEXT libc_mlock_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_mlock(SB) -TEXT ·libc_mlockall_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_mlock_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mlock_trampoline_addr(SB)/8, $libc_mlock_trampoline<>(SB) + +TEXT libc_mlockall_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_mlockall(SB) -TEXT ·libc_mprotect_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_mlockall_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mlockall_trampoline_addr(SB)/8, $libc_mlockall_trampoline<>(SB) + +TEXT libc_mprotect_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_mprotect(SB) -TEXT ·libc_msync_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_mprotect_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mprotect_trampoline_addr(SB)/8, $libc_mprotect_trampoline<>(SB) + +TEXT libc_msync_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_msync(SB) -TEXT ·libc_munlock_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_msync_trampoline_addr(SB), RODATA, $8 +DATA ·libc_msync_trampoline_addr(SB)/8, $libc_msync_trampoline<>(SB) + +TEXT libc_munlock_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_munlock(SB) -TEXT ·libc_munlockall_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_munlock_trampoline_addr(SB), RODATA, $8 +DATA ·libc_munlock_trampoline_addr(SB)/8, $libc_munlock_trampoline<>(SB) + +TEXT libc_munlockall_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_munlockall(SB) -TEXT ·libc_pipe_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_munlockall_trampoline_addr(SB), RODATA, $8 +DATA ·libc_munlockall_trampoline_addr(SB)/8, $libc_munlockall_trampoline<>(SB) + +TEXT libc_pipe_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_pipe(SB) -TEXT ·libc_getxattr_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_pipe_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pipe_trampoline_addr(SB)/8, $libc_pipe_trampoline<>(SB) + +TEXT libc_getxattr_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getxattr(SB) -TEXT ·libc_fgetxattr_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getxattr_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getxattr_trampoline_addr(SB)/8, $libc_getxattr_trampoline<>(SB) + +TEXT libc_fgetxattr_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fgetxattr(SB) -TEXT ·libc_setxattr_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fgetxattr_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fgetxattr_trampoline_addr(SB)/8, $libc_fgetxattr_trampoline<>(SB) + +TEXT libc_setxattr_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setxattr(SB) -TEXT ·libc_fsetxattr_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_setxattr_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setxattr_trampoline_addr(SB)/8, $libc_setxattr_trampoline<>(SB) + +TEXT libc_fsetxattr_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fsetxattr(SB) -TEXT ·libc_removexattr_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fsetxattr_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fsetxattr_trampoline_addr(SB)/8, $libc_fsetxattr_trampoline<>(SB) + +TEXT libc_removexattr_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_removexattr(SB) -TEXT ·libc_fremovexattr_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_removexattr_trampoline_addr(SB), RODATA, $8 +DATA ·libc_removexattr_trampoline_addr(SB)/8, $libc_removexattr_trampoline<>(SB) + +TEXT libc_fremovexattr_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fremovexattr(SB) -TEXT ·libc_listxattr_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fremovexattr_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fremovexattr_trampoline_addr(SB)/8, $libc_fremovexattr_trampoline<>(SB) + +TEXT libc_listxattr_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_listxattr(SB) -TEXT ·libc_flistxattr_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_listxattr_trampoline_addr(SB), RODATA, $8 +DATA ·libc_listxattr_trampoline_addr(SB)/8, $libc_listxattr_trampoline<>(SB) + +TEXT libc_flistxattr_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_flistxattr(SB) -TEXT ·libc_setattrlist_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_flistxattr_trampoline_addr(SB), RODATA, $8 +DATA ·libc_flistxattr_trampoline_addr(SB)/8, $libc_flistxattr_trampoline<>(SB) + +TEXT libc_setattrlist_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setattrlist(SB) -TEXT ·libc_fcntl_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_setattrlist_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setattrlist_trampoline_addr(SB)/8, $libc_setattrlist_trampoline<>(SB) + +TEXT libc_fcntl_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fcntl(SB) -TEXT ·libc_kill_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fcntl_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fcntl_trampoline_addr(SB)/8, $libc_fcntl_trampoline<>(SB) + +TEXT libc_kill_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_kill(SB) -TEXT ·libc_ioctl_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_kill_trampoline_addr(SB), RODATA, $8 +DATA ·libc_kill_trampoline_addr(SB)/8, $libc_kill_trampoline<>(SB) + +TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_ioctl(SB) -TEXT ·libc_sysctl_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $8 +DATA ·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB) + +TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_sysctl(SB) -TEXT ·libc_sendfile_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 +DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB) + +TEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_sendfile(SB) -TEXT ·libc_access_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_sendfile_trampoline_addr(SB), RODATA, $8 +DATA ·libc_sendfile_trampoline_addr(SB)/8, $libc_sendfile_trampoline<>(SB) + +TEXT libc_access_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_access(SB) -TEXT ·libc_adjtime_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_access_trampoline_addr(SB), RODATA, $8 +DATA ·libc_access_trampoline_addr(SB)/8, $libc_access_trampoline<>(SB) + +TEXT libc_adjtime_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_adjtime(SB) -TEXT ·libc_chdir_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_adjtime_trampoline_addr(SB), RODATA, $8 +DATA ·libc_adjtime_trampoline_addr(SB)/8, $libc_adjtime_trampoline<>(SB) + +TEXT libc_chdir_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_chdir(SB) -TEXT ·libc_chflags_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_chdir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_chdir_trampoline_addr(SB)/8, $libc_chdir_trampoline<>(SB) + +TEXT libc_chflags_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_chflags(SB) -TEXT ·libc_chmod_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_chflags_trampoline_addr(SB), RODATA, $8 +DATA ·libc_chflags_trampoline_addr(SB)/8, $libc_chflags_trampoline<>(SB) + +TEXT libc_chmod_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_chmod(SB) -TEXT ·libc_chown_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_chmod_trampoline_addr(SB), RODATA, $8 +DATA ·libc_chmod_trampoline_addr(SB)/8, $libc_chmod_trampoline<>(SB) + +TEXT libc_chown_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_chown(SB) -TEXT ·libc_chroot_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_chown_trampoline_addr(SB), RODATA, $8 +DATA ·libc_chown_trampoline_addr(SB)/8, $libc_chown_trampoline<>(SB) + +TEXT libc_chroot_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_chroot(SB) -TEXT ·libc_clock_gettime_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_chroot_trampoline_addr(SB), RODATA, $8 +DATA ·libc_chroot_trampoline_addr(SB)/8, $libc_chroot_trampoline<>(SB) + +TEXT libc_clock_gettime_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_clock_gettime(SB) -TEXT ·libc_close_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_clock_gettime_trampoline_addr(SB), RODATA, $8 +DATA ·libc_clock_gettime_trampoline_addr(SB)/8, $libc_clock_gettime_trampoline<>(SB) + +TEXT libc_close_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_close(SB) -TEXT ·libc_clonefile_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_close_trampoline_addr(SB), RODATA, $8 +DATA ·libc_close_trampoline_addr(SB)/8, $libc_close_trampoline<>(SB) + +TEXT libc_clonefile_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_clonefile(SB) -TEXT ·libc_clonefileat_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_clonefile_trampoline_addr(SB), RODATA, $8 +DATA ·libc_clonefile_trampoline_addr(SB)/8, $libc_clonefile_trampoline<>(SB) + +TEXT libc_clonefileat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_clonefileat(SB) -TEXT ·libc_dup_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_clonefileat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_clonefileat_trampoline_addr(SB)/8, $libc_clonefileat_trampoline<>(SB) + +TEXT libc_dup_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_dup(SB) -TEXT ·libc_dup2_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_dup_trampoline_addr(SB), RODATA, $8 +DATA ·libc_dup_trampoline_addr(SB)/8, $libc_dup_trampoline<>(SB) + +TEXT libc_dup2_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_dup2(SB) -TEXT ·libc_exchangedata_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_dup2_trampoline_addr(SB), RODATA, $8 +DATA ·libc_dup2_trampoline_addr(SB)/8, $libc_dup2_trampoline<>(SB) + +TEXT libc_exchangedata_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_exchangedata(SB) -TEXT ·libc_exit_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_exchangedata_trampoline_addr(SB), RODATA, $8 +DATA ·libc_exchangedata_trampoline_addr(SB)/8, $libc_exchangedata_trampoline<>(SB) + +TEXT libc_exit_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_exit(SB) -TEXT ·libc_faccessat_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_exit_trampoline_addr(SB), RODATA, $8 +DATA ·libc_exit_trampoline_addr(SB)/8, $libc_exit_trampoline<>(SB) + +TEXT libc_faccessat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_faccessat(SB) -TEXT ·libc_fchdir_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_faccessat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_faccessat_trampoline_addr(SB)/8, $libc_faccessat_trampoline<>(SB) + +TEXT libc_fchdir_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fchdir(SB) -TEXT ·libc_fchflags_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fchdir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchdir_trampoline_addr(SB)/8, $libc_fchdir_trampoline<>(SB) + +TEXT libc_fchflags_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fchflags(SB) -TEXT ·libc_fchmod_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fchflags_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchflags_trampoline_addr(SB)/8, $libc_fchflags_trampoline<>(SB) + +TEXT libc_fchmod_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fchmod(SB) -TEXT ·libc_fchmodat_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fchmod_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchmod_trampoline_addr(SB)/8, $libc_fchmod_trampoline<>(SB) + +TEXT libc_fchmodat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fchmodat(SB) -TEXT ·libc_fchown_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fchmodat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchmodat_trampoline_addr(SB)/8, $libc_fchmodat_trampoline<>(SB) + +TEXT libc_fchown_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fchown(SB) -TEXT ·libc_fchownat_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fchown_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchown_trampoline_addr(SB)/8, $libc_fchown_trampoline<>(SB) + +TEXT libc_fchownat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fchownat(SB) -TEXT ·libc_fclonefileat_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fchownat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fchownat_trampoline_addr(SB)/8, $libc_fchownat_trampoline<>(SB) + +TEXT libc_fclonefileat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fclonefileat(SB) -TEXT ·libc_flock_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fclonefileat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fclonefileat_trampoline_addr(SB)/8, $libc_fclonefileat_trampoline<>(SB) + +TEXT libc_flock_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_flock(SB) -TEXT ·libc_fpathconf_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_flock_trampoline_addr(SB), RODATA, $8 +DATA ·libc_flock_trampoline_addr(SB)/8, $libc_flock_trampoline<>(SB) + +TEXT libc_fpathconf_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fpathconf(SB) -TEXT ·libc_fsync_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fpathconf_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fpathconf_trampoline_addr(SB)/8, $libc_fpathconf_trampoline<>(SB) + +TEXT libc_fsync_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fsync(SB) -TEXT ·libc_ftruncate_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fsync_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fsync_trampoline_addr(SB)/8, $libc_fsync_trampoline<>(SB) + +TEXT libc_ftruncate_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_ftruncate(SB) -TEXT ·libc_getcwd_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_ftruncate_trampoline_addr(SB), RODATA, $8 +DATA ·libc_ftruncate_trampoline_addr(SB)/8, $libc_ftruncate_trampoline<>(SB) + +TEXT libc_getcwd_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getcwd(SB) -TEXT ·libc_getdtablesize_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getcwd_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getcwd_trampoline_addr(SB)/8, $libc_getcwd_trampoline<>(SB) + +TEXT libc_getdtablesize_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getdtablesize(SB) -TEXT ·libc_getegid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getdtablesize_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getdtablesize_trampoline_addr(SB)/8, $libc_getdtablesize_trampoline<>(SB) + +TEXT libc_getegid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getegid(SB) -TEXT ·libc_geteuid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getegid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getegid_trampoline_addr(SB)/8, $libc_getegid_trampoline<>(SB) + +TEXT libc_geteuid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_geteuid(SB) -TEXT ·libc_getgid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_geteuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_geteuid_trampoline_addr(SB)/8, $libc_geteuid_trampoline<>(SB) + +TEXT libc_getgid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getgid(SB) -TEXT ·libc_getpgid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getgid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getgid_trampoline_addr(SB)/8, $libc_getgid_trampoline<>(SB) + +TEXT libc_getpgid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getpgid(SB) -TEXT ·libc_getpgrp_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getpgid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getpgid_trampoline_addr(SB)/8, $libc_getpgid_trampoline<>(SB) + +TEXT libc_getpgrp_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getpgrp(SB) -TEXT ·libc_getpid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getpgrp_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getpgrp_trampoline_addr(SB)/8, $libc_getpgrp_trampoline<>(SB) + +TEXT libc_getpid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getpid(SB) -TEXT ·libc_getppid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getpid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getpid_trampoline_addr(SB)/8, $libc_getpid_trampoline<>(SB) + +TEXT libc_getppid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getppid(SB) -TEXT ·libc_getpriority_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getppid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getppid_trampoline_addr(SB)/8, $libc_getppid_trampoline<>(SB) + +TEXT libc_getpriority_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getpriority(SB) -TEXT ·libc_getrlimit_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getpriority_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getpriority_trampoline_addr(SB)/8, $libc_getpriority_trampoline<>(SB) + +TEXT libc_getrlimit_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getrlimit(SB) -TEXT ·libc_getrusage_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getrlimit_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getrlimit_trampoline_addr(SB)/8, $libc_getrlimit_trampoline<>(SB) + +TEXT libc_getrusage_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getrusage(SB) -TEXT ·libc_getsid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getrusage_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getrusage_trampoline_addr(SB)/8, $libc_getrusage_trampoline<>(SB) + +TEXT libc_getsid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getsid(SB) -TEXT ·libc_gettimeofday_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getsid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getsid_trampoline_addr(SB)/8, $libc_getsid_trampoline<>(SB) + +TEXT libc_gettimeofday_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_gettimeofday(SB) -TEXT ·libc_getuid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_gettimeofday_trampoline_addr(SB), RODATA, $8 +DATA ·libc_gettimeofday_trampoline_addr(SB)/8, $libc_gettimeofday_trampoline<>(SB) + +TEXT libc_getuid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getuid(SB) -TEXT ·libc_issetugid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getuid_trampoline_addr(SB)/8, $libc_getuid_trampoline<>(SB) + +TEXT libc_issetugid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_issetugid(SB) -TEXT ·libc_kqueue_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_issetugid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_issetugid_trampoline_addr(SB)/8, $libc_issetugid_trampoline<>(SB) + +TEXT libc_kqueue_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_kqueue(SB) -TEXT ·libc_lchown_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_kqueue_trampoline_addr(SB), RODATA, $8 +DATA ·libc_kqueue_trampoline_addr(SB)/8, $libc_kqueue_trampoline<>(SB) + +TEXT libc_lchown_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_lchown(SB) -TEXT ·libc_link_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_lchown_trampoline_addr(SB), RODATA, $8 +DATA ·libc_lchown_trampoline_addr(SB)/8, $libc_lchown_trampoline<>(SB) + +TEXT libc_link_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_link(SB) -TEXT ·libc_linkat_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_link_trampoline_addr(SB), RODATA, $8 +DATA ·libc_link_trampoline_addr(SB)/8, $libc_link_trampoline<>(SB) + +TEXT libc_linkat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_linkat(SB) -TEXT ·libc_listen_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_linkat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_linkat_trampoline_addr(SB)/8, $libc_linkat_trampoline<>(SB) + +TEXT libc_listen_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_listen(SB) -TEXT ·libc_mkdir_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_listen_trampoline_addr(SB), RODATA, $8 +DATA ·libc_listen_trampoline_addr(SB)/8, $libc_listen_trampoline<>(SB) + +TEXT libc_mkdir_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_mkdir(SB) -TEXT ·libc_mkdirat_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_mkdir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mkdir_trampoline_addr(SB)/8, $libc_mkdir_trampoline<>(SB) + +TEXT libc_mkdirat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_mkdirat(SB) -TEXT ·libc_mkfifo_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_mkdirat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mkdirat_trampoline_addr(SB)/8, $libc_mkdirat_trampoline<>(SB) + +TEXT libc_mkfifo_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_mkfifo(SB) -TEXT ·libc_mknod_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_mkfifo_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mkfifo_trampoline_addr(SB)/8, $libc_mkfifo_trampoline<>(SB) + +TEXT libc_mknod_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_mknod(SB) -TEXT ·libc_open_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_mknod_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mknod_trampoline_addr(SB)/8, $libc_mknod_trampoline<>(SB) + +TEXT libc_open_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_open(SB) -TEXT ·libc_openat_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_open_trampoline_addr(SB), RODATA, $8 +DATA ·libc_open_trampoline_addr(SB)/8, $libc_open_trampoline<>(SB) + +TEXT libc_openat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_openat(SB) -TEXT ·libc_pathconf_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_openat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_openat_trampoline_addr(SB)/8, $libc_openat_trampoline<>(SB) + +TEXT libc_pathconf_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_pathconf(SB) -TEXT ·libc_pread_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_pathconf_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pathconf_trampoline_addr(SB)/8, $libc_pathconf_trampoline<>(SB) + +TEXT libc_pread_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_pread(SB) -TEXT ·libc_pwrite_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_pread_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pread_trampoline_addr(SB)/8, $libc_pread_trampoline<>(SB) + +TEXT libc_pwrite_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_pwrite(SB) -TEXT ·libc_read_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_pwrite_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pwrite_trampoline_addr(SB)/8, $libc_pwrite_trampoline<>(SB) + +TEXT libc_read_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_read(SB) -TEXT ·libc_readlink_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_read_trampoline_addr(SB), RODATA, $8 +DATA ·libc_read_trampoline_addr(SB)/8, $libc_read_trampoline<>(SB) + +TEXT libc_readlink_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_readlink(SB) -TEXT ·libc_readlinkat_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_readlink_trampoline_addr(SB), RODATA, $8 +DATA ·libc_readlink_trampoline_addr(SB)/8, $libc_readlink_trampoline<>(SB) + +TEXT libc_readlinkat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_readlinkat(SB) -TEXT ·libc_rename_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_readlinkat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_readlinkat_trampoline_addr(SB)/8, $libc_readlinkat_trampoline<>(SB) + +TEXT libc_rename_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_rename(SB) -TEXT ·libc_renameat_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_rename_trampoline_addr(SB), RODATA, $8 +DATA ·libc_rename_trampoline_addr(SB)/8, $libc_rename_trampoline<>(SB) + +TEXT libc_renameat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_renameat(SB) -TEXT ·libc_revoke_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_renameat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_renameat_trampoline_addr(SB)/8, $libc_renameat_trampoline<>(SB) + +TEXT libc_revoke_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_revoke(SB) -TEXT ·libc_rmdir_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_revoke_trampoline_addr(SB), RODATA, $8 +DATA ·libc_revoke_trampoline_addr(SB)/8, $libc_revoke_trampoline<>(SB) + +TEXT libc_rmdir_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_rmdir(SB) -TEXT ·libc_lseek_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_rmdir_trampoline_addr(SB), RODATA, $8 +DATA ·libc_rmdir_trampoline_addr(SB)/8, $libc_rmdir_trampoline<>(SB) + +TEXT libc_lseek_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_lseek(SB) -TEXT ·libc_select_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_lseek_trampoline_addr(SB), RODATA, $8 +DATA ·libc_lseek_trampoline_addr(SB)/8, $libc_lseek_trampoline<>(SB) + +TEXT libc_select_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_select(SB) -TEXT ·libc_setegid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_select_trampoline_addr(SB), RODATA, $8 +DATA ·libc_select_trampoline_addr(SB)/8, $libc_select_trampoline<>(SB) + +TEXT libc_setegid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setegid(SB) -TEXT ·libc_seteuid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_setegid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setegid_trampoline_addr(SB)/8, $libc_setegid_trampoline<>(SB) + +TEXT libc_seteuid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_seteuid(SB) -TEXT ·libc_setgid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_seteuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_seteuid_trampoline_addr(SB)/8, $libc_seteuid_trampoline<>(SB) + +TEXT libc_setgid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setgid(SB) -TEXT ·libc_setlogin_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_setgid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setgid_trampoline_addr(SB)/8, $libc_setgid_trampoline<>(SB) + +TEXT libc_setlogin_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setlogin(SB) -TEXT ·libc_setpgid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_setlogin_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setlogin_trampoline_addr(SB)/8, $libc_setlogin_trampoline<>(SB) + +TEXT libc_setpgid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setpgid(SB) -TEXT ·libc_setpriority_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_setpgid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setpgid_trampoline_addr(SB)/8, $libc_setpgid_trampoline<>(SB) + +TEXT libc_setpriority_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setpriority(SB) -TEXT ·libc_setprivexec_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_setpriority_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setpriority_trampoline_addr(SB)/8, $libc_setpriority_trampoline<>(SB) + +TEXT libc_setprivexec_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setprivexec(SB) -TEXT ·libc_setregid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_setprivexec_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setprivexec_trampoline_addr(SB)/8, $libc_setprivexec_trampoline<>(SB) + +TEXT libc_setregid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setregid(SB) -TEXT ·libc_setreuid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_setregid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setregid_trampoline_addr(SB)/8, $libc_setregid_trampoline<>(SB) + +TEXT libc_setreuid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setreuid(SB) -TEXT ·libc_setrlimit_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_setreuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setreuid_trampoline_addr(SB)/8, $libc_setreuid_trampoline<>(SB) + +TEXT libc_setrlimit_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setrlimit(SB) -TEXT ·libc_setsid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_setrlimit_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setrlimit_trampoline_addr(SB)/8, $libc_setrlimit_trampoline<>(SB) + +TEXT libc_setsid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setsid(SB) -TEXT ·libc_settimeofday_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_setsid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setsid_trampoline_addr(SB)/8, $libc_setsid_trampoline<>(SB) + +TEXT libc_settimeofday_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_settimeofday(SB) -TEXT ·libc_setuid_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_settimeofday_trampoline_addr(SB), RODATA, $8 +DATA ·libc_settimeofday_trampoline_addr(SB)/8, $libc_settimeofday_trampoline<>(SB) + +TEXT libc_setuid_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_setuid(SB) -TEXT ·libc_symlink_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_setuid_trampoline_addr(SB), RODATA, $8 +DATA ·libc_setuid_trampoline_addr(SB)/8, $libc_setuid_trampoline<>(SB) + +TEXT libc_symlink_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_symlink(SB) -TEXT ·libc_symlinkat_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_symlink_trampoline_addr(SB), RODATA, $8 +DATA ·libc_symlink_trampoline_addr(SB)/8, $libc_symlink_trampoline<>(SB) + +TEXT libc_symlinkat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_symlinkat(SB) -TEXT ·libc_sync_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_symlinkat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_symlinkat_trampoline_addr(SB)/8, $libc_symlinkat_trampoline<>(SB) + +TEXT libc_sync_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_sync(SB) -TEXT ·libc_truncate_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_sync_trampoline_addr(SB), RODATA, $8 +DATA ·libc_sync_trampoline_addr(SB)/8, $libc_sync_trampoline<>(SB) + +TEXT libc_truncate_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_truncate(SB) -TEXT ·libc_umask_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_truncate_trampoline_addr(SB), RODATA, $8 +DATA ·libc_truncate_trampoline_addr(SB)/8, $libc_truncate_trampoline<>(SB) + +TEXT libc_umask_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_umask(SB) -TEXT ·libc_undelete_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_umask_trampoline_addr(SB), RODATA, $8 +DATA ·libc_umask_trampoline_addr(SB)/8, $libc_umask_trampoline<>(SB) + +TEXT libc_undelete_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_undelete(SB) -TEXT ·libc_unlink_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_undelete_trampoline_addr(SB), RODATA, $8 +DATA ·libc_undelete_trampoline_addr(SB)/8, $libc_undelete_trampoline<>(SB) + +TEXT libc_unlink_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_unlink(SB) -TEXT ·libc_unlinkat_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_unlink_trampoline_addr(SB), RODATA, $8 +DATA ·libc_unlink_trampoline_addr(SB)/8, $libc_unlink_trampoline<>(SB) + +TEXT libc_unlinkat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_unlinkat(SB) -TEXT ·libc_unmount_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_unlinkat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_unlinkat_trampoline_addr(SB)/8, $libc_unlinkat_trampoline<>(SB) + +TEXT libc_unmount_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_unmount(SB) -TEXT ·libc_write_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_unmount_trampoline_addr(SB), RODATA, $8 +DATA ·libc_unmount_trampoline_addr(SB)/8, $libc_unmount_trampoline<>(SB) + +TEXT libc_write_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_write(SB) -TEXT ·libc_mmap_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_write_trampoline_addr(SB), RODATA, $8 +DATA ·libc_write_trampoline_addr(SB)/8, $libc_write_trampoline<>(SB) + +TEXT libc_mmap_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_mmap(SB) -TEXT ·libc_munmap_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_mmap_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mmap_trampoline_addr(SB)/8, $libc_mmap_trampoline<>(SB) + +TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_munmap(SB) -TEXT ·libc_fstat_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $8 +DATA ·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB) + +TEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fstat(SB) -TEXT ·libc_fstatat_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fstat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fstat_trampoline_addr(SB)/8, $libc_fstat_trampoline<>(SB) + +TEXT libc_fstatat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fstatat(SB) -TEXT ·libc_fstatfs_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fstatat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fstatat_trampoline_addr(SB)/8, $libc_fstatat_trampoline<>(SB) + +TEXT libc_fstatfs_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fstatfs(SB) -TEXT ·libc_getfsstat_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_fstatfs_trampoline_addr(SB), RODATA, $8 +DATA ·libc_fstatfs_trampoline_addr(SB)/8, $libc_fstatfs_trampoline<>(SB) + +TEXT libc_getfsstat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_getfsstat(SB) -TEXT ·libc_lstat_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_getfsstat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_getfsstat_trampoline_addr(SB)/8, $libc_getfsstat_trampoline<>(SB) + +TEXT libc_lstat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_lstat(SB) -TEXT ·libc_ptrace_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_lstat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_lstat_trampoline_addr(SB)/8, $libc_lstat_trampoline<>(SB) + +TEXT libc_ptrace_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_ptrace(SB) -TEXT ·libc_stat_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_ptrace_trampoline_addr(SB), RODATA, $8 +DATA ·libc_ptrace_trampoline_addr(SB)/8, $libc_ptrace_trampoline<>(SB) + +TEXT libc_stat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_stat(SB) -TEXT ·libc_statfs_trampoline(SB),NOSPLIT,$0-0 + +GLOBL ·libc_stat_trampoline_addr(SB), RODATA, $8 +DATA ·libc_stat_trampoline_addr(SB)/8, $libc_stat_trampoline<>(SB) + +TEXT libc_statfs_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_statfs(SB) + +GLOBL ·libc_statfs_trampoline_addr(SB), RODATA, $8 +DATA ·libc_statfs_trampoline_addr(SB)/8, $libc_statfs_trampoline<>(SB) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go deleted file mode 100644 index 1794ffc9245..00000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_darwin_386.go +++ /dev/null @@ -1,438 +0,0 @@ -// go run mksysnum.go /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/sys/syscall.h -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build 386 && darwin -// +build 386,darwin - -package unix - -// Deprecated: Use libSystem wrappers instead of direct syscalls. -const ( - SYS_SYSCALL = 0 - SYS_EXIT = 1 - SYS_FORK = 2 - SYS_READ = 3 - SYS_WRITE = 4 - SYS_OPEN = 5 - SYS_CLOSE = 6 - SYS_WAIT4 = 7 - SYS_LINK = 9 - SYS_UNLINK = 10 - SYS_CHDIR = 12 - SYS_FCHDIR = 13 - SYS_MKNOD = 14 - SYS_CHMOD = 15 - SYS_CHOWN = 16 - SYS_GETFSSTAT = 18 - SYS_GETPID = 20 - SYS_SETUID = 23 - SYS_GETUID = 24 - SYS_GETEUID = 25 - SYS_PTRACE = 26 - SYS_RECVMSG = 27 - SYS_SENDMSG = 28 - SYS_RECVFROM = 29 - SYS_ACCEPT = 30 - SYS_GETPEERNAME = 31 - SYS_GETSOCKNAME = 32 - SYS_ACCESS = 33 - SYS_CHFLAGS = 34 - SYS_FCHFLAGS = 35 - SYS_SYNC = 36 - SYS_KILL = 37 - SYS_GETPPID = 39 - SYS_DUP = 41 - SYS_PIPE = 42 - SYS_GETEGID = 43 - SYS_SIGACTION = 46 - SYS_GETGID = 47 - SYS_SIGPROCMASK = 48 - SYS_GETLOGIN = 49 - SYS_SETLOGIN = 50 - SYS_ACCT = 51 - SYS_SIGPENDING = 52 - SYS_SIGALTSTACK = 53 - SYS_IOCTL = 54 - SYS_REBOOT = 55 - SYS_REVOKE = 56 - SYS_SYMLINK = 57 - SYS_READLINK = 58 - SYS_EXECVE = 59 - SYS_UMASK = 60 - SYS_CHROOT = 61 - SYS_MSYNC = 65 - SYS_VFORK = 66 - SYS_MUNMAP = 73 - SYS_MPROTECT = 74 - SYS_MADVISE = 75 - SYS_MINCORE = 78 - SYS_GETGROUPS = 79 - SYS_SETGROUPS = 80 - SYS_GETPGRP = 81 - SYS_SETPGID = 82 - SYS_SETITIMER = 83 - SYS_SWAPON = 85 - SYS_GETITIMER = 86 - SYS_GETDTABLESIZE = 89 - SYS_DUP2 = 90 - SYS_FCNTL = 92 - SYS_SELECT = 93 - SYS_FSYNC = 95 - SYS_SETPRIORITY = 96 - SYS_SOCKET = 97 - SYS_CONNECT = 98 - SYS_GETPRIORITY = 100 - SYS_BIND = 104 - SYS_SETSOCKOPT = 105 - SYS_LISTEN = 106 - SYS_SIGSUSPEND = 111 - SYS_GETTIMEOFDAY = 116 - SYS_GETRUSAGE = 117 - SYS_GETSOCKOPT = 118 - SYS_READV = 120 - SYS_WRITEV = 121 - SYS_SETTIMEOFDAY = 122 - SYS_FCHOWN = 123 - SYS_FCHMOD = 124 - SYS_SETREUID = 126 - SYS_SETREGID = 127 - SYS_RENAME = 128 - SYS_FLOCK = 131 - SYS_MKFIFO = 132 - SYS_SENDTO = 133 - SYS_SHUTDOWN = 134 - SYS_SOCKETPAIR = 135 - SYS_MKDIR = 136 - SYS_RMDIR = 137 - SYS_UTIMES = 138 - SYS_FUTIMES = 139 - SYS_ADJTIME = 140 - SYS_GETHOSTUUID = 142 - SYS_SETSID = 147 - SYS_GETPGID = 151 - SYS_SETPRIVEXEC = 152 - SYS_PREAD = 153 - SYS_PWRITE = 154 - SYS_NFSSVC = 155 - SYS_STATFS = 157 - SYS_FSTATFS = 158 - SYS_UNMOUNT = 159 - SYS_GETFH = 161 - SYS_QUOTACTL = 165 - SYS_MOUNT = 167 - SYS_CSOPS = 169 - SYS_CSOPS_AUDITTOKEN = 170 - SYS_WAITID = 173 - SYS_KDEBUG_TYPEFILTER = 177 - SYS_KDEBUG_TRACE_STRING = 178 - SYS_KDEBUG_TRACE64 = 179 - SYS_KDEBUG_TRACE = 180 - SYS_SETGID = 181 - SYS_SETEGID = 182 - SYS_SETEUID = 183 - SYS_SIGRETURN = 184 - SYS_THREAD_SELFCOUNTS = 186 - SYS_FDATASYNC = 187 - SYS_STAT = 188 - SYS_FSTAT = 189 - SYS_LSTAT = 190 - SYS_PATHCONF = 191 - SYS_FPATHCONF = 192 - SYS_GETRLIMIT = 194 - SYS_SETRLIMIT = 195 - SYS_GETDIRENTRIES = 196 - SYS_MMAP = 197 - SYS_LSEEK = 199 - SYS_TRUNCATE = 200 - SYS_FTRUNCATE = 201 - SYS_SYSCTL = 202 - SYS_MLOCK = 203 - SYS_MUNLOCK = 204 - SYS_UNDELETE = 205 - SYS_OPEN_DPROTECTED_NP = 216 - SYS_GETATTRLIST = 220 - SYS_SETATTRLIST = 221 - SYS_GETDIRENTRIESATTR = 222 - SYS_EXCHANGEDATA = 223 - SYS_SEARCHFS = 225 - SYS_DELETE = 226 - SYS_COPYFILE = 227 - SYS_FGETATTRLIST = 228 - SYS_FSETATTRLIST = 229 - SYS_POLL = 230 - SYS_WATCHEVENT = 231 - SYS_WAITEVENT = 232 - SYS_MODWATCH = 233 - SYS_GETXATTR = 234 - SYS_FGETXATTR = 235 - SYS_SETXATTR = 236 - SYS_FSETXATTR = 237 - SYS_REMOVEXATTR = 238 - SYS_FREMOVEXATTR = 239 - SYS_LISTXATTR = 240 - SYS_FLISTXATTR = 241 - SYS_FSCTL = 242 - SYS_INITGROUPS = 243 - SYS_POSIX_SPAWN = 244 - SYS_FFSCTL = 245 - SYS_NFSCLNT = 247 - SYS_FHOPEN = 248 - SYS_MINHERIT = 250 - SYS_SEMSYS = 251 - SYS_MSGSYS = 252 - SYS_SHMSYS = 253 - SYS_SEMCTL = 254 - SYS_SEMGET = 255 - SYS_SEMOP = 256 - SYS_MSGCTL = 258 - SYS_MSGGET = 259 - SYS_MSGSND = 260 - SYS_MSGRCV = 261 - SYS_SHMAT = 262 - SYS_SHMCTL = 263 - SYS_SHMDT = 264 - SYS_SHMGET = 265 - SYS_SHM_OPEN = 266 - SYS_SHM_UNLINK = 267 - SYS_SEM_OPEN = 268 - SYS_SEM_CLOSE = 269 - SYS_SEM_UNLINK = 270 - SYS_SEM_WAIT = 271 - SYS_SEM_TRYWAIT = 272 - SYS_SEM_POST = 273 - SYS_SYSCTLBYNAME = 274 - SYS_OPEN_EXTENDED = 277 - SYS_UMASK_EXTENDED = 278 - SYS_STAT_EXTENDED = 279 - SYS_LSTAT_EXTENDED = 280 - SYS_FSTAT_EXTENDED = 281 - SYS_CHMOD_EXTENDED = 282 - SYS_FCHMOD_EXTENDED = 283 - SYS_ACCESS_EXTENDED = 284 - SYS_SETTID = 285 - SYS_GETTID = 286 - SYS_SETSGROUPS = 287 - SYS_GETSGROUPS = 288 - SYS_SETWGROUPS = 289 - SYS_GETWGROUPS = 290 - SYS_MKFIFO_EXTENDED = 291 - SYS_MKDIR_EXTENDED = 292 - SYS_IDENTITYSVC = 293 - SYS_SHARED_REGION_CHECK_NP = 294 - SYS_VM_PRESSURE_MONITOR = 296 - SYS_PSYNCH_RW_LONGRDLOCK = 297 - SYS_PSYNCH_RW_YIELDWRLOCK = 298 - SYS_PSYNCH_RW_DOWNGRADE = 299 - SYS_PSYNCH_RW_UPGRADE = 300 - SYS_PSYNCH_MUTEXWAIT = 301 - SYS_PSYNCH_MUTEXDROP = 302 - SYS_PSYNCH_CVBROAD = 303 - SYS_PSYNCH_CVSIGNAL = 304 - SYS_PSYNCH_CVWAIT = 305 - SYS_PSYNCH_RW_RDLOCK = 306 - SYS_PSYNCH_RW_WRLOCK = 307 - SYS_PSYNCH_RW_UNLOCK = 308 - SYS_PSYNCH_RW_UNLOCK2 = 309 - SYS_GETSID = 310 - SYS_SETTID_WITH_PID = 311 - SYS_PSYNCH_CVCLRPREPOST = 312 - SYS_AIO_FSYNC = 313 - SYS_AIO_RETURN = 314 - SYS_AIO_SUSPEND = 315 - SYS_AIO_CANCEL = 316 - SYS_AIO_ERROR = 317 - SYS_AIO_READ = 318 - SYS_AIO_WRITE = 319 - SYS_LIO_LISTIO = 320 - SYS_IOPOLICYSYS = 322 - SYS_PROCESS_POLICY = 323 - SYS_MLOCKALL = 324 - SYS_MUNLOCKALL = 325 - SYS_ISSETUGID = 327 - SYS___PTHREAD_KILL = 328 - SYS___PTHREAD_SIGMASK = 329 - SYS___SIGWAIT = 330 - SYS___DISABLE_THREADSIGNAL = 331 - SYS___PTHREAD_MARKCANCEL = 332 - SYS___PTHREAD_CANCELED = 333 - SYS___SEMWAIT_SIGNAL = 334 - SYS_PROC_INFO = 336 - SYS_SENDFILE = 337 - SYS_STAT64 = 338 - SYS_FSTAT64 = 339 - SYS_LSTAT64 = 340 - SYS_STAT64_EXTENDED = 341 - SYS_LSTAT64_EXTENDED = 342 - SYS_FSTAT64_EXTENDED = 343 - SYS_GETDIRENTRIES64 = 344 - SYS_STATFS64 = 345 - SYS_FSTATFS64 = 346 - SYS_GETFSSTAT64 = 347 - SYS___PTHREAD_CHDIR = 348 - SYS___PTHREAD_FCHDIR = 349 - SYS_AUDIT = 350 - SYS_AUDITON = 351 - SYS_GETAUID = 353 - SYS_SETAUID = 354 - SYS_GETAUDIT_ADDR = 357 - SYS_SETAUDIT_ADDR = 358 - SYS_AUDITCTL = 359 - SYS_BSDTHREAD_CREATE = 360 - SYS_BSDTHREAD_TERMINATE = 361 - SYS_KQUEUE = 362 - SYS_KEVENT = 363 - SYS_LCHOWN = 364 - SYS_BSDTHREAD_REGISTER = 366 - SYS_WORKQ_OPEN = 367 - SYS_WORKQ_KERNRETURN = 368 - SYS_KEVENT64 = 369 - SYS___OLD_SEMWAIT_SIGNAL = 370 - SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL = 371 - SYS_THREAD_SELFID = 372 - SYS_LEDGER = 373 - SYS_KEVENT_QOS = 374 - SYS_KEVENT_ID = 375 - SYS___MAC_EXECVE = 380 - SYS___MAC_SYSCALL = 381 - SYS___MAC_GET_FILE = 382 - SYS___MAC_SET_FILE = 383 - SYS___MAC_GET_LINK = 384 - SYS___MAC_SET_LINK = 385 - SYS___MAC_GET_PROC = 386 - SYS___MAC_SET_PROC = 387 - SYS___MAC_GET_FD = 388 - SYS___MAC_SET_FD = 389 - SYS___MAC_GET_PID = 390 - SYS_PSELECT = 394 - SYS_PSELECT_NOCANCEL = 395 - SYS_READ_NOCANCEL = 396 - SYS_WRITE_NOCANCEL = 397 - SYS_OPEN_NOCANCEL = 398 - SYS_CLOSE_NOCANCEL = 399 - SYS_WAIT4_NOCANCEL = 400 - SYS_RECVMSG_NOCANCEL = 401 - SYS_SENDMSG_NOCANCEL = 402 - SYS_RECVFROM_NOCANCEL = 403 - SYS_ACCEPT_NOCANCEL = 404 - SYS_MSYNC_NOCANCEL = 405 - SYS_FCNTL_NOCANCEL = 406 - SYS_SELECT_NOCANCEL = 407 - SYS_FSYNC_NOCANCEL = 408 - SYS_CONNECT_NOCANCEL = 409 - SYS_SIGSUSPEND_NOCANCEL = 410 - SYS_READV_NOCANCEL = 411 - SYS_WRITEV_NOCANCEL = 412 - SYS_SENDTO_NOCANCEL = 413 - SYS_PREAD_NOCANCEL = 414 - SYS_PWRITE_NOCANCEL = 415 - SYS_WAITID_NOCANCEL = 416 - SYS_POLL_NOCANCEL = 417 - SYS_MSGSND_NOCANCEL = 418 - SYS_MSGRCV_NOCANCEL = 419 - SYS_SEM_WAIT_NOCANCEL = 420 - SYS_AIO_SUSPEND_NOCANCEL = 421 - SYS___SIGWAIT_NOCANCEL = 422 - SYS___SEMWAIT_SIGNAL_NOCANCEL = 423 - SYS___MAC_MOUNT = 424 - SYS___MAC_GET_MOUNT = 425 - SYS___MAC_GETFSSTAT = 426 - SYS_FSGETPATH = 427 - SYS_AUDIT_SESSION_SELF = 428 - SYS_AUDIT_SESSION_JOIN = 429 - SYS_FILEPORT_MAKEPORT = 430 - SYS_FILEPORT_MAKEFD = 431 - SYS_AUDIT_SESSION_PORT = 432 - SYS_PID_SUSPEND = 433 - SYS_PID_RESUME = 434 - SYS_PID_HIBERNATE = 435 - SYS_PID_SHUTDOWN_SOCKETS = 436 - SYS_SHARED_REGION_MAP_AND_SLIDE_NP = 438 - SYS_KAS_INFO = 439 - SYS_MEMORYSTATUS_CONTROL = 440 - SYS_GUARDED_OPEN_NP = 441 - SYS_GUARDED_CLOSE_NP = 442 - SYS_GUARDED_KQUEUE_NP = 443 - SYS_CHANGE_FDGUARD_NP = 444 - SYS_USRCTL = 445 - SYS_PROC_RLIMIT_CONTROL = 446 - SYS_CONNECTX = 447 - SYS_DISCONNECTX = 448 - SYS_PEELOFF = 449 - SYS_SOCKET_DELEGATE = 450 - SYS_TELEMETRY = 451 - SYS_PROC_UUID_POLICY = 452 - SYS_MEMORYSTATUS_GET_LEVEL = 453 - SYS_SYSTEM_OVERRIDE = 454 - SYS_VFS_PURGE = 455 - SYS_SFI_CTL = 456 - SYS_SFI_PIDCTL = 457 - SYS_COALITION = 458 - SYS_COALITION_INFO = 459 - SYS_NECP_MATCH_POLICY = 460 - SYS_GETATTRLISTBULK = 461 - SYS_CLONEFILEAT = 462 - SYS_OPENAT = 463 - SYS_OPENAT_NOCANCEL = 464 - SYS_RENAMEAT = 465 - SYS_FACCESSAT = 466 - SYS_FCHMODAT = 467 - SYS_FCHOWNAT = 468 - SYS_FSTATAT = 469 - SYS_FSTATAT64 = 470 - SYS_LINKAT = 471 - SYS_UNLINKAT = 472 - SYS_READLINKAT = 473 - SYS_SYMLINKAT = 474 - SYS_MKDIRAT = 475 - SYS_GETATTRLISTAT = 476 - SYS_PROC_TRACE_LOG = 477 - SYS_BSDTHREAD_CTL = 478 - SYS_OPENBYID_NP = 479 - SYS_RECVMSG_X = 480 - SYS_SENDMSG_X = 481 - SYS_THREAD_SELFUSAGE = 482 - SYS_CSRCTL = 483 - SYS_GUARDED_OPEN_DPROTECTED_NP = 484 - SYS_GUARDED_WRITE_NP = 485 - SYS_GUARDED_PWRITE_NP = 486 - SYS_GUARDED_WRITEV_NP = 487 - SYS_RENAMEATX_NP = 488 - SYS_MREMAP_ENCRYPTED = 489 - SYS_NETAGENT_TRIGGER = 490 - SYS_STACK_SNAPSHOT_WITH_CONFIG = 491 - SYS_MICROSTACKSHOT = 492 - SYS_GRAB_PGO_DATA = 493 - SYS_PERSONA = 494 - SYS_WORK_INTERVAL_CTL = 499 - SYS_GETENTROPY = 500 - SYS_NECP_OPEN = 501 - SYS_NECP_CLIENT_ACTION = 502 - SYS___NEXUS_OPEN = 503 - SYS___NEXUS_REGISTER = 504 - SYS___NEXUS_DEREGISTER = 505 - SYS___NEXUS_CREATE = 506 - SYS___NEXUS_DESTROY = 507 - SYS___NEXUS_GET_OPT = 508 - SYS___NEXUS_SET_OPT = 509 - SYS___CHANNEL_OPEN = 510 - SYS___CHANNEL_GET_INFO = 511 - SYS___CHANNEL_SYNC = 512 - SYS___CHANNEL_GET_OPT = 513 - SYS___CHANNEL_SET_OPT = 514 - SYS_ULOCK_WAIT = 515 - SYS_ULOCK_WAKE = 516 - SYS_FCLONEFILEAT = 517 - SYS_FS_SNAPSHOT = 518 - SYS_TERMINATE_WITH_PAYLOAD = 520 - SYS_ABORT_WITH_PAYLOAD = 521 - SYS_NECP_SESSION_OPEN = 522 - SYS_NECP_SESSION_ACTION = 523 - SYS_SETATTRLISTAT = 524 - SYS_NET_QOS_GUIDELINE = 525 - SYS_FMOUNT = 526 - SYS_NTP_ADJTIME = 527 - SYS_NTP_GETTIME = 528 - SYS_OS_FAULT_WITH_PAYLOAD = 529 - SYS_MAXSYSCALL = 530 - SYS_INVALID = 63 -) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go b/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go deleted file mode 100644 index 6dc736449a5..00000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/zsysnum_darwin_arm.go +++ /dev/null @@ -1,438 +0,0 @@ -// go run mksysnum.go /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.1.sdk/usr/include/sys/syscall.h -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build arm && darwin -// +build arm,darwin - -package unix - -// Deprecated: Use libSystem wrappers instead of direct syscalls. -const ( - SYS_SYSCALL = 0 - SYS_EXIT = 1 - SYS_FORK = 2 - SYS_READ = 3 - SYS_WRITE = 4 - SYS_OPEN = 5 - SYS_CLOSE = 6 - SYS_WAIT4 = 7 - SYS_LINK = 9 - SYS_UNLINK = 10 - SYS_CHDIR = 12 - SYS_FCHDIR = 13 - SYS_MKNOD = 14 - SYS_CHMOD = 15 - SYS_CHOWN = 16 - SYS_GETFSSTAT = 18 - SYS_GETPID = 20 - SYS_SETUID = 23 - SYS_GETUID = 24 - SYS_GETEUID = 25 - SYS_PTRACE = 26 - SYS_RECVMSG = 27 - SYS_SENDMSG = 28 - SYS_RECVFROM = 29 - SYS_ACCEPT = 30 - SYS_GETPEERNAME = 31 - SYS_GETSOCKNAME = 32 - SYS_ACCESS = 33 - SYS_CHFLAGS = 34 - SYS_FCHFLAGS = 35 - SYS_SYNC = 36 - SYS_KILL = 37 - SYS_GETPPID = 39 - SYS_DUP = 41 - SYS_PIPE = 42 - SYS_GETEGID = 43 - SYS_SIGACTION = 46 - SYS_GETGID = 47 - SYS_SIGPROCMASK = 48 - SYS_GETLOGIN = 49 - SYS_SETLOGIN = 50 - SYS_ACCT = 51 - SYS_SIGPENDING = 52 - SYS_SIGALTSTACK = 53 - SYS_IOCTL = 54 - SYS_REBOOT = 55 - SYS_REVOKE = 56 - SYS_SYMLINK = 57 - SYS_READLINK = 58 - SYS_EXECVE = 59 - SYS_UMASK = 60 - SYS_CHROOT = 61 - SYS_MSYNC = 65 - SYS_VFORK = 66 - SYS_MUNMAP = 73 - SYS_MPROTECT = 74 - SYS_MADVISE = 75 - SYS_MINCORE = 78 - SYS_GETGROUPS = 79 - SYS_SETGROUPS = 80 - SYS_GETPGRP = 81 - SYS_SETPGID = 82 - SYS_SETITIMER = 83 - SYS_SWAPON = 85 - SYS_GETITIMER = 86 - SYS_GETDTABLESIZE = 89 - SYS_DUP2 = 90 - SYS_FCNTL = 92 - SYS_SELECT = 93 - SYS_FSYNC = 95 - SYS_SETPRIORITY = 96 - SYS_SOCKET = 97 - SYS_CONNECT = 98 - SYS_GETPRIORITY = 100 - SYS_BIND = 104 - SYS_SETSOCKOPT = 105 - SYS_LISTEN = 106 - SYS_SIGSUSPEND = 111 - SYS_GETTIMEOFDAY = 116 - SYS_GETRUSAGE = 117 - SYS_GETSOCKOPT = 118 - SYS_READV = 120 - SYS_WRITEV = 121 - SYS_SETTIMEOFDAY = 122 - SYS_FCHOWN = 123 - SYS_FCHMOD = 124 - SYS_SETREUID = 126 - SYS_SETREGID = 127 - SYS_RENAME = 128 - SYS_FLOCK = 131 - SYS_MKFIFO = 132 - SYS_SENDTO = 133 - SYS_SHUTDOWN = 134 - SYS_SOCKETPAIR = 135 - SYS_MKDIR = 136 - SYS_RMDIR = 137 - SYS_UTIMES = 138 - SYS_FUTIMES = 139 - SYS_ADJTIME = 140 - SYS_GETHOSTUUID = 142 - SYS_SETSID = 147 - SYS_GETPGID = 151 - SYS_SETPRIVEXEC = 152 - SYS_PREAD = 153 - SYS_PWRITE = 154 - SYS_NFSSVC = 155 - SYS_STATFS = 157 - SYS_FSTATFS = 158 - SYS_UNMOUNT = 159 - SYS_GETFH = 161 - SYS_QUOTACTL = 165 - SYS_MOUNT = 167 - SYS_CSOPS = 169 - SYS_CSOPS_AUDITTOKEN = 170 - SYS_WAITID = 173 - SYS_KDEBUG_TYPEFILTER = 177 - SYS_KDEBUG_TRACE_STRING = 178 - SYS_KDEBUG_TRACE64 = 179 - SYS_KDEBUG_TRACE = 180 - SYS_SETGID = 181 - SYS_SETEGID = 182 - SYS_SETEUID = 183 - SYS_SIGRETURN = 184 - SYS_THREAD_SELFCOUNTS = 186 - SYS_FDATASYNC = 187 - SYS_STAT = 188 - SYS_FSTAT = 189 - SYS_LSTAT = 190 - SYS_PATHCONF = 191 - SYS_FPATHCONF = 192 - SYS_GETRLIMIT = 194 - SYS_SETRLIMIT = 195 - SYS_GETDIRENTRIES = 196 - SYS_MMAP = 197 - SYS_LSEEK = 199 - SYS_TRUNCATE = 200 - SYS_FTRUNCATE = 201 - SYS_SYSCTL = 202 - SYS_MLOCK = 203 - SYS_MUNLOCK = 204 - SYS_UNDELETE = 205 - SYS_OPEN_DPROTECTED_NP = 216 - SYS_GETATTRLIST = 220 - SYS_SETATTRLIST = 221 - SYS_GETDIRENTRIESATTR = 222 - SYS_EXCHANGEDATA = 223 - SYS_SEARCHFS = 225 - SYS_DELETE = 226 - SYS_COPYFILE = 227 - SYS_FGETATTRLIST = 228 - SYS_FSETATTRLIST = 229 - SYS_POLL = 230 - SYS_WATCHEVENT = 231 - SYS_WAITEVENT = 232 - SYS_MODWATCH = 233 - SYS_GETXATTR = 234 - SYS_FGETXATTR = 235 - SYS_SETXATTR = 236 - SYS_FSETXATTR = 237 - SYS_REMOVEXATTR = 238 - SYS_FREMOVEXATTR = 239 - SYS_LISTXATTR = 240 - SYS_FLISTXATTR = 241 - SYS_FSCTL = 242 - SYS_INITGROUPS = 243 - SYS_POSIX_SPAWN = 244 - SYS_FFSCTL = 245 - SYS_NFSCLNT = 247 - SYS_FHOPEN = 248 - SYS_MINHERIT = 250 - SYS_SEMSYS = 251 - SYS_MSGSYS = 252 - SYS_SHMSYS = 253 - SYS_SEMCTL = 254 - SYS_SEMGET = 255 - SYS_SEMOP = 256 - SYS_MSGCTL = 258 - SYS_MSGGET = 259 - SYS_MSGSND = 260 - SYS_MSGRCV = 261 - SYS_SHMAT = 262 - SYS_SHMCTL = 263 - SYS_SHMDT = 264 - SYS_SHMGET = 265 - SYS_SHM_OPEN = 266 - SYS_SHM_UNLINK = 267 - SYS_SEM_OPEN = 268 - SYS_SEM_CLOSE = 269 - SYS_SEM_UNLINK = 270 - SYS_SEM_WAIT = 271 - SYS_SEM_TRYWAIT = 272 - SYS_SEM_POST = 273 - SYS_SYSCTLBYNAME = 274 - SYS_OPEN_EXTENDED = 277 - SYS_UMASK_EXTENDED = 278 - SYS_STAT_EXTENDED = 279 - SYS_LSTAT_EXTENDED = 280 - SYS_FSTAT_EXTENDED = 281 - SYS_CHMOD_EXTENDED = 282 - SYS_FCHMOD_EXTENDED = 283 - SYS_ACCESS_EXTENDED = 284 - SYS_SETTID = 285 - SYS_GETTID = 286 - SYS_SETSGROUPS = 287 - SYS_GETSGROUPS = 288 - SYS_SETWGROUPS = 289 - SYS_GETWGROUPS = 290 - SYS_MKFIFO_EXTENDED = 291 - SYS_MKDIR_EXTENDED = 292 - SYS_IDENTITYSVC = 293 - SYS_SHARED_REGION_CHECK_NP = 294 - SYS_VM_PRESSURE_MONITOR = 296 - SYS_PSYNCH_RW_LONGRDLOCK = 297 - SYS_PSYNCH_RW_YIELDWRLOCK = 298 - SYS_PSYNCH_RW_DOWNGRADE = 299 - SYS_PSYNCH_RW_UPGRADE = 300 - SYS_PSYNCH_MUTEXWAIT = 301 - SYS_PSYNCH_MUTEXDROP = 302 - SYS_PSYNCH_CVBROAD = 303 - SYS_PSYNCH_CVSIGNAL = 304 - SYS_PSYNCH_CVWAIT = 305 - SYS_PSYNCH_RW_RDLOCK = 306 - SYS_PSYNCH_RW_WRLOCK = 307 - SYS_PSYNCH_RW_UNLOCK = 308 - SYS_PSYNCH_RW_UNLOCK2 = 309 - SYS_GETSID = 310 - SYS_SETTID_WITH_PID = 311 - SYS_PSYNCH_CVCLRPREPOST = 312 - SYS_AIO_FSYNC = 313 - SYS_AIO_RETURN = 314 - SYS_AIO_SUSPEND = 315 - SYS_AIO_CANCEL = 316 - SYS_AIO_ERROR = 317 - SYS_AIO_READ = 318 - SYS_AIO_WRITE = 319 - SYS_LIO_LISTIO = 320 - SYS_IOPOLICYSYS = 322 - SYS_PROCESS_POLICY = 323 - SYS_MLOCKALL = 324 - SYS_MUNLOCKALL = 325 - SYS_ISSETUGID = 327 - SYS___PTHREAD_KILL = 328 - SYS___PTHREAD_SIGMASK = 329 - SYS___SIGWAIT = 330 - SYS___DISABLE_THREADSIGNAL = 331 - SYS___PTHREAD_MARKCANCEL = 332 - SYS___PTHREAD_CANCELED = 333 - SYS___SEMWAIT_SIGNAL = 334 - SYS_PROC_INFO = 336 - SYS_SENDFILE = 337 - SYS_STAT64 = 338 - SYS_FSTAT64 = 339 - SYS_LSTAT64 = 340 - SYS_STAT64_EXTENDED = 341 - SYS_LSTAT64_EXTENDED = 342 - SYS_FSTAT64_EXTENDED = 343 - SYS_GETDIRENTRIES64 = 344 - SYS_STATFS64 = 345 - SYS_FSTATFS64 = 346 - SYS_GETFSSTAT64 = 347 - SYS___PTHREAD_CHDIR = 348 - SYS___PTHREAD_FCHDIR = 349 - SYS_AUDIT = 350 - SYS_AUDITON = 351 - SYS_GETAUID = 353 - SYS_SETAUID = 354 - SYS_GETAUDIT_ADDR = 357 - SYS_SETAUDIT_ADDR = 358 - SYS_AUDITCTL = 359 - SYS_BSDTHREAD_CREATE = 360 - SYS_BSDTHREAD_TERMINATE = 361 - SYS_KQUEUE = 362 - SYS_KEVENT = 363 - SYS_LCHOWN = 364 - SYS_BSDTHREAD_REGISTER = 366 - SYS_WORKQ_OPEN = 367 - SYS_WORKQ_KERNRETURN = 368 - SYS_KEVENT64 = 369 - SYS___OLD_SEMWAIT_SIGNAL = 370 - SYS___OLD_SEMWAIT_SIGNAL_NOCANCEL = 371 - SYS_THREAD_SELFID = 372 - SYS_LEDGER = 373 - SYS_KEVENT_QOS = 374 - SYS_KEVENT_ID = 375 - SYS___MAC_EXECVE = 380 - SYS___MAC_SYSCALL = 381 - SYS___MAC_GET_FILE = 382 - SYS___MAC_SET_FILE = 383 - SYS___MAC_GET_LINK = 384 - SYS___MAC_SET_LINK = 385 - SYS___MAC_GET_PROC = 386 - SYS___MAC_SET_PROC = 387 - SYS___MAC_GET_FD = 388 - SYS___MAC_SET_FD = 389 - SYS___MAC_GET_PID = 390 - SYS_PSELECT = 394 - SYS_PSELECT_NOCANCEL = 395 - SYS_READ_NOCANCEL = 396 - SYS_WRITE_NOCANCEL = 397 - SYS_OPEN_NOCANCEL = 398 - SYS_CLOSE_NOCANCEL = 399 - SYS_WAIT4_NOCANCEL = 400 - SYS_RECVMSG_NOCANCEL = 401 - SYS_SENDMSG_NOCANCEL = 402 - SYS_RECVFROM_NOCANCEL = 403 - SYS_ACCEPT_NOCANCEL = 404 - SYS_MSYNC_NOCANCEL = 405 - SYS_FCNTL_NOCANCEL = 406 - SYS_SELECT_NOCANCEL = 407 - SYS_FSYNC_NOCANCEL = 408 - SYS_CONNECT_NOCANCEL = 409 - SYS_SIGSUSPEND_NOCANCEL = 410 - SYS_READV_NOCANCEL = 411 - SYS_WRITEV_NOCANCEL = 412 - SYS_SENDTO_NOCANCEL = 413 - SYS_PREAD_NOCANCEL = 414 - SYS_PWRITE_NOCANCEL = 415 - SYS_WAITID_NOCANCEL = 416 - SYS_POLL_NOCANCEL = 417 - SYS_MSGSND_NOCANCEL = 418 - SYS_MSGRCV_NOCANCEL = 419 - SYS_SEM_WAIT_NOCANCEL = 420 - SYS_AIO_SUSPEND_NOCANCEL = 421 - SYS___SIGWAIT_NOCANCEL = 422 - SYS___SEMWAIT_SIGNAL_NOCANCEL = 423 - SYS___MAC_MOUNT = 424 - SYS___MAC_GET_MOUNT = 425 - SYS___MAC_GETFSSTAT = 426 - SYS_FSGETPATH = 427 - SYS_AUDIT_SESSION_SELF = 428 - SYS_AUDIT_SESSION_JOIN = 429 - SYS_FILEPORT_MAKEPORT = 430 - SYS_FILEPORT_MAKEFD = 431 - SYS_AUDIT_SESSION_PORT = 432 - SYS_PID_SUSPEND = 433 - SYS_PID_RESUME = 434 - SYS_PID_HIBERNATE = 435 - SYS_PID_SHUTDOWN_SOCKETS = 436 - SYS_SHARED_REGION_MAP_AND_SLIDE_NP = 438 - SYS_KAS_INFO = 439 - SYS_MEMORYSTATUS_CONTROL = 440 - SYS_GUARDED_OPEN_NP = 441 - SYS_GUARDED_CLOSE_NP = 442 - SYS_GUARDED_KQUEUE_NP = 443 - SYS_CHANGE_FDGUARD_NP = 444 - SYS_USRCTL = 445 - SYS_PROC_RLIMIT_CONTROL = 446 - SYS_CONNECTX = 447 - SYS_DISCONNECTX = 448 - SYS_PEELOFF = 449 - SYS_SOCKET_DELEGATE = 450 - SYS_TELEMETRY = 451 - SYS_PROC_UUID_POLICY = 452 - SYS_MEMORYSTATUS_GET_LEVEL = 453 - SYS_SYSTEM_OVERRIDE = 454 - SYS_VFS_PURGE = 455 - SYS_SFI_CTL = 456 - SYS_SFI_PIDCTL = 457 - SYS_COALITION = 458 - SYS_COALITION_INFO = 459 - SYS_NECP_MATCH_POLICY = 460 - SYS_GETATTRLISTBULK = 461 - SYS_CLONEFILEAT = 462 - SYS_OPENAT = 463 - SYS_OPENAT_NOCANCEL = 464 - SYS_RENAMEAT = 465 - SYS_FACCESSAT = 466 - SYS_FCHMODAT = 467 - SYS_FCHOWNAT = 468 - SYS_FSTATAT = 469 - SYS_FSTATAT64 = 470 - SYS_LINKAT = 471 - SYS_UNLINKAT = 472 - SYS_READLINKAT = 473 - SYS_SYMLINKAT = 474 - SYS_MKDIRAT = 475 - SYS_GETATTRLISTAT = 476 - SYS_PROC_TRACE_LOG = 477 - SYS_BSDTHREAD_CTL = 478 - SYS_OPENBYID_NP = 479 - SYS_RECVMSG_X = 480 - SYS_SENDMSG_X = 481 - SYS_THREAD_SELFUSAGE = 482 - SYS_CSRCTL = 483 - SYS_GUARDED_OPEN_DPROTECTED_NP = 484 - SYS_GUARDED_WRITE_NP = 485 - SYS_GUARDED_PWRITE_NP = 486 - SYS_GUARDED_WRITEV_NP = 487 - SYS_RENAMEATX_NP = 488 - SYS_MREMAP_ENCRYPTED = 489 - SYS_NETAGENT_TRIGGER = 490 - SYS_STACK_SNAPSHOT_WITH_CONFIG = 491 - SYS_MICROSTACKSHOT = 492 - SYS_GRAB_PGO_DATA = 493 - SYS_PERSONA = 494 - SYS_WORK_INTERVAL_CTL = 499 - SYS_GETENTROPY = 500 - SYS_NECP_OPEN = 501 - SYS_NECP_CLIENT_ACTION = 502 - SYS___NEXUS_OPEN = 503 - SYS___NEXUS_REGISTER = 504 - SYS___NEXUS_DEREGISTER = 505 - SYS___NEXUS_CREATE = 506 - SYS___NEXUS_DESTROY = 507 - SYS___NEXUS_GET_OPT = 508 - SYS___NEXUS_SET_OPT = 509 - SYS___CHANNEL_OPEN = 510 - SYS___CHANNEL_GET_INFO = 511 - SYS___CHANNEL_SYNC = 512 - SYS___CHANNEL_GET_OPT = 513 - SYS___CHANNEL_SET_OPT = 514 - SYS_ULOCK_WAIT = 515 - SYS_ULOCK_WAKE = 516 - SYS_FCLONEFILEAT = 517 - SYS_FS_SNAPSHOT = 518 - SYS_TERMINATE_WITH_PAYLOAD = 520 - SYS_ABORT_WITH_PAYLOAD = 521 - SYS_NECP_SESSION_OPEN = 522 - SYS_NECP_SESSION_ACTION = 523 - SYS_SETATTRLISTAT = 524 - SYS_NET_QOS_GUIDELINE = 525 - SYS_FMOUNT = 526 - SYS_NTP_ADJTIME = 527 - SYS_NTP_GETTIME = 528 - SYS_OS_FAULT_WITH_PAYLOAD = 529 - SYS_MAXSYSCALL = 530 - SYS_INVALID = 63 -) diff --git a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go deleted file mode 100644 index 883b64a2723..00000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_darwin_386.go +++ /dev/null @@ -1,524 +0,0 @@ -// cgo -godefs types_darwin.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build 386 && darwin -// +build 386,darwin - -package unix - -const ( - SizeofPtr = 0x4 - SizeofShort = 0x2 - SizeofInt = 0x4 - SizeofLong = 0x4 - SizeofLongLong = 0x8 -) - -type ( - _C_short int16 - _C_int int32 - _C_long int32 - _C_long_long int64 -) - -type Timespec struct { - Sec int32 - Nsec int32 -} - -type Timeval struct { - Sec int32 - Usec int32 -} - -type Timeval32 struct{} - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int32 - Ixrss int32 - Idrss int32 - Isrss int32 - Minflt int32 - Majflt int32 - Nswap int32 - Inblock int32 - Oublock int32 - Msgsnd int32 - Msgrcv int32 - Nsignals int32 - Nvcsw int32 - Nivcsw int32 -} - -type Rlimit struct { - Cur uint64 - Max uint64 -} - -type _Gid_t uint32 - -type Stat_t struct { - Dev int32 - Mode uint16 - Nlink uint16 - Ino uint64 - Uid uint32 - Gid uint32 - Rdev int32 - Atim Timespec - Mtim Timespec - Ctim Timespec - Btim Timespec - Size int64 - Blocks int64 - Blksize int32 - Flags uint32 - Gen uint32 - Lspare int32 - Qspare [2]int64 -} - -type Statfs_t struct { - Bsize uint32 - Iosize int32 - Blocks uint64 - Bfree uint64 - Bavail uint64 - Files uint64 - Ffree uint64 - Fsid Fsid - Owner uint32 - Type uint32 - Flags uint32 - Fssubtype uint32 - Fstypename [16]byte - Mntonname [1024]byte - Mntfromname [1024]byte - Reserved [8]uint32 -} - -type Flock_t struct { - Start int64 - Len int64 - Pid int32 - Type int16 - Whence int16 -} - -type Fstore_t struct { - Flags uint32 - Posmode int32 - Offset int64 - Length int64 - Bytesalloc int64 -} - -type Radvisory_t struct { - Offset int64 - Count int32 -} - -type Fbootstraptransfer_t struct { - Offset int64 - Length uint32 - Buffer *byte -} - -type Log2phys_t struct { - Flags uint32 - Contigbytes int64 - Devoffset int64 -} - -type Fsid struct { - Val [2]int32 -} - -type Dirent struct { - Ino uint64 - Seekoff uint64 - Reclen uint16 - Namlen uint16 - Type uint8 - Name [1024]int8 - _ [3]byte -} - -const ( - PathMax = 0x400 -) - -type RawSockaddrInet4 struct { - Len uint8 - Family uint8 - Port uint16 - Addr [4]byte /* in_addr */ - Zero [8]int8 -} - -type RawSockaddrInet6 struct { - Len uint8 - Family uint8 - Port uint16 - Flowinfo uint32 - Addr [16]byte /* in6_addr */ - Scope_id uint32 -} - -type RawSockaddrUnix struct { - Len uint8 - Family uint8 - Path [104]int8 -} - -type RawSockaddrDatalink struct { - Len uint8 - Family uint8 - Index uint16 - Type uint8 - Nlen uint8 - Alen uint8 - Slen uint8 - Data [12]int8 -} - -type RawSockaddr struct { - Len uint8 - Family uint8 - Data [14]int8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [92]int8 -} - -type RawSockaddrCtl struct { - Sc_len uint8 - Sc_family uint8 - Ss_sysaddr uint16 - Sc_id uint32 - Sc_unit uint32 - Sc_reserved [5]uint32 -} - -type _Socklen uint32 - -type Linger struct { - Onoff int32 - Linger int32 -} - -type Iovec struct { - Base *byte - Len uint32 -} - -type IPMreq struct { - Multiaddr [4]byte /* in_addr */ - Interface [4]byte /* in_addr */ -} - -type IPMreqn struct { - Multiaddr [4]byte /* in_addr */ - Address [4]byte /* in_addr */ - Ifindex int32 -} - -type IPv6Mreq struct { - Multiaddr [16]byte /* in6_addr */ - Interface uint32 -} - -type Msghdr struct { - Name *byte - Namelen uint32 - Iov *Iovec - Iovlen int32 - Control *byte - Controllen uint32 - Flags int32 -} - -type Cmsghdr struct { - Len uint32 - Level int32 - Type int32 -} - -type Inet4Pktinfo struct { - Ifindex uint32 - Spec_dst [4]byte /* in_addr */ - Addr [4]byte /* in_addr */ -} - -type Inet6Pktinfo struct { - Addr [16]byte /* in6_addr */ - Ifindex uint32 -} - -type IPv6MTUInfo struct { - Addr RawSockaddrInet6 - Mtu uint32 -} - -type ICMPv6Filter struct { - Filt [8]uint32 -} - -const ( - SizeofSockaddrInet4 = 0x10 - SizeofSockaddrInet6 = 0x1c - SizeofSockaddrAny = 0x6c - SizeofSockaddrUnix = 0x6a - SizeofSockaddrDatalink = 0x14 - SizeofSockaddrCtl = 0x20 - SizeofLinger = 0x8 - SizeofIovec = 0x8 - SizeofIPMreq = 0x8 - SizeofIPMreqn = 0xc - SizeofIPv6Mreq = 0x14 - SizeofMsghdr = 0x1c - SizeofCmsghdr = 0xc - SizeofInet4Pktinfo = 0xc - SizeofInet6Pktinfo = 0x14 - SizeofIPv6MTUInfo = 0x20 - SizeofICMPv6Filter = 0x20 -) - -const ( - PTRACE_TRACEME = 0x0 - PTRACE_CONT = 0x7 - PTRACE_KILL = 0x8 -) - -type Kevent_t struct { - Ident uint32 - Filter int16 - Flags uint16 - Fflags uint32 - Data int32 - Udata *byte -} - -type FdSet struct { - Bits [32]int32 -} - -const ( - SizeofIfMsghdr = 0x70 - SizeofIfData = 0x60 - SizeofIfaMsghdr = 0x14 - SizeofIfmaMsghdr = 0x10 - SizeofIfmaMsghdr2 = 0x14 - SizeofRtMsghdr = 0x5c - SizeofRtMetrics = 0x38 -) - -type IfMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Data IfData -} - -type IfData struct { - Type uint8 - Typelen uint8 - Physical uint8 - Addrlen uint8 - Hdrlen uint8 - Recvquota uint8 - Xmitquota uint8 - Unused1 uint8 - Mtu uint32 - Metric uint32 - Baudrate uint32 - Ipackets uint32 - Ierrors uint32 - Opackets uint32 - Oerrors uint32 - Collisions uint32 - Ibytes uint32 - Obytes uint32 - Imcasts uint32 - Omcasts uint32 - Iqdrops uint32 - Noproto uint32 - Recvtiming uint32 - Xmittiming uint32 - Lastchange Timeval - Unused2 uint32 - Hwassist uint32 - Reserved1 uint32 - Reserved2 uint32 -} - -type IfaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Metric int32 -} - -type IfmaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - _ [2]byte -} - -type IfmaMsghdr2 struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Refcount int32 -} - -type RtMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - Flags int32 - Addrs int32 - Pid int32 - Seq int32 - Errno int32 - Use int32 - Inits uint32 - Rmx RtMetrics -} - -type RtMetrics struct { - Locks uint32 - Mtu uint32 - Hopcount uint32 - Expire int32 - Recvpipe uint32 - Sendpipe uint32 - Ssthresh uint32 - Rtt uint32 - Rttvar uint32 - Pksent uint32 - State uint32 - Filler [3]uint32 -} - -const ( - SizeofBpfVersion = 0x4 - SizeofBpfStat = 0x8 - SizeofBpfProgram = 0x8 - SizeofBpfInsn = 0x8 - SizeofBpfHdr = 0x14 -) - -type BpfVersion struct { - Major uint16 - Minor uint16 -} - -type BpfStat struct { - Recv uint32 - Drop uint32 -} - -type BpfProgram struct { - Len uint32 - Insns *BpfInsn -} - -type BpfInsn struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} - -type BpfHdr struct { - Tstamp Timeval - Caplen uint32 - Datalen uint32 - Hdrlen uint16 - _ [2]byte -} - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Cc [20]uint8 - Ispeed uint32 - Ospeed uint32 -} - -type Winsize struct { - Row uint16 - Col uint16 - Xpixel uint16 - Ypixel uint16 -} - -const ( - AT_FDCWD = -0x2 - AT_REMOVEDIR = 0x80 - AT_SYMLINK_FOLLOW = 0x40 - AT_SYMLINK_NOFOLLOW = 0x20 -) - -type PollFd struct { - Fd int32 - Events int16 - Revents int16 -} - -const ( - POLLERR = 0x8 - POLLHUP = 0x10 - POLLIN = 0x1 - POLLNVAL = 0x20 - POLLOUT = 0x4 - POLLPRI = 0x2 - POLLRDBAND = 0x80 - POLLRDNORM = 0x40 - POLLWRBAND = 0x100 - POLLWRNORM = 0x4 -) - -type Utsname struct { - Sysname [256]byte - Nodename [256]byte - Release [256]byte - Version [256]byte - Machine [256]byte -} - -const SizeofClockinfo = 0x14 - -type Clockinfo struct { - Hz int32 - Tick int32 - Tickadj int32 - Stathz int32 - Profhz int32 -} - -type CtlInfo struct { - Id uint32 - Name [96]byte -} diff --git a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go b/src/cmd/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go deleted file mode 100644 index eef51338574..00000000000 --- a/src/cmd/vendor/golang.org/x/sys/unix/ztypes_darwin_arm.go +++ /dev/null @@ -1,524 +0,0 @@ -// cgo -godefs types_darwin.go | go run mkpost.go -// Code generated by the command above; see README.md. DO NOT EDIT. - -//go:build arm && darwin -// +build arm,darwin - -package unix - -const ( - SizeofPtr = 0x4 - SizeofShort = 0x2 - SizeofInt = 0x4 - SizeofLong = 0x4 - SizeofLongLong = 0x8 -) - -type ( - _C_short int16 - _C_int int32 - _C_long int32 - _C_long_long int64 -) - -type Timespec struct { - Sec int32 - Nsec int32 -} - -type Timeval struct { - Sec int32 - Usec int32 -} - -type Timeval32 struct{} - -type Rusage struct { - Utime Timeval - Stime Timeval - Maxrss int32 - Ixrss int32 - Idrss int32 - Isrss int32 - Minflt int32 - Majflt int32 - Nswap int32 - Inblock int32 - Oublock int32 - Msgsnd int32 - Msgrcv int32 - Nsignals int32 - Nvcsw int32 - Nivcsw int32 -} - -type Rlimit struct { - Cur uint64 - Max uint64 -} - -type _Gid_t uint32 - -type Stat_t struct { - Dev int32 - Mode uint16 - Nlink uint16 - Ino uint64 - Uid uint32 - Gid uint32 - Rdev int32 - Atim Timespec - Mtim Timespec - Ctim Timespec - Btim Timespec - Size int64 - Blocks int64 - Blksize int32 - Flags uint32 - Gen uint32 - Lspare int32 - Qspare [2]int64 -} - -type Statfs_t struct { - Bsize uint32 - Iosize int32 - Blocks uint64 - Bfree uint64 - Bavail uint64 - Files uint64 - Ffree uint64 - Fsid Fsid - Owner uint32 - Type uint32 - Flags uint32 - Fssubtype uint32 - Fstypename [16]byte - Mntonname [1024]byte - Mntfromname [1024]byte - Reserved [8]uint32 -} - -type Flock_t struct { - Start int64 - Len int64 - Pid int32 - Type int16 - Whence int16 -} - -type Fstore_t struct { - Flags uint32 - Posmode int32 - Offset int64 - Length int64 - Bytesalloc int64 -} - -type Radvisory_t struct { - Offset int64 - Count int32 -} - -type Fbootstraptransfer_t struct { - Offset int64 - Length uint32 - Buffer *byte -} - -type Log2phys_t struct { - Flags uint32 - Contigbytes int64 - Devoffset int64 -} - -type Fsid struct { - Val [2]int32 -} - -type Dirent struct { - Ino uint64 - Seekoff uint64 - Reclen uint16 - Namlen uint16 - Type uint8 - Name [1024]int8 - _ [3]byte -} - -const ( - PathMax = 0x400 -) - -type RawSockaddrInet4 struct { - Len uint8 - Family uint8 - Port uint16 - Addr [4]byte /* in_addr */ - Zero [8]int8 -} - -type RawSockaddrInet6 struct { - Len uint8 - Family uint8 - Port uint16 - Flowinfo uint32 - Addr [16]byte /* in6_addr */ - Scope_id uint32 -} - -type RawSockaddrUnix struct { - Len uint8 - Family uint8 - Path [104]int8 -} - -type RawSockaddrDatalink struct { - Len uint8 - Family uint8 - Index uint16 - Type uint8 - Nlen uint8 - Alen uint8 - Slen uint8 - Data [12]int8 -} - -type RawSockaddr struct { - Len uint8 - Family uint8 - Data [14]int8 -} - -type RawSockaddrAny struct { - Addr RawSockaddr - Pad [92]int8 -} - -type RawSockaddrCtl struct { - Sc_len uint8 - Sc_family uint8 - Ss_sysaddr uint16 - Sc_id uint32 - Sc_unit uint32 - Sc_reserved [5]uint32 -} - -type _Socklen uint32 - -type Linger struct { - Onoff int32 - Linger int32 -} - -type Iovec struct { - Base *byte - Len uint32 -} - -type IPMreq struct { - Multiaddr [4]byte /* in_addr */ - Interface [4]byte /* in_addr */ -} - -type IPMreqn struct { - Multiaddr [4]byte /* in_addr */ - Address [4]byte /* in_addr */ - Ifindex int32 -} - -type IPv6Mreq struct { - Multiaddr [16]byte /* in6_addr */ - Interface uint32 -} - -type Msghdr struct { - Name *byte - Namelen uint32 - Iov *Iovec - Iovlen int32 - Control *byte - Controllen uint32 - Flags int32 -} - -type Cmsghdr struct { - Len uint32 - Level int32 - Type int32 -} - -type Inet4Pktinfo struct { - Ifindex uint32 - Spec_dst [4]byte /* in_addr */ - Addr [4]byte /* in_addr */ -} - -type Inet6Pktinfo struct { - Addr [16]byte /* in6_addr */ - Ifindex uint32 -} - -type IPv6MTUInfo struct { - Addr RawSockaddrInet6 - Mtu uint32 -} - -type ICMPv6Filter struct { - Filt [8]uint32 -} - -const ( - SizeofSockaddrInet4 = 0x10 - SizeofSockaddrInet6 = 0x1c - SizeofSockaddrAny = 0x6c - SizeofSockaddrUnix = 0x6a - SizeofSockaddrDatalink = 0x14 - SizeofSockaddrCtl = 0x20 - SizeofLinger = 0x8 - SizeofIovec = 0x8 - SizeofIPMreq = 0x8 - SizeofIPMreqn = 0xc - SizeofIPv6Mreq = 0x14 - SizeofMsghdr = 0x1c - SizeofCmsghdr = 0xc - SizeofInet4Pktinfo = 0xc - SizeofInet6Pktinfo = 0x14 - SizeofIPv6MTUInfo = 0x20 - SizeofICMPv6Filter = 0x20 -) - -const ( - PTRACE_TRACEME = 0x0 - PTRACE_CONT = 0x7 - PTRACE_KILL = 0x8 -) - -type Kevent_t struct { - Ident uint32 - Filter int16 - Flags uint16 - Fflags uint32 - Data int32 - Udata *byte -} - -type FdSet struct { - Bits [32]int32 -} - -const ( - SizeofIfMsghdr = 0x70 - SizeofIfData = 0x60 - SizeofIfaMsghdr = 0x14 - SizeofIfmaMsghdr = 0x10 - SizeofIfmaMsghdr2 = 0x14 - SizeofRtMsghdr = 0x5c - SizeofRtMetrics = 0x38 -) - -type IfMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Data IfData -} - -type IfData struct { - Type uint8 - Typelen uint8 - Physical uint8 - Addrlen uint8 - Hdrlen uint8 - Recvquota uint8 - Xmitquota uint8 - Unused1 uint8 - Mtu uint32 - Metric uint32 - Baudrate uint32 - Ipackets uint32 - Ierrors uint32 - Opackets uint32 - Oerrors uint32 - Collisions uint32 - Ibytes uint32 - Obytes uint32 - Imcasts uint32 - Omcasts uint32 - Iqdrops uint32 - Noproto uint32 - Recvtiming uint32 - Xmittiming uint32 - Lastchange Timeval - Unused2 uint32 - Hwassist uint32 - Reserved1 uint32 - Reserved2 uint32 -} - -type IfaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Metric int32 -} - -type IfmaMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - _ [2]byte -} - -type IfmaMsghdr2 struct { - Msglen uint16 - Version uint8 - Type uint8 - Addrs int32 - Flags int32 - Index uint16 - Refcount int32 -} - -type RtMsghdr struct { - Msglen uint16 - Version uint8 - Type uint8 - Index uint16 - Flags int32 - Addrs int32 - Pid int32 - Seq int32 - Errno int32 - Use int32 - Inits uint32 - Rmx RtMetrics -} - -type RtMetrics struct { - Locks uint32 - Mtu uint32 - Hopcount uint32 - Expire int32 - Recvpipe uint32 - Sendpipe uint32 - Ssthresh uint32 - Rtt uint32 - Rttvar uint32 - Pksent uint32 - State uint32 - Filler [3]uint32 -} - -const ( - SizeofBpfVersion = 0x4 - SizeofBpfStat = 0x8 - SizeofBpfProgram = 0x8 - SizeofBpfInsn = 0x8 - SizeofBpfHdr = 0x14 -) - -type BpfVersion struct { - Major uint16 - Minor uint16 -} - -type BpfStat struct { - Recv uint32 - Drop uint32 -} - -type BpfProgram struct { - Len uint32 - Insns *BpfInsn -} - -type BpfInsn struct { - Code uint16 - Jt uint8 - Jf uint8 - K uint32 -} - -type BpfHdr struct { - Tstamp Timeval - Caplen uint32 - Datalen uint32 - Hdrlen uint16 - _ [2]byte -} - -type Termios struct { - Iflag uint32 - Oflag uint32 - Cflag uint32 - Lflag uint32 - Cc [20]uint8 - Ispeed uint32 - Ospeed uint32 -} - -type Winsize struct { - Row uint16 - Col uint16 - Xpixel uint16 - Ypixel uint16 -} - -const ( - AT_FDCWD = -0x2 - AT_REMOVEDIR = 0x80 - AT_SYMLINK_FOLLOW = 0x40 - AT_SYMLINK_NOFOLLOW = 0x20 -) - -type PollFd struct { - Fd int32 - Events int16 - Revents int16 -} - -const ( - POLLERR = 0x8 - POLLHUP = 0x10 - POLLIN = 0x1 - POLLNVAL = 0x20 - POLLOUT = 0x4 - POLLPRI = 0x2 - POLLRDBAND = 0x80 - POLLRDNORM = 0x40 - POLLWRBAND = 0x100 - POLLWRNORM = 0x4 -) - -type Utsname struct { - Sysname [256]byte - Nodename [256]byte - Release [256]byte - Version [256]byte - Machine [256]byte -} - -const SizeofClockinfo = 0x14 - -type Clockinfo struct { - Hz int32 - Tick int32 - Tickadj int32 - Stathz int32 - Profhz int32 -} - -type CtlInfo struct { - Id uint32 - Name [96]byte -} diff --git a/src/cmd/vendor/golang.org/x/sys/windows/empty.s b/src/cmd/vendor/golang.org/x/sys/windows/empty.s index 69309e4da55..fdbbbcd3171 100644 --- a/src/cmd/vendor/golang.org/x/sys/windows/empty.s +++ b/src/cmd/vendor/golang.org/x/sys/windows/empty.s @@ -2,6 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build !go1.12 // +build !go1.12 // This file is here to allow bodyless functions with go:linkname for Go 1.11 diff --git a/src/cmd/vendor/modules.txt b/src/cmd/vendor/modules.txt index 5fb1c25acee..10591f8041b 100644 --- a/src/cmd/vendor/modules.txt +++ b/src/cmd/vendor/modules.txt @@ -39,7 +39,7 @@ golang.org/x/mod/sumdb/dirhash golang.org/x/mod/sumdb/note golang.org/x/mod/sumdb/tlog golang.org/x/mod/zip -# golang.org/x/sys v0.0.0-20210503173754-0981d6026fa6 +# golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744 ## explicit; go 1.17 golang.org/x/sys/internal/unsafeheader golang.org/x/sys/plan9 From a63cded5e413ffad1ec8088ef7abd10abb7b5252 Mon Sep 17 00:00:00 2001 From: Than McIntosh Date: Wed, 12 May 2021 11:03:48 -0400 Subject: [PATCH 011/100] debug/dwarf: delay array type fixup to handle type cycles A user encountered a debug/dwarf crash when running the dwarf2json tool (https://github.com/volatilityfoundation/dwarf2json) on a debug-built copy of the linux kernel. In this crash, the DWARF type reader was trying to examine the contents of an array type while that array type was still in the process of being constructed (due to cycles in the type graph). To avoid such situations, this patch extends the mechanism introduced in https://go-review.googlesource.com/18459 (which handles typedef types) to delay fixup of array types as well. Change-Id: I303f6ce5db1ca4bd79da3581957dfc2bfc17cc01 Reviewed-on: https://go-review.googlesource.com/c/go/+/319329 Trust: Than McIntosh Run-TryBot: Than McIntosh Reviewed-by: Cherry Mui Reviewed-by: Yi Chou TryBot-Result: Go Bot --- src/debug/dwarf/type.go | 59 +++++++++++++++++++++++++++-------------- 1 file changed, 39 insertions(+), 20 deletions(-) diff --git a/src/debug/dwarf/type.go b/src/debug/dwarf/type.go index 316db258f65..eb5a666ed38 100644 --- a/src/debug/dwarf/type.go +++ b/src/debug/dwarf/type.go @@ -292,11 +292,35 @@ func (d *Data) Type(off Offset) (Type, error) { return d.readType("info", d.Reader(), off, d.typeCache, nil) } +type typeFixer struct { + typedefs []*TypedefType + arraytypes []*Type +} + +func (tf *typeFixer) recordArrayType(t *Type) { + if t == nil { + return + } + _, ok := (*t).(*ArrayType) + if ok { + tf.arraytypes = append(tf.arraytypes, t) + } +} + +func (tf *typeFixer) apply() { + for _, t := range tf.typedefs { + t.Common().ByteSize = t.Type.Size() + } + for _, t := range tf.arraytypes { + zeroArray(t) + } +} + // readType reads a type from r at off of name. It adds types to the // type cache, appends new typedef types to typedefs, and computes the // sizes of types. Callers should pass nil for typedefs; this is used // for internal recursion. -func (d *Data) readType(name string, r typeReader, off Offset, typeCache map[Offset]Type, typedefs *[]*TypedefType) (Type, error) { +func (d *Data) readType(name string, r typeReader, off Offset, typeCache map[Offset]Type, fixups *typeFixer) (Type, error) { if t, ok := typeCache[off]; ok { return t, nil } @@ -311,18 +335,16 @@ func (d *Data) readType(name string, r typeReader, off Offset, typeCache map[Off } // If this is the root of the recursion, prepare to resolve - // typedef sizes once the recursion is done. This must be done - // after the type graph is constructed because it may need to - // resolve cycles in a different order than readType - // encounters them. - if typedefs == nil { - var typedefList []*TypedefType + // typedef sizes and perform other fixups once the recursion is + // done. This must be done after the type graph is constructed + // because it may need to resolve cycles in a different order than + // readType encounters them. + if fixups == nil { + var fixer typeFixer defer func() { - for _, t := range typedefList { - t.Common().ByteSize = t.Type.Size() - } + fixer.apply() }() - typedefs = &typedefList + fixups = &fixer } // Parse type from Entry. @@ -376,7 +398,7 @@ func (d *Data) readType(name string, r typeReader, off Offset, typeCache map[Off var t Type switch toff := tval.(type) { case Offset: - if t, err = d.readType(name, r.clone(), toff, typeCache, typedefs); err != nil { + if t, err = d.readType(name, r.clone(), toff, typeCache, fixups); err != nil { return nil } case uint64: @@ -567,7 +589,7 @@ func (d *Data) readType(name string, r typeReader, off Offset, typeCache map[Off if bito == lastFieldBitOffset && t.Kind != "union" { // Last field was zero width. Fix array length. // (DWARF writes out 0-length arrays as if they were 1-length arrays.) - zeroArray(lastFieldType) + fixups.recordArrayType(lastFieldType) } lastFieldType = &f.Type lastFieldBitOffset = bito @@ -576,7 +598,7 @@ func (d *Data) readType(name string, r typeReader, off Offset, typeCache map[Off b, ok := e.Val(AttrByteSize).(int64) if ok && b*8 == lastFieldBitOffset { // Final field must be zero width. Fix array length. - zeroArray(lastFieldType) + fixups.recordArrayType(lastFieldType) } } @@ -719,7 +741,7 @@ func (d *Data) readType(name string, r typeReader, off Offset, typeCache map[Off // Record that we need to resolve this // type's size once the type graph is // constructed. - *typedefs = append(*typedefs, t) + fixups.typedefs = append(fixups.typedefs, t) case *PtrType: b = int64(addressSize) } @@ -737,11 +759,8 @@ Error: } func zeroArray(t *Type) { - if t == nil { - return - } - at, ok := (*t).(*ArrayType) - if !ok || at.Type.Size() == 0 { + at := (*t).(*ArrayType) + if at.Type.Size() == 0 { return } // Make a copy to avoid invalidating typeCache. From fd4631e24f53cf836a67b00e82e2159854ec31d0 Mon Sep 17 00:00:00 2001 From: Than McIntosh Date: Tue, 11 May 2021 11:29:27 -0400 Subject: [PATCH 012/100] cmd/compile/internal/dwarfgen: fix DWARF param DIE ordering The DWARF standard requires that the DIEs in a subprogram corresponding to input and output parameters appear in declaration order; this patch adds some new code in dwarfgen to enforce this ordering (relying on the existing fn.Dcl ordering is not sufficient). Prior to the register ABI, it was easy to keep vars/decls sorted during DWARF generation since you could always rely on frame offset; with the ABI sorting by frame offset no longer gives you the original declaration order in all cases. Fixes #46055. Change-Id: I0e070cb781d6453caba896e5d3bee7cd5388050d Reviewed-on: https://go-review.googlesource.com/c/go/+/318829 Trust: Than McIntosh Run-TryBot: Than McIntosh TryBot-Result: Go Bot Reviewed-by: Alessandro Arzilli Reviewed-by: Cherry Mui --- src/cmd/compile/internal/dwarfgen/dwarf.go | 55 ++++++++++++++++++++++ src/cmd/link/internal/ld/dwarf_test.go | 30 +++++++----- 2 files changed, 72 insertions(+), 13 deletions(-) diff --git a/src/cmd/compile/internal/dwarfgen/dwarf.go b/src/cmd/compile/internal/dwarfgen/dwarf.go index 422c7e66c47..5d7dc320aa8 100644 --- a/src/cmd/compile/internal/dwarfgen/dwarf.go +++ b/src/cmd/compile/internal/dwarfgen/dwarf.go @@ -222,9 +222,64 @@ func createDwarfVars(fnsym *obj.LSym, complexOK bool, fn *ir.Func, apDecls []*ir fnsym.Func().RecordAutoType(reflectdata.TypeLinksym(n.Type())) } + // Sort decls and vars. + sortDeclsAndVars(fn, decls, vars) + return decls, vars } +// sortDeclsAndVars sorts the decl and dwarf var lists according to +// parameter declaration order, so as to insure that when a subprogram +// DIE is emitted, its parameter children appear in declaration order. +// Prior to the advent of the register ABI, sorting by frame offset +// would achieve this; with the register we now need to go back to the +// original function signature. +func sortDeclsAndVars(fn *ir.Func, decls []*ir.Name, vars []*dwarf.Var) { + paramOrder := make(map[*ir.Name]int) + idx := 1 + for _, selfn := range types.RecvsParamsResults { + fsl := selfn(fn.Type()).FieldSlice() + for _, f := range fsl { + if n, ok := f.Nname.(*ir.Name); ok { + paramOrder[n] = idx + idx++ + } + } + } + sort.Stable(varsAndDecls{decls, vars, paramOrder}) +} + +type varsAndDecls struct { + decls []*ir.Name + vars []*dwarf.Var + paramOrder map[*ir.Name]int +} + +func (v varsAndDecls) Len() int { + return len(v.decls) +} + +func (v varsAndDecls) Less(i, j int) bool { + nameLT := func(ni, nj *ir.Name) bool { + oi, foundi := v.paramOrder[ni] + oj, foundj := v.paramOrder[nj] + if foundi { + if foundj { + return oi < oj + } else { + return true + } + } + return false + } + return nameLT(v.decls[i], v.decls[j]) +} + +func (v varsAndDecls) Swap(i, j int) { + v.vars[i], v.vars[j] = v.vars[j], v.vars[i] + v.decls[i], v.decls[j] = v.decls[j], v.decls[i] +} + // Given a function that was inlined at some point during the // compilation, return a sorted list of nodes corresponding to the // autos/locals in that function prior to inlining. If this is a diff --git a/src/cmd/link/internal/ld/dwarf_test.go b/src/cmd/link/internal/ld/dwarf_test.go index 5cc4800e2a3..2f59c2fe0aa 100644 --- a/src/cmd/link/internal/ld/dwarf_test.go +++ b/src/cmd/link/internal/ld/dwarf_test.go @@ -1660,16 +1660,16 @@ func TestOutputParamAbbrevAndAttr(t *testing.T) { package main //go:noinline -func ABC(p1, p2, p3 int, f1, f2, f3 float32, b1 [1024]int) (r1 int, r2 int, r3 [1024]int, r4 byte) { - b1[0] = 6 - r1, r2, r3, r4 = p3, p2, b1, 'a' +func ABC(c1, c2, c3 int, d1, d2, d3, d4 string, f1, f2, f3 float32, g1 [1024]int) (r1 int, r2 int, r3 [1024]int, r4 byte, r5 string, r6 float32) { + g1[0] = 6 + r1, r2, r3, r4, r5, r6 = c3, c2+c1, g1, 'a', d1+d2+d3+d4, f1+f2+f3 return } func main() { a := [1024]int{} - v1, v2, v3, v4 := ABC(1, 2, 3, 1.0, 2.0, 1.0, a) - println(v1, v2, v3[0], v4) + v1, v2, v3, v4, v5, v6 := ABC(1, 2, 3, "a", "b", "c", "d", 1.0, 2.0, 1.0, a) + println(v1, v2, v3[0], v4, v5, v6) } ` dir := t.TempDir() @@ -1708,18 +1708,20 @@ func main() { // OK to have it missing for input parameters, but for the moment // we verify that the attr is present but set to false. - // Values in this map: + // Values in this map are of the form : + // where order is the order within the child DIE list of the param, + // and is an integer: // - // 0: // -1: varparm attr not found // 1: varparm found with value false // 2: varparm found with value true // - foundParams := make(map[string]int) + foundParams := make(map[string]string) // Walk ABCs's children looking for params. abcIdx := ex.idxFromOffset(abcdie.Offset) childDies := ex.Children(abcIdx) + idx := 0 for _, child := range childDies { if child.Tag == dwarf.TagFormalParameter { st := -1 @@ -1731,7 +1733,8 @@ func main() { } } if name, ok := child.Val(dwarf.AttrName).(string); ok { - foundParams[name] = st + foundParams[name] = fmt.Sprintf("%d:%d", idx, st) + idx++ } } } @@ -1739,13 +1742,14 @@ func main() { // Digest the result. found := make([]string, 0, len(foundParams)) for k, v := range foundParams { - found = append(found, fmt.Sprintf("%s:%d", k, v)) + found = append(found, fmt.Sprintf("%s:%s", k, v)) } sort.Strings(found) - // Make sure we see all of the expected params, that they have - // the varparam attr, and the varparm is set for the returns. - expected := "[b1:1 f1:1 f2:1 f3:1 p1:1 p2:1 p3:1 r1:2 r2:2 r3:2 r4:2]" + // Make sure we see all of the expected params in the proper + // order, that they have the varparam attr, and the varparm is set + // for the returns. + expected := "[c1:0:1 c2:1:1 c3:2:1 d1:3:1 d2:4:1 d3:5:1 d4:6:1 f1:7:1 f2:8:1 f3:9:1 g1:10:1 r1:11:2 r2:12:2 r3:13:2 r4:14:2 r5:15:2 r6:16:2]" if fmt.Sprintf("%+v", found) != expected { t.Errorf("param check failed, wanted %s got %s\n", expected, found) From 2a61b3c59088115245d084d5ae07dd4be5fbe1b0 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Tue, 11 May 2021 10:52:44 -0400 Subject: [PATCH 013/100] regexp: fix repeat of preferred empty match MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In Perl mode, (|a)* should match an empty string at the start of the input. Instead it matches as many a's as possible. Because (|a)+ is handled correctly, matching only an empty string, this leads to the paradox that e* can match more text than e+ (for e = (|a)) and that e+ is sometimes different from ee*. This is a very old bug that ultimately derives from the picture I drew for e* in https://swtch.com/~rsc/regexp/regexp1.html. The picture is correct for longest-match (POSIX) regexps but subtly wrong for preferred-match (Perl) regexps in the case where e has a preferred empty match. Pointed out by Andrew Gallant in private mail. The current code treats e* and e+ as the same structure, with different entry points. In the case of e* the preference list ends up not quite in the right order, in part because the “before e” and “after e” states are the same state. Splitting them apart fixes the preference list, and that can be done by compiling e* as if it were (e+)?. Like with any bug fix, there is a very low chance of breaking a program that accidentally depends on the buggy behavior. RE2, Go, and Rust all have this bug, and we've all agreed to fix it, to keep the implementations in sync. Fixes #46123. Change-Id: I70e742e71e0a23b626593b16ddef3c1e73b413b0 Reviewed-on: https://go-review.googlesource.com/c/go/+/318750 Trust: Russ Cox Run-TryBot: Russ Cox Reviewed-by: Rob Pike TryBot-Result: Go Bot --- src/regexp/find_test.go | 1 + src/regexp/onepass_test.go | 2 +- src/regexp/syntax/compile.go | 29 ++++- src/regexp/syntax/prog_test.go | 15 +++ src/regexp/testdata/basic.dat | 12 +- src/regexp/testdata/nullsubexpr.dat | 18 +-- src/regexp/testdata/re2-exhaustive.txt.bz2 | Bin 394016 -> 428262 bytes src/regexp/testdata/re2-search.txt | 145 ++++++++++++++++++--- 8 files changed, 176 insertions(+), 46 deletions(-) diff --git a/src/regexp/find_test.go b/src/regexp/find_test.go index 87c49b074fa..64c2239d905 100644 --- a/src/regexp/find_test.go +++ b/src/regexp/find_test.go @@ -97,6 +97,7 @@ var findTests = []FindTest{ {`\B`, "xx", build(1, 1, 1)}, {`\B`, "x y", nil}, {`\B`, "xx yy", build(2, 1, 1, 4, 4)}, + {`(|a)*`, "aa", build(3, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2)}, // RE2 tests {`[^\S\s]`, "abcd", nil}, diff --git a/src/regexp/onepass_test.go b/src/regexp/onepass_test.go index 32264d5f1ef..6a42eda391c 100644 --- a/src/regexp/onepass_test.go +++ b/src/regexp/onepass_test.go @@ -142,7 +142,7 @@ var onePassTests = []struct { {`^(?:(a)|(?:a*))$`, false}, {`^(?:(?:(?:.(?:$))?))$`, true}, {`^abcd$`, true}, - {`^(?:(?:a{0,})*?)$`, true}, + {`^(?:(?:a{0,})*?)$`, false}, {`^(?:(?:a+)*)$`, true}, {`^(?:(?:a|(?:aa)))$`, true}, {`^(?:[^\s\S])$`, true}, diff --git a/src/regexp/syntax/compile.go b/src/regexp/syntax/compile.go index 7524d628fe1..c9f9fa024bf 100644 --- a/src/regexp/syntax/compile.go +++ b/src/regexp/syntax/compile.go @@ -57,8 +57,9 @@ func (l1 patchList) append(p *Prog, l2 patchList) patchList { // A frag represents a compiled program fragment. type frag struct { - i uint32 // index of first instruction - out patchList // where to record end instruction + i uint32 // index of first instruction + out patchList // where to record end instruction + nullable bool // whether fragment can match empty string } type compiler struct { @@ -159,7 +160,7 @@ func (c *compiler) compile(re *Regexp) frag { func (c *compiler) inst(op InstOp) frag { // TODO: impose length limit - f := frag{i: uint32(len(c.p.Inst))} + f := frag{i: uint32(len(c.p.Inst)), nullable: true} c.p.Inst = append(c.p.Inst, Inst{Op: op}) return f } @@ -194,7 +195,7 @@ func (c *compiler) cat(f1, f2 frag) frag { // TODO: elide nop f1.out.patch(c.p, f2.i) - return frag{f1.i, f2.out} + return frag{f1.i, f2.out, f1.nullable && f2.nullable} } func (c *compiler) alt(f1, f2 frag) frag { @@ -211,6 +212,7 @@ func (c *compiler) alt(f1, f2 frag) frag { i.Out = f1.i i.Arg = f2.i f.out = f1.out.append(c.p, f2.out) + f.nullable = f1.nullable || f2.nullable return f } @@ -228,7 +230,12 @@ func (c *compiler) quest(f1 frag, nongreedy bool) frag { return f } -func (c *compiler) star(f1 frag, nongreedy bool) frag { +// loop returns the fragment for the main loop of a plus or star. +// For plus, it can be used after changing the entry to f1.i. +// For star, it can be used directly when f1 can't match an empty string. +// (When f1 can match an empty string, f1* must be implemented as (f1+)? +// to get the priority match order correct.) +func (c *compiler) loop(f1 frag, nongreedy bool) frag { f := c.inst(InstAlt) i := &c.p.Inst[f.i] if nongreedy { @@ -242,8 +249,17 @@ func (c *compiler) star(f1 frag, nongreedy bool) frag { return f } +func (c *compiler) star(f1 frag, nongreedy bool) frag { + if f1.nullable { + // Use (f1+)? to get priority match order correct. + // See golang.org/issue/46123. + return c.quest(c.plus(f1, nongreedy), nongreedy) + } + return c.loop(f1, nongreedy) +} + func (c *compiler) plus(f1 frag, nongreedy bool) frag { - return frag{f1.i, c.star(f1, nongreedy).out} + return frag{f1.i, c.loop(f1, nongreedy).out, f1.nullable} } func (c *compiler) empty(op EmptyOp) frag { @@ -255,6 +271,7 @@ func (c *compiler) empty(op EmptyOp) frag { func (c *compiler) rune(r []rune, flags Flags) frag { f := c.inst(InstRune) + f.nullable = false i := &c.p.Inst[f.i] i.Rune = r flags &= FoldCase // only relevant flag is FoldCase diff --git a/src/regexp/syntax/prog_test.go b/src/regexp/syntax/prog_test.go index 50bfa3d4bef..5603aea2289 100644 --- a/src/regexp/syntax/prog_test.go +++ b/src/regexp/syntax/prog_test.go @@ -88,6 +88,21 @@ var compileTests = []struct { 1* empty 4 -> 2 2 anynotnl -> 3 3 match +`}, + {"(?:|a)+", ` 0 fail + 1 nop -> 4 + 2 rune1 "a" -> 4 + 3* alt -> 1, 2 + 4 alt -> 3, 5 + 5 match +`}, + {"(?:|a)*", ` 0 fail + 1 nop -> 4 + 2 rune1 "a" -> 4 + 3 alt -> 1, 2 + 4 alt -> 3, 6 + 5* alt -> 3, 6 + 6 match `}, } diff --git a/src/regexp/testdata/basic.dat b/src/regexp/testdata/basic.dat index 7859290ba1d..1776b1ff96b 100644 --- a/src/regexp/testdata/basic.dat +++ b/src/regexp/testdata/basic.dat @@ -124,24 +124,20 @@ E ((a)) abc (0,1)(0,1)(0,1) E (a)b(c) abc (0,3)(0,1)(2,3) E a+b+c aabbabc (4,7) E a* aaa (0,3) -#E (a*)* - (0,0)(0,0) -E (a*)* - (0,0)(?,?) RE2/Go +E (a*)* - (0,0)(0,0) E (a*)+ - (0,0)(0,0) -#E (a*|b)* - (0,0)(0,0) -E (a*|b)* - (0,0)(?,?) RE2/Go +E (a*|b)* - (0,0)(0,0) E (a+|b)* ab (0,2)(1,2) E (a+|b)+ ab (0,2)(1,2) E (a+|b)? ab (0,1)(0,1) BE [^ab]* cde (0,3) -#E (^)* - (0,0)(0,0) -E (^)* - (0,0)(?,?) RE2/Go +E (^)* - (0,0)(0,0) BE a* NULL (0,0) E ([abc])*d abbbcd (0,6)(4,5) E ([abc])*bcd abcd (0,4)(0,1) E a|b|c|d|e e (0,1) E (a|b|c|d|e)f ef (0,2)(0,1) -#E ((a*|b))* - (0,0)(0,0)(0,0) -E ((a*|b))* - (0,0)(?,?)(?,?) RE2/Go +E ((a*|b))* - (0,0)(0,0)(0,0) BE abcd*efg abcdefg (0,7) BE ab* xabyabbbz (1,3) BE ab* xayabbbz (1,2) diff --git a/src/regexp/testdata/nullsubexpr.dat b/src/regexp/testdata/nullsubexpr.dat index 2e18fbb9170..68d9c99996a 100644 --- a/src/regexp/testdata/nullsubexpr.dat +++ b/src/regexp/testdata/nullsubexpr.dat @@ -1,8 +1,7 @@ NOTE null subexpression matches : 2002-06-06 E (a*)* a (0,1)(0,1) -#E SAME x (0,0)(0,0) -E SAME x (0,0)(?,?) RE2/Go +E SAME x (0,0)(0,0) E SAME aaaaaa (0,6)(0,6) E SAME aaaaaax (0,6)(0,6) E (a*)+ a (0,1)(0,1) @@ -19,8 +18,7 @@ E SAME aaaaaa (0,6)(0,6) E SAME aaaaaax (0,6)(0,6) E ([a]*)* a (0,1)(0,1) -#E SAME x (0,0)(0,0) -E SAME x (0,0)(?,?) RE2/Go +E SAME x (0,0)(0,0) E SAME aaaaaa (0,6)(0,6) E SAME aaaaaax (0,6)(0,6) E ([a]*)+ a (0,1)(0,1) @@ -28,8 +26,7 @@ E SAME x (0,0)(0,0) E SAME aaaaaa (0,6)(0,6) E SAME aaaaaax (0,6)(0,6) E ([^b]*)* a (0,1)(0,1) -#E SAME b (0,0)(0,0) -E SAME b (0,0)(?,?) RE2/Go +E SAME b (0,0)(0,0) E SAME aaaaaa (0,6)(0,6) E SAME aaaaaab (0,6)(0,6) E ([ab]*)* a (0,1)(0,1) @@ -41,11 +38,9 @@ E SAME bbbbbb (0,6)(0,6) E SAME aaaabcde (0,5)(0,5) E ([^a]*)* b (0,1)(0,1) E SAME bbbbbb (0,6)(0,6) -#E SAME aaaaaa (0,0)(0,0) -E SAME aaaaaa (0,0)(?,?) RE2/Go +E SAME aaaaaa (0,0)(0,0) E ([^ab]*)* ccccxx (0,6)(0,6) -#E SAME ababab (0,0)(0,0) -E SAME ababab (0,0)(?,?) RE2/Go +E SAME ababab (0,0)(0,0) E ((z)+|a)* zabcde (0,2)(1,2) @@ -65,8 +60,7 @@ B \(a*\)*\(x\)\(\1\) axa (0,3)(0,1)(1,2)(2,3) B \(a*\)*\(x\)\(\1\)\(x\) axax (0,4)(0,1)(1,2)(2,3)(3,4) B \(a*\)*\(x\)\(\1\)\(x\) axxa (0,3)(1,1)(1,2)(2,2)(2,3) -#E (a*)*(x) x (0,1)(0,0)(0,1) -E (a*)*(x) x (0,1)(?,?)(0,1) RE2/Go +E (a*)*(x) x (0,1)(0,0)(0,1) E (a*)*(x) ax (0,2)(0,1)(1,2) E (a*)*(x) axa (0,2)(0,1)(1,2) diff --git a/src/regexp/testdata/re2-exhaustive.txt.bz2 b/src/regexp/testdata/re2-exhaustive.txt.bz2 index a357f280169150b1d351c3fd5ed9a9eeff4ce66f..6638476dec0ae8eb102fff1d339d99b1a3e9f412 100644 GIT binary patch literal 428262 zcmb5V3p~^9|M)*0geZg@%VFfS%4w16j#!4t*oH0TxNJ5;s8qKKIV}te!|kwPv&pc@ zsg(0E=fj2$LJ}#Jy6e6_|55jSe?H&u8b!Q&L4v5BRIoLr8!(b^N!= zlLg!Skr+H%BAXaj!bQ@!lvaX?osJnSi$lvs@W^ESa@0ilR6!BL(P`}B?JCD7fvDEz zKy-85m;i{CtZ~?8Ja+%V)_W*Pz=qo)wwfRv-`#9H`5IszkGO7)NCg0-S94cSNHb$G z_+~KH)XbO2tLk&!S>6);@*KbD)~&M4o$mROz7c^>Ui)l2aV2%7H_b+w@n?Q115rFA zlqpisDw`h*WI|u&07P%AD=UfUM~%9`bP7bR3PfSbfC1<>u7V!<}tEw61Y-+oQ|{%rA2f89#w_)c9LFJ4B`V{0w- zLYdUfH0}>$mw}PZXb6p77&}2%kdRT@E|#n?l;N&x<0q$SyqPAMX4IH%CRA~H0Vj6} zZb^J7IClTivZtiJx2r@J;o-NYsL`@bv9nNz%Z+kwnIbJg%bxO>mC=DGB`T5l*Bj*! zE&l7%OEdSIL^c}mcgeXZVgCICywCToxy&C!cLpw=kE%0j(e`nG@QG={wu{XfL_Qvn=cZ zc{J-vv72caq$1!&|0n+H>cY<|8^SDvIiDh*UR}QOeE-Jji;Xfb9-H9I*+{o&%VWCA zzn%ERUu!<`Q?*xiO)iSbY&-;rxa@q`;va=(VQ0!8MvVtP1#Ae}B2xPG7xYY^{G&I^ z$ly_VW!q23Xw!+`8>G z299U4Onl-91OhS+ug`(oLfYHhYdm;Bgslw%!fQ`V)CWP@5Y8ofi9S`aat5YEg%JV< zjt4AzBmo4(|hq+BIMXIIbs+*{TyS(5YiuYzw6DUu19; zfF^c4K8eI4xEHYq=t0{Wp=vx^jv&G_C6Z(y&59EOVj0)h%K=OW^O5w-%I?Rf43rZm zGjp=c@VbamlCU<)P=_hSz3t3WI?3i(C$^8^CnjwrlpF<@`s^r&wdWxDL{4? zy;}LHbX11$k4hrORs}#LsrcH!D@DNuC^DJtK9N8e>C3>OD6aCHQxF!MTf}7vEr|k; z(gesPab7#S*eaf7AR&;`Wf48%3d+iDxj67MHtDvnukTb-7g1Z&0Sd|R2E9JEe!8xv zSfbmZk4Bq)Ad9w#dw|D0`c--BYsV5; z;9|`ph-Q&BsT@0~;)@<+N)?UZK^UNXR$4M;BAv)}#hd5?yPw30b`i_Hb(9QSvw0s2 z!|sK<5}b4A`g`g;GFSvu3Hy|`4Nu@#mVTH;C@JZlko6fc0MP_?T|OAX&?I@NHJb*u zbDs3@$jnY40QIr<^$SNlbp>HmD%CoZXN<4|+b00na9-ymu+P>6iRwxKB&Tr} znij6EwR?=%yw2srGczb3|7X|0ou}y%@dD*kn!q#%O%wNaG)368BJ5m>@kIhFmM=oZ zs*IimPRq9MgJ+#GVp!?ep-g$Bm1$H5BT(hlz}yPnW=CxGsP+lo32;y{O0V1iJS6Z2 z=@?m8B~I4dmYuv~(UX4fAP{2c!-~~L)ASCvA>r0M9N~#od``6j-lNE)+Q7Klnmk(J z!#662fQpqT+G>1}io9e5q+A|9nPEocN?|0FIaZ_^^dK*ZKr9+n2`C$zXs0`(sir>3 zNMGeXF`ZtFBD;(arh*O89G;6liEUd%H4GT_^^oH5GL7(rK@!(gooZAp@2gOxFDzz; zvzy?O$|g#BRPfgAEHtT+BJCjVy^T}2ZBj~1r^_yZ)eTa3m}{e)^Thl$Sj6P-GW z7++D}bqxH5(%lm{HC5VaGGg)B#x*rfVY=P^QUu={3gETC_cbaEVwYA1#iUMg;jmw1 zqrR(u^5J+8@A}7hWCti}U!U56+7 zJXq9j{WPjNXxNQ5hDE$Keq6-wZXGd=JlK|_gQ<0}e3mJfLFjQWCdxRL(TcHwK8b^J z!%}RxGE~;?NlS_oY^vGoaAK0Yf-F;SS-I(@Vf}vc`Gng6p9|$ z3M>$Xs!Jv#dZH|SK1L-rS-myn3Y7K2(NrmH7lU2i-EHYstUniM8gZ~cFq`jS&{tO5 zST{DtgGmi8gylpikCITNbA2QRMwSDo(2cuPa6#^oLEgivL)Fl71;5@>R{1@}ww%`I z^KgzM?jV+aBoGE+;b8>hzWYWmVS4PD+G@VfQ=gI{=t} zC6-^utZ2go%2vBh8f8Yo{Kk4PR`bOaaHhNJ!0SMh5N#go%JB^L9$Q$Ptqn}?YJs1) z9Zu`$2pY`68=#UDTL}axuMET^);iVP3sD{RCb%6?tgU-`xudS7e9s;kG*eIzw1*CG||qY_hhYgpHS-TF0W{1S8W|iy3`WT6)I}Y0b$=GziQ$ddAY2ab? z*0^MCPlByzvYOB; z$OK`G$v5`nC6HwOH6eCgMmZE06syK6fY$z1P@Xtkq2`%$JN&`2Wyk|I9TcL&gXKBl zy(Fa^MM%gu{(h|;7TE~!&HxFFlseJcx(eT8uy3+zl08BN(e1X|0md2nZUCMDzY5s7 zH}~q|dC%E#RNb}bNYgU_0Ov}({qHNrHOR!WEfOVUzl_)KLE5iNA@~(oZT)()`W7N+ zI9W4SAdlr|elWh=27gN|$GRHe4TzPD^`pM;>Uw-uLhrk-TxwglAb9qpuDRWjKZAp% zvPQC_pIoUmYVByc{`{+~iuH+W3pz8c6e68!o_*ash7Y@M8`J?@2Ev?hJC_EDytBNVju& z@7FzB1i=036#v}$DQcPfsRt2Gt1b7c-o}g!P3racm71yTsU=>UzZ&H!l>^EKJ|?*B zHpyHzd^w-8C&6+`joonM+~s~9g%edYfs3u0EpauEw=7Q$Emx*}#@O&n`j}L>(UvZG zB#k94OYuP(x8on%OWC)}`^AI&S@Z&Xzl8e$fJOffiw1bG)79nihMPVMqFoPcTUX|i z@(|FvBlhgOxATKKK=rM2CREY__Jc)7moZfJ; z@2;7(nf0c~kOhQAavRt9%CV%Gq&xe!(v=i@5DTq+ZmKwLp5kaABsp(dwZ6jhp7GoC zBpEZg_L6X(b3Zi6c;3~p+e}5Tj&;ptERls#4>wy-Nu*TkXeMxc5(4*?AKTM{+n(ZL zAQMDvjL*e@C;ZQiUz!&al%nQ`DrWmXMWOE7UrI92d`qChBeFBhN>h%m%m>z9ncWSm zs9y`<3%Xsy#+@e9Edt)Yy4qKhS-~mkqm$T{XWaXgBc`43ou8Yo%=VuqE>T9&J_p+a z@$H$fskB7Ft}ENO_bwt_#@xuK$XA~33tFb#bKVLAy4Y5lZ1p+0^)MK?-3G78GLcFE z2!A3zU@hb>&1L*FFC(X0>=obL!nDg(Q{jSwaiHSTF8(5WVFu7;`)erGK}t`}k4NRP za_D?!b!|xbIGZf+E^%;0V#}%}yL+*QIs9~d!(~Ol#1nY3m%&M*V?gq-vYs7Yo7`4p z;ut{J@TVEO!^+x=%zTxLj_5o1@mLr)aANi;EyWy{*GgMl#1-j=4MaEmGGPTuqMlp< zI|tdb2h@x(qJmSUgdP-O+Td(kSw#!i(r;8a`(x8eNW^v=&)%+F-`eezPm3jrBAb2z za}5fCA}EW>uL8TE9} zm=_)8sMrK*#6zY%D+WBI9azcn-6D+(+^@s(@Wz?%8figzHSpm|8>0Hfb8>cNLRa9^n?37$e>DI=Et< zqpGIXB_NCev`o-#pPss;pVR*MNW>^_^l&}7Ez@IyqL-Ny>%(zmXWoVfFokn)NO3?} zviqovv7d~FKD;R7tuj*iz(G8%)0QWA@8ED@A574#3Y=f&UId61J2RYjN^f-s)9qv9 z0SdR>G~1^JX>4Jim+m>h4C*iyxR?eon80XVx}z5doO=>NVOwUmu#$Y!<)B%wi1oC& z1T$85Z*lVS#N6|kEBzXe4Q2M31uJz~9vh?Pet4&4?K!RbLi=t*l}*rEb(kO*-9ktY zjkKK(ckrb8jd;|I*|*or7vshCZ{-Zx5LP0RvvUmlw2xl$?lo@i$u}9@ZQ6j;MG0sm z3?c8qE~*|TFi15l!HKX`pTGNv{bkRV+>$ylOf_UrU0q)FJ$*~l!|eupWnUKd7L2PQ zuXEm!7TtS#u%;v}cFzTj|7c63+pgJKaU5hW?1JaT=%Ii~eODmcE?P3%kF6aFuXIF>CVmKE~skmeqKbY3y;ts5T9p6;m) z;w_nh``36+ubud`ZUH<2@?6S!dbSE-DPHA$)4byBQp?)E8m>3}abAA)SI_S=#JQ!W zbB&$;*{Ss_VHGQXo|%IJ(+~HWNVfd{d(8lml3rz;`u0pCf3gTL2d7sJ1&Ra7u#!n0 zQSan1whu@?NrnP9BJ?d#Stu~xF~%OPsi~<2f#k?I*w`jFp9pH!vv+|4lY9GIwMl`H z5-u#tR-n_D(c=Kk&hcRJfn2aap7}NACCA$@&<5CptC=JgW$MMZ`oUy@3Eu3u%0bNl z8$%>gMZMEcqhMfww4JjPr{Tk7GS*j(vVQUZjNS3C-)L!~LbX4gq?Js(&>6}6<)nSY zl5K3P;x&b*MAhS4ZDjr}^RGgip|sCmLNwJ|WfX-{ZvT_NS=C1ImX?gnrbH{nf6M%* z*iRk*R`7>v*?-+NO7>N3HzJLDZidOe;o}==VPZObVl!+%;u-N@6bd!^x9(7HsS>tnO$=2l|JF~AHB zV4=9S7*y99YAtIoO?Lk0WYpRZ^Zl^h55xU5?M6m$&;6%QuQ=euP8O)~CVzyFif3kC z34-W)PR(k|6|#J5Y26(}p37z!93_~d5=ZEI6I+|!MMb3(>oe$?9?N96crQphji+Z_ly^&rMqwc&*a8~>OE%ZDTHSQUHwfx#&690#SjpUrrEd<8! zQez}U1pkL{a-)#Yz1uVM9{9hn1}#Qo%eQ;??qv#FOMr@5Z~J+<4BF>rYx~xI75(}! zm^%NJw5BqDq<15>nS2KIt4W>vV@cO&` z2e*-l?`BS%6$h3-YqU9k5UO4Ntf|s%dV+ku$v-2;SN`|0fze9^a#0KG&PX~;oJ7?y#?l$PvQH|?FA03tY=<0U3BQs=|*7G?#LZ8&)~lPGbVUc_>os2|{bw?R`66)Ke zMNr1aJEae&yViC@Ej_!g{WT1fH#{lyMuxBF`+d3~{UbNB?An*#XAUbZ3|-e5yzFfI z)#sz_?_AdHg?IPgHU0kVVdnXil+L1S&<}5B;NQQ`KWi*tzB|J%xzd%i``M}4Qvv6P z4lHYHQBHgwHmmscLg;Pz&uPC^-LF5c$vgwCnbv-{X$I!`i>GgTa23F4IzA-jVX4cg z>jx&2neSLL?mk}n;=}O!FN4OjORT`*&3L;^&%iD7$@0}3yI<}vezE%H+6j@>-O<;! zZbtX-zSHu2Kj6!bX0u=SF6^&hI#nK;RP9c4IJ*6J%|)C%L4EJyRCa94icRGs|32E% zuBFds`A(H9H*X}{F>@r%qtBOysqoGpJ-Bq9H{%1?UzD7_I-B+A*jfj0kbL#%{K55n zwV}iDx3BlNeqFo%xnbeiBRR2Hxtwj*@iw7tw+_3@fC5q4TxLl{+mVRr>nDEsW$Rkl zrK2y8K54rqdvJHt!=m;c#KY$)TbkN}VtrNo9U5+_b##ol*hc?}L?T^3U@ABa>Q@?F zm^c@dKn=YYFywW`qX?H#EsQ{xmQ0lAztSEB|0YwR)30^*#)n}YO!~1shCJwnW5Vsb z7Pwio~X>jecf<1n@f$~}4 z$`e@6m}%EJ>Qlb;d|;Nv=YM(s-rgmHu4gYNT%HuZKQjugW4F=uEPDHTdz-n_y?r1- z;KgGH^)I`c7~_DH`^mn@?yrOKHFTE7~x+0`K!f$cN*m(Pb`mPmq zHFj&oy!w`xN(mDV4xg07u4jIZ#oS=>_~rNm6`wY)KF@A|(q;XvyZi%_Cm`}X{3#9x zf-j1$AMl(pI|={ zjE4E!UN62iE>PzakIxjz>lR(I;3BqKI3MxoWBDptOK10Ejbb#85dG!_L?qz!{a}^w znP`CO@uC7HsBLOQTdqSvVoMdk?>qtT`*4IS5 z;lI?;kB}M*! z)7*3_u~zD&_AGMrsvu`|TO+>yJ|^rO;2sGv1<;1MVNf%ap4lkQRxYZ(BkA(nlgr2o z&dV7~X_LcS*<)j%NC`UpJ`tMg}W<9%M|`5%6Se#omrZ)6Tr-@Hmweq zOWwFIT~g_?(uJBd@hvA)fg7HV_^p%oJ}xsyGXDH^Ttx0h)ktrzX=hs;#n(B@Z+NTz z;7%TaoIJ!S|}}7!#+nT zceIfs*F>tYhDT|0;UTcH>;%*Zj!eN(u@IaIfijU%6*p9695=YrP$wHkHz6W=`3$O0 z90-fkceFuaYm%Q1=*YG+>k2C;heExd_zX=bWGi&{b=h(hh7G_)eZU;MS2#6qL%U^8 zr@3ujl>kJ!7^-QP4y9p_`i!(d%e8b?itB0?!g$b#IB3~WTS33txLd@y{0MZUmt)3u z_a+dl@NFDqd`78ftrpJ?8kBd*YbqzBoHb_Xd-r*ECOqqQA(hQLU~s`JZ74l=P`p*_ zdD2a|$~SN_z_b}~bV`2l`9Ar@S;vjk@gRwhtGgvWjc*^X+xK9mepcNxDs73hQ~|Dk z!+TR#G{G>GFNVW~p()DD2BTPQMzZx)aDWUrV1g(#cE+GD&J@l-vtt#(hHY{vc9kJt zXOzRJqA>mVtt}9v2*(mOiIhZ-e`|oqVQaI%IXbOS9=3?p2XCmw5VN;EiR;XHMT_-f zqk-jAvm~#azS@W-s2*uTz&`B*9yyKCt2KuYhd;=T)JN&@y1a?FKnWg+!EnM)SWUuQ zs8)__Lv|fOzzQo*p2T?wD#8ul$Om-3Y`IM%8~7@q<;-WfK+lE{k1Fqx627-fQ2o># zCKf{tlBFoMdd)RFpv(Ga1iE6(>f!RcA)%H*7DE$j*`CL(=i=*q z{YEZ8?nm)POB1mkS$K2<2ZJ{{brf%0#S#SWO$y?Zi%syPDgsfZ-bvf!z~LpACM6h& zIidI9$`LT1X+LoZ`-&Y15qR0LE8Zlriv)fXCG&<;WW)BsM%qOH_7ns9N}<6tRo@{NCwwi^9ZI+*Wnm;YSv_Sltii&EG8 z_xn229orMkN6z?bSWvnrRSx)G>5^G?4ImHD_r+K}w_BBW`Mu2Ab=g`rOWt8irVj$1 zAeZc%F2_6!5o^sb+F~jXiPe3qAXcL(C3bs@kErkG_rITBB>w(+2zMd!&BLY}kx=qjC_m+yGrDu4p zn;X8O-WvRKu&(lNgZJk#W0=3jh_9HxjYi+NNWR}LWA)`pNkNgLBu#^XP?WcdsmxFS z7;2`)Dk5#X3itQDq3a$Y%ciVczm^emsO9^Of|%>yPh5w}QNC;=bwZ(EGswRUf6vo| zE^5o~c)6YMEWtD`-A-KSIe1q&4tdjtl+@E9tvc-qV$wG?eH_V2#@RG^BG^Q+nIXJ~ zk-`_LdfV;!-VLMQs#eZaW@TgfAQH(gP$2>3UhN>(>uT>pAYff82~6ESnabOWpsPC`8^^GGN)8(u8z`nF>-$RjDBM0} zB$=8z7;ie^-r6GTXJ5Xhv^gAMEL@rM$g0W04}tY+*yXm_IXPeo);*((NiZBSY{j{k z>_LFhy?q%~(D;}EsC1nAM7nlHY_UP0mxp(ji6#)AjzIK5jc(%c=_ZnLSoLaoLwf4S zNKFZ<4`)2AJn3j_2vhb&d6S52mq{c4G_zEj8ux7RJ^tI zQX#1vrZ&mCaMj^?@yoO)<&Nd15HvW!_%VxE#;;*j_90ClLm;u~s2nXr;~qrJ5QsKe zB|rm*NJh%yWusXfLY#XH)C8sjMA}iUTad<(0By4jmKVRsSSJUKD?z9GDy0R&@MVVn zH(73ZHI*y zNZv%uKU2ru>X5j-CDOrPb`ly_z=L}E-}IIRspvCqD^$xPIaI>s3CX7uPsfie-FdtI z=t9%GYfrTnKZsFU#M>^Bb%73Vaf=}d4{PVc= z@YE{C|1VFQm3Yv_{3kG?F>gi#N`` z8=hHvCh`b%BBdwz#>|^4+7^ZHU+=&FyICo=PM^6mh3|;BQ!XmWy*)mC1+o2{ygcAQ z%_reMfaM4Qaaz(xk*?=>(TWds^d+)u)yAIK*{S}RwX2)|GnKz+EmI{^of^ZJCd*n& z-&_sp*z@_@4v{Ea<;6Wb>JAahuc=$_E?%EMOvXg-ez9Su^F7^-Av>>qy}$Z*bC7d> z?*f;nc@yUAB56)fMBFm3z+LZdHb%Tgi0u5;m{T}*t*8JKWYJ%5z4g|QMT8yO{+`Po z6tf0z{Hr1e*BK(2ua-I<;Y*KyQh*x6rYC{V6fVD?ZT)`Z>6!B3geo}k8;i&r5|0K5@25RN zC=Rgg=Akc^F}Z?343T{p7!3uaXGvAcI*N8hTVDJzjuH;0ya3X6vfFM7Z@~?34`AD4 zb%!sAmFVA=gLqTh>tV!dk-l6Rv2`^wQvhJ=F}V%FLT3`a8T|0RQC_cFPZJw7S8{?aCB_qX%zS0n9 z=lH@F)|dc<@fe{AE0Wo8qOX#?4g5d)^{;td17LR`Sj9+G{Xr#W6|iMXO7K=0VJAw3 zzhsGD-X5}#Vm1Q6BNha4@?Z-ps40P$VqG1+Wxz5hh}bikWZ5BnuU z3K&(c04{3dm04HqB$~0#drZ(XL~W~2ZW?Bv%&|d5I~wZoN8M21R#~C#wwdRC+1oy$ z9Jo_f0b$}wMC-vsrY~RI+Ei0yrS1$Z&DJ~?g_6Fz^?Eii6<_-M)zU?zU8kw(W4+gi z5vHTgRx2Ub2tR`W49mpiGqmL)0DvBlR(AZ1>{T;GA;hR(yl3dJ&Yvb^^#Kv?n2#=fJwO=4PKNgcGBQZ=qt6mo z`C0Klq--RPy4yR6%#+Rz3PH$H_VoA`Bczud-^ox|L!O01ZeGro-O?Vz-7fz<>>aZ5q$I(l3oFT z50Ee|iQejGEFyZ64AUw0;|i(7Dm+Lb3DTvL4zEHd!<{|M6q0OcYwrfRlCoXAd0YhtBmdUuCqGrM8v{cb9EAi7LWX3#GWD+AV8p~#z&XO1mbR`k#GhQf9d4g)x>vHW zU9;ERf5MrDF|FZsPY7afN*=$O6I9Y4n1qpNG`^298PR9L=xZNQDd*a=Bl&;^#1zZ)w-i3q|xagnt^qn3#-0q3_o!JhHD@ zzAL;AzBb|eU@|yoR1maSwesRnIeP#&d2_q1tu05lPd{SZ z5^s<@jXEt~_USp!rG$9$8YFp;FK~fYSvl)zngO}&;JAnB>NvWIj(2vpjy=}EHC86j zZ;U@xAP6WKJ4g+>6X}wdS;fuAfTyn`&ze7D3Z4+bF*?Hm@kzmH4={uyU3XqLe<6{v z$H5vzgC0V0L&9#eQ_A!;6L9;Iu-`9KthQ<4#9{>f=I)`PHfcN?ACk>^CFFG?iMq?U zd=CFv%?vhOZMqO{sZ`j@UMi)_6=vRoe4Hk%9b51l$z5jG$5tKera~-QULZ!!D?7I{ zs)*+?0mZXtB6az>BiT3a*7bhor_HDKVzf^W7Tvq%>B@#w)_DnhiR90E%ZL`xJ+=Ok zkg^c-z@(lrMwJH>&sXv1(aPoev~f%4ZbE3W<+4Zxjy7D>qtS^9nl@K)^_wgtmm>We z^ygcYPWw;QmE7?rd*+%`>4Y(PUbncE-lWRZ!8kgrgj$h1=vzO=e!MqmN=ql8TDw1x z5IWjdP7SW@x}g{GN@>So{J2DYH%yMI2=egPNe5;cCTPZu?WYAGZ4f_xw&lTNy%8%W zp~)lzQ*b2O1ovl-=2|7EcZ&Xfc z_L?3;Mml3QhoT{+wpl+iK2U|r|x1$4A7G*5kyiSZkR2@G_jfXfv9-oj9|O@ zck%UMbV9{MjwMoYBnwZ73K}fqO3W~N>+UO7L+>?s-r{?lL%6{4Tf^{^M8ccQv82k9 zRupFME{VmJi9`N5{F1COEJbhDc&VzyhjXxI-R)Q)&_gCCODlBV>A9uL@xbZ&^09V- z9}xscWE!c2TC#^0E{S_hn7A1smAPP_89{OB!P-V|k<}_UUH)RtH25`pJ2S@`Lo6#a zOw$?0-md<|5^i5|Mzg#hZ04RKL_*>GLVkUxMZtXTpp(B@DjwzH0m~2=52M71)yyXa zOK3{JUAp@)w2WQ0j2b1VXpEg6D<(qGuQkw;UTs__9GnC^Yvi%QyZJIvV5E%z-Co-* z+@6#vl(q@Z?#m5;^iC~=L-ol?dYLr~TVIK;>6lI~0EHzUC$wvtcbRulAcsx#C^Efd zU)d)u;1^=aI+I<7YDlP%(pL{#0ViDu7C-C`f=37_BBVZ3dGl{R*2?SYJ z*$dUPaqXXY{$Srr9}1Ti2cDhDFmpR(T|C#vof{BNq|&(BCWJz&w~L1nl;#(cUF0{U zK@Q*@86OVTGKNa|QM?UX#$3l<*WSBexHNEu$SPsB^j~QX)OR_5ef;|9=Wn^eS2_%B zAPmO&;HI|z+3E$A%|K--%AHr#owN`dhm*uhcINg&)R5tB7fhVxpIv>of3LCHspR+5 zdt!jQbU=s20)=#38@$SJ$k$+3$Xa)Z-^UAZeq=&+e#-z%erodlZu5B+yAJoYJSv_@ zHh;PIsY&n|_;~)2J-{m}At@Q01ZXWlgu57_Eai&v&0SaZkxl|%K;NWSB2ejAdl;Q4 zdK;rhuo>z#GfH;|Pxu{hZ5&B_s9o=(TU*%!GT$aBo_b+>Zn?1TRC>a9$E**=wvKDBNb z;{C>NcOKvo)Mw|z&%NR7d~L+2E+GUgH%v!0*B1+p7OcLB+^Ihk2<1`*=P=aRNp4Tr z!E|bnRv!<_OD(XAJ9aPgbxTL{%g%1&zR$-Amx!=h^!~jvu6#bJf#t#RsUcoPfADaI zICFEt?-7&7Uf74*U=-Rgc{l@e-s?M|ZM6kprsMZ@&wgOb_GkOn!Oy z0&zStD2ms?l;2kqn%umAjcp$feH~$teA@%#|jaDgcVPHb*YT=YbPT44Vj1_&uB$3e|jW{%kuI68(BEi$+z_JQ8Vikum;t3vw9zNFIN?WVcXo2<>V_dyH zc`gT>#+EnH#o_~Ud<^?&d`RjqzTg{2-U>b;Q%yx#0hNG)8aZYATVp%L6&@>=xnNAS z^m*F`*$$XI2F72nR?pyw;w+J9W0s57#a&?st{mpa&SYt zqQvc9V;~CLRt|5kC#RQgD+hN^vz09lFsmf`rxinzA;ogOzRrR2R%OX3GZ{pCi(`?d z4z@%~J6deOrV68H9AKBGX)|m`Hz$BxN5&7< zMDeT_NVrSE_ILmopp0j++EA{Axm1UpoasG=k+7bGkldOuRg{TLN#wy@-EUoUicc%` zb~tKI==vMz8DdNPc(MY&xHmEVyc)U@tizl&+1nVb^u$S(#7+t1N9uK)jlH|Fq6;72 z5ptI|+qeR&+837Bua@o!F+MvO;gLif7#mT(ZQ?jes|czV;*YkbrA`wAuVlQ>f(1IH zilOXr`Em0Fz3GwFwe%-%z-Omk<5h?lL+UPRf#oHNbN*62Og>~j zx>G=-qk_BRwy4f{b;)dFf3BwbZ5_wNNdu$my0+8ir~T>us(ba>nP{%0pC9<`(W$99 z)3scipnwb2<%N7Mkzqw#KY#6d`}LI|Q2o#dTFdwjKA|C~EVqqF2`Q}A3iqfphH;gV zRh1>$?))*csg?O4El^pzdkG63C*?B;sXp=gOVoC@VL60bn7yzotUrurgtv+{dvBlAV+fT2W^lIgWq>vw;O#O&Uh*Cv{@;c23jA-W|44bY z2_XGMkbaUy|Em%I6#rZ4|4ruKh5l;U-!>FRWd954KaB9x0>bY9TdYIKhTJRM{q5VA z6H7lxoc5pL1BV~!zrxM)jUv3i(*K0SanEziXa6bpKdF{|=gvj^Q~p2YZk)G&Q=S(- zva#aF=8bJKMZ!?H8YUnH0GowNZ;|2CLRcp9pY_TAi5jUzhL3xmzy2Rx`?n^TynFbi z>78fzAHeKZKFV>#M>e|LKM5Nn^b< z$3*OrzO`%5et5l`sEtp^pAX~zRdQ_apla*UZ^fk-&z~Y!H-25qUEh~$yEbrbT{&d$ z@f|5<*ZD8WUjsi8*8_Q`YrN6lf!9L%WY+U9mlr1c22YbkSPR%|UxNi(PELMV$bag$ zV%fgV-dN@o5CWr>A_VidRb;o9jRe}#M*9|0j;&SHFAWb1a~}r_(Ha|IO!^(*Y(;&0 ziOLB?yj%C5h)%yPp6hQTr>7V0?jO7H$G6X4*B*a+VE+7j^p?Dii`O2eyxw##&F^Z( z|A-3xq)o!++nbau^fxVc46L@{7l$dd&$a4t`dR{KPUS;j`18f24_E6bPjaFbl9TU@ zo?)HHUu$1+cv!eFJC2mWx1~sc*!Y-3%ZtC<$Q0sO&nge5!y;8{^M5^2H$D|{!>T1E z`07Tlh`jbk0OPl!;MI+PR_FKb$)Eo;{UL%qj#}usu<*-0$Azc!zgQ%&ADNl94dd1y zVS=COGyhC~q%Y(X(?MoqW{a!eYuTorY7a&!`F+!wq?SrR#|yR^ZdSJ z*Ib|OI}gq~+WbD>cz(FlUHaIC_}0bF0Ns5itt&o}gnJK`K6btDFiLuN?0rSTp`f~C zr}fnPHeMp%ii<54EQ1>FMn15dZ`v2175Xh|>_=bCzKGlldaKV&RM$OZ#7ATNi6Ab| z@S-Yn^UTgC>zbN6?;i>T*W1>*8A}(QT@~E;igX(~`Rhh^$rya3 zN%a|3W!cxCQ~UYbXUY7RTDbKAlXaOLGk<*g<9D}XH*6O#yo=hn-oIaYc2a2EEz&XI zsA$D!K-Y%p=5I5{F^}IvpINO4l7bLhlkU|C;Tqvr>5boJ&g)l4k69LCJX; zfm%cDrS8<21A8?@@{S%5e)A3hY>Kb{d`Ns+=z61FPDKgTm6j%)_>{?hh_V`iql7(u z@Bh^>ofv(b2Y%hqe+VEdPzil!-Uv`31T_Gn2t

Tq22c8L;1f?a9&MZjq*YPsNs? zuZ19q&gYeRlc(ZK?=FY)_*YI!Wi}?UA4UL-*{?i_AF(;oF&gkMH%8TJS7>&~d-%#aO=cZvC&bE$m|jDh3NFyK3?`h!{fu zyiw!B+L_fQV$FwW6@x2#G1uM#{4t&Ng4cbf8e*r8PqiN*13>ix|NNhd*D6IagEg0e zi%kb&G$hx<6ld%Jyd@&#$^@XhHZ8oizgZNy(az*yYv~x1>0aL}>RSYCo;xvGXSV0v zmGGLi|A@>^0ZykJYC5hk4Z1fk0Jxs`kXz6H<|T1q#`PZNJV7B^I-_$(W2x(Him;O% z0zk-b`a9Vb7k4OqD5&QzNCRRHC;>hc25hQmvAF&&GW@yFIBNH1)+5htAA4ps>BD?_ z=8RL`(bbdNg*Zy}zrLP0^GaT8Viik z1O7$EoYdHTSL^XUt+ln>1qIxi&V%$zo>szfxRCy;=vq;&CYhC%XGD5B0JEW=1&l5UiNlEU%2hYXBZ zj~-JdJAIQZ9mMzGWeMs2W)?9W_-u{4gMLr4F~E`j$3Bxlvjm`N&}mp*EQ_2|YJoD5 z>@QXAU4G0jue+20)TUHvn8GAc3*mu8zn4LzQx0BG2NehPC+s9groAJ+jMCTDppsQ@ zGaMOd!N^XKit9RB5-8UTQhkB!)70^YM(F0zF^+hu38IYULT@vmA?;t}@jA>S-w}DM ztDoRKOpEZ-2g?>jT%K1n1UBwqemW245PD$%<~v~B;7&={Ug=nGi_l`vvfnx(V=v^3{qvAsS!lXJzLMmkJd>B5n;Su z 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 z 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ⅇYDU;`R1-c9fzCN!g9roHxD0 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%0Ag@+`R_Fu>{5 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℞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 Q#WZtd^J?C!UtNIy564dJJ^%m! delta 344814 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

?IYek5w!Q>ZeVEc zOx$g=q_nN~ws?l#-u?9bF(>iFlhNjz?Det-?{{U08V@XYx&36gXzt1Q!7+|OYe(&_ z>IEP}IBnZ4bd*`6UTI{QYQzjlL^km{>}dhL1#`7~6IUfu6Q-Z_zPr1ksp5Pa{``FC z2G)nedv{k%E!wj8Y~F0jfy=iKY&om-^fP3;NIpGVv47r}9khL>b}qLq<>}m;kxMU^ zMo?}|mu)HBv~t@#mN)jr?0gbT8@zY49!KedfQU~`0EhuA=AQ6^E-d{9Ik)T$+;%m2 zFNg<&i)Rv!%zid}ckt4?DUdS$ z{W&1;*0pFFcH#!e8&3fl-7;-*6F`>ZZ@`76Y7d3^M59B4QWWlNC*`43V$7i7Ftc

Rt;@qk*a+4vuR+=E%9V^rKq|&y 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ⅆm_GY0K;TFg;Lvabh1Yc z3MB{Z0AjVOVYLE5RYAy}qn7RWf5Wx;91|4+(XY(_mP!>r5Bq^=1`eR2(v4?tQZtS1 zK&&@@Mt{7Zdg+Q52&8S#1+qKwd^z;>-u68X4GVaJRbma35z3;fP@~^N^D>tBuUBdI ztUMeakZNkcghgl~r+H$)7ABf{a1qeyd%K}4TGzG~*)G2I+Y({ZoN%|ORd|+{#fRW6Rl~4eJLe-n**cdBV!uibbKVeHh zFh9|#mg_YW{)+iZU^^(7%qgPbKS}S&=~=20jX2+d&%$Aw-8cd@oNuR2HOB$$r#dQjDPf=$Fo;0BrUYJP+WdNuC9N*QVkP42#6Q7OS>R`k^_m1RYb|Jq0A7~Q)V#1GBvK{~ zUV#H}t^U}yu}gpw>+0y^IQrj_5|TXJUYtTn|0xy!FdJ2X&v;2l7)q$|0GI*6 zBi>^wA>J>f_OCCR?~lBv(kv3JN32jG@0bjW48G%t-+2oyBeiORjvvW#lvAkdmtV8o zFNi^8;aw`6Gk(-JSKYrlAEFxEh4thCgC$Lr%$@9gYZamFr&{TKuhcl{j7J<&$!GIB z>5OM|zs&mprfQP~4X}PoHB#z!dG+cOSB#k0%dM5qf%P5O5h+h~3vXWZUT1`Rcmf() zXMWKwblCyjH14t9fA6tQ@P;;|+wf_Y%DUg&c-kXLodTv=@zPfN6!V=;Qjnjm-0)yqmm$NcNS6rjJNl1PiM-=g|EiMrSK|oY3T% zBCC2xP7z;R8w#PrvYJrQuPlSH(EmU{Loe`^xtX9&z!Uia~O(RkKekRmqmIvE~F;to3C?))C}W& zPTuK#@yKi(pnck+axi^7QEAz4;oh&%e1BU!a@Pt#vYD*RrFt5Zt>D=p2e1df zs+=m^KE{!^rWc|L7Gmn*R%Jy?@T)TQn;2nvP+0C`zPuQpW?n^!4=im-lG(p;+*4}D zt?d7w*F(9Ein>s6ein9TsE6WkT-)DIxnS9~3_$O#FXoYk_&a zPDjs;5QsT3cfmY|pu+slR`$6w{|rJ|l^a zXXfo;#A~pNR96`gx|ETzJ#TuE?)N72!0(S4@a#kPF_Ugm#EB2nBzZCNX0y2nn&520 zL6OkF#A4#z@z7fo56ea;)I@9Ym-wRrL>aLi1YhZntp zBO0TO7sKkTF5)`(MvFE+R_5j0^%wp%IE%y60n43*8chWx5UOwdEMd}bwsG9b=oC80 z-WQwMgup2v>4O6X0d-Y%U0uKL>b|;L51WN=NO`DP z@NlK;w?4JZUw9PmKwGhLsNW1*v6&B3Gnfy%@Tqh=9K7=KVn+>c{h~1d=)l5#1nF$V z#+GcFY+M@ur|59e$|Bg4tsM9f1bet9OWe4hU!aw<*S-)h2W#Qj*j#?=zGQAZSLUT?DsVH00l2Qd)JbOy`SD_(7mmVGt{u^40JN2?$6{B%s2e>JAyn#Kt0YU}0e-69bsv*u(w%PdQk# z%;c17Xn+96nJVHbNx5?eX9le)OC>3L&-Wg^{QIffgW$jMH@CzV*F$t8#R3ztB~GGK zkeuZc6U{4S! zr(4cx^53w^%1aYu;lY=lh@+OHLb=;PoyW3t1ve=NVicoosA7Z9eqwo~`2noB0lH@L z+GYlGnxh|61{qB)zX=(Yvx?-+>pOgA$j~F5!=?6U)mD)n`fSdX_&&=Tt9{9u#ygMh zsGGbsf|BVVop-Sd@&lvb=-__V4vV!wbZ7n{RI>Jgf}9`lV;P=H25WZ_y2*A^8~e;G$L&Hg2i1)%zq%X%wtU2T%@C z-TQ}ICMBt{0c$)w00Cg8YJX@z#tm@PKZ!jl@%jIFa(}v*HzCa;mUrBXg%jMAx5ET1 zntJ2xX%#qoI@Mn(-UZTmdC;$<1k3CM!~{6 zi$gBMJSfgyJb*Cw4K>YC%{5o_F+KFjX?%e=PUnqaU91|}hEMGJjmX)AC9}H6uQEuO&7PvCj zk=tecvJy)5z9Fz+-i7rz31% z4^N4tX$Dky`^!6%aDSu!(kSIGg=&HB?KnSPrTlfiH1g4WxZA?9tD)R2)*8#!t(J{` z9%p?M{{izX@g4`F0mli=ShZj)g}CgFb2flS&0zMaFw#tW)+R!hnb3Sd)bVB@60KZo zk?{tKDm#&)@#bF(UEi%K30Dz52D!?w^DC`i(!ZzJctYb*J#n*u(U| z?lE0VcUblzUr{K?A(-bUm?uY{QK=|z%8KT#;9z4_U?RsTfE3x7`S|eceX2Y$sZ5QK z{`_o?`@O1GOg)OwxJD~JCJ!s1lws+yV(F=c9OY=Hrxe)Jk1(^Z7Vikh8O8(bwWwri zf`A;#!wPnfpVCtfFnCE&0tBJT8jGxgWO;Dcf>l{1L3Sfjd>{o0xTI7T*OIXj$phI~ z56Qey>5%wU21j4YVXErk4#U;a!mzJUH0t!p*~!CxiBUw1Bcu3Imb&^p?fgg-r+ z?~d%c*70g@O7BKx_x@0e8*Hol^bD{_{m|{5&X>Kpt**~{5_jU;uBu;;D0=yPujo_3 z?P-nSsK?>pxou!@#f?5nExed>*(p9*MC@NgzD%0ul~b%>A=_ zu=KF>0K$hjdlD01CY8^|0A1eWhi3U|7Pt4mFFntMZ#(u6kcPhflLX?0LHny%K409j z#dv-V^4*RBaj=@P@Mf5s!@8g81H&F~c^}#@1qu~9u^Ph^Bah5r%2C!r85kS1;HW`z zP!lFPeiW%80W2HTX|l5g0UAy~mB=EbF9!xRt}(zK1ClGx0PzD-HdCt)xPaIu^Hcp= z4uC|@MlSamo;I@9=nE(-i?QOUikTReR{aBEb%gG~QDtjTbpVH9**Ho$`M@C1u+K;~ zhaLhcPXaKUfDT+-AeI@5m^~oG`vXl7D4-O?D$UCWubeFXm%x1R>GHQ%-~;8iTc4W- zSMlM0wY?4VvcBkHlWI|Y*!_uPGFjv8#kAREjZZ~4FNB74N4j-XJUUqVJ}$iUcp9~Z z(a`&#R1;#ip4fHLS*-Yp3#H-HCwfQEkAuHX-uax~@uGTumiiEXqf;u&nM-C!Xm!-? zw1u?CR8UC$-ls^cRu6DcY}GxN^lq+%w|~AQwv^WTh`PHHeWxiv zB<-m!_O{r;P}r-j&Y#6IKaP3yDbboH`{Um)w5FN9N}1~X{c3w`Qxd@CvHM zAGXf&Bw2JhNLh{G&d25cCHso7uCL@d`89DBkCO9vGp%4H9aZPWe$Y*^z`&H z1<`r+ftc>?owq}fll>|6T~LRqJ1SY1EE}aq1f@rAozC-3^~y=S5iV-aPm+ftQoZG0 z@b&NL+OQ-((8t8TG5%(mc#;@($*q<0=2_Q;up3?<-hX(O`1lv^@b`Vy8)6ii>w`CD zQ@`>y8>+uNx5Y1gn+ff-T)~{2&K{54yx=bViJJIfWWDR)vD2eTT~oa^WkUkh0IP(NGz5niKJ-&kUU3vD#Zg9lWVbHDshw&U3*o|@s3>*d=!#3vV82)@i_nB&0 zp1xmsu+GaiHj?q*l~K3v78RKt-*u&Y`K_a!F8J;V3OLHB64|L3BKzFK3&3t|I$s`r9NBI%R_uULtJ#LCSN$C(A;5* z2-Q)@*|k=1Xbx~LNm*SFza%NCQi)cnQ9)gr1%TD|Kkm67ET~_a&{JYl62x|+{{2mQ z_Jxjq%xC-Gb>}*G3tS%F8r1`1^h<;t^eY;4_s|{Jy$0>?H%AV6<=^Bi|>%n zXW+}!K8EV-W0LCXTjHhgx){SpC?C5lp>QY>;nd&vrbbZcZa?M=?`~U>u~Xt^{M|DS z{~u{@0uS~2J&uov?2;|nmoRq4m28EWv5y&(Whl|jL>D3ZXc5gsmKhUe34@toM97|G zvbADTR5ybPDO@Bi_y5ee_kQmEd_Ujc_w#!F-!t>PpY=TFocA;D_xm}|bIwuM^*WhE zKH1d!q#biAE$E=@`2&sJW|cm!ZnZBr#k?dwZm^x!)mTJ| z9T_PP9jSc7voQB^!2VGUJ;$?YtCx>??lGy52hD!2G{3#XWv`ef{N3OOTUf!(#KxEP zJg2BQYs33Zl&rBGM2AUa2Y*PszniCQ88zj+Ne4qqo3KI)EPYU?dudSZJCyu>k1#+$ zHHG5LuDeh*0-co0+YKW(lbS^HQk%n{JuD`N&D!!zNZLO}g)(@W>T6FlVO>Kv0veik znQ4z89OJK;MqMyGu6rTKOA!~+TWJ`3eI~-$Z#5{L*0^QYrOKoNYs{X{pk)7H1tCW54^*;88FT)E=kVDX>u#2pq znjLBtSa`CtvAw_N1HTKj2$LzvsvXc8b_=a#_{t7yI|g5i^}~M1=<#jz3zt!ImB(Gj z=O?4?`+J``{Bz+?n3J^+si8ZJ>zk@CJQp^xrd{6)#R-($^D1;U2%CNH1#ip8T#RX| z?`*%_dhd!>K+3kDEVon6w$~*jB(^{bOmg;UT)yvxc!4lE>w;`XUI=SOX2OB|RAg*% zZQk`VEI;^ACD;ogAx|RK!UyDn`iJ!O23*4qYv(pJ))e~sXyl;spVK(ofwuuc8+gn> z&Z%q@fBxIaaO7Go%4UqbOOr32e+tOR+Os&KGj$#o**J(#gKXpgHcE7yf*ThvD?fV_v$srGZ|Jm@~%j5h%U+;Xmvp8xg zY#d;5r$wppO=h9M=@8|Y2vF|MA&YX&RJJE}-8P8~S zy!Om3>g7z)GqKYOXHGdJeSNqPN-iSr2L_)iLf^i9=Nb|=tWVD$ih7|Q8#d5(_u|6> zvk{q>1-s`}22}b@4rCt}RLK=SG8CNZ1nF-5>GdxsVTr8bv5O7q1f&J60`!d)E2#-I12|)5l%I zUp{;FF#KV`UgNXJjUHUq$T2E76@0Wn4yJb0sA&*05k-z2gOgrmw!%*PSG3Y8@Q+N4 z+S^xZGiV?GObppH)}J=7n{!+3?Mng)1IJB=54YZi&zz$8XSRJDpKqhn+nAY*_GXZn z`#2FrD4dZsji%~eY;{`zUk1tG1L}eQZR67?DX@q!omaPYUNsF0T7` z;gGE9a06QSn&!|o&4le>3!pWS(*B~+;WMkQPNwWQSvA#hIYj8s5*18SCXc=MRJz zNadi_YP5M|Y$3T%4nC1+IK^*yV3_N z{2dD~p@04ZfHvX7cZ+z`$2osPr|)xG&~I3_=Z#oM?QqmrFxBW#jsUGhT5UVgPM!FFk`v?!+x5<7~)TMfYZP0ANZE4N3u z;yFOs*v%FkD*-@P))~Lo_KY2ABK@mwen)2?;s_U0|{?7lo1>LVuOx9QD1!E zur^{pH1}QJ%0@hD)sWJgH1@)sbWYE_%TS>Ei`HNQZQa4S*xjp&gmLB+YN~hmW9p86 zbdO%ueXt_r-WRpOrkgjus-`25v|^+2&EN4MOmXDa3l96))}d;Fb-pP@mb5vHf%?1ZfJ_G$#_Wql z4wjM1R!HQXfX3zMWjbKimEsw7)~o&2iZnK-Y8$SaJpZhClV6d_);;UMtI?~^?zhs% z8GvC|N{%91H$GS8y;!DGLF1?#0Ct2k06<-}-0uk^10Oa^vb*H*S6_qD4_{EDZT`C5 z8ow<)=wggL`K;BJKw8i^&6;<6{4-}1Wh@|_-_5thTXC-uE>an5U5Ik&Tz$}GFvjH^ zY01Ogx^wE~T094mqo#T>WA{>=m;&<4Zpl*6d6YSAputgl_5*qQ|{c%*U=4Fj8W zA1xk+yTPM!($?u`X>InTwT%Vw)>qb__wIXTJ%jzt?$PWF{oT7pYs|8yp=S4mCQ$qJw1E!^T=&FE3cd-SghSlf$)>et$rtcpV?oYv{4_GsWEs zb={rEFY4Pcq}Tl5Nk5aInalE}%Z<32OzeRVH<|7&bdfVX=DK$z{G__N47kstpx4ZN zLh>cSPd-1)*%Pa;T4CfOEMj6}95fKzd?ZB^SG^|LX9s*d`193iSc0O|=a>MPNbB8U-30#`X7a(%;>2%b4QMb)n-kf*0tN+XR?nV^VC~6zcm0g^KmY*cIGs_ zp}?P^yMB^fXb4s+fA2QzserA+^(Y=Oa%m=3b}WQ9$$5t`aYhguX`m{TahL(4Q9{kN zw&=p0g>{j-YIij&2;i27xEZM>EdZ1DI`(P>cUPCkK`errX8wyQo+=z zUNurT(23mASkaIcR4)~(@kEm*ubmIo)kHbUw)%UD8Q|b^ic*=|O%IXFR<{JL?ikg+ znTDS(fcd%!v7tVKA;@|cHJ|N4EjwX{&C~gGq0T#Y+mX_A(UOsBhi`-&4rqUUt z5aV{n8sAsUSbay}Ld`1h!dAs3$44k|V zqfU|RCqVD(KDgw^$=-4p^wM*)x?wARuAf8}YC*cH6&}QTm*qKmsq8?hj8=#j`t7eW zEvuxr`;VJumN8C}@A*IbwCBuzl5Q4b5Vzw+H1V^ zQihKUKMZ!5Ds1oIU4b&fYb_pyX;tJnZ!08K0OsO}je8plHHuw_Po+KzET}^S}U_GMmpbztvEP zdV=w1J>1gf^dT)&Q#sEi7IThlf<2O7Rc?J1;3A9|LkM>{}t z6%v&;;wh_ia9S*OB;7S{847aIB?vx3o1&hg;j{iU;@o!kV?fW`(oNovxr#)DPH;+8wY5ub*WZ|KashCcGIKXNYj5tp?D^!h87i zaZ~Fq-SZj_=n7)75qv5tft7PXkibf(mZWnr;7(pAZpG% zLHTS2J~GceRXL(ZK^@W8pmqCFq20cCaMskibgp8_IIb|Sfx&1PuaZ5{ii(y+o1TV7 zq7N3K$X;?JA3Q-G>J!8~RwWocoQ;ii!NPALWsJ)DW3YmeSizW(Jb7fzllzi-!9%<4 z=NWBf;HRThcjA)gF{vQA43doTA=TiDjC+Tl-aK(Xqt}xUX8&)WAT=lMS~GXWIo~Yo zL6keJ#b{;%s6CpCaV8uw+;*y?-Znl$Qnfrd8U?=N!o%B}nm8 z^@ta#dfQB4M^%P(rTDW4oI*u%MUf3R4Aa}D$)p!(^v-avMqkvRqJK0w1cPBc@Jfqd z5EaX+XGbdhQQEUvMb*L@o+KxWd4~BEt`Wl+JJ}R7hS9bta(UD?aL%r2d?8wq5$cHE zd1^2sFKtjpW3UJlMJE)(4wtp5wex9}fz7?%KJq7AL;W3rPuVNpQqNyT+%iP8u%~Hn zYv~P)CQU<_$AAyit9LH0NKkChqHPHK;UY0A3sLCF8Vm9FXT7B3Tj*s1&L+4UK2*&- zuq0jfChfSi-atB977h2=ql0)Lh`phOiDAKX!C=z-z|WX$9&m`c1dSt% zcO$gW{-i-fi&~pn8?DqzGhSC;SC4w!F&8il$1rthI%V!d<|JryC=1f)T%14a(83uw z_|x6k*W)6bnhu&PsN>t{6#I4^*hrO=tki|MAv#T1^3s@pj0eC4uA_)yz0zh+UH9)T zI5j4D)qv5ei^oq3ec*jw{Y9O{E=fC@6}_lQIB9 zhZS=M9bHbi+^jKFpz~<7t!27OQ1_f}nQoIqoWpcYV@(64KGxfPk`YI$QY{%$&gV+w%nF*;u0cFcIw z)(HN~&+|M^!xzpV1VW_yrJqZ`5u=2V^q2*)-o9u#nL#if4F;zOL=1c(wmm?X&g~_n zez*UCTP%gury0SJ9&SS;1xIjIZjzoOiWVV=thOm|6>r-ANIIY|l#5=P+ z06k%NSZYAYU}VqZ(W&)w^I8fxp~#_Ke)^U5O%3BmHG@3&=t}P~{`pcL1(V>`@)*`9 zSARUg&3wsxs`p)5Q+;?4Kb+sqOm4 z|5#+LF`1<-o?aTE`zl~+*&-0JOrM>e{{FuRcYpO9UNVgFw{def{lpQ&wrvVD|D)8n z4M>V(x$@(Gi{ZGL?Up4CZpk{U&}C|(qGKA60RwSu@|Y)(Mq^vz_gQkp&*ODK{QM5| zX~0SXeOhoKa%9hc$%iv0Q=CZw|4&)4wR_&PcB;7p+Y#HP?77n6jBCQ|<4A}(T~4oG zN&8~RfzX>|NKK+Gu3ZTkZTqM2*ZhjZlHTQj;eO^ua&glq)s@_h+*tbLAeti@pEk(l zkU6s{Gw(+`_e5LPG1*^>hC97JlmstYp(i=DqT2#Amp6s!(>R>Gcm?*L_n`(;U=Fn0 zv$_{`qMBguum;5NJ)N|5^jsY!h4x){5jAb9WH)G;PK+1VURLs4tL{iACj6P2K@WEl zl~GBy*3#08)#TnT=sNnnjh&Fl$X@$~pxjX8)jM19c?eRPjP%C02*c27>iflw4>W)G zQQY!{w)|3zWfZMS8@1@$fi=n0z!*szo^gZevqFdP5b1TtHv(pD>ggOc6W_MSA zUFXc;QQ;T&u7txt6(N>qTwL4-$?t~48-ZDs$YIJ+xfJ81qdlEuZNlQ>x431hVb3>E zF)c1Y7Ap))2dylZcB!J-&8~r$i*e&E-YJO_7u~cVf$8N-vu`vvZUhRgMIr+pz3RN{ z{zP+-ai4U;7s~X_Iox+^Wj)Edq-u5}#iM){tV?d%26n&DRpO@1aS{Yf1zY7LTT66F z1a6ZBMvA@*zc)qcpY(CUHmT)%0Go)T-cmK1Wm8VyO>!bOHs**OUO1+WGoBh<6JjJ> zRaIq+furlOE2BYeA?61X5+XbkQO-S`3RSyyqr5;dLROOW!MD>S0XrG+NJrLXZ7_FW zqxdB=6xmRdsQY5pLN(ExeIwC*^t+pm?xOFVoz|uib@$jQT6kK5`8>^Gon#o2Xz7*_ z@c2}lY6_=H7tSORI~gdZ)i_9tONx2oylPbm&)0o1x)!IJm>6+zJ-dpzxOT^#Fu8HZ zowbo9zzTLjY&h~MAl^i&wX{SgTh~>wRyMjyv^7_g&AUp_Tsz3_!CiHD!wZIZ;mM^W zYfoqr0{y-*In;e5eaCnR$|jJpB_MA&$xYLlatv3sGw!_n{VRHkN% zFnVe#donQH{nDGX^{G@cJ4M&Yy)n72=|!x6YS-&e9^!cTH<`M=KGmK(Vny2DN_3l> zar7LX{?w+mw)vCZ-{It*E@iPY!(UFR89I^6++j8c(-CcoZnT3N>D{4r;lvsfkG)9B z4W{bDeP!c@zJ|U@BOjrGCQ1Fx4)bcOd2ihdQHBRpi;Ih2zy39_ZfyQP9Z#&U^hsSm z5D0UlSRl%AWdQyF>KRotg=f7w#YXwclNEW@=AQaof+mUPAaW^C`O4T>)fhOYR{z8C z-eka7stedzp{~;wbsRG~#CP^HET7Sj~;&m#@aEIvEw>gTPg-67Gb`F-7B8`&ScT4Id{?(0?-c_;KRY$GdyMPHv8bHG~s*gK86Uf7!}XeDx}3jLiyfs>9!L zXqI~Dt@>T+>~}u1aNGgUZ2A3X4g4dF_NRXOZR5wC*6-_9B?9Ship6CIc?TSWMt6l^ z3vq;FzM>RtKC_-?R>;zoVb)hqNDPI9A36~v7gn27Umqk7PKB54L~ApvnIYJG{mg18 ziFUZztd!nTA?l#`$dAV0re1*9+ zxWM(e%q@+*Jm2@90@@UwUw&sp_}&0RUuQ+X{%Q+>f*la4Dy5v2BnVH#1`Li*1*#Sh zUTpzRj({yE(6q1(4hn8cL;?Cj;zwL}IfcdlRr*BoP{RDmz8D6K=Vb~Rf|=rqcONP-qBTDIzz?0L{?eBHqy!; zH`6PygVp!rIyccyo;%2=AYbR9q(xZWSWjIqk*(uYCS2*0P;f^pXOR~V^2v}t9psb5 zshA{#`*W{A@Ap6sC>vR2e-4b4mQ;2^%lAm0-qpxeF6=Q*QzaEkx0=)eX7)~N6>BZ# z{8)upsYQt_COL*@biHMR&3kDniJO??o_^$>ON6ZPe1UL2KT>hFHl@l>#MxCFp*!XX z4UI| zx@~&2zV03XMrA=ja41zF=j`H<(YJnF;&=1G-Y25B4nvG=hj~?uE?*7qZy3@b=DrB8 zm)LqvMd+tb;q;TS%mQ z3LHpt4K1~w1uL>ZSKW%Nx0_E+`W5qeElqk0X$y%LJ9rijK0vvFY;y?g01!fo(xF?S zTX_a`mX^N%UXphI9?%>LGutJa7I@}N3~JAQKj&AEvLqmRpWfvS#?H>{H#dt2AK}KL zmy6nxo8Gl2o_rj;Hdb)RlNhoS1c|qsJ3jy7{hR*cEra8<>@#`&b~XModc|kZ`)Jhx zA7kQ+;>wD@&qz(EWfbE&H~cxBUF7tNI&&txNW2U50U%%BWp1_^Ym0Y#Wm$Eq*z2~t z&WpRv|LDc;#XVzK^t9?THG}aR6BeKLRAt>(d?qcFcJPKrHS$luVP?`t=Cj@(ZRaBU zsMzb)`Jef@FmW896SWI^9=q!zX*^mbJO?kNpNcLoj=<)e>O)=4NJQuInU5Jb?fB*n8&ADi`(Md z9>t!%?Y}mEjZu7P-3)M|*x5#Wk=$L4MJ z+#l^USLwbRtlETi2yc6P%wh|8BdXr^(PKYQz2P3W-S{CquUJ5n64Qr1b7l)4L<|@~ z0LPfu*;JtUdtK2SqOwo~nZ0`t!m+`bio0+|`{4dUjz!LWPyR5=x$WSV?JsWtu-r1D zs^XwT*334?s5=v=rsmp-aBQ`|?TPb0yi{z4zTKION{#H3^=i^F8JOd(Tb@y2^JZDJ zL-VK`sq<4!ywp(vOe{sK4o&@*y83~a4$=XgR9FFP^oMO!Dw~aqIS@*tNBJqz!5gW|JWCtvU0P0JZF6(cH1H@e&|>qdSj^Kejq=0ut^|N2 z4%}HWacxDmaU?CJHcmICe{=)St6{T~Z6kS}#l%>oP9lq2T1q?=Rbp79bG%eU48V1j zXO4FaP&UUqO8qw!pnu@}FJN_9jH*$AYVm;1fU0V7ltZ$6wYWAa4%gvcEoQHLrH;8? z#KDX@Oa+glmXd0b)OiL&%VQ_h%_wvGnmJJ1L$!*Gv@W%<<+2h{F+axP)aW0a0%&ttyZQ%f=a5CXq?j1%ze5XD!~o1Z zlsXeS-93~juvLJl7!t7*SE33Lb3lGc96&SclfM0yTc=Ox&uy*9Y?}f|^Q_<5vBWbd zbjKe|?gg+r7>p_p#a!6{z|m^)BYyxJt(XUOS9w1C!L@N>QPMtc_oztbRkqrtoT`7Ys*Ff8=GOAoM34HsWUD9=?`Rw$@|HwJ<4wzw-jC{Oo+ z1Ez3cHm|J-Z*PE(GfMW-G_O`h2O^(lD4Q+P;lL&~d7j{RAW~?AzHE^tSv-Q}FxAf= zM_}q;%bti3KognNU>~?|btA9ZASledX^YtYQ*( z{w|_Bz))f*CxYwt;mJM<(w4SAXIM(>ZJp}n=T_Lv{-5DtJo7M}|De2QC^R9pUnF(W z@f;<$>Jpn*>l|oKvJ6l$;bv9Z9+g8jAeY#@mfPP@gQ*<2>UR+XUf`7h>H`ht-=5~I z>5_`;F#?6za)+e#N<)N(sTb(K0p0;l!hHL?O?lp2*$Qf@>jWL?9g?Cu`8piV-!0)-y)d zGm2-_N7Kai?vwY?mbNi6Ixgqh>e1c=I$gz_AXO=i&Jd|>YBDN!3BjgS7 zQ@g`!>&~<@s6dt)IZXSed6*bbrUaO%I+s0tmd%?ZAfYH|BcVjRsBNVqqNpQMhdqF| z+m0lYJouDxPPCxxfi1HKSgI`5N$^%G3vA~{!Vm8yKGivI&k*44Ug9|~RmsCV&t$#{ z<`+R+gfHrCVs9+XVf?)EE%h2E0mgp`&5oV znHw=3ZpY>w&K^*I3RwNW5FrUDRl{)t@RQmJLwkw==2*m~_NPm=5PJO)Gtevn-m`3q zf=^^rwFzY>6mb5ElDRfJo1MKB=@fK6TTI0~b^5^jJc{aY_N-F^LJ2Qod(?JTb&MdX z7k5(>6aJhL2-(G}(z7V0!RnjMp+iWgJ+3!Ks2?l+NKaQ6sIW_J&z03JM*wa>|X zDoZ8cl0}7OjMLA^i}w24Fa`-k+15i0V_xe*jyWd3MERp2|0|Py(qe9$NmiY{VECo7| zO4mpSOo-%pYK~CQ5fc)VP(W}#iikhjqBw2;*>sws{7H5DB_YCB)K*Wdkl@D$;myZR z;O{!#&To_^Ie)r_G)ey&-*{1VRKRN~@&|YhyQBLUxW7&NK$l=XH_4r#t^fOEZF44< zyqP`6+q;xp<9Yv2eY-gsil8S?*38#e`E*qyVJRoNn8niYAQoai#;_D zLi!c%#84T`FN+!0+*u=M8aOxAD{zUGz0vodk{T-91y()(LFG>A?OwIXJZ+4jbxodW1Q{>aH@}#^!m0 zut*0P9S*Cqqk*2uo2Mki24Ts0k<2#i4a~T+9k=6)5uSN26Ruo_I{zg(ITjwvlM^aT zXS8bWgUsn`T8gyI59oY{tjgpTr_0u1a*J)P94e}A%q`8sz=EQ_riCIViegi$R5tAO zWHn*+1*nT#C&1j#E+r+!!g03NYQtV{k^+?#b4&WgGr9!uUhMUCHt~nFQdLhs)7SIJ z-9?-8i#ELLHs`^2O*2_U+3tO^_>C3o^d}q2XTgc{15r-y*%cdJP?!59%nefVQTp08 zFvrCZ9rnfsn>Yuag0f)t9|@1-84VCf^I~)$K(C$&N;+`#I?!OHsE=?(AgT`?d^>MAI<^J z?k3pZ4%Nk%Zrk$P?z+9$&xMdwp`@quhw`NGrtrq`=4;*~q~@XKk+-rbkBP+JEC=I; z;|4!+rk1$P8RZVhUo*hp!u|Z-dAd@i!jQ39lVSSw5M$9pJe8Ggxf1C@DxD?8gbKB?WCc_*@|DM#V60 z*HM2+D0FN1IKJN3ln_?yUYjzb4duR@HVduaig3Hs!$E3%`u4?2)rGo*{Ld3|e*ydxzW37Gam!s@{|#6U6jm(s0Uwo~-8dtW;zJkW@iYu+t!~O<6%Eg@95$+F4{9aqV zotOxR#6doFk_2R3y8%2D3Xl`=KZt4N4onmh(9}KE-uCX7ZdTk*M+lv5zndZAsE2t zS2qEQ%>s(|f+`nCu>fZ-2x(y#8dRnLiPSf#uJ#S_^k^I`$L_tQ6cCkP5XXhdt$_PS z4Q`(qo3;PmzlNy~Of;Vfj-Ya&n9bDk{Bj7><#4a*jC!ilT5#%Da zOZulU`X306#CA`$gdtxwFgV=Z1cCc6VL%>y-*f^p(z|ZV&%^ZNI03=o)>DD=Q{V)| zwczfvR3&mRF%^=1QB}g;)@gIxKYWCTNTfoJK?b+oO9jdSsgT=epqi2(3W0p!1h~>I zncDnY=CgTI1&OxV5QtbIgb%XCo>K_^M0p9Gs6Ijcp3=dt83?r*?mF}g*YP=(lW0&~Hk!F_)a-}M56gX+8`|J(2HTYFCoP~~)E>jO zhPT%K;?gg3+?L{-XR@^*d+&p^f^5A9XO9O9?@>Xw(LQeLa8l3`8JSFMX@KeWp6!Wv zd?B_xj6(-DdDk!I&1LV~<6G@QTsOj-KNGM9Kzq?T872ACRhddRrweHGnkLI_LqhU*TNhSPV}0>{4X>#vd>ZRvX53eMEX zXOtK_o#UHtU-g3Ww(*l7Y^eId5voy$`-6(<58Yb#jxs1!_fvE!q_ST zhm&0fAkMmDkR0Lwbu1WjE>L)3eg=_bh~Uyib2H%5KUeX)hxEw-o3qy+y3lrB2~~d& z^z0B9kF9E?q?3AQw2#|d$oU2|{@5N5k}oNDgF;P_zVVDNsJ9Qz9-1+;&pnam@sQ8H zTYe~0epJv!6nW1`5JzeTi*wF`@MK90ss-MEaiR ztZ>v8?TpvTYy$WAihJ!n=~lGMt>`C+SWR%*agMzyU-064t*II~5tX4ihdR4<>$9%a zRXm7oxsFh>zan@QXeJ^!0FPTTw4~CX=ipWfuIOH3s;+4y?>;ujj&w?{z7i9F9dE9! zoCt5Md}2ntbztR;=+(^H!jrzQr)}pGzMX{m%?&f!Y4b#{rd<&ERQ(e**RZBHQ9k-1 zx~otd*wwknpSFalAK6J?h1jW9dN`vEPMk8nl+Lsh$`I76hL*LLlV4 zT|81ws@v=VIUvDjDe$PFcxtQYe^9U! zB#!}?jO2_}Q2N3Fm?-9~^N=Hc6@zXw;&JR8J>}b2Bx&n zw(lDX@T=@oJ703U_~%rM56eZd@oraj&b3=sVT!#Nk9Ed=CeEI_s)IjLDRiU~2R}9x zhBZ8cj-4Ndll0!V=eI|h2Iqx0_Xxy4bd8HBYBIBgpkIbTv=cuO5Ti}{&YMByGyX@< zMqgNcd<=8}X|AH-!Uzou>w#qDy**AXraZpup zBJj!sOe`-{6}iRid%-cXJa?K(Q+$OPgUPw%9_}S!HWmGFK-2G8Ba0CGj`4E!#iRwb zu<*lTI;L1+{#N(ui#JN`mS@L)&gOD44pEvAJSR};Myckl3{B<4I2pdF7RL*OJ}e7h zif!j_4FYZeCTuoZ+<*HN@6m*R1E@Oo^973!i&n950*uEvm6#WkV(pgVm|_U%WfMrh zVr-mH&TJl4slX!thFC!*FDJ&yz)H*(9^uCRe-?F%Ka%Nr{=5cf$ImjO);Ao!m`Mxw ze)7D=?hwmN^n6gg_Cbki3{qk)y+*ZpIz}1LWU^q7TH30w2={gvV)N#Q2Ek5V-z)=~ zTg+shy&^z?VZ0rS=I>$U0Ma0M@H#Tk4e#; zivSpZdu~WKVl7Nm?bxfE}f2{Z+&}E{K{G%lNoJPDe`ztdiqX z$ePUls`t{@=T}-e%{TUw=9#^?SdHQ@iC zm1N^0eHiSQTD5-YebLF#48)0_bE^kq*|8mw=L9vV#Sl&fu`Xty;XgY7<+M zMXjf|K}$<9^^5kMt%wbe3d6-4PCgKRNe^QW6Bpq_`I-9izNT<}H3C;D&&Q-*t-!~m zAtZQkfRv|AP?gaRx+rp36R(F1fAK`p3*HQI3#o!5xxC|_FydBhIPPNP}*(=WhZpti*`M<5tuqZ zU_#sHCMbVhOz5JNu|IIaeBDvVGv|<`(NT|{i@L;aS76*iyT3dOc__l1A|mk|iwF)T zp75lp^CK=&MbJ2X)S;Fvjq-z;o^mEcQztCVMNiWOW^`d+3futYIh0GF#c0YS_PHSs zRS7b+v8wp#LRzMl6dS&`0-Mo0=rL+1J&2{5npa7BQq(!UTt{3ilP4Cqf)nSmfFUm8TQBjU`)EUeeebYh_ManT? zwCdpqhDJH^Q1xX!ZjKkqliJggo9U?#Rkr6Gn`r8RMFcg#P3^H6J%b*s1Na$Q^_UR* zuZ->I%B3=;JwE|`EHin9h0`aV>7gD*dDrs4z*ZT+4M?LzYzD610pE-4_2Rp%rz5xh zT&1qmZfQB<(IYwdi_%`w_)Do*wR?Khg_KzK0+TugMyT}yn;p6hght>I77eY07HqJ`uoHvnyhAET~Fb>Vg1&F408gX-_X+ zetNa~k#-BiU)tZB-LJF!*NlmT?v;fX+%_WHsRD8CBb}q@+d>VZz+x%6tMZc#N#E^XLz@7df7qvthXRDSplghce;?G-)6J9Rhe;h-h~_HD~}w^E`PIZQ*H9WD#``V?0u}J3AkT=V-^owgE*M zt}0bF0VHD-;f&OnSQnCSQDfOt&llPshw3iVjWmru6GSL^| zc!?cXbkG3L$O1$->ZGAh!S%hW=Pa`Dx>au1FQ9=wjPLft_BMQ1bJ(c3Ru@tLBto&V z>`6H-hlO)mfLm$h5_~;RdUOzd?>d5LnT2$K6wpu_oU zfS65oiJq;{Ohc?_EO*rD-UV7VqjSe&p1E+;!pf;A)_pjG;ic&<5Uzc*`U5c*ZgDU{ z;GbPwh|$5gRe3REaL_h@5C-xF^iTm%E^ly%o*l`?16?KhL0t)Y1MR)QsYY6pR=9RU zMGV4%stCQpGhOzK=sRktDRa}46IFzxPd1G&#z5Oz22iZQU|RPAMW+15llQS|7>nrX z3vI`$Tvhd4^F(Ygc9>F8-T)Z=-jmJYfYbxz zI{r9Km#tGE6|EBkR-S|m2I-}WZNs!ta7p_A2cq^l?8vqE-BK-dC21U5dp-`Efzt!-&WOcBU2CfGp?&qgp zTPYQkd&JO%S+XO`rY*8>&CTFsNMm?da{;nmyMRR4BNKN$k{x*;gajF&Mx>;r5LYZD zi;1*pwOjk%R)lh&@LF3&CR^Iv{UHWcVY6&J7yEz^<{N3@D|$8o9~U@~Y&bs;EZIaR z|2M*w{{KTZvqm*ls^Iv9M3O)m>wl0PH?F z&{n@AOPJrtX)|xU#!y;7&;%q+F$f$GDfN6!_<}4E9_0#|Xn6##G^s^%6}+nG@dXx0 zNDp4}L21jWDu`#SDLq}WE`O8k_~g56?~(N@XP1sqT)T2~LFwLHNoblJQ)9SdXr-Z|cei$ZppQoMWRK@vb$$(;`H_pN7Wx>h(UEi) zg!Lsw5sBH6v*Hz6H?S)MQ)pg3D@Ah+AS2;L38bfQQ9hydrYRwK37By>|8#`3eXYz= z6se@7Kof7=0aQUu;#l3R1Mg=CGroE%38X{M-$MydkR@GSPbon`IhPZxOWYkf8aFAq z?ia0rSPl#a+boPCJidA=ie0CP6;@k6aX-kK&AZPKC?_2lK{}3SEL!eED#>#S z?rswEbg*=mroLbw$H7<>$)N_fNzVHjk7yQ$9C2|m+WFyw#fIXtn`$xi*^lVEw9Cq3 z+ZFuHyOd?`vDcFV#gED|7r7Av(3Y_gCycKp20T9b;=_f{2doK>_s`GX!+XrwAL$dJ zi5}o`H<}IXBxa?%6`=&i1>gI2T1F{|JGxQra2#xu6gj!;`T@oJ#01K#kT?EBWPuOp zzPKx-^FAG+0ZIW+(@_V2rR4V&DLShzsSWUu1drl|RpJY`6Q|+Vhu;#%y$aJ!rDC>q zI4VZU^4_a*(n^0OG3bexOAvP~FT1glo1iQ1uAl|rRphJ?LC-ivX>sQTA86=dBTu}( zySoCZdnNjPMY52kh<03DgvW{l%5kM`9(Uzk=cmNipEuY1xR3hetQ{>YMXJxh?Xr_C zM5A#n_m^^twwk+54M(T@06TS`;?993K+gJAHK&B+J~&>*iO&r{+9zxd8XH4QnOl5fB8$KFpTNgQ9d3THznXNzVG zT9?E?>-sl(PtyP6X3#9;b3g4DdoNO(Txnt9hg8c8-{uv*MH_{ivrbKJ?k44|_!({c zbDt@OUig;vFlr*7+3IleKZ3-Oy`lG6yK7(m*~Ip$GZz^UXpXls!u`k0UOqE>tBdJ2 zErmcN{s#J5;n+|5{xv7l{8}IoCrJ)}A*l!cL}S69F7wotyC&E(ZidQ8`TZB7^&PJ7 z2jKOm=jk8bdT>2Y-*;U%EZy*VP^598*wV@E$2X{m!Rv)65wqIvd)SvW+8>cW(+%LV z)ahjiM9$8Rp9u+}4IHVk=b9{Q!?L;du zxTw!D5bI%?u`rvfW2#go)OJ9*5MP)9A|efLtdR8vgkyNB6}-Finy_kJrc5?g)cSpi;{XFU^8Oxhjs z`;R4GB}T3SDt~33SCi2>H6j7*?D!KvdU{O)yA-|kADfL$EdHq%;}ho-7ZKslyn}q{ zX{QI=t6RET07(?{dewkez|@h6NlE{hSn_2(bBuZGiKU4b{^*SUGjD9!th^U+3&ea| zM@-b$7q}{a8uibXJq%mASbA=YJy_FC6gWvuxjzdXp_08ko|7^cvy%o)l+*uhwTQm5 zka=E#zuKUnI)+&d`}Nm9WRKgDsyL49=tm46&nW!*y?c`343nS9!@SfP8*q1K@qc*%~LyQCu%+}PXJVHB9l@o*{Fn^Iu@%EjX zHGI*+z~bM?qb2kELUG;cJCF30UwAxV>zZngU5Wp&!1dR5`&a$t#jHiP7!>npN< zCg|78=bXLcR`?Hj4OYSC85EO{mJqaPTcRS`yfSGq9WPp#uFx!!esZEIom*x?Bb__d zGgiZCunAW~Zs7Hws{c=+HMm3T zNcVp(>kYS`_=RE%DTo}32O%qd;W2Qk!Ybm^I+=2vZ@-qjey+;9{^WxT@51%{hteY@ z4eSFif80eauhw3nV3w|H4IGT<)D_5;oz|G7_|dA9C$3GPw*3`xZ?K=HHe;?Z@&@dlQEj|Bv za_tRe>~lErn%l4QoExqMpS*U{{hU>8bg`0%S3PCohS4beepKlD`iezI?al|tBFnO%P ze`z!SWPUWr_xq&vhRSs%Z4>aE(a8{_R(zpgz{D|i9xOR;RwYQ;D`=1J74!y9ZQAUc z!Xq=`EznOHkIJ;YoH#??;(W~A%9nq!@S^b<1y|eJLs(#eB7Jpou1^6Csu}HH)f;%V z8MAMekF10To-dCcHQ{J2jeHi#zy>oNBxfL~ZRDbw<>W2U)_&VONnh^N&8LJw>}B0e zah(;0ZOg(tPIRAOMDXq9p27Zp-Vk;`qc)39V-43Qgi(1TgHocO%EsQJ>?lXRqT5c>V)F1+a|UhYHX2bt6y z8QX<$%OXD0XPeQ_pMQ_#2U*^!$G*zZlu7McdT#Y+^=K_?=|%?x;s}D*HfvC+69fLe zM#b+J(8axsDQz?Jvo4T2ZR$LMIy0_}huH?N1Yf+!z(@u$G@3G+8)Dr6N6+h(kcQ1K zN8!(&z>wBaN&lCqApQ?a0SI)&3}gy$191x)CGavI3BdB?e@F~K+yyz3jAATiyeADO z3NCmvg9@h1094b{azHj6_%h4Mf=7$TsR0*WR->s z9~n3dH`S;F(<^dB#Ohn04^agzGi+^Jp(oixfBlZ$8Hs@h+9TnY)y_9a$=<2H+`Ig& z`)_TP3B8L3A0&@|ba)!;_bi({QKg%zAPqQT5V>Y|pk)1wV~N_8J4Kz%UCvLFt}L!QzYDAH?A(65bLr~6 zkgIG#jbcx1_ScC%Fug9AUgk_+y?e);YUiA4=91@v+C`iTtH285ZJXDZ zLW>@+o-JVlT{?R{hd*S|bVVXL_gv9aTu2vZ$j!cziT4uqPtUt$YL^vll|2nIXrGT| ztlek5AAwGs3T~7l06YJm`}gA2Y$8dRS4Oht^Mqsf^b)5r!ba5IB&3A#n^vxSOP(f5 z$N#jCUY%=TYwMv`KwIWXEg^zwwwPj_3?D%P8QKz(Qd@`GTwd6{e^bhY!T5eU17rNp zJ&6~M$GW~s@_x{Q(OKMJ#s>c^Po62&viV|~t8Jxii-<%pkwIioD$~XM zCB!(QFyAVhstuk9kyYDLCGY-{-@DKs4JWJ*4AAg2f%TlH!)9{UTq0ihygHrW9#ySnlBRECQ_>xFN=1d7_1b!$)hi&lBVC=vLsZj4 zSQKV+v^fvdctFD+v;#wJv$l6sR00%T0|)%a30JDgl|QTQ=%C%Z^S}d1HU;4CRWrG^ zI>FSst^0y8>$AzteuOJ@Sj^tueykeiYjsTy>b@o!kw43B4Z6!)^RgY$+j^YO*N*}r z%>JWHma5ZQqK-YdCmVBEeSD`#jeh;m?1D;Q)kHqxQ63i3epr1%Zd~>&M)9yt>;0$T zM~LnkLfB_J$tQmJ?{tA5U$(a1?K`Vo2ZPtM>?Q&B+vf_^uUpgAox4ame*;Vyd4gF5TBumry#4G}9K7V)qKFLp3>dTI=N=h@FZ&hqslomdl@?Qu zD7k?>I&JW03ZEnP!ucaRA8rqtdARKzohhIXsPBJSJu(1Q>Q0owGF-O|C&P!QCv`b> zPxH>Dn^V%HYu5A}wro%c?sRQ$@Z-`R-Rp+=h)rY1n4o3=Z;|r&Hu&4m+1Dk&HEg&b zQ~fq3XyB;&$(XE%M`swen)^s+#_>zH_G*-jno5Z6`x;_C}7gKPFkEdbJUeQk%adL-ygE0%JtH0FivYp-U%Tc!th ztaf4F%JnUYxdpMC`gx!2Pv#D+okLaJzS=F$yXBeT>WuJHy zUh0*eL_wWpbChNLtVFU^i8szizrOL|WHT`j=>b_GqgEem6P6xqmj~@_3%XtWB#&=H zj;-ls@&15S9AHHnR&6pkT_96!f~~N*%4Iz2WBhe!-d z**CDE(ybqE5(}CpG6mY65CBslBxGk>`SXZHVr~JSgBh-GLBv?b>2)q@m;F&Q}{Fs$8 z&YF3w5#(Frhj2dGB;ZZf6!a72X1Uoy%JsInIeAY^E|r9FHixDRdV2>sc>(!u0LOLn zS@moZY-VQsD7^dsw~YNiHoz0Dt*w=Tu=0tCeh5KDMfoVs{Onl{FubLOdK7U!F(ETC zp@hk4C1d6Ta`^_SHn|9GM@2tnby}`+D~3)%&o{|J^7HeZftE!@iT{rx`@b3mx~V`Q zA`F1u&OeH0_xJnnCPhVe&W6D1V0FeAenrh(ux16Hw=DpODrZBbQ;>B*Xy9UMjsqB} zt+oGk__b2lLCR_cNCx> zgkCuttp3{x_WJ{`;mB`YGbkLXqa?hJT8)0D|EV?lw!gJ!FwZS)V;i!6@wLR`&q*JA zBQ8m_=OR-PN{qfQ?Sy4@*R+4my*oRRU)Rs?~$)bVUraNiYQH>f$0Bi z+zg_cJw{pS)l}iqDJRa!xcm>z2Qq1{d~5Jxm{yLr4YsE0mL|CtKBVZyB`EM~3P>3Z z3~@mfUqOB@>LRC|i-@vXD=%gqgyPi;)r-7u_99t?r1Cub{c!$@*6dCSUdmu)S#`*e zjj#RwUlXB8Oajf^1RTO!YA51MmUVp{yfy;Q4x~IAt#5^4=DFK0?b(ne3bA45ukjNkl10 z`Sgsa`7upb>bbGkDR1n^o#YM9P7ZZ%X$NkxTM>HV#}Tp#U}=W!z9B5&Du8;9ReIW$ z>OCZX0vvhZ*1ZRN>PB4LCyg72*%{PrDP%ME#O=NLv2Aky>iMu`3E|7zuWJfGX?U|G za1`Q4H;-2>0w-p0{M;p3XG$g%fG^zB-565EEVsWSh51@-!A0SNoHQFg<-9%+%_c8R zR=wQG(TcCX@V1j977Xey;#3BpRP}`mGJ@;fEW=dub|zhC#1Rn|2*a$y$bj$izyGp zo?#V-#9hm&>8Wm=tF9flR0Q1cszmE46!A?Ek9Y0#o3QbO3|Ro>vH4$n%#>;oTyu$@ zqlwXomEpE}Jl(ZG!4|Pnk3*?q-Xp>gLnwHuvKPdMGu=kwc(T!utOl81R6Q~*GE!6{ z#ZinT0@sV!ni2%eAphbV$9A?YT^yq_wq$HXlRLud>F0(-Ln{=fq*m$$`(S8z}G@N5P<0%D*hNY zj&l=)>ItVrr#x-YMyYBqSL;@&f;BUwBsyQFy51T>A>59&SRUO8C?e92PQQN)AnyTa zD_ke}G=)W_tV5jH_rpld`&1v(sE7YMnNy1h+j*qQ~rV|tOW6JG|8 zDUeLRDne1U*gOv7d5v1{C0ls8$f%E0IycM)!E*D_)Nf1o_scVtLkJOhgm(jm{AfgH zc*V&IC#~5v+0-@?<5mMp6qjz`t}i-LJP^s=BN30ZFHR3rrSy4Gh1{ z0z+y?BWfQHGecZdZS@U(?jXl=?N1brQ9W#Q|Bs_zS(4Zbk$)SDz&rT93GT=y)32-A z+uQhnY1h>c*2f+e%nl?!0e^CTa$JJ`>_S1%Mnt56>O$w6?HITJb#SYn@E+eyP=lkY z#0-N<-M+vqNLFufvjZmzH&NH&mBF&-&g&aS9myn7RXclbLmxm1IqpYWO`gDB0fw%A zNyVg*6p*6kqAa|(X$noZazRvTYCgn?a}bgs0DVXKL|LPJJK_1uX!Jrh_RKd@`0;zM z#1pc^j~k7iV>`1?1cYz@$Vb(|h*1N4H_?60;MNXe2XSyWS7eax%sHlErGcrD6T9e( z(F}~Y=@Eh#LcOtRf;+ckY!sqS7tGEM!6Promy;tXe3=av)s~s@?(8&Z@A$w#D)ddK z6W<Auh zUDTm`g13c)TqUTQDXOc~-%8`X*~cvcvbaCT8}NXD;5VJacjF zkHExw^PA+rBB1lmAbIT@MOLncCO4W*gO3a=0DpuJpZB_06l4S2>Z0HwLOz zwtNO+Br#xHl%(pAMN%H>(@_iwP4S&1Jyyq^*`VYcJS%WVD<>8adm`xYLhfA3e#EPk zuQKj*_kq{XLxMIv!~nX|(VMR>y1ZJY@qV-HCU+;dF4p|IkZESIf$&IuH%L9Gw{V!V(hZQe)^;=Lhv6lTQrxKTCH!ba5G8o^I2w75S1e`NW+vDc$Kd^B$LF z3eA+vS~t3vWNvPH1kUp>9FKR6nJNk1XqZf&yFYGRIGr^Dgh%|_()eUDc9zavoJaF8**@6iH8cbom;dn96t$#^+_kY51hRj( zzHG1iYc!D)!}D}HE4P#A!DB06qCrC&q*$g=xMkH3)wthX_QZ4&;14xBjgbA3?4X1J zKD@zHmRK;`wbOwwP;U=1;B-Fgwy`SL>rSTco@+b8tyEXQMPaXbk7FliRJw!9RoYx+ zrm3t2wAMCfd1s0Fn{6vFyF$Q^BzSSd1;PeinU9x|VUUq&Vb8`-fsCzyEewrprkTK| z<(qmk;ST4JbBxo{`M3VOc!tZ z--`I;EWbn)VMT08pZ|PezuHai;Q)Q^1Q|+b@baEtCpQ=b#Xf6FI?L@pEHa^?UvSOT z)S~pcLwSbfj7=`^Cj7UUo&`#&7)@)v9W6|dG`-d)X!?aS3#3*aVXQ!qw$d~KwDZ#Y z6*5e$G|e1lY|^DiiI$&0+osc;(hk@en;f`St}F-&to$R(fBAMTH0&n#U5nYx&GAvZ zOzO38OJE+m87*VQXWG>P%q^~!xq&Qmr60e_QLA<>lFzitE{mM9vF_Z0)&$B~lEtj> zGUi_Y%DKTQIFLfI6x0-wBbJ2sO)al10-2iM7sBDOz)HszJlWuDH!vt&`V^RL0t3>q zPXRffY=xHt-ZD^(&_7}hgGBpUw7YwB7lk_4)!C&?-RZi#)APF^Y5(V!OtH4m+585> zxZe-%KKm_Y-+4z#vx&!+)T$FAl0?#}nwjJ==l_w4556PhIe6B0v5CRt<}d8&A#A~+ z$JS0o>~ox}vg6MvDU93Og_!4c4;sq4C2G6QU!^)GuzCpl^*o5cUFVMN>*w?~O$ftGHubv3|5Pkn^L-hUqf9b!*^P8uTK>#Tj1$bqVu8Do5MSiYHePkS(&}aut8)D77PGrQ%r0 z<|#mYaQRu+QO%Lic>GEU!{)i(e-FyrSask3j|w;N$Jc z@bjgi{4$({lT#s^L5wM>*pKg~136%pA!xhvYcJeVbX3W6h7f#;U$3V|ef?bA`r z4gu5mMtN9I-Vnj6IjOj&K?E0dC#8H)2vAtqlgGAJsfz$(VXwElYBij7-7 zN*Hyt@2R0j(3mDh#eDOskG@@hN-yi;A6UmzMj@SvTAHUY%B)kttW(eyp%oaAB6Y8o zwGmDC=B#yEc7c?yXsO(93O45dIT4uQqoL^d&EMafZ2uvIntEYvtR}|Cf5mC;;_OMC z45E-WCCKGnTLzl^8OzA%-HJJ630^rHBs{!yH|Tr+4%ag-ZQk$36R^8Fb53-D9__Yi z%~lUDFI2mVuW*N4D=0R|T zR!je^hD8R*qb2x6i1Z3v&ztcZtyLPJ3PV&_iO){PjRZeHVX;wRwF{!9uBsiR1#`_2 zuJ{etsT*q3uSu;gDq1V+`+M@U4FlWDVes!*i&G&V0*7TR%Dje2ITe_(>4C~Pb zAIzxbI!*}YLJDe6>wn!$)_xjY4M0Q0eqP(vyljWQd^omRrL|i4M7Xp2^9$=%@6gxv zDregpX_?8zWmvsWcHsW->T}|Dyw8*}X#vD1V|VS<+cK(NnZ}DnirpZ7RooTjRY(bh-mDT-R25KLpXP%e=P8Ywk3SI%FMOtA4Pq~#6v`}WhE;oRO6 zR8Oq8pX13P-gMCp}i*WU&8bgWEyNp1c?L{R&0kE zx7XHaSn%Hl1K>S4-4Y0VjVh$Dh7AR|Ciw(9x1Bu&S-I?pw;~ON@pBJ2x*+A812J>{ z7+T&PF{gZ_!}m~)H1GLSTuzI%*EM`t)qS>-)JJATzQqbR2i6uASwn?v&F@yPUETKf zQ-POGCMHcu z6CJHl2lNtrX*wAhW||8F+n4kfmogGx!(x=2yn@hOdY_F{c z_>=rBBqHY>y@M$dk-O5TvAC`f8xNmP@RhUHMj`&iXr3bVdIUaP+x*70g0udc&t3ky zaOKMWceT6nQiCOS6@|G? zxA99_4`J4bTd17JxMq0cSPqc}cB_#cVA89t#kmO}`f%m7abCZSJPcemv>7Wf99lFN zTeJ>_h}U|AzmwSPZ#+niO6DqRHf>Tt?H(6C>ksiQ_Mo|{`cInndHsNnU2$(J&6*UFxMFle}T z?een)FO8H3SGus((a&ZdzJ9&&SeGCPxlmJmz$(iPNzzDXVB!#CID$&}Hv}=Ht#!Y? zhraNl`$MS8V^8$P1V;j7`_c1l^7i|U1vfW0Rirecyp}|E5am{=^9!Itp{W+Wjdga8 z2~woKBy}gBH0uC*YSpsFfUkPaahYVkdN_U^YkST@jA;@JLmgqJ2RC(5%w;AOL30xz4yDYD;dtJiKLki(sBiu2w44~ zfeAX=N-K@4za7?uF1$aMb@EdT!XV45#0{xvV|NY| z7FYRj!u?c!7%F?bw6LEpdQ2qd_C;H|b7G&JfE7#6Wyny~!C%nD%&XQd z2K(Mr@zOl+hnySgLzo!wfT-N5l$n8F^+N(u@J+69JNaFAeypq8rq*L}{Vj^QGYl;}f-C~`*tMbF62Y2}?GpY_gmQ{7nM69t@T<-WDr+K+w;c488Oh5OVHmLE`Jlu5;Mq#f_wFPl)2Q8;GPu2 zV^aoj)N)Onk@YKxMX#&}JmJ$#+@m2z!2kq|%4`Cb5-~$~!qR0-6pi~$dzH>8!!!xr zRhBb#;JI6P6HtbcrXs!yfmKfQ6XK&IZdGa}r8vdUnUS~@l~XZ^_$o4mk;G$(5$Me~ zt*xnLAG@Dpo+tuoBzUIQq~3A_=S?AQAvutIVmKubZc5Qtpi$O|ua;yvmX{7T0asp_ zt91BHb8J$)_)ZW`bLg`Ji1dj|%t8zP!aofB2IPQ~28eDi76MS>oVQetVs=;j!(<_$rA&@_ z5XT3#P|YE}aWj$fRy#(;{s@S5-Yq-+L{1b3@6~)O;|-8(3N*Bk&w?{vgfEp$HbI=B zd_QSJgo3aK;Owrv)C(}@jEYm{@d@TS=^>(R!z<1h8>cE~Ib}y>Ib~8lB8_t#JVe%F zY9T26B!<_VEk^p*k^ z{78(PClaV2gm-pO@D)5fP51-5<&pNOXWn5<8J8}bYAR+e$Pj3~o2z8zxO?!Y4?Mo% zF;fXYVsin zn}_>wXeIz_wVW=;AxY#6F=_v{(ee}`7DKQ_B7)xbtQU##JDOzK}pz~3@|8PAp8m3zsgoWB&sUVW>T?;cvh>rr`}3kEBDx+nO_M5 z0Lt&g0OkTPH9Z+>loV{jz=4%_5yy`sfDX}n;ZwdsqrL169Lh^#mOyolH1&!(w zFq};DV>L?t6EiyIeQjfp+88Xp7S1ZR&17H5MYO;gzWZbSs!nmpAFTKzJmdxfmb`rc zpLCi!B$+#SC4|KAo3}MLP;MbWQ!FD0@jQFQ2mQeIj*iahy%Sjjp<1f7ekL3KG|`$9 zwMlcuLmY=8q(V7#L6D6G)1yeP{roE5%yngcH0KwBk3hw|4(rre&6%3A4U>V`tYQG* zasF{<>2>Vd%dlv%*RAJCgVdS2J$r|kgq2|b@?BDK1BG*!RH%kXtdkyV)+~5GscCeh zsb!w%-Z&r?1N@fP*OK#tTjJgPoP1Ar2!;i&+ow|~iUro0b>CWSf{3KEZ%L`3OP31AV->85Qqw zn7~1+%mG#KW8;O;yuHRBQD1g9|0?dlJfuHOis@EEy&W09vKr-lLYT+Z`BHv^hHm3H z{8jj-D1Z}^Mqg;#b2BG*$!o6qWiHw{X}*)xYT%*_mPmu^jbFQ(tIFyPhDpfu+FdYy zhkT^y>-+aaIjzpuujY}Eqsk#p%SY2MHO|?Fnl^t*E`v9wQFD+&&o$3mRv)aG8CMD7 zGA9>#J5Eg#(u5Lo2=Y63{6ozBi|n7~Wlc~%8y)67(kysgaE-()gZ;i-r|bf~^ZuCE zw?3T{^EHbX(D+4Lwbbphxq5;zgR2^t=Cd-^-d(4*x-%axM;cgV6 z~|_mz+i1`5Vn)G!HBQ`~UvNln%&?HVNhxiFH%wo{6}No*yw#hlhsAO?QR<=o8w2*o4f~S&|E4Gez{hj)Lv&3Y2{q2?Ir5cZ5qBsSz-K=ovwyv z_>Tf33bUk#kei>RfACVd%K(0#i4U&5r#^hM)a{y!OXi6x3(-i=Eka}k#jy%8l=vQ5oAyFKc%l3ILiE>y z4hpj(7Jx|QSf&rDre%2KH4wekLcZ=c2ZV%0`sK6v>;|doZpQl6f4!{t=7&h<+r-sN zNj|*&GX`_oH$Oko{@_uv&P7}ebJN;551H1rUI@{-dXitcVIu2jyw2b zhe#gOfDLJDtpRHrLiLUXo1&=ZjOI^bUtd1nM<}OYM^zQ!jL|sdrnBJofY``zOtC6> zzIP~1*;%AHK$C~n5993dRN$rK&kH?A5jp?&UPrp;f4UAv+G(U;N3=I?;Dmz8T$W{TU}cJ!})%~Xpz);@Br<(QG?lp4qD%_3Dk z^y|enlg?>6Bh~>iWP~tskRI-Qh2aHqT>W1;C!&iwR5Df2^6d@|ymG?>+O{c+i~c$~ zq8S-UO-)UW|Fz=d<5l=yE72Fe+g1b<$sYY!^Wwk?^F=Ja`Vfpox?dk+diWF-PU(NZ zqCLX++Y-ukn*{1aW{7zg->k**vlrFeqn2i%>n+ZSYis0$X<3~8h5DuMW3y5`ki z%oOz#-_%_-6Ni@(a9t>cNwn4#Qbjj$#3n4fC0X(QRkTX~Vn}C)sNb@k5u2hF-EJ(| z3QEtnfUFIOhWSZ6h<)4%vw#^8^Q&*yvhpv0wJAV)fMA$@(W~hX5Ny2&JxiQ|M5Vt2 zaAaIH2@!p-raK%lf7=NgZE)77TqWAGN1L4hL!+I8N26+;Pw@JnE?tsCJ7-Q|$5cfm__HJ-D)MQB^+L}IcO1BNu0Ka6DDfI@4 z9!g8TR4tG2i=<@l&7k@+&wq%1VGzr-m$ii&tU?$n^m#DGQ(m=bIwi^C8q@LZX4CHW zq%XQeIFwZzP^$}9N1Mzt!kAYh?QTTlR9Xlm;}jX$bsjI zSxMT^cuiSs7%Wl;^hKU#SiKgPyl9454yOCl((B~#(;`U0PoZ>w{Mhx1ch?Qeh%w8{ z62U&V@A9z?_=^QS0nu%BC0P|nKvfk#~YaV1DpBbV<%=#tJU z7Z+zFNw#12QMSd$NWJzlCB~2Pn7cCac#VP!R3I{AyPBl9X5QEak0FKS&(CY|&z1B( zOmro>@sMjN_4GxJrjwNT)oA#3zB`$Vg>kyw7b7OHQTcC4D{G~*-c@2}q2 zl79>~lW!K&fRf!;PhL*ldRrE-BpbtsHN#pQ{(7-~rDQ$qf&UU&By4yIgTr8|KJ-3ysTgN51_rMxF;?@NM^%jeH-QO%kwb>zpBb9LUv7fo z*pELPVSczF7E4b5gv)<8!hU%(Fy90?!fwWVG&D@O$iSK>Aj62+B=6Wo223nn;K;pW56`R7I(CwIt`Z+R zR}*mT3=DdbT=>OY&erfw(AE*Jmv+NjvHCwKpKip6E$`rE8xLBwW zaOniIzy({a@U1L0fe4)tY2V;VtV$cSMTcm1dfvyzABbO^m>^sISV5TnZbO(X1)pLa zq67iB$IT8_KRn5wc@0)VCDBDE0v;!9;UgE)*ZId`M|r0*!2_3(&+MJ zryFfUBA(SE9}mCRpAE|B42_5!5P5u@P4LF)%4>)wzkCmE*1#4+Z&3pEFvTDFIRpP$ zhpnio*)!U|sqliIIW?u*yNrseI$hTyCuSKHz4_#M8PZ*}_Mvv2zRrV$C;A_+7ItdX zmWl@5Uywiv^uP2gV5}D`_rNB6%G?Nc_MLriIZQ!cr*j7c*|(c(wiY~<7DYc_cRCSP z3w^JhG~DF))Q87&ab98HM{B`OGXS^_>hw28;8ueUNB=@Zy;_LOa3B2rwHuXujZ zvx>Tu1a7Se;+A%5@z(HepuQAQNB0GK1~Fl0`f3Fe-gq{8s(Y$m=jIj>F-!sgQ;O?|C6P*MjTeMYTkp!Xwu#6A_RH3ZX{#ay`};7RyR>1X z-zCYXMO9%7q9f>U1{!h1(RX3u8P?`RVp<5s=R_MJdh>p4v<3zhQn~K+HjAB&c>#g%{5ax)@fjl|7ByK5RuJKE`&1F0j7dvE_?q%1}!dg<}A=drd|M20q1!+}X7e(15=({Sy{XHT&k zk6r&v0Tm(@yeZ{41z;K!Q@B@C!8)w&G$^FOl5W&M@OZyeVV*KZ2jO^>;95>;N{H_} z9szvJ_dI)AJ<4ehoxj+5X2-!zLR>dg&s?>@I&nHuLBb)1bf>ot)c3MO z*4bu`(A#bNWysgvDlDDUAfO#s-s;y^@t3QsgxLn)L%wK`e!M#~R#KL$4}fV_6i4XMB9Ap?> zA=*DZ>ONClBbn08S=KLqFJbvs)TR0p)_QL<3y2z_A3v_n_IJx_$g^+7xEBCD^B6S@ zdC&f{;zwn29G4l^K7N`rF20)GZblLk`>|Slv5M=7WvlR9<+@m!;k00edacsS27=?N z;;uj(%V|Y{IHnVL7?y-$nO@y`Bhqu)Evg`4U?j`TfbIU9y}bj-U4|Z}1L3|nwM1@v zq8^f{&q}m6im&b;Grk+x6x?Q8fgw2FT=rk`UxL_;u4rOSKS5%lR5gN&^_HDpHzdwX zjSP>=i&5Bz8IC58<{1i9#xb%@!){z8S^wxIS<7%z7%DsPvX1dMb38{t9?!*!i{=*# zVH%c$q*R+@X1=1Vl}J93+oKiCjk!?KV=}Gq!D48N1}n_=Vq;FFIg6JN!Up1LqtMTN zW{As387rs`@3p~cD9q%F>#PKYd z{tJA!LiGgAXbSSj5_!e>`0tnB3bm3Yf>l|`vf=`H+91x}liqw5zaX$VK2RK<%=XdT z#K+SCno%XAqr<`?(xL&IYnw$9cnMlI>VCFXNl1jRGg?bIjgj9HcegK$*Upt9hrM6N zUCggTtXesXK?gyZ^C3ETnt2t*|7h}ILYE_csFvs6N5uxugfu~Mv^rcm(l$6mNJXpy z3QhM>f#c;rJ~Yzj+?B_WBBiD}vsPcjmV$|GzLMZ5Nww2Y(8RS9ih>`}({*A;(>=P` zn|9UkKfIQ8b+sD8SW-miInZ9Io9_EGO!dbycl{5AsN0f?^7n(xTY$-X$Z@LOb)yv+ zg+Hr2?hM;gt*<{5BY*j6DaN||c%B-Ib_E)k1fvv(9=o`>@FcZx_1Qf;C)0j1)HuQl zIHD{aI_?@2q!ElOVHW4L5HO!?V{+m^mUBiVBjKiXSQQzZmw6>#s9Yj-(Jk?xX*rhS zFqRLMOAN3~5+qvYr`{0pvvs(e@bSipzJm*F>l+C&KC-@M>e@yaFM(PT4(e>S=oT92 zUE6yeD0+`hz%>ZY0)^@bqIyk$Gr~OesxYQ&J;I}MSu%xqLcUFRtQFTgeaop`?j{8}@;vzrUFNrL%ePHl*>O(`8b-ylsUig8JC?8I^L=Z*p-` zFeE)2a5+0j1+cpWI502@BC+H|1_j0d;L-o6;20GH5r~wVbcA21UvJ_)S@b;uCLa0X z6Re4oj8)?ojdAN?yOZWbg37+^y>!$2Al?BOX{$w}u1S*8VT5-UFPi_K*Kp zMQe1}p{*Gq5i7=*w%QsoB1R%ZQZqye>4Q?*YSY?+st~JcCnOO&siIo51TBgdZJ(kG zU3Aaqmp>tSVh?@QA-^S`jv*5iMM*om!6r zo;o|RK6mnML`BSt`&38&M&+s(M#exKL#k*(N>XFNtiQZE1Ahd-_%65Ej5H>%9a zFA~SZF#z~AN3wY&*oR=^T9T>i~fV#y~^_FLH>a)-E7*&vfnLe8RJe(8=$okUdY4x-RS z;M?<-_^WC0R@+x?m80ZI`{@lD*7$SXq#3OFDfatZyB4JxX8510FAiO8{{4PqUq^E@ zAnpd|>#rBS1oM*D`-i_MZ^*CJCifd|faU_1&t2N^*(?YGoO^jM*}Ed~OW*g+%hbzn zde3~&KJ;OEX}2YL{^XO8)fVHN9lK5#ciANnjH@y)aGFY6x~Z|2!y*p^+fAaRh zKSwu=tMPhma)|GgtZSDNhdOWq)lap!kURMS$=^Pde>i-v>@EH}ukc*lP4Wi5>B8S; z(f(RD8uah`F8R*)<`=7PU!G{*U2ZxbXt05`+v8i#qo2dYd5lPpX-Q99Y8m+Xen{+6 z>+wM&>!)~Hx;z~Ft!buj!@|gr)+UGurPfiVMiy0AVP%NiiHSPBI*U>fEIpi1jACSj zl#&6c(o!V1w6fHKJ_63g=3?`afPoPibBi^xw@9j1X{f^4Q0@HZ&StG`kWgg%#Kc%N z+lriHKFnq2LE8w#?P9weSUcN_r>sgbUbo^D45oSMXR7Sh&s6lKWi5~CJ?Cqb>_+F= z_7y7*m&ogNwJ(Pms`*2iwl`vhWx}uq^_ew5t6wW2$XC8;C9G?C(q{bfkzDZ~v-O?n z&wGTDLlok#Sfl0rv3k$P)0!3UD0!5aLTp`4(dgC7m>Y=ax8WnP{S$f3b_ny^f^kNs z=_&KecH@4=mt&h~+|}LYlV}8E!K7X|M!g#3!|R-LZ7fhd!5|>VpmPa2|KrOnU}y9r*>FRTs1bIAf%c{eiOK;Mo*i2HkKkmvpnGZ zTv@nA#*wzP8RV1yNKGSO+JasX?kJ2Lm1QJUDBG^)elM)2{m8D5xc`dyBhIPBu2gKY zQf}&ZBVxV$c^Ww_`1e-}g?NJE3}8`tpL@XZL|4mlp&clYVEg0cp3B{B{H7BTgGavP zjJ%9K8Fg9tE?zzF9f1oJ$2)b`sB6vL9yiM?CjQ)gE3xaRqXR1`(m0#Uck>=|R( z+2^z6(5@wS(5tAf6Y;R& zl1E%|t?F%k64S+ShPMXG?<8wSh>lDbov$vQgi6R?+KQ=778(x7gv6;qBAKN+4xroCiFtlUP3X^NQ_`Z#N4{bPKm> zNCU-{hFc|3d?|gJMJ}pL{47y%BL>^bqZE>SuYZ*ZJac1NbpKA}RpE8Kp$xCNyDQa8 zY0^ZPv3@g*f%FdY?R_|arf18Pw(=)+XRmW2K7<1K6s76OY?(pIY-)V#0$H zXn{)UFhlR(wJn$MA0!$vXOZhD@En1bKMDmgn;y|fW4Q#29FPTh4fnU^-;#SXq>g>z ze&=qiKED)k`+7>ac{$Y>yGrThv+;F)4kB{? z&j6?F;_KmFT<43*s3WEq&?zuaWSzdztVm5?j${D>8O^jg4w(C5{oJbu(rI*n${17$ zx~<-*janmIw8qwxtg{O>6*4H+p^8`L>u}~U%~^6T&WV_3!3nc&y#LQZqm-j}>#Hjl zts#PA@Isxka8@W9cg5t`?6k80k<|IVzulp7*&9m^>V~z;gx}AV2f!Bhf5>k8XA-n0@A>m4`0y4awCy4jR6N* z>@*Vg3yRf?d0@!a9-CgfX37>}zI)xSX^<<=I*ol;T-O;z>r6OBu>#DWjJ@OIHQS@} zTArh?bB&K)CpaV-! zV*}mk#1q8U_o{?_+oudbw#x;!Y1T!obCRD++HYpo<4^-PjTa9E)D54az?uZhJ1!;F zJT)wE8rIFC9R`@G79BRIt$A;dpG8Vl9k!avP*B!9DiZYWq~QT8=Iiqdf>_-RU9XNG-w_X0{cx@cT zoit~1Lahwe8j1;LWK?_f?DMP*^rV;-oD~M0Sh#~9YT)?3lEpRbY0=`8G?4pOns*;K z|7{b`QXFg6Dde*Da1udWK1{W zKF!XSt3bhFX?TSly3!P|7cRAkYsK6TYlax>RKU8J7CRKWSZT|pE3QfwV(D6lu`F?y zOyjg462xSYT!0kBP_Eo4jbDJ zM2|TVRO`n$#4Gwt4v1s5+Z|!2u4?DtR{^4Dh3;*Iaz{l?Y&bj@5rU-g)WE4K#sDsf zjf48iz@a2xIdY+qXiUw*J=;=2fyfwfw+3Iz8ItG)ia20Wx7(%^0G12MMX4#k0oex| z9UgpN;CFZmC$EzH!I-84N{6d6WMt6LZNU^pF7xn3=1cxn;^b8VdugAIa4Dr||L(N> zZED-mqiR^}#Tgcjgy=SMpLz;Bt<$QIOV==J-K7M;TxMaCG!aFK)oyb;gB3cNI1ctA zjLSwTUqQrMx$Tf}d*g1bVl;*dmT5!{=wwO&gX>$q=poaA_=TMW2UVKCN%aJqYzZzy zPC3r$mp`--)@iuFa>)RZ#g!o(*15~TdrhB(lQdPLRZSm&^rME%UR^U*b=~>9#A9y^ zEfZ?WG^&sdu1tGQ=c z15(i=4A?lQ=$C2kM22~(r;9QTo`Yo8A-Tou*WxoL#x;owylJPoj$-k?D^4qS@;ltm4$xrCJ9`H_I^+wW?sOLY4 zz32F!y5F4v@XfRP1%23so||ju#$K=d=;3c9Jbv~T*F*Yr|J36{Jr97o=T?e*)Jq7igsyx9R)| zT+{sZW#OU(OhR!RTTr8yZlvccA+2z`mdoW}e1I5)k=jx?v%pg_UDo8~Z6gUy8RVtT zJc!IOg-e`wSZ_2==<+i4Azec{?uKO5iY+ssr_3!A#{ z^E(?}_#7I30{$whPspDrgvysKofH0CYS^8-RyLT*yr7+yz>hNeavX7v)0v-O^UnC@ z?oX|W!f^CY3iwRX2gGLngc`B_^xetR3zZ#~n;oY^1tsC(hb*q`#=~=Jnqq95!58+3 z4nz?my~}8pnB?Iy*Gc4@wzXv-Ov}6yHldyyjuagZ4>ccAe<2U$2F}|zog?1l2hMA! zY8jiUX3~eB`}HdH7^{;hJBZkR{k^YK*RuX+*wNIdC)%iD3+}-1& zN7!Yb(nHnC`&yf~YzSJ&(P^nQ1CTmLeiYh) z&5OFkz=pG8eXR|RptRDp(qRk>$2UU<&F}e5oM^fi@K}f#;t^-9o%}NNedZO(IAPP9 zGV@_8?&PayaV)Bd5Hj1%x^4~+wV6znPZh<_mg4vCj)*S4aW=b3VcPHh!lp0P{5Wii zN-mgFH%^aw`}KwJy8UYS%SVrXBqzUI1aR@W2jIoEcun&Os}pG9 zpM$$~oX9x!@SEdu&xXFaGjm5rMk?=RQ`sy5yMa{E>|T{91}kpd`24B#wdj3Ux4%Cj zY{X*5S3#_>I6cuF0NTwAwDuZ_Y3B@=rG0@Dpy4haq28_?RM@N9=ds71eEyPTc>s!! z%3MS*xPdGbZ%%iqkVZaz0<=(Y!%NK z^_y1%N5lHzbEmRlw_&68Z{<88<%0AKSo#4mD#YnjDL!^fj-BoF6|=q%F|A`Zb0Pae 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

Q5<~w7vaSj4rNu>UQ3~sJGF6R~wtPs_~PbDDB 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 Date: Thu, 6 May 2021 14:01:20 -0400 Subject: [PATCH 014/100] cmd/go: be less strict about go version syntax in dependency go.mod files It is unclear what the future holds for the go line in go.mod files. Perhaps at some point we will switch to semver numbering. Perhaps at some point we will allow specifying minor versions or even betas and release candidates. Those kinds of changes are difficult today because the go line is parsed in dependency modules, meaning that older versions of the Go toolchain need to understand newer go lines. This CL makes that case - parsing a go line in a dependency's go.mod file - a bit more lax about how to find the version. It allows a leading v and any trailing non-digit-prefixed string after the MAJOR.MINOR section. There are no concrete plans to make use of any of these changes, but if in the future we want to make them, having a few Go releases under out belt that will accept the syntax in dependencies will make any changes significantly easier. Change-Id: I79bb84bba4b769048ac4b14d5c275eb9a3f270c4 Reviewed-on: https://go-review.googlesource.com/c/go/+/317690 Trust: Russ Cox Run-TryBot: Russ Cox TryBot-Result: Go Bot Reviewed-by: Bryan C. Mills --- src/cmd/go.mod | 2 +- src/cmd/go.sum | 4 +- src/cmd/go/testdata/script/badgo.txt | 50 +++++++++++++++++++ .../vendor/golang.org/x/mod/modfile/rule.go | 14 +++++- src/cmd/vendor/modules.txt | 2 +- 5 files changed, 66 insertions(+), 6 deletions(-) create mode 100644 src/cmd/go/testdata/script/badgo.txt diff --git a/src/cmd/go.mod b/src/cmd/go.mod index c3617eea0b1..88f5f2883a6 100644 --- a/src/cmd/go.mod +++ b/src/cmd/go.mod @@ -7,7 +7,7 @@ require ( github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639 // indirect golang.org/x/arch v0.0.0-20210502124803-cbf565b21d1e golang.org/x/crypto v0.0.0-20210503195802-e9a32991a82e // indirect - golang.org/x/mod v0.4.3-0.20210504181020-67f1c1edc27a + golang.org/x/mod v0.4.3-0.20210512182355-6088ed88cecd golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744 // indirect golang.org/x/term v0.0.0-20210503060354-a79de5458b56 golang.org/x/tools v0.1.1-0.20210505014545-7cab0ef2e9a5 diff --git a/src/cmd/go.sum b/src/cmd/go.sum index f42aac70d69..73750802bc1 100644 --- a/src/cmd/go.sum +++ b/src/cmd/go.sum @@ -9,8 +9,8 @@ golang.org/x/arch v0.0.0-20210502124803-cbf565b21d1e h1:pv3V0NlNSh5Q6AX/StwGLBjc golang.org/x/arch v0.0.0-20210502124803-cbf565b21d1e/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/crypto v0.0.0-20210503195802-e9a32991a82e h1:8foAy0aoO5GkqCvAEJ4VC4P3zksTg4X4aJCDpZzmgQI= golang.org/x/crypto v0.0.0-20210503195802-e9a32991a82e/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= -golang.org/x/mod v0.4.3-0.20210504181020-67f1c1edc27a h1:wbpC/7Wbo5WFVox32n+KjhRRLmTLq8YW/wRlL2iVAhk= -golang.org/x/mod v0.4.3-0.20210504181020-67f1c1edc27a/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.4.3-0.20210512182355-6088ed88cecd h1:CuRnpyMrCCBulv0d/y0CswR4K0vGydgE3DZ2wYPIOo8= +golang.org/x/mod v0.4.3-0.20210512182355-6088ed88cecd/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744 h1:yhBbb4IRs2HS9PPlAg6DMC6mUOKexJBNsLf4Z+6En1Q= golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/src/cmd/go/testdata/script/badgo.txt b/src/cmd/go/testdata/script/badgo.txt new file mode 100644 index 00000000000..cf4e2584d65 --- /dev/null +++ b/src/cmd/go/testdata/script/badgo.txt @@ -0,0 +1,50 @@ +go get example.net/badgo@v1.0.0 +go get example.net/badgo@v1.1.0 +go get example.net/badgo@v1.2.0 +go get example.net/badgo@v1.3.0 +go get example.net/badgo@v1.4.0 +go get example.net/badgo@v1.5.0 +! go get example.net/badgo@v1.6.0 +stderr 'invalid go version .X.Y.: must match format 1.23' + +-- go.mod -- +module m + +replace ( + example.net/badgo v1.0.0 => ./v1.0.0 + example.net/badgo v1.1.0 => ./v1.1.0 + example.net/badgo v1.2.0 => ./v1.2.0 + example.net/badgo v1.3.0 => ./v1.3.0 + example.net/badgo v1.4.0 => ./v1.4.0 + example.net/badgo v1.5.0 => ./v1.5.0 + example.net/badgo v1.6.0 => ./v1.6.0 +) + +-- v1.0.0/go.mod -- +module example.net/badgo +go 1.17.0 + +-- v1.1.0/go.mod -- +module example.net/badgo +go 1.17rc2 + +-- v1.2.0/go.mod -- +module example.net/badgo +go 1.17.1 + +-- v1.3.0/go.mod -- +module example.net/badgo +go v1.17.0 + +-- v1.4.0/go.mod -- +module example.net/badgo +go v1.17.0-rc.2 + +-- v1.5.0/go.mod -- +module example.net/badgo +go v1.17.1 + +-- v1.6.0/go.mod -- +module example.net/badgo +go X.Y + diff --git a/src/cmd/vendor/golang.org/x/mod/modfile/rule.go b/src/cmd/vendor/golang.org/x/mod/modfile/rule.go index d8242de2806..7299e15500a 100644 --- a/src/cmd/vendor/golang.org/x/mod/modfile/rule.go +++ b/src/cmd/vendor/golang.org/x/mod/modfile/rule.go @@ -217,6 +217,7 @@ func parseToFile(file string, data []byte, fix VersionFixer, strict bool) (parse } var GoVersionRE = lazyregexp.New(`^([1-9][0-9]*)\.(0|[1-9][0-9]*)$`) +var laxGoVersionRE = lazyregexp.New(`^v?(([1-9][0-9]*)\.(0|[1-9][0-9]*))([^0-9].*)$`) func (f *File) add(errs *ErrorList, block *LineBlock, line *Line, verb string, args []string, fix VersionFixer, strict bool) { // If strict is false, this module is a dependency. @@ -267,8 +268,17 @@ func (f *File) add(errs *ErrorList, block *LineBlock, line *Line, verb string, a errorf("go directive expects exactly one argument") return } else if !GoVersionRE.MatchString(args[0]) { - errorf("invalid go version '%s': must match format 1.23", args[0]) - return + fixed := false + if !strict { + if m := laxGoVersionRE.FindStringSubmatch(args[0]); m != nil { + args[0] = m[1] + fixed = true + } + } + if !fixed { + errorf("invalid go version '%s': must match format 1.23", args[0]) + return + } } f.Go = &Go{Syntax: line} diff --git a/src/cmd/vendor/modules.txt b/src/cmd/vendor/modules.txt index 10591f8041b..016ec011a97 100644 --- a/src/cmd/vendor/modules.txt +++ b/src/cmd/vendor/modules.txt @@ -28,7 +28,7 @@ golang.org/x/arch/x86/x86asm ## explicit; go 1.17 golang.org/x/crypto/ed25519 golang.org/x/crypto/ed25519/internal/edwards25519 -# golang.org/x/mod v0.4.3-0.20210504181020-67f1c1edc27a +# golang.org/x/mod v0.4.3-0.20210512182355-6088ed88cecd ## explicit; go 1.17 golang.org/x/mod/internal/lazyregexp golang.org/x/mod/modfile From 7a7624a3fa4665e8d75919746b6d762d3984d471 Mon Sep 17 00:00:00 2001 From: Kevin Albertson Date: Tue, 16 Feb 2021 14:40:49 +0000 Subject: [PATCH 015/100] cmd/go: permit .tbd files as a linker flag A .tbd file is a macOS text-based stub library and is a valid input to the macOS linker. This change adds .tbd to the allow-list for acceptable linker flags. Fixes golang/go#44263 Change-Id: Ie5439a13325dbc908e42f95ec70aca518bb549f9 GitHub-Last-Rev: 6055c3b5fa8c8146c0c5c976aa8e1d219e01e414 GitHub-Pull-Request: golang/go#44276 Reviewed-on: https://go-review.googlesource.com/c/go/+/292269 Reviewed-by: Cherry Mui Reviewed-by: Bryan C. Mills Run-TryBot: Cherry Mui TryBot-Result: Go Bot Trust: Ian Lance Taylor --- src/cmd/go/internal/work/security.go | 4 ++-- src/cmd/go/internal/work/security_test.go | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/cmd/go/internal/work/security.go b/src/cmd/go/internal/work/security.go index 36bbab37ee2..e9b9f6c6c0f 100644 --- a/src/cmd/go/internal/work/security.go +++ b/src/cmd/go/internal/work/security.go @@ -208,8 +208,8 @@ var validLinkerFlags = []*lazyregexp.Regexp{ re(`-Wl,-z,(no)?execstack`), re(`-Wl,-z,relro`), - re(`[a-zA-Z0-9_/].*\.(a|o|obj|dll|dylib|so)`), // direct linker inputs: x.o or libfoo.so (but not -foo.o or @foo.o) - re(`\./.*\.(a|o|obj|dll|dylib|so)`), + re(`[a-zA-Z0-9_/].*\.(a|o|obj|dll|dylib|so|tbd)`), // direct linker inputs: x.o or libfoo.so (but not -foo.o or @foo.o) + re(`\./.*\.(a|o|obj|dll|dylib|so|tbd)`), } var validLinkerFlagsWithNextArg = []string{ diff --git a/src/cmd/go/internal/work/security_test.go b/src/cmd/go/internal/work/security_test.go index 4f2e0eb21ab..8d4be0abfc0 100644 --- a/src/cmd/go/internal/work/security_test.go +++ b/src/cmd/go/internal/work/security_test.go @@ -164,6 +164,8 @@ var goodLinkerFlags = [][]string{ {"-Wl,-framework", "-Wl,Chocolate"}, {"-Wl,-framework,Chocolate"}, {"-Wl,-unresolved-symbols=ignore-all"}, + {"libcgotbdtest.tbd"}, + {"./libcgotbdtest.tbd"}, } var badLinkerFlags = [][]string{ From 92c189f2117415ff7a4bd9652422ba9af1745cb9 Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Thu, 13 May 2021 16:36:32 -0400 Subject: [PATCH 016/100] cmd/link: resolve ABI alias for runtime.unreachableMethod We redirect references to unreachable methods to runtime.unreachableMethod. We choose to use ABIInternal symbol for this, because runtime.unreachableMethod is a defined Go function. When linking against shared libraries, and ABI wrappers are not enabled, the imported function symbols are all ABI0 and aliased to ABIInternal. We need to resolve ABI alias in this case. Change-Id: Idd64ef46ce0b5f54882ea0069ce0d59dc9b7a599 Reviewed-on: https://go-review.googlesource.com/c/go/+/319891 Trust: Cherry Mui Run-TryBot: Cherry Mui Reviewed-by: Jeremy Faller Reviewed-by: David Chase Reviewed-by: Than McIntosh TryBot-Result: Go Bot --- src/cmd/link/internal/ld/data.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/cmd/link/internal/ld/data.go b/src/cmd/link/internal/ld/data.go index 6659e95cc1f..223df63d9df 100644 --- a/src/cmd/link/internal/ld/data.go +++ b/src/cmd/link/internal/ld/data.go @@ -340,6 +340,7 @@ func (st *relocSymState) relocsym(s loader.Sym, P []byte) { if weak && !ldr.AttrReachable(rs) { // Redirect it to runtime.unreachableMethod, which will throw if called. rs = syms.unreachableMethod + rs = ldr.ResolveABIAlias(rs) } if target.IsExternal() { nExtReloc++ @@ -623,6 +624,7 @@ func extreloc(ctxt *Link, ldr *loader.Loader, s loader.Sym, r loader.Reloc) (loa rs := ldr.ResolveABIAlias(r.Sym()) if r.Weak() && !ldr.AttrReachable(rs) { rs = ctxt.ArchSyms.unreachableMethod + rs = ldr.ResolveABIAlias(rs) } rs, off := FoldSubSymbolOffset(ldr, rs) rr.Xadd = r.Add() + off From b4833f7c06c332ad2ef30666144a20fb7838aba1 Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Thu, 13 May 2021 16:48:50 -0400 Subject: [PATCH 017/100] cmd/link: always mark runtime.unreachableMethod symbol In the deadcode path we mark runtime.unreachableMethod symbol, which is a special symbol used for redirecting unreachable methods. Currently this code is conditioned on not -linkshared. This is wrong. It should be marked with -linkshared mode as well. In fact, -linkshared should only affect the entry symbol. Change the code accordingly. Change-Id: I252abf850212a930f275589ef0035a43e52cb9cc Reviewed-on: https://go-review.googlesource.com/c/go/+/319893 Trust: Cherry Mui Run-TryBot: Cherry Mui TryBot-Result: Go Bot Reviewed-by: Jeremy Faller --- src/cmd/link/internal/ld/deadcode.go | 38 ++++++++++++++-------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/src/cmd/link/internal/ld/deadcode.go b/src/cmd/link/internal/ld/deadcode.go index 1ed5598c99d..416e5da3983 100644 --- a/src/cmd/link/internal/ld/deadcode.go +++ b/src/cmd/link/internal/ld/deadcode.go @@ -65,26 +65,26 @@ func (d *deadcodePass) init() { } } names = append(names, *flagEntrySymbol) - // runtime.unreachableMethod is a function that will throw if called. - // We redirect unreachable methods to it. - names = append(names, "runtime.unreachableMethod") - if !d.ctxt.linkShared && d.ctxt.BuildMode != BuildModePlugin { - // runtime.buildVersion and runtime.modinfo are referenced in .go.buildinfo section - // (see function buildinfo in data.go). They should normally be reachable from the - // runtime. Just make it explicit, in case. - names = append(names, "runtime.buildVersion", "runtime.modinfo") - } - if d.ctxt.BuildMode == BuildModePlugin { - names = append(names, objabi.PathToPrefix(*flagPluginPath)+"..inittask", objabi.PathToPrefix(*flagPluginPath)+".main", "go.plugin.tabs") + } + // runtime.unreachableMethod is a function that will throw if called. + // We redirect unreachable methods to it. + names = append(names, "runtime.unreachableMethod") + if !d.ctxt.linkShared && d.ctxt.BuildMode != BuildModePlugin { + // runtime.buildVersion and runtime.modinfo are referenced in .go.buildinfo section + // (see function buildinfo in data.go). They should normally be reachable from the + // runtime. Just make it explicit, in case. + names = append(names, "runtime.buildVersion", "runtime.modinfo") + } + if d.ctxt.BuildMode == BuildModePlugin { + names = append(names, objabi.PathToPrefix(*flagPluginPath)+"..inittask", objabi.PathToPrefix(*flagPluginPath)+".main", "go.plugin.tabs") - // We don't keep the go.plugin.exports symbol, - // but we do keep the symbols it refers to. - exportsIdx := d.ldr.Lookup("go.plugin.exports", 0) - if exportsIdx != 0 { - relocs := d.ldr.Relocs(exportsIdx) - for i := 0; i < relocs.Count(); i++ { - d.mark(relocs.At(i).Sym(), 0) - } + // We don't keep the go.plugin.exports symbol, + // but we do keep the symbols it refers to. + exportsIdx := d.ldr.Lookup("go.plugin.exports", 0) + if exportsIdx != 0 { + relocs := d.ldr.Relocs(exportsIdx) + for i := 0; i < relocs.Count(); i++ { + d.mark(relocs.At(i).Sym(), 0) } } } From 3a0453514a80b001e6135f98ec4e0da5a78ab267 Mon Sep 17 00:00:00 2001 From: John Bampton Date: Fri, 7 May 2021 10:47:28 +0000 Subject: [PATCH 018/100] all: fix spelling Change-Id: Id991d8e81e04835cabfb02d07a2199bfb553726c GitHub-Last-Rev: 5d0b55d49127a2e2ba3148d20a58c52debcae12b GitHub-Pull-Request: golang/go#44802 Reviewed-on: https://go-review.googlesource.com/c/go/+/299069 Run-TryBot: Ian Lance Taylor TryBot-Result: Go Bot Reviewed-by: Ian Lance Taylor Trust: Heschi Kreinick --- src/net/http/httputil/reverseproxy_test.go | 2 +- src/net/http/socks_bundle.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/net/http/httputil/reverseproxy_test.go b/src/net/http/httputil/reverseproxy_test.go index b89eb90ad64..22720caf930 100644 --- a/src/net/http/httputil/reverseproxy_test.go +++ b/src/net/http/httputil/reverseproxy_test.go @@ -1209,7 +1209,7 @@ func TestReverseProxyWebSocket(t *testing.T) { } } -func TestReverseProxyWebSocketCancelation(t *testing.T) { +func TestReverseProxyWebSocketCancellation(t *testing.T) { n := 5 triggerCancelCh := make(chan bool, n) nthResponse := func(i int) string { diff --git a/src/net/http/socks_bundle.go b/src/net/http/socks_bundle.go index e4466695899..e6db1c7640f 100644 --- a/src/net/http/socks_bundle.go +++ b/src/net/http/socks_bundle.go @@ -453,7 +453,7 @@ func (up *socksUsernamePassword) Authenticate(ctx context.Context, rw io.ReadWri b = append(b, up.Username...) b = append(b, byte(len(up.Password))) b = append(b, up.Password...) - // TODO(mikio): handle IO deadlines and cancelation if + // TODO(mikio): handle IO deadlines and cancellation if // necessary if _, err := rw.Write(b); err != nil { return err From 12d383c7c7406dda2cb969a89ce3801c220614c5 Mon Sep 17 00:00:00 2001 From: itchyny Date: Thu, 13 May 2021 04:03:18 +0000 Subject: [PATCH 019/100] debug/macho: fix a typo in macho.go Change-Id: Ica47b53decf6690fbd37e666e9de5098117b82de GitHub-Last-Rev: 6aabb208a6499e29fe32a2f0d928c4e027d556b2 GitHub-Pull-Request: golang/go#46147 Reviewed-on: https://go-review.googlesource.com/c/go/+/319592 Reviewed-by: Brad Fitzpatrick Trust: Brad Fitzpatrick Trust: Heschi Kreinick --- src/debug/macho/macho.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/debug/macho/macho.go b/src/debug/macho/macho.go index 49e107eed3d..9fa9f957529 100644 --- a/src/debug/macho/macho.go +++ b/src/debug/macho/macho.go @@ -4,7 +4,7 @@ // Mach-O header data structures // Originally at: -// http://developer.apple.com/mac/library/documentation/DeveloperTools/Conceptual/MachORuntime/Reference/reference.html (since deleted by Apply) +// http://developer.apple.com/mac/library/documentation/DeveloperTools/Conceptual/MachORuntime/Reference/reference.html (since deleted by Apple) // Archived copy at: // https://web.archive.org/web/20090819232456/http://developer.apple.com/documentation/DeveloperTools/Conceptual/MachORuntime/index.html // For cloned PDF see: From c925e1546ee72e40ca5351f3773379e99a6b8cdf Mon Sep 17 00:00:00 2001 From: eric fang Date: Fri, 7 May 2021 05:48:18 +0000 Subject: [PATCH 020/100] cmd/internal/obj/arm64: disable AL and NV for some condition operation instructions According to the armv8-a reference manual, conditions AL and NV are not allowed for instructions CINC, CINV, CNEG, CSET and CSETM. This CL adds this check and the corresponding test cases. Change-Id: Icb496b7b13a353f41491f2de4d939a5cd88abb04 Reviewed-on: https://go-review.googlesource.com/c/go/+/317912 Reviewed-by: eric fang Reviewed-by: Cherry Mui Trust: eric fang Run-TryBot: eric fang TryBot-Result: Go Bot --- .../asm/internal/asm/testdata/arm64error.s | 10 ++++++++ src/cmd/internal/obj/arm64/asm7.go | 24 +++++++++---------- 2 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/cmd/asm/internal/asm/testdata/arm64error.s b/src/cmd/asm/internal/asm/testdata/arm64error.s index 66fc9107594..cf57179e430 100644 --- a/src/cmd/asm/internal/asm/testdata/arm64error.s +++ b/src/cmd/asm/internal/asm/testdata/arm64error.s @@ -52,6 +52,16 @@ TEXT errors(SB),$0 NEGSW R7@>2, R5 // ERROR "unsupported shift operator" CINC CS, R2, R3, R4 // ERROR "illegal combination" CSEL LT, R1, R2 // ERROR "illegal combination" + CINC AL, R2, R3 // ERROR "invalid condition" + CINC NV, R2, R3 // ERROR "invalid condition" + CINVW AL, R2, R3 // ERROR "invalid condition" + CINV NV, R2, R3 // ERROR "invalid condition" + CNEG AL, R2, R3 // ERROR "invalid condition" + CNEGW NV, R2, R3 // ERROR "invalid condition" + CSET AL, R2 // ERROR "invalid condition" + CSET NV, R2 // ERROR "invalid condition" + CSETMW AL, R2 // ERROR "invalid condition" + CSETM NV, R2 // ERROR "invalid condition" LDP.P 8(R2), (R2, R3) // ERROR "constrained unpredictable behavior" LDP.W 8(R3), (R2, R3) // ERROR "constrained unpredictable behavior" LDP (R1), (R2, R2) // ERROR "constrained unpredictable behavior" diff --git a/src/cmd/internal/obj/arm64/asm7.go b/src/cmd/internal/obj/arm64/asm7.go index 575436d764a..b8c3cd97c76 100644 --- a/src/cmd/internal/obj/arm64/asm7.go +++ b/src/cmd/internal/obj/arm64/asm7.go @@ -3536,27 +3536,25 @@ func (c *ctxt7) asmout(p *obj.Prog, o *Optab, out []uint32) { o1 = c.oprrr(p, p.As) cond := int(p.From.Reg) - if cond < COND_EQ || cond > COND_NV { + // AL and NV are not allowed for CINC/CINV/CNEG/CSET/CSETM instructions + if cond < COND_EQ || cond > COND_NV || (cond == COND_AL || cond == COND_NV) && p.From3Type() == obj.TYPE_NONE { c.ctxt.Diag("invalid condition: %v", p) } else { cond -= COND_EQ } r := int(p.Reg) - var rf int - if r != 0 { - if p.From3Type() == obj.TYPE_NONE { - /* CINC/CINV/CNEG */ - rf = r - cond ^= 1 - } else { - rf = int(p.GetFrom3().Reg) /* CSEL */ + var rf int = r + if p.From3Type() == obj.TYPE_NONE { + /* CINC/CINV/CNEG or CSET/CSETM*/ + if r == 0 { + /* CSET/CSETM */ + rf = REGZERO + r = rf } - } else { - /* CSET */ - rf = REGZERO - r = rf cond ^= 1 + } else { + rf = int(p.GetFrom3().Reg) /* CSEL */ } rt := int(p.To.Reg) From d137b745398e8313c0f086d4d044751295be6163 Mon Sep 17 00:00:00 2001 From: Ben Hoyt Date: Fri, 14 May 2021 09:59:20 +1200 Subject: [PATCH 021/100] cmd/go: fix spacing in help text of -overlay flag There was a space missing in the first line shown below, and an extra space in the second line shown. Thanks Peter Bourgon for noting this. BEFORE: $ go help build | grep -A1 'has some limitations' has some limitations:importantly, cgo files included from outside the include path must be in the same directory as the Go package they are AFTER: $ go help build | grep -A1 'has some limitations' has some limitations: importantly, cgo files included from outside the include path must be in the same directory as the Go package they are Note that I edited alldocs.go by hand here, as the mkalldocs.sh script produces a lot more changes, for example adding the -insecure flag documentation in. Not sure what's wrong there. Change-Id: I303f6d6b42b0e24cec0748a949dc23beec64b917 Reviewed-on: https://go-review.googlesource.com/c/go/+/319949 Reviewed-by: Jay Conrod Reviewed-by: Bryan C. Mills Trust: Jay Conrod Run-TryBot: Jay Conrod TryBot-Result: Go Bot --- src/cmd/go/alldocs.go | 4 ++-- src/cmd/go/internal/work/build.go | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/cmd/go/alldocs.go b/src/cmd/go/alldocs.go index 052b61c03dd..fcc7f36335e 100644 --- a/src/cmd/go/alldocs.go +++ b/src/cmd/go/alldocs.go @@ -174,8 +174,8 @@ // a build will run as if the disk file path exists with the contents // given by the backing file paths, or as if the disk file path does not // exist if its backing file path is empty. Support for the -overlay flag -// has some limitations:importantly, cgo files included from outside the -// include path must be in the same directory as the Go package they are +// has some limitations: importantly, cgo files included from outside the +// include path must be in the same directory as the Go package they are // included from, and overlays will not appear when binaries and tests are // run through go run and go test respectively. // -pkgdir dir diff --git a/src/cmd/go/internal/work/build.go b/src/cmd/go/internal/work/build.go index 1babbda8899..0ed2389cd5a 100644 --- a/src/cmd/go/internal/work/build.go +++ b/src/cmd/go/internal/work/build.go @@ -128,8 +128,8 @@ and test commands: a build will run as if the disk file path exists with the contents given by the backing file paths, or as if the disk file path does not exist if its backing file path is empty. Support for the -overlay flag - has some limitations:importantly, cgo files included from outside the - include path must be in the same directory as the Go package they are + has some limitations: importantly, cgo files included from outside the + include path must be in the same directory as the Go package they are included from, and overlays will not appear when binaries and tests are run through go run and go test respectively. -pkgdir dir From a938e529861215d9721f5e2590d5166bfbf2d271 Mon Sep 17 00:00:00 2001 From: Manlio Perillo Date: Thu, 13 May 2021 16:08:59 +0200 Subject: [PATCH 022/100] cmd/go: fix a portability issue in the cd script command Currently all script tests use the UNIX path separator with the cd command, causing the PWD environment variable to have the incorrect path separator on Windows. Call filepath.FromSlash on the cd command argument. Update the testdata/script/README to document that the cd argument must use slashes. Add a regression test. To reproduce this issue, a test must use the cd command followed by a stdout or stderr command containing the pattern $PWD. Change-Id: Ib2dc5f185cc2476451402787996d14df91f7dddb Reviewed-on: https://go-review.googlesource.com/c/go/+/319311 Reviewed-by: Jay Conrod Reviewed-by: Bryan C. Mills Trust: Jay Conrod Run-TryBot: Jay Conrod TryBot-Result: Go Bot --- src/cmd/go/script_test.go | 2 +- src/cmd/go/testdata/script/README | 1 + src/cmd/go/testdata/script/test_script_cmdcd.txt | 13 +++++++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 src/cmd/go/testdata/script/test_script_cmdcd.txt diff --git a/src/cmd/go/script_test.go b/src/cmd/go/script_test.go index 327eaff4450..639e907db07 100644 --- a/src/cmd/go/script_test.go +++ b/src/cmd/go/script_test.go @@ -517,7 +517,7 @@ func (ts *testScript) cmdCd(want simpleStatus, args []string) { ts.fatalf("usage: cd dir") } - dir := args[0] + dir := filepath.FromSlash(args[0]) if !filepath.IsAbs(dir) { dir = filepath.Join(ts.cd, dir) } diff --git a/src/cmd/go/testdata/script/README b/src/cmd/go/testdata/script/README index d7e67bb7b60..48e4055b0bd 100644 --- a/src/cmd/go/testdata/script/README +++ b/src/cmd/go/testdata/script/README @@ -102,6 +102,7 @@ The commands are: - cd dir Change to the given directory for future commands. + The directory must use slashes as path separator. - chmod perm path... Change the permissions of the files or directories named by the path arguments diff --git a/src/cmd/go/testdata/script/test_script_cmdcd.txt b/src/cmd/go/testdata/script/test_script_cmdcd.txt new file mode 100644 index 00000000000..6e6f67e13d0 --- /dev/null +++ b/src/cmd/go/testdata/script/test_script_cmdcd.txt @@ -0,0 +1,13 @@ +# Tests that after a cd command, where usually the UNIX path separator is used, +# a match against $PWD does not fail on Windows. + +cd $WORK/a/b/c/pkg + +go list -find -f {{.Root}} +stdout $PWD + +-- $WORK/a/b/c/pkg/go.mod -- +module pkg + +-- $WORK/a/b/c/pkg/pkg.go -- +package pkg From 0eb38f2b164ec5b0094c5895cfe1b3a40c183d50 Mon Sep 17 00:00:00 2001 From: Manlio Perillo Date: Wed, 12 May 2021 12:09:18 +0200 Subject: [PATCH 023/100] cmd/go/internal/load: override Package.Root in module mode The Context.ImportDir method in the go/build package sets Package.Root to $GOPATH, if a package is inside a GOPATH workspace. The loadPackageData function keeps this value even when modules are enabled. Override Package.Root when modules are enabled, instead of just set its value when Context.ImportDir was unable to set it. Add a regression test. Fixes #46119 Change-Id: I900a33fe13a445cb771e2952d0d830f1b4a5921f Reviewed-on: https://go-review.googlesource.com/c/go/+/319209 Reviewed-by: Bryan C. Mills Trust: Bryan C. Mills Trust: Jay Conrod Run-TryBot: Bryan C. Mills TryBot-Result: Go Bot --- src/cmd/go/internal/load/pkg.go | 4 +++- .../testdata/script/list_gomod_in_gopath.txt | 23 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 src/cmd/go/testdata/script/list_gomod_in_gopath.txt diff --git a/src/cmd/go/internal/load/pkg.go b/src/cmd/go/internal/load/pkg.go index a3b96702ce5..738904865e2 100644 --- a/src/cmd/go/internal/load/pkg.go +++ b/src/cmd/go/internal/load/pkg.go @@ -849,7 +849,9 @@ func loadPackageData(ctx context.Context, path, parentPath, parentDir, parentRoo buildMode = build.ImportComment } data.p, data.err = cfg.BuildContext.ImportDir(r.dir, buildMode) - if data.p.Root == "" && cfg.ModulesEnabled { + if cfg.ModulesEnabled { + // Override data.p.Root, since ImportDir sets it to $GOPATH, if + // the module is inside $GOPATH/src. if info := modload.PackageModuleInfo(ctx, path); info != nil { data.p.Root = info.Dir } diff --git a/src/cmd/go/testdata/script/list_gomod_in_gopath.txt b/src/cmd/go/testdata/script/list_gomod_in_gopath.txt new file mode 100644 index 00000000000..064f33adc36 --- /dev/null +++ b/src/cmd/go/testdata/script/list_gomod_in_gopath.txt @@ -0,0 +1,23 @@ +# Issue 46119 + +# When a module is inside a GOPATH workspace, Package.Root should be set to +# Module.Dir instead of $GOPATH/src. + +env GOPATH=$WORK/tmp +cd $WORK/tmp/src/test + +go list -f {{.Root}} +stdout ^$PWD$ + +# Were we really inside a GOPATH workspace? +env GO111MODULE=off +go list -f {{.Root}} +stdout ^$WORK/tmp$ + +-- $WORK/tmp/src/test/go.mod -- +module test + +-- $WORK/tmp/src/test/main.go -- +package main + +func main() {} From 3d324f127dbb916f38d7476e9c4ff106e5d54f99 Mon Sep 17 00:00:00 2001 From: Michael Fraenkel Date: Thu, 13 May 2021 09:41:45 -0600 Subject: [PATCH 024/100] net/http: prevent infinite wait during TestMissingStatusNoPanic If the client request never makes it to the server, the outstanding accept is never broken. Change the test to always close the listening socket when the client request completes. Updates #45358 Change-Id: I744a91dfa11704e7e528163d7669c394e90456dc Reviewed-on: https://go-review.googlesource.com/c/go/+/319275 Trust: Heschi Kreinick Reviewed-by: Bryan C. Mills --- src/net/http/transport_test.go | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/src/net/http/transport_test.go b/src/net/http/transport_test.go index 5b6a5aa9925..dcaacece617 100644 --- a/src/net/http/transport_test.go +++ b/src/net/http/transport_test.go @@ -5322,7 +5322,6 @@ func TestMissingStatusNoPanic(t *testing.T) { ln := newLocalListener(t) addr := ln.Addr().String() - shutdown := make(chan bool, 1) done := make(chan bool) fullAddrURL := fmt.Sprintf("http://%s", addr) raw := "HTTP/1.1 400\r\n" + @@ -5334,10 +5333,7 @@ func TestMissingStatusNoPanic(t *testing.T) { "Aloha Olaa" go func() { - defer func() { - ln.Close() - close(done) - }() + defer close(done) conn, _ := ln.Accept() if conn != nil { @@ -5368,7 +5364,7 @@ func TestMissingStatusNoPanic(t *testing.T) { t.Errorf("got=%v want=%q", err, want) } - close(shutdown) + ln.Close() <-done } From 02699f810a05215060ba2181f394d551819ad7d4 Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Thu, 13 May 2021 18:19:42 -0400 Subject: [PATCH 025/100] runtime: mark osyield nosplit on OpenBSD osyield is called in code paths that are not allowed to split stack, e.g. casgstatus called from entersyscall/exitsyscall. It is nosplit on all other platforms. Mark it nosplit on OpenBSD as well. Change-Id: I3fed5d7f58b3d50610beca6eed2c7e902b8ec52c Reviewed-on: https://go-review.googlesource.com/c/go/+/319969 Trust: Cherry Mui Run-TryBot: Cherry Mui TryBot-Result: Go Bot Reviewed-by: Joel Sing --- src/runtime/sys_openbsd1.go | 1 + 1 file changed, 1 insertion(+) diff --git a/src/runtime/sys_openbsd1.go b/src/runtime/sys_openbsd1.go index 6f9ad356d44..cb5d35879cd 100644 --- a/src/runtime/sys_openbsd1.go +++ b/src/runtime/sys_openbsd1.go @@ -23,6 +23,7 @@ func thrwakeup(ident uintptr, n int32) int32 { } func thrwakeup_trampoline() +//go:nosplit func osyield() { libcCall(unsafe.Pointer(funcPC(sched_yield_trampoline)), unsafe.Pointer(nil)) } From ce92a2023ccd77ca609126aa8a6e881c9def57f0 Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Thu, 13 May 2021 09:48:40 -0400 Subject: [PATCH 026/100] cmd/go: error out of 'go mod tidy' if the go version is newer than supported Fixes #46142 Change-Id: Ib7a0a159e53cbe476be6aa9a050add10cc750dec Reviewed-on: https://go-review.googlesource.com/c/go/+/319669 Trust: Bryan C. Mills Run-TryBot: Bryan C. Mills TryBot-Result: Go Bot Reviewed-by: Jay Conrod --- src/cmd/go/internal/modload/load.go | 8 ++- .../go/testdata/script/mod_tidy_too_new.txt | 57 +++++++++++++++++++ 2 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 src/cmd/go/testdata/script/mod_tidy_too_new.txt diff --git a/src/cmd/go/internal/modload/load.go b/src/cmd/go/internal/modload/load.go index f30ac6e0c8b..83fc7c09c37 100644 --- a/src/cmd/go/internal/modload/load.go +++ b/src/cmd/go/internal/modload/load.go @@ -922,7 +922,8 @@ func loadFromRoots(ctx context.Context, params loaderParams) *loader { } if params.GoVersion != "" { - if semver.Compare("v"+params.GoVersion, narrowAllVersionV) < 0 && !ld.UseVendorAll { + goVersionV := "v" + params.GoVersion + if semver.Compare(goVersionV, narrowAllVersionV) < 0 && !ld.UseVendorAll { // The module's go version explicitly predates the change in "all" for lazy // loading, so continue to use the older interpretation. // (If params.GoVersion is empty, we are probably not in any module at all @@ -930,6 +931,11 @@ func loadFromRoots(ctx context.Context, params loaderParams) *loader { ld.allClosesOverTests = true } + if ld.Tidy && semver.Compare(goVersionV, "v"+latestGoVersion()) > 0 { + ld.errorf("go mod tidy: go.mod file indicates go %s, but maximum supported version is %s\n", params.GoVersion, latestGoVersion()) + base.ExitIfErrors() + } + var err error ld.requirements, err = convertDepth(ctx, ld.requirements, modDepthFromGoVersion(params.GoVersion)) if err != nil { diff --git a/src/cmd/go/testdata/script/mod_tidy_too_new.txt b/src/cmd/go/testdata/script/mod_tidy_too_new.txt new file mode 100644 index 00000000000..b9c53b510da --- /dev/null +++ b/src/cmd/go/testdata/script/mod_tidy_too_new.txt @@ -0,0 +1,57 @@ +# https://golang.org/issue/46142: 'go mod tidy' should error out if the version +# in the go.mod file is newer than the most recent supported version. + +cp go.mod go.mod.orig + + +# If the go.mod file specifies an unsupported Go version, 'go mod tidy' should +# refuse to edit it: we don't know what a tidy go.mod file for that version +# would look like. + +! go mod tidy +stderr 'go mod tidy: go.mod file indicates go 2000.0, but maximum supported version is '$goversion'$' +cmp go.mod go.mod.orig + + +# The -e flag should push past the error and edit the file anyway, +# but preserve the too-high version. + +cp go.mod.orig go.mod +go mod tidy -e +stderr 'go mod tidy: go.mod file indicates go 2000.0, but maximum supported version is '$goversion'$' +cmp go.mod go.mod.tidy + + +# Explicitly switching to a supported version should suppress the error completely. + +cp go.mod.orig go.mod +go mod tidy -go=1.17 +! stderr 'maximum supported version' +go mod edit -go=1.17 go.mod.tidy +cmp go.mod go.mod.tidy + + +-- go.mod -- +module example.net/from/the/future + +go 2000.0 + +replace example.net/m v0.0.0 => ./m +-- go.mod.tidy -- +module example.net/from/the/future + +go 2000.0 + +replace example.net/m v0.0.0 => ./m + +require example.net/m v0.0.0 +-- x.go -- +package x + +import "example.net/m" +-- m/go.mod -- +module example.net/m + +go 1.17 +-- m/m.go -- +package m From bade680867c9b1eecc7b5d177ed94c455a72e50a Mon Sep 17 00:00:00 2001 From: Lynn Boger Date: Wed, 12 May 2021 12:11:03 -0500 Subject: [PATCH 027/100] runtime/cgo: fix crosscall2 on ppc64x Some uses of crosscall2 did not work on ppc64le and probably aix-ppc64. In particular, if there was a main program compiled with -buildmode=pie and used a plugin which invoked crosscall2, then failures could occur due to R2 getting set incorrectly along the way. The problem was due to R2 being saved on the caller's stack; it is now saved on the crosscall2 stack. More details can be found in the issue. This adds a testcase where the main program is built with pie and the plugin invokes crosscall2. This also changes the save of the CR bits from MOVD to MOVW as it should be. Fixes #43228 Change-Id: Ib5673e25a2ec5ee46bf9a1ffb0cb1f3ef5449086 Reviewed-on: https://go-review.googlesource.com/c/go/+/319489 Run-TryBot: Lynn Boger Reviewed-by: Cherry Mui Trust: Heschi Kreinick --- misc/cgo/testplugin/plugin_test.go | 7 +++++++ src/runtime/cgo/asm_ppc64x.s | 12 ++++++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/misc/cgo/testplugin/plugin_test.go b/misc/cgo/testplugin/plugin_test.go index 28a8c669c07..a6accc1dfbb 100644 --- a/misc/cgo/testplugin/plugin_test.go +++ b/misc/cgo/testplugin/plugin_test.go @@ -263,6 +263,13 @@ func TestIssue25756(t *testing.T) { } } +// Test with main using -buildmode=pie with plugin for issue #43228 +func TestIssue25756pie(t *testing.T) { + goCmd(t, "build", "-buildmode=plugin", "-o", "life.so", "./issue25756/plugin") + goCmd(t, "build", "-buildmode=pie", "-o", "issue25756pie.exe", "./issue25756/main.go") + run(t, "./issue25756pie.exe") +} + func TestMethod(t *testing.T) { // Exported symbol's method must be live. goCmd(t, "build", "-buildmode=plugin", "-o", "plugin.so", "./method/plugin.go") diff --git a/src/runtime/cgo/asm_ppc64x.s b/src/runtime/cgo/asm_ppc64x.s index 9dec8d04ce1..187b2d42f63 100644 --- a/src/runtime/cgo/asm_ppc64x.s +++ b/src/runtime/cgo/asm_ppc64x.s @@ -12,17 +12,20 @@ // func crosscall2(fn, a unsafe.Pointer, n int32, ctxt uintptr) // Saves C callee-saved registers and calls cgocallback with three arguments. // fn is the PC of a func(a unsafe.Pointer) function. +// The value of R2 is saved on the new stack frame, and not +// the caller's frame due to issue #43228. TEXT crosscall2(SB),NOSPLIT|NOFRAME,$0 // Start with standard C stack frame layout and linkage MOVD LR, R0 MOVD R0, 16(R1) // Save LR in caller's frame MOVW CR, R0 // Save CR in caller's frame - MOVD R0, 8(R1) - MOVD R2, 24(R1) // Save TOC in caller's frame + MOVW R0, 8(R1) BL saveregs2<>(SB) MOVDU R1, (-288-3*8-FIXED_FRAME)(R1) + // Save the caller's R2 + MOVD R2, 24(R1) // Initialize Go ABI environment BL runtime·reginit(SB) @@ -41,12 +44,13 @@ TEXT crosscall2(SB),NOSPLIT|NOFRAME,$0 MOVD R6, FIXED_FRAME+16(R1) // ctxt uintptr BL runtime·cgocallback(SB) + // Restore the caller's R2 + MOVD 24(R1), R2 ADD $(288+3*8+FIXED_FRAME), R1 BL restoreregs2<>(SB) - MOVD 24(R1), R2 - MOVD 8(R1), R0 + MOVW 8(R1), R0 MOVFL R0, $0xff MOVD 16(R1), R0 MOVD R0, LR From b1aff42900133e4fbc9b7d7c1af13c77e4f647b0 Mon Sep 17 00:00:00 2001 From: Jay Conrod Date: Mon, 10 May 2021 17:19:50 -0400 Subject: [PATCH 028/100] cmd/go: don't print 'go get' deprecation notices in the main module If a user runs 'go get example.com/cmd' for a package in the main module, it's more likely they intend to fill in missing dependencies for that package (especially with -u). If the intent were only to build and install, 'go install example.com/cmd' would be a better choice. For #43684 Resolving a comment on CL 305670. Change-Id: I5c80ffdcdb3425b448f2f49cc20b07a18cb2bbe9 Reviewed-on: https://go-review.googlesource.com/c/go/+/318570 Trust: Jay Conrod Run-TryBot: Jay Conrod TryBot-Result: Go Bot Reviewed-by: Bryan C. Mills --- src/cmd/go/internal/modget/get.go | 8 +++---- .../script/mod_get_deprecate_install.txt | 21 +++++++++++++++++-- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/src/cmd/go/internal/modget/get.go b/src/cmd/go/internal/modget/get.go index 3a24b6a2f7e..2a7fe5226fd 100644 --- a/src/cmd/go/internal/modget/get.go +++ b/src/cmd/go/internal/modget/get.go @@ -386,14 +386,14 @@ func runGet(ctx context.Context, cmd *base.Command, args []string) { } load.CheckPackageErrors(pkgs) - haveExe := false + haveExternalExe := false for _, pkg := range pkgs { - if pkg.Name == "main" { - haveExe = true + if pkg.Name == "main" && pkg.Module != nil && pkg.Module.Path != modload.Target.Path { + haveExternalExe = true break } } - if haveExe { + if haveExternalExe { fmt.Fprint(os.Stderr, "go get: installing executables with 'go get' in module mode is deprecated.") var altMsg string if modload.HasModRoot() { diff --git a/src/cmd/go/testdata/script/mod_get_deprecate_install.txt b/src/cmd/go/testdata/script/mod_get_deprecate_install.txt index d832b5f2e80..63cd27a42d2 100644 --- a/src/cmd/go/testdata/script/mod_get_deprecate_install.txt +++ b/src/cmd/go/testdata/script/mod_get_deprecate_install.txt @@ -7,16 +7,33 @@ go get example.com/cmd/a stderr '^go get: installing executables with ''go get'' in module mode is deprecated.$' stderr 'Use ''go install pkg@version'' instead.' - -go mod init m +cp go.mod.orig go.mod # 'go get' inside a module with a non-main package does not print a message. # This will stop building in the future, but it's the command we want to use. go get rsc.io/quote ! stderr deprecated +cp go.mod.orig go.mod # 'go get' inside a module with an executable prints a different # deprecation message. go get example.com/cmd/a stderr '^go get: installing executables with ''go get'' in module mode is deprecated.$' stderr 'To adjust and download dependencies of the current module, use ''go get -d''' +cp go.mod.orig go.mod + +# 'go get' should not print a warning for a main package inside the main module. +# The intent is most likely to update the dependencies of that package. +# 'go install' would be used otherwise. +go get m +! stderr . +cp go.mod.orig go.mod + +-- go.mod.orig -- +module m + +go 1.17 +-- main.go -- +package main + +func main() {} From b9b2bed8933a467dcc48eedeec83dfea7ff3148a Mon Sep 17 00:00:00 2001 From: "Andrew G. Morgan" Date: Wed, 12 May 2021 20:41:26 -0700 Subject: [PATCH 029/100] syscall: some containers may fail syscall.TestSetuidEtc The test previously had the hardcoded assumption that /proc/self/status files had "Groups:" lines containing numerical IDs in ascending order. Because of the possibility of non-monotonic ordering of GIDs in user namespaces, this assumption was not universally true for all /proc/self/gid_map setups. To ensure this test can pass in those setups, sanity check failed "Groups:" line matches with a string sorted version of the expected values. (For the test cases here, numerical and string sorted order are guaranteed to match.) Fixes #46145 Change-Id: Ia060e80b123604bc394a15c02582fc406f944d36 Reviewed-on: https://go-review.googlesource.com/c/go/+/319591 Run-TryBot: Ian Lance Taylor TryBot-Result: Go Bot Reviewed-by: Ian Lance Taylor Trust: Tobias Klauser --- misc/cgo/test/issue1435.go | 21 +++++++++++++++++---- src/syscall/syscall_linux_test.go | 21 +++++++++++++++++---- 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/misc/cgo/test/issue1435.go b/misc/cgo/test/issue1435.go index cf34ce8db6c..92c6b998465 100644 --- a/misc/cgo/test/issue1435.go +++ b/misc/cgo/test/issue1435.go @@ -9,6 +9,7 @@ package cgotest import ( "fmt" "os" + "sort" "strings" "syscall" "testing" @@ -105,11 +106,23 @@ func compareStatus(filter, expect string) error { // "Pid:\t". } if strings.HasPrefix(line, filter) { - if line != expected { - return fmt.Errorf("%q got:%q want:%q (bad) [pid=%d file:'%s' %v]\n", tf, line, expected, pid, string(d), expectedProc) + if line == expected { + foundAThread = true + break } - foundAThread = true - break + if filter == "Groups:" && strings.HasPrefix(line, "Groups:\t") { + // https://github.com/golang/go/issues/46145 + // Containers don't reliably output this line in sorted order so manually sort and compare that. + a := strings.Split(line[8:], " ") + sort.Strings(a) + got := strings.Join(a, " ") + if got == expected[8:] { + foundAThread = true + break + } + + } + return fmt.Errorf("%q got:%q want:%q (bad) [pid=%d file:'%s' %v]\n", tf, line, expected, pid, string(d), expectedProc) } } } diff --git a/src/syscall/syscall_linux_test.go b/src/syscall/syscall_linux_test.go index adeb7c9ebbf..442dc9f10eb 100644 --- a/src/syscall/syscall_linux_test.go +++ b/src/syscall/syscall_linux_test.go @@ -14,6 +14,7 @@ import ( "os/signal" "path/filepath" "runtime" + "sort" "strconv" "strings" "syscall" @@ -583,11 +584,23 @@ func compareStatus(filter, expect string) error { // "Pid:\t". } if strings.HasPrefix(line, filter) { - if line != expected { - return fmt.Errorf("%q got:%q want:%q (bad) [pid=%d file:'%s' %v]\n", tf, line, expected, pid, string(d), expectedProc) + if line == expected { + foundAThread = true + break } - foundAThread = true - break + if filter == "Groups:" && strings.HasPrefix(line, "Groups:\t") { + // https://github.com/golang/go/issues/46145 + // Containers don't reliably output this line in sorted order so manually sort and compare that. + a := strings.Split(line[8:], " ") + sort.Strings(a) + got := strings.Join(a, " ") + if got == expected[8:] { + foundAThread = true + break + } + + } + return fmt.Errorf("%q got:%q want:%q (bad) [pid=%d file:'%s' %v]\n", tf, line, expected, pid, string(d), expectedProc) } } } From a2c07a9a1a445c28fa4db9bd1472b28cad3ca818 Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Mon, 17 May 2021 12:18:12 +0200 Subject: [PATCH 030/100] all: update golang.org/x/net to latest To pull in CL 318309. For #41184 Change-Id: I99adb0478e71dbd72e13551a87ed09eae2a0ef2c Reviewed-on: https://go-review.googlesource.com/c/go/+/320312 Trust: Tobias Klauser Run-TryBot: Tobias Klauser TryBot-Result: Go Bot Reviewed-by: Ian Lance Taylor --- src/go.mod | 2 +- src/go.sum | 4 ++-- src/vendor/golang.org/x/net/route/empty.s | 1 + src/vendor/modules.txt | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/go.mod b/src/go.mod index a3ceb05890e..93ff2d8d3c1 100644 --- a/src/go.mod +++ b/src/go.mod @@ -4,7 +4,7 @@ go 1.17 require ( golang.org/x/crypto v0.0.0-20210503195802-e9a32991a82e - golang.org/x/net v0.0.0-20210505024714-0287a6fb4125 + golang.org/x/net v0.0.0-20210510120150-4163338589ed golang.org/x/sys v0.0.0-20210503173754-0981d6026fa6 // indirect golang.org/x/text v0.3.7-0.20210503195748-5c7c50ebbd4f // indirect ) diff --git a/src/go.sum b/src/go.sum index 27513a350dd..1390ce6d458 100644 --- a/src/go.sum +++ b/src/go.sum @@ -1,7 +1,7 @@ golang.org/x/crypto v0.0.0-20210503195802-e9a32991a82e h1:8foAy0aoO5GkqCvAEJ4VC4P3zksTg4X4aJCDpZzmgQI= golang.org/x/crypto v0.0.0-20210503195802-e9a32991a82e/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= -golang.org/x/net v0.0.0-20210505024714-0287a6fb4125 h1:Ugb8sMTWuWRC3+sz5WeN/4kejDx9BvIwnPUiJBjJE+8= -golang.org/x/net v0.0.0-20210505024714-0287a6fb4125/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210510120150-4163338589ed h1:p9UgmWI9wKpfYmgaV/IZKGdXc5qEK45tDwwwDyjS26I= +golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/sys v0.0.0-20210503173754-0981d6026fa6 h1:cdsMqa2nXzqlgs183pHxtvoVwU7CyzaCTAUOg94af4c= golang.org/x/sys v0.0.0-20210503173754-0981d6026fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/text v0.3.7-0.20210503195748-5c7c50ebbd4f h1:yQJrRE0hDxDFmZLlRaw+3vusO4fwNHgHIjUOMO7bHYI= diff --git a/src/vendor/golang.org/x/net/route/empty.s b/src/vendor/golang.org/x/net/route/empty.s index bff0231c7d5..90ab4ca3d8e 100644 --- a/src/vendor/golang.org/x/net/route/empty.s +++ b/src/vendor/golang.org/x/net/route/empty.s @@ -2,6 +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 && go1.12 // +build darwin,go1.12 // This exists solely so we can linkname in symbols from syscall. diff --git a/src/vendor/modules.txt b/src/vendor/modules.txt index 5b939af60db..1b850342a5a 100644 --- a/src/vendor/modules.txt +++ b/src/vendor/modules.txt @@ -8,7 +8,7 @@ golang.org/x/crypto/curve25519 golang.org/x/crypto/hkdf golang.org/x/crypto/internal/subtle golang.org/x/crypto/poly1305 -# golang.org/x/net v0.0.0-20210505024714-0287a6fb4125 +# golang.org/x/net v0.0.0-20210510120150-4163338589ed ## explicit; go 1.17 golang.org/x/net/dns/dnsmessage golang.org/x/net/http/httpguts From bfe3573d58d7c49c4d58e0ab392eb0b5a660d262 Mon Sep 17 00:00:00 2001 From: Rob Findley Date: Mon, 17 May 2021 16:11:51 -0400 Subject: [PATCH 031/100] go/token: correct the interval notation used in some panic messages Fix an apparent typo for the right-hand bound in a couple panic messages, where '[' was used instead of ']'. Fixes #46215 Change-Id: Ie419c404ca72ed085a83a2c38ea1a5d6ed326cca Reviewed-on: https://go-review.googlesource.com/c/go/+/320510 Trust: Robert Findley Trust: Robert Griesemer Run-TryBot: Robert Findley TryBot-Result: Go Bot Reviewed-by: Robert Griesemer --- src/go/token/position.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/go/token/position.go b/src/go/token/position.go index bbcd8b022b6..0d7982c6705 100644 --- a/src/go/token/position.go +++ b/src/go/token/position.go @@ -278,7 +278,7 @@ func (f *File) Pos(offset int) Pos { // func (f *File) Offset(p Pos) int { if int(p) < f.base || int(p) > f.base+f.size { - panic(fmt.Sprintf("invalid Pos value %d (should be in [%d, %d[)", p, f.base, f.base+f.size)) + panic(fmt.Sprintf("invalid Pos value %d (should be in [%d, %d])", p, f.base, f.base+f.size)) } return int(p) - f.base } @@ -346,7 +346,7 @@ func (f *File) position(p Pos, adjusted bool) (pos Position) { func (f *File) PositionFor(p Pos, adjusted bool) (pos Position) { if p != NoPos { if int(p) < f.base || int(p) > f.base+f.size { - panic(fmt.Sprintf("invalid Pos value %d (should be in [%d, %d[)", p, f.base, f.base+f.size)) + panic(fmt.Sprintf("invalid Pos value %d (should be in [%d, %d])", p, f.base, f.base+f.size)) } pos = f.position(p, adjusted) } From 5e191f8f4885cac105b6d7069e02c0c8d149c22c Mon Sep 17 00:00:00 2001 From: Rob Pike Date: Mon, 17 May 2021 10:30:01 +1000 Subject: [PATCH 032/100] time: rewrite the documentation for layout strings People continue to be confused by how these work. Address that by some rejiggering. Introduce a constant called Layout that both defines the time and provides a reference point for Parse and Format to refer to. We can then delete much redundancy, especially for Format's comments, but Parse tightens a bit too. Then change the way the concept of the layout string is introduced, and provide a clearer catalog of what its elements are. Fixes #38871 Change-Id: Ib967ae70c7d5798a97b865cdda1fda4daed8a99a Reviewed-on: https://go-review.googlesource.com/c/go/+/320252 Trust: Rob Pike Run-TryBot: Rob Pike TryBot-Result: Go Bot Reviewed-by: Russ Cox --- src/time/format.go | 165 +++++++++++++++++++++++---------------------- 1 file changed, 86 insertions(+), 79 deletions(-) diff --git a/src/time/format.go b/src/time/format.go index f6dc8ee621b..6040ed5aebc 100644 --- a/src/time/format.go +++ b/src/time/format.go @@ -7,58 +7,18 @@ package time import "errors" // These are predefined layouts for use in Time.Format and time.Parse. -// The reference time used in the layouts is the specific time: -// Mon Jan 2 15:04:05 MST 2006 -// which is Unix time 1136239445. Since MST is GMT-0700, -// the reference time can be thought of as +// The reference time used in these layouts is the specific time stamp: // 01/02 03:04:05PM '06 -0700 -// To define your own format, write down what the reference time would look -// like formatted your way; see the values of constants like ANSIC, -// StampMicro or Kitchen for examples. The model is to demonstrate what the -// reference time looks like so that the Format and Parse methods can apply -// the same transformation to a general time value. +// (January 2, 15:04:05, 2006, in time zone seven hours west of GMT). +// That value is recorded as the constant named Layout, listed below. As a Unix +// time, this is 1136239445. Since MST is GMT-0700, the reference would be +// printed by the Unix date command as: +// Mon Jan 2 15:04:05 MST 2006 +// It is a regrettable historic error that the date uses the American convention +// of putting the numerical month before the day. // -// Some valid layouts are invalid time values for time.Parse, due to formats -// such as _ for space padding and Z for zone information. -// -// Within the format string, an underscore _ represents a space that may be -// replaced by a digit if the following number (a day) has two digits; for -// compatibility with fixed-width Unix time formats. -// -// A decimal point followed by one or more zeros represents a fractional -// second, printed to the given number of decimal places. -// Either a comma or decimal point followed by one or more nines represents -// a fractional second, printed to the given number of decimal places, with -// trailing zeros removed. -// When parsing (only), the input may contain a fractional second -// field immediately after the seconds field, even if the layout does not -// signify its presence. In that case either a comma or a decimal point -// followed by a maximal series of digits is parsed as a fractional second. -// -// Numeric time zone offsets format as follows: -// -0700 ±hhmm -// -07:00 ±hh:mm -// -07 ±hh -// Replacing the sign in the format with a Z triggers -// the ISO 8601 behavior of printing Z instead of an -// offset for the UTC zone. Thus: -// Z0700 Z or ±hhmm -// Z07:00 Z or ±hh:mm -// Z07 Z or ±hh -// -// The recognized day of week formats are "Mon" and "Monday". -// The recognized month formats are "Jan" and "January". -// -// The formats 2, _2, and 02 are unpadded, space-padded, and zero-padded -// day of month. The formats __2 and 002 are space-padded and zero-padded -// three-character day of year; there is no unpadded day of year format. -// -// Text in the format string that is not recognized as part of the reference -// time is echoed verbatim during Format and expected to appear verbatim -// in the input to Parse. -// -// The executable example for Time.Format demonstrates the working -// of the layout string in detail and is a good reference. +// The example for Time.Format demonstrates the working of the layout string +// in detail and is a good reference. // // Note that the RFC822, RFC850, and RFC1123 formats should be applied // only to local times. Applying them to UTC times will use "UTC" as the @@ -71,7 +31,65 @@ import "errors" // permitted by the RFCs and they do accept time formats not formally defined. // The RFC3339Nano format removes trailing zeros from the seconds field // and thus may not sort correctly once formatted. +// +// Most programs can use one of the defined constants as the layout passed to +// Format or Parse. The rest of this comment can be ignored unless you are +// creating a custom layout string. +// +// To define your own format, write down what the reference time would look like +// formatted your way; see the values of constants like ANSIC, StampMicro or +// Kitchen for examples. The model is to demonstrate what the reference time +// looks like so that the Format and Parse methods can apply the same +// transformation to a general time value. +// +// Here is a summary of the components of a layout string. Each element shows by +// example the formatting of an element of the reference time. Only these values +// are recognized. Text in the layout string that is not recognized as part of +// the reference time is echoed verbatim during Format and expected to appear +// verbatim in the input to Parse. +// +// Year: "2006" "06" +// Month: "Jan" "January" +// Textual day of the week: "Mon" "Monday" +// Numeric day of the month: "2" "_2" "02" +// Numeric day of the year: "__2" "002" +// Hour: "15" "3" "03" (PM or AM) +// Minute: "4" "04" +// Second: "5" "05" +// AM/PM mark: "PM" +// +// Numeric time zone offsets format as follows: +// "-0700" ±hhmm +// "-07:00" ±hh:mm +// "-07" ±hh +// Replacing the sign in the format with a Z triggers +// the ISO 8601 behavior of printing Z instead of an +// offset for the UTC zone. Thus: +// "Z0700" Z or ±hhmm +// "Z07:00" Z or ±hh:mm +// "Z07" Z or ±hh +// +// Within the format string, the underscores in "_2" and "__2" represent spaces +// that may be replaced by digits if the following number has multiple digits, +// for compatibility with fixed-width Unix time formats. A leading zero represents +// a zero-padded value. +// +// The formats and 002 are space-padded and zero-padded +// three-character day of year; there is no unpadded day of year format. +// +// A decimal point followed by one or more zeros represents a fractional +// second, printed to the given number of decimal places. +// Either a comma or decimal point followed by one or more nines represents +// a fractional second, printed to the given number of decimal places, with +// trailing zeros removed. +// For example "15:04:05,000" or "15:04:05.000" formats or parses with +// millisecond precision. +// +// Some valid layouts are invalid time values for time.Parse, due to formats +// such as _ for space padding and Z for zone information. +// const ( + Layout = "01/02 03:04:05PM '06 -0700" // The reference time, in numerical order. ANSIC = "Mon Jan _2 15:04:05 2006" UnixDate = "Mon Jan _2 15:04:05 MST 2006" RubyDate = "Mon Jan 02 15:04:05 -0700 2006" @@ -531,23 +549,12 @@ func (t Time) GoString() string { return string(buf) } -// Format returns a textual representation of the time value formatted -// according to layout, which defines the format by showing how the reference -// time, defined to be -// Mon Jan 2 15:04:05 -0700 MST 2006 -// would be displayed if it were the value; it serves as an example of the -// desired output. The same display rules will then be applied to the time -// value. +// Format returns a textual representation of the time value formatted according +// to the layout defined by the argument. See the documentation for the +// constant called Layout to see how to represent the layout format. // -// A fractional second is represented by adding either a comma or a -// period and zeros to the end of the seconds section of layout string, -// as in "15:04:05,000" or "15:04:05.000" to format a time stamp with -// millisecond precision. -// -// Predefined layouts ANSIC, UnixDate, RFC3339 and others describe standard -// and convenient representations of the reference time. For more information -// about the formats and the definition of the reference time, see the -// documentation for ANSIC and the other constants defined by this package. +// The executable example for Time.Format demonstrates the working +// of the layout string in detail and is a good reference. func (t Time) Format(layout string) string { const bufSize = 64 var b []byte @@ -855,21 +862,19 @@ func skip(value, prefix string) (string, error) { } // Parse parses a formatted string and returns the time value it represents. -// The layout defines the format by showing how the reference time, -// defined to be -// Mon Jan 2 15:04:05 -0700 MST 2006 -// would be interpreted if it were the value; it serves as an example of -// the input format. The same interpretation will then be made to the -// input string. +// See the documentation for the constant called Layout to see how to +// represent the format. The second argument must be parseable using +// the format string (layout) provided as the first argument. // -// Predefined layouts ANSIC, UnixDate, RFC3339 and others describe standard -// and convenient representations of the reference time. For more information -// about the formats and the definition of the reference time, see the -// documentation for ANSIC and the other constants defined by this package. -// Also, the executable example for Time.Format demonstrates the working -// of the layout string in detail and is a good reference. +// The example for Time.Format demonstrates the working of the layout string +// in detail and is a good reference. // -// Elements omitted from the value are assumed to be zero or, when +// When parsing (only), the input may contain a fractional second +// field immediately after the seconds field, even if the layout does not +// signify its presence. In that case either a comma or a decimal point +// followed by a maximal series of digits is parsed as a fractional second. +// +// Elements omitted from the layout are assumed to be zero or, when // zero is impossible, one, so parsing "3:04pm" returns the time // corresponding to Jan 1, year 0, 15:04:00 UTC (note that because the year is // 0, this time is before the zero Time). @@ -879,6 +884,8 @@ func skip(value, prefix string) (string, error) { // For layouts specifying the two-digit year 06, a value NN >= 69 will be treated // as 19NN and a value NN < 69 will be treated as 20NN. // +// The remainder of this comment describes the handling of time zones. +// // In the absence of a time zone indicator, Parse returns a time in UTC. // // When parsing a time with a zone offset like -0700, if the offset corresponds From 8b0901fd32aa9c29a1fa4ed8cd517914920a1509 Mon Sep 17 00:00:00 2001 From: Jeff Widman Date: Tue, 18 May 2021 06:09:20 +0000 Subject: [PATCH 033/100] doc/go1.17: fix typo "avoding" -> "avoiding" Change-Id: Ice4a6e7ec8175caf3f049ac1ca39929059f90e9c GitHub-Last-Rev: a2d59d55511ac7825cbeca6651a79b1060d90de3 GitHub-Pull-Request: golang/go#46227 Reviewed-on: https://go-review.googlesource.com/c/go/+/320729 Reviewed-by: Keith Randall Reviewed-by: Alberto Donizetti Trust: Alberto Donizetti --- doc/go1.17.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/go1.17.html b/doc/go1.17.html index cf856a1e735..4b2f4bce796 100644 --- a/doc/go1.17.html +++ b/doc/go1.17.html @@ -60,7 +60,7 @@ Do not send CLs removing the interior tags from such phrases.

If a module specifies go 1.17 or higher in its go.mod file, its transitive requirements are now loaded lazily, - avoding the need to download or read go.mod files for + avoiding the need to download or read go.mod files for otherwise-irrelevant dependencies. To support lazy loading, in Go 1.17 modules the go command maintains explicit requirements in the go.mod file for every dependency that provides any package From 690a8c3fb136431d4f22894c545ea99278758570 Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Thu, 13 May 2021 19:22:57 -0400 Subject: [PATCH 034/100] make.bash: fix misuse of continue Apparently, in bash, the "continue" keyword can only be used inside of a loop, not in an if block. If readelf exists but $CC does not, make.bash emits a warning: ./make.bash: line 135: continue: only meaningful in a `for', `while', or `until' loop Change it to a conditional. Change-Id: I00a0940ed99bc0c565094e506705961b6b3d362e Reviewed-on: https://go-review.googlesource.com/c/go/+/320170 Trust: Cherry Mui Run-TryBot: Cherry Mui TryBot-Result: Go Bot Reviewed-by: Ian Lance Taylor Reviewed-by: Cuong Manh Le --- src/make.bash | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/make.bash b/src/make.bash index 3d1b0c87e75..4fb13f62758 100755 --- a/src/make.bash +++ b/src/make.bash @@ -132,10 +132,11 @@ fi # Test which linker/loader our system is using if type readelf >/dev/null 2>&1; then - echo "int main() { return 0; }" | ${CC:-cc} -o ./test-musl-ldso -x c - || continue - LDSO=$(readelf -l ./test-musl-ldso | grep 'interpreter:' | sed -e 's/^.*interpreter: \(.*\)[]]/\1/') >/dev/null 2>&1 - [ -z "$LDSO" ] || export GO_LDSO="$LDSO" - rm -f ./test-musl-ldso + if echo "int main() { return 0; }" | ${CC:-cc} -o ./test-musl-ldso -x c - >/dev/null 2>&1; then + LDSO=$(readelf -l ./test-musl-ldso | grep 'interpreter:' | sed -e 's/^.*interpreter: \(.*\)[]]/\1/') >/dev/null 2>&1 + [ -z "$LDSO" ] || export GO_LDSO="$LDSO" + rm -f ./test-musl-ldso + fi fi # Clean old generated file that will cause problems in the build. From 048cb4ceee652e358d84fbca260fc93d7a0dfbe3 Mon Sep 17 00:00:00 2001 From: Roland Shoemaker Date: Mon, 10 May 2021 09:59:07 -0700 Subject: [PATCH 035/100] crypto/x509: remove duplicate import Change-Id: I86742ae7aa4ff49a38f8e3bc1d64fb223feae73e Reviewed-on: https://go-review.googlesource.com/c/go/+/318409 Trust: Roland Shoemaker Trust: Katie Hockman Run-TryBot: Roland Shoemaker TryBot-Result: Go Bot Reviewed-by: Katie Hockman --- src/crypto/x509/parser.go | 115 +++++++++++++++++++------------------- 1 file changed, 57 insertions(+), 58 deletions(-) diff --git a/src/crypto/x509/parser.go b/src/crypto/x509/parser.go index 578227ab8eb..3d51ddd7f57 100644 --- a/src/crypto/x509/parser.go +++ b/src/crypto/x509/parser.go @@ -24,7 +24,6 @@ import ( "unicode/utf8" "golang.org/x/crypto/cryptobyte" - cbasn1 "golang.org/x/crypto/cryptobyte/asn1" cryptobyte_asn1 "golang.org/x/crypto/cryptobyte/asn1" ) @@ -55,23 +54,23 @@ func isPrintable(b byte) bool { // UTF8String, BMPString, and IA5String. This is mostly copied from the // respective encoding/asn1.parse... methods, rather than just increasing // the API surface of that package. -func parseASN1String(tag cbasn1.Tag, value []byte) (string, error) { +func parseASN1String(tag cryptobyte_asn1.Tag, value []byte) (string, error) { switch tag { - case cbasn1.T61String: + case cryptobyte_asn1.T61String: return string(value), nil - case cbasn1.PrintableString: + case cryptobyte_asn1.PrintableString: for _, b := range value { if !isPrintable(b) { return "", errors.New("invalid PrintableString") } } return string(value), nil - case cbasn1.UTF8String: + case cryptobyte_asn1.UTF8String: if !utf8.Valid(value) { return "", errors.New("invalid UTF-8 string") } return string(value), nil - case cbasn1.Tag(asn1.TagBMPString): + case cryptobyte_asn1.Tag(asn1.TagBMPString): if len(value)%2 != 0 { return "", errors.New("invalid BMPString") } @@ -88,7 +87,7 @@ func parseASN1String(tag cbasn1.Tag, value []byte) (string, error) { } return string(utf16.Decode(s)), nil - case cbasn1.IA5String: + case cryptobyte_asn1.IA5String: s := string(value) if isIA5String(s) != nil { return "", errors.New("invalid IA5String") @@ -101,7 +100,7 @@ func parseASN1String(tag cbasn1.Tag, value []byte) (string, error) { // parseName parses a DER encoded Name as defined in RFC 5280. We may // want to export this function in the future for use in crypto/tls. func parseName(raw cryptobyte.String) (*pkix.RDNSequence, error) { - if !raw.ReadASN1(&raw, cbasn1.SEQUENCE) { + if !raw.ReadASN1(&raw, cryptobyte_asn1.SEQUENCE) { return nil, errors.New("x509: invalid RDNSequence") } @@ -109,12 +108,12 @@ func parseName(raw cryptobyte.String) (*pkix.RDNSequence, error) { for !raw.Empty() { var rdnSet pkix.RelativeDistinguishedNameSET var set cryptobyte.String - if !raw.ReadASN1(&set, cbasn1.SET) { + if !raw.ReadASN1(&set, cryptobyte_asn1.SET) { return nil, errors.New("x509: invalid RDNSequence") } for !set.Empty() { var atav cryptobyte.String - if !set.ReadASN1(&atav, cbasn1.SEQUENCE) { + if !set.ReadASN1(&atav, cryptobyte_asn1.SEQUENCE) { return nil, errors.New("x509: invalid RDNSequence: invalid attribute") } var attr pkix.AttributeTypeAndValue @@ -122,7 +121,7 @@ func parseName(raw cryptobyte.String) (*pkix.RDNSequence, error) { return nil, errors.New("x509: invalid RDNSequence: invalid attribute type") } var rawValue cryptobyte.String - var valueTag cbasn1.Tag + var valueTag cryptobyte_asn1.Tag if !atav.ReadAnyASN1(&rawValue, &valueTag) { return nil, errors.New("x509: invalid RDNSequence: invalid attribute value") } @@ -149,7 +148,7 @@ func parseAI(der cryptobyte.String) (pkix.AlgorithmIdentifier, error) { return ai, nil } var params cryptobyte.String - var tag cbasn1.Tag + var tag cryptobyte_asn1.Tag if !der.ReadAnyASN1Element(¶ms, &tag) { return ai, errors.New("x509: malformed parameters") } @@ -162,11 +161,11 @@ func parseValidity(der cryptobyte.String) (time.Time, time.Time, error) { extract := func() (time.Time, error) { var t time.Time switch { - case der.PeekASN1Tag(cbasn1.UTCTime): + case der.PeekASN1Tag(cryptobyte_asn1.UTCTime): // TODO(rolandshoemaker): once #45411 is fixed, the following code // should be replaced with a call to der.ReadASN1UTCTime. var utc cryptobyte.String - if !der.ReadASN1(&utc, cbasn1.UTCTime) { + if !der.ReadASN1(&utc, cryptobyte_asn1.UTCTime) { return t, errors.New("x509: malformed UTCTime") } s := string(utc) @@ -190,7 +189,7 @@ func parseValidity(der cryptobyte.String) (time.Time, time.Time, error) { // UTCTime only encodes times prior to 2050. See https://tools.ietf.org/html/rfc5280#section-4.1.2.5.1 t = t.AddDate(-100, 0, 0) } - case der.PeekASN1Tag(cbasn1.GeneralizedTime): + case der.PeekASN1Tag(cryptobyte_asn1.GeneralizedTime): if !der.ReadASN1GeneralizedTime(&t) { return t, errors.New("x509: malformed GeneralizedTime") } @@ -217,13 +216,13 @@ func parseExtension(der cryptobyte.String) (pkix.Extension, error) { if !der.ReadASN1ObjectIdentifier(&ext.Id) { return ext, errors.New("x509: malformed extention OID field") } - if der.PeekASN1Tag(cbasn1.BOOLEAN) { + if der.PeekASN1Tag(cryptobyte_asn1.BOOLEAN) { if !der.ReadASN1Boolean(&ext.Critical) { return ext, errors.New("x509: malformed extention critical field") } } var val cryptobyte.String - if !der.ReadASN1(&val, cbasn1.OCTET_STRING) { + if !der.ReadASN1(&val, cryptobyte_asn1.OCTET_STRING) { return ext, errors.New("x509: malformed extention value field") } ext.Value = val @@ -241,7 +240,7 @@ func parsePublicKey(algo PublicKeyAlgorithm, keyData *publicKeyInfo) (interface{ } p := &pkcs1PublicKey{N: new(big.Int)} - if !der.ReadASN1(&der, cbasn1.SEQUENCE) { + if !der.ReadASN1(&der, cryptobyte_asn1.SEQUENCE) { return nil, errors.New("x509: invalid RSA public key") } if !der.ReadASN1Integer(p.N) { @@ -307,7 +306,7 @@ func parsePublicKey(algo PublicKeyAlgorithm, keyData *publicKeyInfo) (interface{ }, } paramsDer := cryptobyte.String(keyData.Algorithm.Parameters.FullBytes) - if !paramsDer.ReadASN1(¶msDer, cbasn1.SEQUENCE) || + if !paramsDer.ReadASN1(¶msDer, cryptobyte_asn1.SEQUENCE) || !paramsDer.ReadASN1Integer(pub.Parameters.P) || !paramsDer.ReadASN1Integer(pub.Parameters.Q) || !paramsDer.ReadASN1Integer(pub.Parameters.G) { @@ -340,16 +339,16 @@ func parseKeyUsageExtension(der cryptobyte.String) (KeyUsage, error) { func parseBasicConstraintsExtension(der cryptobyte.String) (bool, int, error) { var isCA bool - if !der.ReadASN1(&der, cbasn1.SEQUENCE) { + if !der.ReadASN1(&der, cryptobyte_asn1.SEQUENCE) { return false, 0, errors.New("x509: invalid basic constraints a") } - if der.PeekASN1Tag(cbasn1.BOOLEAN) { + if der.PeekASN1Tag(cryptobyte_asn1.BOOLEAN) { if !der.ReadASN1Boolean(&isCA) { return false, 0, errors.New("x509: invalid basic constraints b") } } maxPathLen := -1 - if !der.Empty() && der.PeekASN1Tag(cbasn1.INTEGER) { + if !der.Empty() && der.PeekASN1Tag(cryptobyte_asn1.INTEGER) { if !der.ReadASN1Integer(&maxPathLen) { return false, 0, errors.New("x509: invalid basic constraints c") } @@ -360,12 +359,12 @@ func parseBasicConstraintsExtension(der cryptobyte.String) (bool, int, error) { } func forEachSAN(der cryptobyte.String, callback func(tag int, data []byte) error) error { - if !der.ReadASN1(&der, cbasn1.SEQUENCE) { + if !der.ReadASN1(&der, cryptobyte_asn1.SEQUENCE) { return errors.New("x509: invalid subject alternative names") } for !der.Empty() { var san cryptobyte.String - var tag cbasn1.Tag + var tag cryptobyte_asn1.Tag if !der.ReadAnyASN1(&san, &tag) { return errors.New("x509: invalid subject alternative name") } @@ -425,7 +424,7 @@ func parseSANExtension(der cryptobyte.String) (dnsNames, emailAddresses []string func parseExtKeyUsageExtension(der cryptobyte.String) ([]ExtKeyUsage, []asn1.ObjectIdentifier, error) { var extKeyUsages []ExtKeyUsage var unknownUsages []asn1.ObjectIdentifier - if !der.ReadASN1(&der, cbasn1.SEQUENCE) { + if !der.ReadASN1(&der, cryptobyte_asn1.SEQUENCE) { return nil, nil, errors.New("x509: invalid extended key usages") } for !der.Empty() { @@ -444,12 +443,12 @@ func parseExtKeyUsageExtension(der cryptobyte.String) ([]ExtKeyUsage, []asn1.Obj func parseCertificatePoliciesExtension(der cryptobyte.String) ([]asn1.ObjectIdentifier, error) { var oids []asn1.ObjectIdentifier - if !der.ReadASN1(&der, cbasn1.SEQUENCE) { + if !der.ReadASN1(&der, cryptobyte_asn1.SEQUENCE) { return nil, errors.New("x509: invalid certificate policies") } for !der.Empty() { var cp cryptobyte.String - if !der.ReadASN1(&cp, cbasn1.SEQUENCE) { + if !der.ReadASN1(&cp, cryptobyte_asn1.SEQUENCE) { return nil, errors.New("x509: invalid certificate policies") } var oid asn1.ObjectIdentifier @@ -697,31 +696,31 @@ func processExtensions(out *Certificate) error { // fullName [0] GeneralNames, // nameRelativeToCRLIssuer [1] RelativeDistinguishedName } val := cryptobyte.String(e.Value) - if !val.ReadASN1(&val, cbasn1.SEQUENCE) { + if !val.ReadASN1(&val, cryptobyte_asn1.SEQUENCE) { return errors.New("x509: invalid CRL distribution points") } for !val.Empty() { var dpDER cryptobyte.String - if !val.ReadASN1(&dpDER, cbasn1.SEQUENCE) { + if !val.ReadASN1(&dpDER, cryptobyte_asn1.SEQUENCE) { return errors.New("x509: invalid CRL distribution point") } var dpNameDER cryptobyte.String var dpNamePresent bool - if !dpDER.ReadOptionalASN1(&dpNameDER, &dpNamePresent, cbasn1.Tag(0).Constructed().ContextSpecific()) { + if !dpDER.ReadOptionalASN1(&dpNameDER, &dpNamePresent, cryptobyte_asn1.Tag(0).Constructed().ContextSpecific()) { return errors.New("x509: invalid CRL distribution point") } if !dpNamePresent { continue } - if !dpNameDER.ReadASN1(&dpNameDER, cbasn1.Tag(0).Constructed().ContextSpecific()) { + if !dpNameDER.ReadASN1(&dpNameDER, cryptobyte_asn1.Tag(0).Constructed().ContextSpecific()) { return errors.New("x509: invalid CRL distribution point") } for !dpNameDER.Empty() { - if !dpNameDER.PeekASN1Tag(cbasn1.Tag(6).ContextSpecific()) { + if !dpNameDER.PeekASN1Tag(cryptobyte_asn1.Tag(6).ContextSpecific()) { break } var uri cryptobyte.String - if !dpNameDER.ReadASN1(&uri, cbasn1.Tag(6).ContextSpecific()) { + if !dpNameDER.ReadASN1(&uri, cryptobyte_asn1.Tag(6).ContextSpecific()) { return errors.New("x509: invalid CRL distribution point") } out.CRLDistributionPoints = append(out.CRLDistributionPoints, string(uri)) @@ -732,10 +731,10 @@ func processExtensions(out *Certificate) error { // RFC 5280, 4.2.1.1 val := cryptobyte.String(e.Value) var akid cryptobyte.String - if !val.ReadASN1(&akid, cbasn1.SEQUENCE) { + if !val.ReadASN1(&akid, cryptobyte_asn1.SEQUENCE) { return errors.New("x509: invalid authority key identifier") } - if !akid.ReadASN1(&akid, cbasn1.Tag(0).ContextSpecific()) { + if !akid.ReadASN1(&akid, cryptobyte_asn1.Tag(0).ContextSpecific()) { return errors.New("x509: invalid authority key identifier") } out.AuthorityKeyId = akid @@ -748,7 +747,7 @@ func processExtensions(out *Certificate) error { // RFC 5280, 4.2.1.2 val := cryptobyte.String(e.Value) var skid cryptobyte.String - if !val.ReadASN1(&skid, cbasn1.OCTET_STRING) { + if !val.ReadASN1(&skid, cryptobyte_asn1.OCTET_STRING) { return errors.New("x509: invalid subject key identifier") } out.SubjectKeyId = skid @@ -764,22 +763,22 @@ func processExtensions(out *Certificate) error { } else if e.Id.Equal(oidExtensionAuthorityInfoAccess) { // RFC 5280 4.2.2.1: Authority Information Access val := cryptobyte.String(e.Value) - if !val.ReadASN1(&val, cbasn1.SEQUENCE) { + if !val.ReadASN1(&val, cryptobyte_asn1.SEQUENCE) { return errors.New("x509: invalid authority info access") } for !val.Empty() { var aiaDER cryptobyte.String - if !val.ReadASN1(&aiaDER, cbasn1.SEQUENCE) { + if !val.ReadASN1(&aiaDER, cryptobyte_asn1.SEQUENCE) { return errors.New("x509: invalid authority info access") } var method asn1.ObjectIdentifier if !aiaDER.ReadASN1ObjectIdentifier(&method) { return errors.New("x509: invalid authority info access") } - if !aiaDER.PeekASN1Tag(cbasn1.Tag(6).ContextSpecific()) { + if !aiaDER.PeekASN1Tag(cryptobyte_asn1.Tag(6).ContextSpecific()) { continue } - if !aiaDER.ReadASN1(&aiaDER, cbasn1.Tag(6).ContextSpecific()) { + if !aiaDER.ReadASN1(&aiaDER, cryptobyte_asn1.Tag(6).ContextSpecific()) { return errors.New("x509: invalid authority info access") } switch { @@ -809,26 +808,26 @@ func parseCertificate(der []byte) (*Certificate, error) { // we read the SEQUENCE including length and tag bytes so that // we can populate Certificate.Raw, before unwrapping the // SEQUENCE so it can be operated on - if !input.ReadASN1Element(&input, cbasn1.SEQUENCE) { + if !input.ReadASN1Element(&input, cryptobyte_asn1.SEQUENCE) { return nil, errors.New("x509: malformed certificate") } cert.Raw = input - if !input.ReadASN1(&input, cbasn1.SEQUENCE) { + if !input.ReadASN1(&input, cryptobyte_asn1.SEQUENCE) { return nil, errors.New("x509: malformed certificate") } var tbs cryptobyte.String // do the same trick again as above to extract the raw // bytes for Certificate.RawTBSCertificate - if !input.ReadASN1Element(&tbs, cbasn1.SEQUENCE) { + if !input.ReadASN1Element(&tbs, cryptobyte_asn1.SEQUENCE) { return nil, errors.New("x509: malformed tbs certificate") } cert.RawTBSCertificate = tbs - if !tbs.ReadASN1(&tbs, cbasn1.SEQUENCE) { + if !tbs.ReadASN1(&tbs, cryptobyte_asn1.SEQUENCE) { return nil, errors.New("x509: malformed tbs certificate") } - if !tbs.ReadOptionalASN1Integer(&cert.Version, cbasn1.Tag(0).Constructed().ContextSpecific(), 0) { + if !tbs.ReadOptionalASN1Integer(&cert.Version, cryptobyte_asn1.Tag(0).Constructed().ContextSpecific(), 0) { return nil, errors.New("x509: malformed version") } if cert.Version < 0 { @@ -853,14 +852,14 @@ func parseCertificate(der []byte) (*Certificate, error) { cert.SerialNumber = serial var sigAISeq cryptobyte.String - if !tbs.ReadASN1(&sigAISeq, cbasn1.SEQUENCE) { + if !tbs.ReadASN1(&sigAISeq, cryptobyte_asn1.SEQUENCE) { return nil, errors.New("x509: malformed signature algorithm identifier") } // Before parsing the inner algorithm identifier, extract // the outer algorithm identifier and make sure that they // match. var outerSigAISeq cryptobyte.String - if !input.ReadASN1(&outerSigAISeq, cbasn1.SEQUENCE) { + if !input.ReadASN1(&outerSigAISeq, cryptobyte_asn1.SEQUENCE) { return nil, errors.New("x509: malformed algorithm identifier") } if !bytes.Equal(outerSigAISeq, sigAISeq) { @@ -873,7 +872,7 @@ func parseCertificate(der []byte) (*Certificate, error) { cert.SignatureAlgorithm = getSignatureAlgorithmFromAI(sigAI) var issuerSeq cryptobyte.String - if !tbs.ReadASN1Element(&issuerSeq, cbasn1.SEQUENCE) { + if !tbs.ReadASN1Element(&issuerSeq, cryptobyte_asn1.SEQUENCE) { return nil, errors.New("x509: malformed issuer") } cert.RawIssuer = issuerSeq @@ -884,7 +883,7 @@ func parseCertificate(der []byte) (*Certificate, error) { cert.Issuer.FillFromRDNSequence(issuerRDNs) var validity cryptobyte.String - if !tbs.ReadASN1(&validity, cbasn1.SEQUENCE) { + if !tbs.ReadASN1(&validity, cryptobyte_asn1.SEQUENCE) { return nil, errors.New("x509: malformed validity") } cert.NotBefore, cert.NotAfter, err = parseValidity(validity) @@ -893,7 +892,7 @@ func parseCertificate(der []byte) (*Certificate, error) { } var subjectSeq cryptobyte.String - if !tbs.ReadASN1Element(&subjectSeq, cbasn1.SEQUENCE) { + if !tbs.ReadASN1Element(&subjectSeq, cryptobyte_asn1.SEQUENCE) { return nil, errors.New("x509: malformed issuer") } cert.RawSubject = subjectSeq @@ -904,15 +903,15 @@ func parseCertificate(der []byte) (*Certificate, error) { cert.Subject.FillFromRDNSequence(subjectRDNs) var spki cryptobyte.String - if !tbs.ReadASN1Element(&spki, cbasn1.SEQUENCE) { + if !tbs.ReadASN1Element(&spki, cryptobyte_asn1.SEQUENCE) { return nil, errors.New("x509: malformed spki") } cert.RawSubjectPublicKeyInfo = spki - if !spki.ReadASN1(&spki, cbasn1.SEQUENCE) { + if !spki.ReadASN1(&spki, cryptobyte_asn1.SEQUENCE) { return nil, errors.New("x509: malformed spki") } var pkAISeq cryptobyte.String - if !spki.ReadASN1(&pkAISeq, cbasn1.SEQUENCE) { + if !spki.ReadASN1(&pkAISeq, cryptobyte_asn1.SEQUENCE) { return nil, errors.New("x509: malformed public key algorithm identifier") } pkAI, err := parseAI(pkAISeq) @@ -933,25 +932,25 @@ func parseCertificate(der []byte) (*Certificate, error) { } if cert.Version > 1 { - if !tbs.SkipOptionalASN1(cbasn1.Tag(1).Constructed().ContextSpecific()) { + if !tbs.SkipOptionalASN1(cryptobyte_asn1.Tag(1).Constructed().ContextSpecific()) { return nil, errors.New("x509: malformed issuerUniqueID") } - if !tbs.SkipOptionalASN1(cbasn1.Tag(2).Constructed().ContextSpecific()) { + if !tbs.SkipOptionalASN1(cryptobyte_asn1.Tag(2).Constructed().ContextSpecific()) { return nil, errors.New("x509: malformed subjectUniqueID") } if cert.Version == 3 { var extensions cryptobyte.String var present bool - if !tbs.ReadOptionalASN1(&extensions, &present, cbasn1.Tag(3).Constructed().ContextSpecific()) { + if !tbs.ReadOptionalASN1(&extensions, &present, cryptobyte_asn1.Tag(3).Constructed().ContextSpecific()) { return nil, errors.New("x509: malformed extensions") } if present { - if !extensions.ReadASN1(&extensions, cbasn1.SEQUENCE) { + if !extensions.ReadASN1(&extensions, cryptobyte_asn1.SEQUENCE) { return nil, errors.New("x509: malformed extensions") } for !extensions.Empty() { var extension cryptobyte.String - if !extensions.ReadASN1(&extension, cbasn1.SEQUENCE) { + if !extensions.ReadASN1(&extension, cryptobyte_asn1.SEQUENCE) { return nil, errors.New("x509: malformed extension") } ext, err := parseExtension(extension) From 6d2ef2ef2a3ed375b5c782e6c8b0f8a59c3d3c8c Mon Sep 17 00:00:00 2001 From: Than McIntosh Date: Tue, 18 May 2021 12:58:02 -0400 Subject: [PATCH 036/100] cmd/compile: don't emit inltree for closure within body of inlined func When inlining functions with closures, ensure that we don't mark the body of the closure with a src.Pos marker that reflects the inline, since this will result in the generation of an inltree table for the closure itself (as opposed to the routine that the func-with-closure was inlined into). Fixes #46234. Change-Id: I348296de6504fc4745d99adab436640f50be299a Reviewed-on: https://go-review.googlesource.com/c/go/+/320913 Reviewed-by: Cherry Mui Reviewed-by: Matthew Dempsky Run-TryBot: Cherry Mui TryBot-Result: Go Bot Trust: Than McIntosh --- src/cmd/compile/internal/inline/inl.go | 16 +++- test/closure3.dir/main.go | 8 +- test/fixedbugs/issue46234.go | 103 +++++++++++++++++++++++++ test/inline.go | 4 +- 4 files changed, 124 insertions(+), 7 deletions(-) create mode 100644 test/fixedbugs/issue46234.go diff --git a/src/cmd/compile/internal/inline/inl.go b/src/cmd/compile/internal/inline/inl.go index a6829e9835f..d6b4ced4e15 100644 --- a/src/cmd/compile/internal/inline/inl.go +++ b/src/cmd/compile/internal/inline/inl.go @@ -1124,6 +1124,10 @@ type inlsubst struct { newclofn *ir.Func fn *ir.Func // For debug -- the func that is being inlined + + // If true, then don't update source positions during substitution + // (retain old source positions). + noPosUpdate bool } // list inlines a list of nodes. @@ -1219,7 +1223,14 @@ func (subst *inlsubst) clovar(n *ir.Name) *ir.Name { // closure node. func (subst *inlsubst) closure(n *ir.ClosureExpr) ir.Node { m := ir.Copy(n) - m.SetPos(subst.updatedPos(m.Pos())) + + // Prior to the subst edit, set a flag in the inlsubst to + // indicated that we don't want to update the source positions in + // the new closure. If we do this, it will appear that the closure + // itself has things inlined into it, which is not the case. See + // issue #46234 for more details. + defer func(prev bool) { subst.noPosUpdate = prev }(subst.noPosUpdate) + subst.noPosUpdate = true ir.EditChildren(m, subst.edit) //fmt.Printf("Inlining func %v with closure into %v\n", subst.fn, ir.FuncName(ir.CurFunc)) @@ -1445,6 +1456,9 @@ func (subst *inlsubst) node(n ir.Node) ir.Node { } func (subst *inlsubst) updatedPos(xpos src.XPos) src.XPos { + if subst.noPosUpdate { + return xpos + } pos := base.Ctxt.PosTable.Pos(xpos) oldbase := pos.Base() // can be nil newbase := subst.bases[oldbase] diff --git a/test/closure3.dir/main.go b/test/closure3.dir/main.go index 2fc33753ed7..662a2e967bb 100644 --- a/test/closure3.dir/main.go +++ b/test/closure3.dir/main.go @@ -94,10 +94,10 @@ func main() { return x + 2 } y, sink = func() (func(int) int, int) { // ERROR "can inline main.func12" - return func(x int) int { // ERROR "can inline main.func12" + return func(x int) int { // ERROR "func literal does not escape" "can inline main.func12" return x + 1 }, 42 - }() // ERROR "func literal does not escape" "inlining call to main.func12" + }() // ERROR "inlining call to main.func12" if y(40) != 41 { ppanic("y(40) != 41") } @@ -109,10 +109,10 @@ func main() { return x + 2 } y, sink = func() (func(int) int, int) { // ERROR "can inline main.func13.2" - return func(x int) int { // ERROR "can inline main.func13.2" + return func(x int) int { // ERROR "func literal does not escape" "can inline main.func13.2" return x + 1 }, 42 - }() // ERROR "inlining call to main.func13.2" "func literal does not escape" + }() // ERROR "inlining call to main.func13.2" if y(40) != 41 { ppanic("y(40) != 41") } diff --git a/test/fixedbugs/issue46234.go b/test/fixedbugs/issue46234.go new file mode 100644 index 00000000000..c669cc01a60 --- /dev/null +++ b/test/fixedbugs/issue46234.go @@ -0,0 +1,103 @@ +// buildrun -t 30 + +// +build !js + +// Copyright 2021 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. + +// Ensure that runtime traceback does not infinite loop for +// the testcase below. + +package main + +import ( + "bytes" + "io/ioutil" + "log" + "os" + "os/exec" + "path/filepath" +) + +const prog = ` + +package main + +import "context" + +var gpi *int + +type nAO struct { + eE bool +} + +type NAO func(*nAO) + +func WEA() NAO { + return func(o *nAO) { o.eE = true } +} + +type R struct { + cM *CM +} + +type CM int + +type A string + +func (m *CM) NewA(ctx context.Context, cN string, nn *nAO, opts ...NAO) (*A, error) { + for _, o := range opts { + o(nn) + } + s := A("foo") + return &s, nil +} + +func (r *R) CA(ctx context.Context, cN string, nn *nAO) (*int, error) { + cA, err := r.cM.NewA(ctx, cN, nn, WEA(), WEA()) + if err == nil { + return nil, err + } + println(cA) + x := int(42) + return &x, nil +} + +func main() { + c := CM(1) + r := R{cM: &c} + var ctx context.Context + nnr := nAO{} + pi, err := r.CA(ctx, "foo", nil) + if err != nil { + panic("bad") + } + println(nnr.eE) + gpi = pi +} +` + +func main() { + dir, err := ioutil.TempDir("", "46234") + if err != nil { + log.Fatal(err) + } + defer os.RemoveAll(dir) + + file := filepath.Join(dir, "main.go") + if err := ioutil.WriteFile(file, []byte(prog), 0655); err != nil { + log.Fatalf("Write error %v", err) + } + + cmd := exec.Command("go", "run", file) + output, err := cmd.CombinedOutput() + if err == nil { + log.Fatalf("Passed, expected an error") + } + + want := []byte("segmentation violation") + if !bytes.Contains(output, want) { + log.Fatalf("Unmatched error message %q:\nin\n%s\nError: %v", want, output, err) + } +} diff --git a/test/inline.go b/test/inline.go index bc23768d016..472a941dca3 100644 --- a/test/inline.go +++ b/test/inline.go @@ -92,9 +92,9 @@ func o() int { foo := func() int { return 1 } // ERROR "can inline o.func1" "func literal does not escape" func(x int) { // ERROR "can inline o.func2" if x > 10 { - foo = func() int { return 2 } // ERROR "can inline o.func2" + foo = func() int { return 2 } // ERROR "func literal does not escape" "can inline o.func2" } - }(11) // ERROR "func literal does not escape" "inlining call to o.func2" + }(11) // ERROR "inlining call to o.func2" return foo() } From eeadce2d871358306f2a95b0cfbe809ea017932a Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Tue, 18 May 2021 11:16:38 -0400 Subject: [PATCH 037/100] go/build/constraint: fix parsing of "// +build" (with no args) "// +build" by itself was like "// +build !" - unsatisfiable. Make it so again (right now it panics). Fixes #44487. Change-Id: Iacbc1398af6f988ef011f9f438e792eb62f8f434 Reviewed-on: https://go-review.googlesource.com/c/go/+/320829 Trust: Russ Cox Run-TryBot: Russ Cox TryBot-Result: Go Bot Reviewed-by: Jay Conrod --- src/go/build/constraint/expr.go | 3 +++ src/go/build/constraint/expr_test.go | 32 ++++++++++++++++------------ 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/go/build/constraint/expr.go b/src/go/build/constraint/expr.go index 1ef707ceacf..957eb9b5279 100644 --- a/src/go/build/constraint/expr.go +++ b/src/go/build/constraint/expr.go @@ -426,6 +426,9 @@ func parsePlusBuildExpr(text string) Expr { x = or(x, y) } } + if x == nil { + x = tag("ignore") + } return x } diff --git a/src/go/build/constraint/expr_test.go b/src/go/build/constraint/expr_test.go index 4979f8b5f28..15d189012ef 100644 --- a/src/go/build/constraint/expr_test.go +++ b/src/go/build/constraint/expr_test.go @@ -216,6 +216,7 @@ var parsePlusBuildExprTests = []struct { {"!!x", tag("ignore")}, {"!x", not(tag("x"))}, {"!", tag("ignore")}, + {"", tag("ignore")}, } func TestParsePlusBuildExpr(t *testing.T) { @@ -232,19 +233,22 @@ func TestParsePlusBuildExpr(t *testing.T) { var constraintTests = []struct { in string x Expr - err error + err string }{ - {"//+build x y", or(tag("x"), tag("y")), nil}, - {"// +build x y \n", or(tag("x"), tag("y")), nil}, - {"// +build x y \n ", nil, errNotConstraint}, - {"// +build x y \nmore", nil, errNotConstraint}, - {" //+build x y", nil, errNotConstraint}, + {"//+build !", tag("ignore"), ""}, + {"//+build", tag("ignore"), ""}, + {"//+build x y", or(tag("x"), tag("y")), ""}, + {"// +build x y \n", or(tag("x"), tag("y")), ""}, + {"// +build x y \n ", nil, "not a build constraint"}, + {"// +build x y \nmore", nil, "not a build constraint"}, + {" //+build x y", nil, "not a build constraint"}, - {"//go:build x && y", and(tag("x"), tag("y")), nil}, - {"//go:build x && y\n", and(tag("x"), tag("y")), nil}, - {"//go:build x && y\n ", nil, errNotConstraint}, - {"//go:build x && y\nmore", nil, errNotConstraint}, - {" //go:build x && y", nil, errNotConstraint}, + {"//go:build x && y", and(tag("x"), tag("y")), ""}, + {"//go:build x && y\n", and(tag("x"), tag("y")), ""}, + {"//go:build x && y\n ", nil, "not a build constraint"}, + {"//go:build x && y\nmore", nil, "not a build constraint"}, + {" //go:build x && y", nil, "not a build constraint"}, + {"//go:build\n", nil, "unexpected end of expression"}, } func TestParse(t *testing.T) { @@ -252,14 +256,14 @@ func TestParse(t *testing.T) { t.Run(fmt.Sprint(i), func(t *testing.T) { x, err := Parse(tt.in) if err != nil { - if tt.err == nil { + if tt.err == "" { t.Errorf("Constraint(%q): unexpected error: %v", tt.in, err) - } else if tt.err != err { + } else if !strings.Contains(err.Error(), tt.err) { t.Errorf("Constraint(%q): error %v, want %v", tt.in, err, tt.err) } return } - if tt.err != nil { + if tt.err != "" { t.Errorf("Constraint(%q) = %v, want error %v", tt.in, x, tt.err) return } From 15a374d5c1336e9cc2f8b615477d5917e9477440 Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Tue, 18 May 2021 18:25:44 -0400 Subject: [PATCH 038/100] test: check portable error message on issue46234.go issue46234.go expects an error output "segmentation violation", which is UNIX-specific. Check for "nil pointer dereference" instead, which is emitted by the Go runtime and should work on all platforms. Should fix Windows builders. Change-Id: I3f5a66a687d43cae5eaf6a9e942b877e5a248900 Reviewed-on: https://go-review.googlesource.com/c/go/+/321072 Trust: Cherry Mui Run-TryBot: Cherry Mui TryBot-Result: Go Bot Reviewed-by: Than McIntosh --- test/fixedbugs/issue46234.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/fixedbugs/issue46234.go b/test/fixedbugs/issue46234.go index c669cc01a60..8e7eb8bf8d2 100644 --- a/test/fixedbugs/issue46234.go +++ b/test/fixedbugs/issue46234.go @@ -96,7 +96,7 @@ func main() { log.Fatalf("Passed, expected an error") } - want := []byte("segmentation violation") + want := []byte("nil pointer dereference") if !bytes.Contains(output, want) { log.Fatalf("Unmatched error message %q:\nin\n%s\nError: %v", want, output, err) } From 658b5e66ecbc41a49e6fb5aa63c5d9c804cf305f Mon Sep 17 00:00:00 2001 From: Michael Pratt Date: Tue, 18 May 2021 12:23:56 -0400 Subject: [PATCH 039/100] net: return nil UDPAddr from ReadFromUDP In cases where the socket operation has no underlying address, golang.org/cl/291509 unintentionally changed ReadFromUDP from return a nil *UDPAddr to a non-nil (but zero value) *UDPAddr. This may break callers that assume "no address" is always addr == nil, so change it back to remain nil. Fixes #46238 Change-Id: I8531e8fa16b853ed7560088eabda0b9e3e53f5be Reviewed-on: https://go-review.googlesource.com/c/go/+/320909 Trust: Michael Pratt Trust: Josh Bleecher Snyder Reviewed-by: Filippo Valsorda Reviewed-by: Josh Bleecher Snyder --- src/net/udpsock_posix.go | 3 +++ src/net/udpsock_test.go | 29 +++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/src/net/udpsock_posix.go b/src/net/udpsock_posix.go index fcfb9c004cd..96fb373ce77 100644 --- a/src/net/udpsock_posix.go +++ b/src/net/udpsock_posix.go @@ -50,6 +50,9 @@ func (c *UDPConn) readFrom(b []byte, addr *UDPAddr) (int, *UDPAddr, error) { *addr = UDPAddr{IP: sa.Addr[0:], Port: sa.Port} case *syscall.SockaddrInet6: *addr = UDPAddr{IP: sa.Addr[0:], Port: sa.Port, Zone: zoneCache.name(int(sa.ZoneId))} + default: + // No sockaddr, so don't return UDPAddr. + addr = nil } return n, addr, err } diff --git a/src/net/udpsock_test.go b/src/net/udpsock_test.go index b4000b5664d..0e8c3511c36 100644 --- a/src/net/udpsock_test.go +++ b/src/net/udpsock_test.go @@ -8,7 +8,9 @@ package net import ( + "errors" "internal/testenv" + "os" "reflect" "runtime" "testing" @@ -446,6 +448,33 @@ func TestUDPReadSizeError(t *testing.T) { } } +// TestUDPReadTimeout verifies that ReadFromUDP with timeout returns an error +// without data or an address. +func TestUDPReadTimeout(t *testing.T) { + la, err := ResolveUDPAddr("udp4", "127.0.0.1:0") + if err != nil { + t.Fatal(err) + } + c, err := ListenUDP("udp4", la) + if err != nil { + t.Fatal(err) + } + defer c.Close() + + c.SetDeadline(time.Now()) + b := make([]byte, 1) + n, addr, err := c.ReadFromUDP(b) + if !errors.Is(err, os.ErrDeadlineExceeded) { + t.Errorf("ReadFromUDP got err %v want os.ErrDeadlineExceeded", err) + } + if n != 0 { + t.Errorf("ReadFromUDP got n %d want 0", n) + } + if addr != nil { + t.Errorf("ReadFromUDP got addr %+#v want nil", addr) + } +} + func BenchmarkWriteToReadFromUDP(b *testing.B) { conn, err := ListenUDP("udp4", &UDPAddr{IP: IPv4(127, 0, 0, 1)}) if err != nil { From 6c1c055d1ea417d050503efe92c1eead0da68cef Mon Sep 17 00:00:00 2001 From: Dmitri Shuralyov Date: Tue, 18 May 2021 23:29:14 -0400 Subject: [PATCH 040/100] cmd/internal/moddeps: use filepath.SkipDir only on directories MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If a filepath.WalkFunc returns filepath.SkipDir when invoked on a non-directory file, it skips the remaining files in the containing directory.¹ CL 276272 accidentally added a code path that triggers this behavior whenever filepath.Walk reaches a non-directory file that begins with a dot, such as .gitattributes or .DS_Store, causing findGorootModules to return early without finding any modules in GOROOT. Tests that use it ceased to provide test coverage that the tree is tidy. Add an explicit check for info.IsDir in the 5 places that intend to use filepath.SkipDir to skip traversing that directory. Even paths like GOROOT/bin and GOROOT/pkg which are unlikely to be anything but a directory are worth checking, since the goal of moddeps is to take a possibly problematic GOROOT tree as input and detect problems. While the goal of findGorootModules is to find all modules in GOROOT programmatically (in case new modules are added or modified), there are 4 modules now that are quite likely to exist, so check for their presence to avoid similar regressions. (It's not hard to update this test if a well-known GOROOT module is removed or otherwise modified; but if it becomes hard we can simplify it to check for a reasonable number of modules instead.) Also fix the minor skew that has crept in since the test got disabled. ¹ This wasn't necessarily an intentional design decision, but it was found only when Go 1.4 was already out. See CL 11690 for details. Fixes #46254. Change-Id: Id55ed926f8c0094b1af923070de72bacca05996f Reviewed-on: https://go-review.googlesource.com/c/go/+/320991 Trust: Dmitri Shuralyov Run-TryBot: Dmitri Shuralyov TryBot-Result: Go Bot Reviewed-by: Bryan C. Mills Reviewed-by: Filippo Valsorda --- src/cmd/internal/moddeps/moddeps_test.go | 36 ++++-- src/go.mod | 2 +- src/go.sum | 4 +- src/net/http/h2_bundle.go | 133 ++++++++++++++++----- src/net/http/socks_bundle.go | 2 +- src/vendor/golang.org/x/sys/cpu/cpu.go | 5 +- src/vendor/golang.org/x/sys/cpu/cpu_aix.go | 1 + src/vendor/modules.txt | 2 +- 8 files changed, 137 insertions(+), 48 deletions(-) diff --git a/src/cmd/internal/moddeps/moddeps_test.go b/src/cmd/internal/moddeps/moddeps_test.go index ba574f40049..7723250468e 100644 --- a/src/cmd/internal/moddeps/moddeps_test.go +++ b/src/cmd/internal/moddeps/moddeps_test.go @@ -227,7 +227,7 @@ func makeGOROOTCopy(t *testing.T) string { if err != nil { return err } - if src == filepath.Join(runtime.GOROOT(), ".git") { + if info.IsDir() && src == filepath.Join(runtime.GOROOT(), ".git") { return filepath.SkipDir } @@ -237,9 +237,8 @@ func makeGOROOTCopy(t *testing.T) string { } dst := filepath.Join(gorootCopyDir, rel) - switch src { - case filepath.Join(runtime.GOROOT(), "bin"), - filepath.Join(runtime.GOROOT(), "pkg"): + if info.IsDir() && (src == filepath.Join(runtime.GOROOT(), "bin") || + src == filepath.Join(runtime.GOROOT(), "pkg")) { // If the OS supports symlinks, use them instead // of copying the bin and pkg directories. if err := os.Symlink(src, dst); err == nil { @@ -414,7 +413,7 @@ func findGorootModules(t *testing.T) []gorootModule { if info.IsDir() && (info.Name() == "vendor" || info.Name() == "testdata") { return filepath.SkipDir } - if path == filepath.Join(runtime.GOROOT(), "pkg") { + if info.IsDir() && path == filepath.Join(runtime.GOROOT(), "pkg") { // GOROOT/pkg contains generated artifacts, not source code. // // In https://golang.org/issue/37929 it was observed to somehow contain @@ -422,7 +421,7 @@ func findGorootModules(t *testing.T) []gorootModule { // running time of this test anyway.) return filepath.SkipDir } - if strings.HasPrefix(info.Name(), "_") || strings.HasPrefix(info.Name(), ".") { + if info.IsDir() && (strings.HasPrefix(info.Name(), "_") || strings.HasPrefix(info.Name(), ".")) { // _ and . prefixed directories can be used for internal modules // without a vendor directory that don't contribute to the build // but might be used for example as code generators. @@ -457,8 +456,31 @@ func findGorootModules(t *testing.T) []gorootModule { goroot.modules = append(goroot.modules, m) return nil }) - }) + if goroot.err != nil { + return + } + // knownGOROOTModules is a hard-coded list of modules that are known to exist in GOROOT. + // If findGorootModules doesn't find a module, it won't be covered by tests at all, + // so make sure at least these modules are found. See issue 46254. If this list + // becomes a nuisance to update, can be replaced with len(goroot.modules) check. + knownGOROOTModules := [...]string{ + "std", + "cmd", + "misc", + "test/bench/go1", + } + var seen = make(map[string]bool) // Key is module path. + for _, m := range goroot.modules { + seen[m.Path] = true + } + for _, m := range knownGOROOTModules { + if !seen[m] { + goroot.err = fmt.Errorf("findGorootModules didn't find the well-known module %q", m) + break + } + } + }) if goroot.err != nil { t.Fatal(goroot.err) } diff --git a/src/go.mod b/src/go.mod index 93ff2d8d3c1..379dcf504e5 100644 --- a/src/go.mod +++ b/src/go.mod @@ -5,6 +5,6 @@ go 1.17 require ( golang.org/x/crypto v0.0.0-20210503195802-e9a32991a82e golang.org/x/net v0.0.0-20210510120150-4163338589ed - golang.org/x/sys v0.0.0-20210503173754-0981d6026fa6 // indirect + golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744 // indirect golang.org/x/text v0.3.7-0.20210503195748-5c7c50ebbd4f // indirect ) diff --git a/src/go.sum b/src/go.sum index 1390ce6d458..b3de6c526c9 100644 --- a/src/go.sum +++ b/src/go.sum @@ -2,7 +2,7 @@ golang.org/x/crypto v0.0.0-20210503195802-e9a32991a82e h1:8foAy0aoO5GkqCvAEJ4VC4 golang.org/x/crypto v0.0.0-20210503195802-e9a32991a82e/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= golang.org/x/net v0.0.0-20210510120150-4163338589ed h1:p9UgmWI9wKpfYmgaV/IZKGdXc5qEK45tDwwwDyjS26I= golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/sys v0.0.0-20210503173754-0981d6026fa6 h1:cdsMqa2nXzqlgs183pHxtvoVwU7CyzaCTAUOg94af4c= -golang.org/x/sys v0.0.0-20210503173754-0981d6026fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744 h1:yhBbb4IRs2HS9PPlAg6DMC6mUOKexJBNsLf4Z+6En1Q= +golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/text v0.3.7-0.20210503195748-5c7c50ebbd4f h1:yQJrRE0hDxDFmZLlRaw+3vusO4fwNHgHIjUOMO7bHYI= golang.org/x/text v0.3.7-0.20210503195748-5c7c50ebbd4f/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= diff --git a/src/net/http/h2_bundle.go b/src/net/http/h2_bundle.go index fd540ff255e..a948ff3eed4 100644 --- a/src/net/http/h2_bundle.go +++ b/src/net/http/h2_bundle.go @@ -53,6 +53,48 @@ import ( "golang.org/x/net/idna" ) +// asciiEqualFold is strings.EqualFold, ASCII only. It reports whether s and t +// are equal, ASCII-case-insensitively. +func http2asciiEqualFold(s, t string) bool { + if len(s) != len(t) { + return false + } + for i := 0; i < len(s); i++ { + if http2lower(s[i]) != http2lower(t[i]) { + return false + } + } + return true +} + +// lower returns the ASCII lowercase version of b. +func http2lower(b byte) byte { + if 'A' <= b && b <= 'Z' { + return b + ('a' - 'A') + } + return b +} + +// isASCIIPrint returns whether s is ASCII and printable according to +// https://tools.ietf.org/html/rfc20#section-4.2. +func http2isASCIIPrint(s string) bool { + for i := 0; i < len(s); i++ { + if s[i] < ' ' || s[i] > '~' { + return false + } + } + return true +} + +// asciiToLower returns the lowercase version of s if s is ASCII and printable, +// and whether or not it was. +func http2asciiToLower(s string) (lower string, ok bool) { + if !http2isASCIIPrint(s) { + return "", false + } + return strings.ToLower(s), true +} + // A list of the possible cipher suite ids. Taken from // https://www.iana.org/assignments/tls-parameters/tls-parameters.txt @@ -2907,6 +2949,20 @@ func http2traceGot1xxResponseFunc(trace *httptrace.ClientTrace) func(int, textpr return nil } +// dialTLSWithContext uses tls.Dialer, added in Go 1.15, to open a TLS +// connection. +func (t *http2Transport) dialTLSWithContext(ctx context.Context, network, addr string, cfg *tls.Config) (*tls.Conn, error) { + dialer := &tls.Dialer{ + Config: cfg, + } + cn, err := dialer.DialContext(ctx, network, addr) + if err != nil { + return nil, err + } + tlsCn := cn.(*tls.Conn) // DialContext comment promises this will always succeed + return tlsCn, nil +} + var http2DebugGoroutines = os.Getenv("DEBUG_HTTP2_GOROUTINES") == "1" type http2goroutineLock uint64 @@ -3128,12 +3184,12 @@ func http2buildCommonHeaderMaps() { } } -func http2lowerHeader(v string) string { +func http2lowerHeader(v string) (lower string, ascii bool) { http2buildCommonHeaderMapsOnce() if s, ok := http2commonLowerHeader[v]; ok { - return s + return s, true } - return strings.ToLower(v) + return http2asciiToLower(v) } var ( @@ -3831,13 +3887,12 @@ func http2ConfigureServer(s *Server, conf *http2Server) error { if s.TLSConfig == nil { s.TLSConfig = new(tls.Config) - } else if s.TLSConfig.CipherSuites != nil { - // If they already provided a CipherSuite list, return - // an error if it has a bad order or is missing - // ECDHE_RSA_WITH_AES_128_GCM_SHA256 or ECDHE_ECDSA_WITH_AES_128_GCM_SHA256. + } else if s.TLSConfig.CipherSuites != nil && s.TLSConfig.MinVersion < tls.VersionTLS13 { + // If they already provided a TLS 1.0–1.2 CipherSuite list, return an + // error if it is missing ECDHE_RSA_WITH_AES_128_GCM_SHA256 or + // ECDHE_ECDSA_WITH_AES_128_GCM_SHA256. haveRequired := false - sawBad := false - for i, cs := range s.TLSConfig.CipherSuites { + for _, cs := range s.TLSConfig.CipherSuites { switch cs { case tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, // Alternative MTI cipher to not discourage ECDSA-only servers. @@ -3845,14 +3900,9 @@ func http2ConfigureServer(s *Server, conf *http2Server) error { tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256: haveRequired = true } - if http2isBadCipher(cs) { - sawBad = true - } else if sawBad { - return fmt.Errorf("http2: TLSConfig.CipherSuites index %d contains an HTTP/2-approved cipher suite (%#04x), but it comes after unapproved cipher suites. With this configuration, clients that don't support previous, approved cipher suites may be given an unapproved one and reject the connection.", i, cs) - } } if !haveRequired { - return fmt.Errorf("http2: TLSConfig.CipherSuites is missing an HTTP/2-required AES_128_GCM_SHA256 cipher (need at least one of TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 or TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256).") + return fmt.Errorf("http2: TLSConfig.CipherSuites is missing an HTTP/2-required AES_128_GCM_SHA256 cipher (need at least one of TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 or TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256)") } } @@ -6394,8 +6444,12 @@ func (w *http2responseWriter) Push(target string, opts *PushOptions) error { // but PUSH_PROMISE requests cannot have a body. // http://tools.ietf.org/html/rfc7540#section-8.2 // Also disallow Host, since the promised URL must be absolute. - switch strings.ToLower(k) { - case "content-length", "content-encoding", "trailer", "te", "expect", "host": + if http2asciiEqualFold(k, "content-length") || + http2asciiEqualFold(k, "content-encoding") || + http2asciiEqualFold(k, "trailer") || + http2asciiEqualFold(k, "te") || + http2asciiEqualFold(k, "expect") || + http2asciiEqualFold(k, "host") { return fmt.Errorf("promised request headers cannot include %q", k) } } @@ -7148,14 +7202,10 @@ func (t *http2Transport) dialTLS(ctx context.Context) func(string, string, *tls. return t.DialTLS } return func(network, addr string, cfg *tls.Config) (net.Conn, error) { - dialer := &tls.Dialer{ - Config: cfg, - } - cn, err := dialer.DialContext(ctx, network, addr) + tlsCn, err := t.dialTLSWithContext(ctx, network, addr, cfg) if err != nil { return nil, err } - tlsCn := cn.(*tls.Conn) // DialContext comment promises this will always succeed state := tlsCn.ConnectionState() if p := state.NegotiatedProtocol; p != http2NextProtoTLS { return nil, fmt.Errorf("http2: unexpected ALPN protocol %q; want %q", p, http2NextProtoTLS) @@ -7163,7 +7213,7 @@ func (t *http2Transport) dialTLS(ctx context.Context) func(string, string, *tls. if !state.NegotiatedProtocolIsMutual { return nil, errors.New("http2: could not negotiate protocol mutually") } - return cn, nil + return tlsCn, nil } } @@ -7552,7 +7602,7 @@ func http2checkConnHeaders(req *Request) error { if vv := req.Header["Transfer-Encoding"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && vv[0] != "chunked") { return fmt.Errorf("http2: invalid Transfer-Encoding request header: %q", vv) } - if vv := req.Header["Connection"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && !strings.EqualFold(vv[0], "close") && !strings.EqualFold(vv[0], "keep-alive")) { + if vv := req.Header["Connection"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && !http2asciiEqualFold(vv[0], "close") && !http2asciiEqualFold(vv[0], "keep-alive")) { return fmt.Errorf("http2: invalid Connection request header: %q", vv) } return nil @@ -8078,19 +8128,21 @@ func (cc *http2ClientConn) encodeHeaders(req *Request, addGzipHeader bool, trail var didUA bool for k, vv := range req.Header { - if strings.EqualFold(k, "host") || strings.EqualFold(k, "content-length") { + if http2asciiEqualFold(k, "host") || http2asciiEqualFold(k, "content-length") { // Host is :authority, already sent. // Content-Length is automatic, set below. continue - } else if strings.EqualFold(k, "connection") || strings.EqualFold(k, "proxy-connection") || - strings.EqualFold(k, "transfer-encoding") || strings.EqualFold(k, "upgrade") || - strings.EqualFold(k, "keep-alive") { + } else if http2asciiEqualFold(k, "connection") || + http2asciiEqualFold(k, "proxy-connection") || + http2asciiEqualFold(k, "transfer-encoding") || + http2asciiEqualFold(k, "upgrade") || + http2asciiEqualFold(k, "keep-alive") { // Per 8.1.2.2 Connection-Specific Header // Fields, don't send connection-specific // fields. We have already checked if any // are error-worthy so just ignore the rest. continue - } else if strings.EqualFold(k, "user-agent") { + } else if http2asciiEqualFold(k, "user-agent") { // Match Go's http1 behavior: at most one // User-Agent. If set to nil or empty string, // then omit it. Otherwise if not mentioned, @@ -8103,7 +8155,7 @@ func (cc *http2ClientConn) encodeHeaders(req *Request, addGzipHeader bool, trail if vv[0] == "" { continue } - } else if strings.EqualFold(k, "cookie") { + } else if http2asciiEqualFold(k, "cookie") { // Per 8.1.2.5 To allow for better compression efficiency, the // Cookie header field MAY be split into separate header fields, // each with one or more cookie-pairs. @@ -8162,7 +8214,12 @@ func (cc *http2ClientConn) encodeHeaders(req *Request, addGzipHeader bool, trail // Header list size is ok. Write the headers. enumerateHeaders(func(name, value string) { - name = strings.ToLower(name) + name, ascii := http2asciiToLower(name) + if !ascii { + // Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header + // field names have to be ASCII characters (just as in HTTP/1.x). + return + } cc.writeHeader(name, value) if traceHeaders { http2traceWroteHeaderField(trace, name, value) @@ -8210,9 +8267,14 @@ func (cc *http2ClientConn) encodeTrailers(req *Request) ([]byte, error) { } for k, vv := range req.Trailer { + lowKey, ascii := http2asciiToLower(k) + if !ascii { + // Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header + // field names have to be ASCII characters (just as in HTTP/1.x). + continue + } // Transfer-Encoding, etc.. have already been filtered at the // start of RoundTrip - lowKey := strings.ToLower(k) for _, v := range vv { cc.writeHeader(lowKey, v) } @@ -9635,7 +9697,12 @@ func http2encodeHeaders(enc *hpack.Encoder, h Header, keys []string) { } for _, k := range keys { vv := h[k] - k = http2lowerHeader(k) + k, ascii := http2lowerHeader(k) + if !ascii { + // Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header + // field names have to be ASCII characters (just as in HTTP/1.x). + continue + } if !http2validWireHeaderFieldName(k) { // Skip it as backup paranoia. Per // golang.org/issue/14048, these should diff --git a/src/net/http/socks_bundle.go b/src/net/http/socks_bundle.go index e6db1c7640f..e4466695899 100644 --- a/src/net/http/socks_bundle.go +++ b/src/net/http/socks_bundle.go @@ -453,7 +453,7 @@ func (up *socksUsernamePassword) Authenticate(ctx context.Context, rw io.ReadWri b = append(b, up.Username...) b = append(b, byte(len(up.Password))) b = append(b, up.Password...) - // TODO(mikio): handle IO deadlines and cancellation if + // TODO(mikio): handle IO deadlines and cancelation if // necessary if _, err := rw.Write(b); err != nil { return err diff --git a/src/vendor/golang.org/x/sys/cpu/cpu.go b/src/vendor/golang.org/x/sys/cpu/cpu.go index f77701fe868..abbec2d44bf 100644 --- a/src/vendor/golang.org/x/sys/cpu/cpu.go +++ b/src/vendor/golang.org/x/sys/cpu/cpu.go @@ -154,14 +154,13 @@ var MIPS64X struct { // For ppc64/ppc64le, it is safe to check only for ISA level starting on ISA v3.00, // since there are no optional categories. There are some exceptions that also // require kernel support to work (DARN, SCV), so there are feature bits for -// those as well. The minimum processor requirement is POWER8 (ISA 2.07). -// The struct is padded to avoid false sharing. +// those as well. The struct is padded to avoid false sharing. var PPC64 struct { _ CacheLinePad HasDARN bool // Hardware random number generator (requires kernel enablement) HasSCV bool // Syscall vectored (requires kernel enablement) IsPOWER8 bool // ISA v2.07 (POWER8) - IsPOWER9 bool // ISA v3.00 (POWER9) + IsPOWER9 bool // ISA v3.00 (POWER9), implies IsPOWER8 _ CacheLinePad } diff --git a/src/vendor/golang.org/x/sys/cpu/cpu_aix.go b/src/vendor/golang.org/x/sys/cpu/cpu_aix.go index 28b521643b1..8aaeef545a7 100644 --- a/src/vendor/golang.org/x/sys/cpu/cpu_aix.go +++ b/src/vendor/golang.org/x/sys/cpu/cpu_aix.go @@ -20,6 +20,7 @@ func archInit() { PPC64.IsPOWER8 = true } if impl&_IMPL_POWER9 != 0 { + PPC64.IsPOWER8 = true PPC64.IsPOWER9 = true } diff --git a/src/vendor/modules.txt b/src/vendor/modules.txt index 1b850342a5a..ff01db5cdc7 100644 --- a/src/vendor/modules.txt +++ b/src/vendor/modules.txt @@ -18,7 +18,7 @@ golang.org/x/net/idna golang.org/x/net/lif golang.org/x/net/nettest golang.org/x/net/route -# golang.org/x/sys v0.0.0-20210503173754-0981d6026fa6 +# golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744 ## explicit; go 1.17 golang.org/x/sys/cpu # golang.org/x/text v0.3.7-0.20210503195748-5c7c50ebbd4f From a8d85918b63d481a414ec5ca3978d07b2b047363 Mon Sep 17 00:00:00 2001 From: Dmitri Shuralyov Date: Wed, 19 May 2021 22:51:11 +0000 Subject: [PATCH 041/100] misc/cgo/testplugin: skip TestIssue25756pie on darwin/arm64 builder This test is known to be broken on the darwin/arm64 builder. Skip it while it's being investigated so it doesn't mask other failures. For #46239. Updates #43228. Change-Id: I8fe57a0636bba84c3100337146dcb96cc264e524 Reviewed-on: https://go-review.googlesource.com/c/go/+/321349 Trust: Dmitri Shuralyov Run-TryBot: Dmitri Shuralyov TryBot-Result: Go Bot Reviewed-by: Cherry Mui --- misc/cgo/testplugin/plugin_test.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/misc/cgo/testplugin/plugin_test.go b/misc/cgo/testplugin/plugin_test.go index a6accc1dfbb..9697dbf7a78 100644 --- a/misc/cgo/testplugin/plugin_test.go +++ b/misc/cgo/testplugin/plugin_test.go @@ -265,6 +265,10 @@ func TestIssue25756(t *testing.T) { // Test with main using -buildmode=pie with plugin for issue #43228 func TestIssue25756pie(t *testing.T) { + if os.Getenv("GO_BUILDER_NAME") == "darwin-arm64-11_0-toothrot" { + t.Skip("broken on darwin/arm64 builder in sharded mode; see issue 46239") + } + goCmd(t, "build", "-buildmode=plugin", "-o", "life.so", "./issue25756/plugin") goCmd(t, "build", "-buildmode=pie", "-o", "issue25756pie.exe", "./issue25756/main.go") run(t, "./issue25756pie.exe") From f07e4dae3c5cb608b4f0b9db57d1562d2125243b Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Wed, 19 May 2021 15:46:44 +0000 Subject: [PATCH 042/100] syscall: document NewCallback and NewCallbackCDecl limitations Currently NewCallback and NewCallbackCDecl may only be called a limited number of times in a single Go process, but this property of the API is not documented. This change fixes that, but does not document the precise limit to avoid making that limit part of the API, leaving us open to increasing or decreasing the limit in the future as needed. Although the API avoids documenting a limit, it does guarantee a minimum callback count so users can rely on at least some amount of callbacks working. Updates #46184. Change-Id: I5129bf5fe301efff73ac112ba1f207ab32058833 Reviewed-on: https://go-review.googlesource.com/c/go/+/321133 Trust: Michael Knyszek Reviewed-by: Ian Lance Taylor --- src/syscall/syscall_windows.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/syscall/syscall_windows.go b/src/syscall/syscall_windows.go index fa0b5d959af..fc734effbbe 100644 --- a/src/syscall/syscall_windows.go +++ b/src/syscall/syscall_windows.go @@ -174,6 +174,9 @@ func compileCallback(fn interface{}, cleanstack bool) uintptr // NewCallback converts a Go function to a function pointer conforming to the stdcall calling convention. // This is useful when interoperating with Windows code requiring callbacks. // The argument is expected to be a function with one uintptr-sized result. The function must not have arguments with size larger than the size of uintptr. +// Only a limited number of callbacks may be created in a single Go process, and any memory allocated +// for these callbacks is never released. +// Between NewCallback and NewCallbackCDecl, at least 1024 callbacks can always be created. func NewCallback(fn interface{}) uintptr { return compileCallback(fn, true) } @@ -181,6 +184,9 @@ func NewCallback(fn interface{}) uintptr { // NewCallbackCDecl converts a Go function to a function pointer conforming to the cdecl calling convention. // This is useful when interoperating with Windows code requiring callbacks. // The argument is expected to be a function with one uintptr-sized result. The function must not have arguments with size larger than the size of uintptr. +// Only a limited number of callbacks may be created in a single Go process, and any memory allocated +// for these callbacks is never released. +// Between NewCallback and NewCallbackCDecl, at least 1024 callbacks can always be created. func NewCallbackCDecl(fn interface{}) uintptr { return compileCallback(fn, false) } From bb7495a46d6024da9d77722f04b438e573bcb26f Mon Sep 17 00:00:00 2001 From: Vishal Dalwadi Date: Fri, 7 May 2021 10:25:27 +0530 Subject: [PATCH 043/100] doc/go1.17: document new math constants Documents the newly introduced: * MaxInt * MinInt * MaxUint Updates #28538. For #44513. Fixes #46012. Change-Id: Iab6bbcf8f76ebe105b973d5fd39b86b8cd078348 Reviewed-on: https://go-review.googlesource.com/c/go/+/317911 Trust: Heschi Kreinick Reviewed-by: Emmanuel Odeke --- doc/go1.17.html | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/go1.17.html b/doc/go1.17.html index 4b2f4bce796..4c7348a36d5 100644 --- a/doc/go1.17.html +++ b/doc/go1.17.html @@ -334,7 +334,9 @@ Do not send CLs removing the interior tags from such phrases.

math

- TODO: https://golang.org/cl/247058: add MaxUint, MinInt, MaxInt + The math package now defines three more constants: MaxUint, MaxInt and MinInt. + For 32-bit systems their values are 2^32 - 1, 2^31 - 1 and -2^31, respectively. + For 64-bit systems their values are 2^64 - 1, 2^63 - 1 and -2^63, respectively.

From ef1f52cc38cc8773a4ae2e4e71219140a08ce98f Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Wed, 19 May 2021 16:07:52 -0400 Subject: [PATCH 044/100] doc/go1.17: add release note for windows/arm64 port Updates #44513, #42604. Change-Id: I8200e8087c219a0042ab2a6770a7275c3b17942a Reviewed-on: https://go-review.googlesource.com/c/go/+/321309 Trust: Cherry Mui Reviewed-by: Dmitri Shuralyov --- doc/go1.17.html | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/doc/go1.17.html b/doc/go1.17.html index 4c7348a36d5..ea8bc3ccd66 100644 --- a/doc/go1.17.html +++ b/doc/go1.17.html @@ -43,6 +43,13 @@ Do not send CLs removing the interior tags from such phrases. for previous versions has been discontinued.

+

Windows

+ +

+ Go 1.17 adds support of 64-bit ARM architecture on Windows (the + windows/arm64 port). This port supports cgo. +

+

TODO: complete the Ports section

From def53605418c8134880ffa3700c6a4ba6c689234 Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Wed, 19 May 2021 16:22:34 -0400 Subject: [PATCH 045/100] doc/go1.17: add release notes for OpenBSD ports Updates #44513. Change-Id: I8758768f6231fd7fcbaa7109eb49ee56cd60d93d Reviewed-on: https://go-review.googlesource.com/c/go/+/321310 Trust: Cherry Mui Reviewed-by: Dmitri Shuralyov --- doc/go1.17.html | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/doc/go1.17.html b/doc/go1.17.html index ea8bc3ccd66..97307bc508d 100644 --- a/doc/go1.17.html +++ b/doc/go1.17.html @@ -50,6 +50,24 @@ Do not send CLs removing the interior tags from such phrases. windows/arm64 port). This port supports cgo.

+

OpenBSD

+ +

+ The 64-bit MIPS architecture on OpenBSD (the openbsd/mips64 + port) now supports cgo. +

+ +

+ In Go 1.16, on the 64-bit x86 and 64-bit ARM architectures on + OpenBSD (the openbsd/amd64 and openbsd/arm64 + ports) system calls are made through libc, instead + of directly using the machine instructions. In Go 1.17, this is + also done on the 32-bit x86 and 32-bit ARM architectures on OpenBSD + (the openbsd/386 and openbsd/arm ports). + This ensures forward-compatibility with future versions of + OpenBSD. +

+

TODO: complete the Ports section

From f8be906d7437f2528abc7cd1a57fe46aa9348b97 Mon Sep 17 00:00:00 2001 From: Joel Sing Date: Thu, 20 May 2021 02:23:04 +1000 Subject: [PATCH 046/100] test: re-enable test on riscv64 now that it supports external linking Update #36739 Change-Id: I14ab2cd0e29966b9a2f992e8c3bcb415203e63e6 Reviewed-on: https://go-review.googlesource.com/c/go/+/321449 Trust: Joel Sing Reviewed-by: Cherry Mui Run-TryBot: Cherry Mui TryBot-Result: Go Bot --- test/fixedbugs/issue10607.go | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/test/fixedbugs/issue10607.go b/test/fixedbugs/issue10607.go index 448a37dcac2..8a04bc9def7 100644 --- a/test/fixedbugs/issue10607.go +++ b/test/fixedbugs/issue10607.go @@ -1,4 +1,4 @@ -// +build linux,!ppc64,!riscv64,gc +// +build linux,!ppc64,gc // run // Copyright 2015 The Go Authors. All rights reserved. @@ -8,9 +8,6 @@ // Test that a -B option is passed through when using both internal // and external linking mode. -// TODO(jsing): Re-enable on riscv64 when it has support for external -// linking - see golang.org/issue/36739 - package main import ( From ce9a3b79d5bb783f5f31c9d41665a488fe63f546 Mon Sep 17 00:00:00 2001 From: Lapo Luchini Date: Thu, 20 May 2021 15:41:02 +0000 Subject: [PATCH 047/100] crypto/x509: add new FreeBSD 12.2+ trusted certificate folder Up to FreeBSD 12.1 the package ca_root_nss was needed in order to have certificates under /usr/local/share/certs as the base system didn't have a system trusted certificate store. This has been fixed in FreeBSD 12.2 using /etc/ssl/certs: https://svnweb.freebsd.org/base?view=revision&revision=357082 Fixes #46284 Change-Id: I912b1bacc30cdf20d19e3ef9d09b69bb8055ff49 GitHub-Last-Rev: 0fa5542ea3c70ecb03e621381d7c34fbadf7ea47 GitHub-Pull-Request: golang/go#46276 Reviewed-on: https://go-review.googlesource.com/c/go/+/321190 Reviewed-by: Filippo Valsorda Run-TryBot: Filippo Valsorda TryBot-Result: Go Bot Trust: Tobias Klauser --- src/crypto/x509/root_bsd.go | 1 + 1 file changed, 1 insertion(+) diff --git a/src/crypto/x509/root_bsd.go b/src/crypto/x509/root_bsd.go index 822e8573ff1..6712ea32a68 100644 --- a/src/crypto/x509/root_bsd.go +++ b/src/crypto/x509/root_bsd.go @@ -18,6 +18,7 @@ var certFiles = []string{ // Possible directories with certificate files; stop after successfully // reading at least one file from a directory. var certDirectories = []string{ + "/etc/ssl/certs", // FreeBSD 12.2+ "/usr/local/share/certs", // FreeBSD "/etc/openssl/certs", // NetBSD } From 7c692cc7ea69ba4d8603fbada112289443a6f526 Mon Sep 17 00:00:00 2001 From: Vishal Dalwadi Date: Fri, 7 May 2021 10:05:36 +0530 Subject: [PATCH 048/100] doc/go1.17: document changes to os package Documents the changes to File.WriteString method. For #44513. Fixes #46018. Change-Id: I3a8ef9df9f84662614d54802710bd705d626b995 Reviewed-on: https://go-review.googlesource.com/c/go/+/317910 Reviewed-by: Dmitri Shuralyov Trust: Cherry Mui --- doc/go1.17.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/go1.17.html b/doc/go1.17.html index 97307bc508d..48b5563602a 100644 --- a/doc/go1.17.html +++ b/doc/go1.17.html @@ -428,7 +428,8 @@ Do not send CLs removing the interior tags from such phrases.
os

- TODO: https://golang.org/cl/268020: avoid allocation in File.WriteString + The File.WriteString method + has been optimized to no longer make a copy of the input string.

From baa934d26dd6e201dcda0962dd51b0e5f6f69c1b Mon Sep 17 00:00:00 2001 From: Tim King Date: Wed, 19 May 2021 18:45:53 -0700 Subject: [PATCH 049/100] cmd: go get golang.org/x/tools/analysis@49064d23 && go mod vendor This brings in CLs 312829, 317431, 319211. Fixes #40356. Fixes #46129. Change-Id: I2ee1f858b2a41ffa60d88b0c17511ccad57f1816 Reviewed-on: https://go-review.googlesource.com/c/go/+/321389 Reviewed-by: Dmitri Shuralyov Trust: Tim King Run-TryBot: Tim King TryBot-Result: Go Bot --- src/cmd/go.mod | 2 +- src/cmd/go.sum | 4 ++-- .../x/tools/go/analysis/passes/printf/printf.go | 2 +- .../analysis/passes/sigchanyzer/sigchanyzer.go | 11 +++++++++-- .../go/analysis/passes/stdmethods/stdmethods.go | 17 +++++++++++++++++ src/cmd/vendor/modules.txt | 2 +- 6 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/cmd/go.mod b/src/cmd/go.mod index 88f5f2883a6..1aa0320d078 100644 --- a/src/cmd/go.mod +++ b/src/cmd/go.mod @@ -10,6 +10,6 @@ require ( golang.org/x/mod v0.4.3-0.20210512182355-6088ed88cecd golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744 // indirect golang.org/x/term v0.0.0-20210503060354-a79de5458b56 - golang.org/x/tools v0.1.1-0.20210505014545-7cab0ef2e9a5 + golang.org/x/tools v0.1.2-0.20210519160823-49064d2332f9 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect ) diff --git a/src/cmd/go.sum b/src/cmd/go.sum index 73750802bc1..9af4978d669 100644 --- a/src/cmd/go.sum +++ b/src/cmd/go.sum @@ -16,7 +16,7 @@ golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744 h1:yhBbb4IRs2HS9PPlAg6DMC6mU golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20210503060354-a79de5458b56 h1:b8jxX3zqjpqb2LklXPzKSGJhzyxCOZSz8ncv8Nv+y7w= golang.org/x/term v0.0.0-20210503060354-a79de5458b56/go.mod h1:tfny5GFUkzUvx4ps4ajbZsCe5lw1metzhBm9T3x7oIY= -golang.org/x/tools v0.1.1-0.20210505014545-7cab0ef2e9a5 h1:ImcI7RFHWLu2QWpFDXaReu0j+sQAHIy65vUFZImXiqY= -golang.org/x/tools v0.1.1-0.20210505014545-7cab0ef2e9a5/go.mod h1:sH/Eidr0EddymY8HZSakBo32zU3fG5ovDq874hJLjVg= +golang.org/x/tools v0.1.2-0.20210519160823-49064d2332f9 h1:2XlR/j4I4xz5GQZI7zBjqTfezYyRIE2jD5IMousB2rg= +golang.org/x/tools v0.1.2-0.20210519160823-49064d2332f9/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/printf/printf.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/printf/printf.go index ddad4c796cb..822820f06e9 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/printf/printf.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/printf/printf.go @@ -590,7 +590,7 @@ func checkPrintf(pass *analysis.Pass, kind Kind, call *ast.CallExpr, fn *types.F } if state.verb == 'w' { if kind != KindErrorf { - pass.Reportf(call.Pos(), "%s call has error-wrapping directive %%w", state.name) + pass.Reportf(call.Pos(), "%s call has error-wrapping directive %%w, which is only supported by Errorf", state.name) return } if anyW { diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/sigchanyzer/sigchanyzer.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/sigchanyzer/sigchanyzer.go index b00aa7e1440..0d6c8ebf165 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/sigchanyzer/sigchanyzer.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/sigchanyzer/sigchanyzer.go @@ -59,12 +59,19 @@ func run(pass *analysis.Pass) (interface{}, error) { if chanDecl == nil || len(chanDecl.Args) != 1 { return } - chanDecl.Args = append(chanDecl.Args, &ast.BasicLit{ + + // Make a copy of the channel's declaration to avoid + // mutating the AST. See https://golang.org/issue/46129. + chanDeclCopy := &ast.CallExpr{} + *chanDeclCopy = *chanDecl + chanDeclCopy.Args = append([]ast.Expr(nil), chanDecl.Args...) + chanDeclCopy.Args = append(chanDeclCopy.Args, &ast.BasicLit{ Kind: token.INT, Value: "1", }) + var buf bytes.Buffer - if err := format.Node(&buf, token.NewFileSet(), chanDecl); err != nil { + if err := format.Node(&buf, token.NewFileSet(), chanDeclCopy); err != nil { return } pass.Report(analysis.Diagnostic{ diff --git a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/stdmethods/stdmethods.go b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/stdmethods/stdmethods.go index 856c6ae0d81..64a28ac0b97 100644 --- a/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/stdmethods/stdmethods.go +++ b/src/cmd/vendor/golang.org/x/tools/go/analysis/passes/stdmethods/stdmethods.go @@ -61,10 +61,12 @@ var Analyzer = &analysis.Analyzer{ // we let it go. But if it does have a fmt.ScanState, then the // rest has to match. var canonicalMethods = map[string]struct{ args, results []string }{ + "As": {[]string{"interface{}"}, []string{"bool"}}, // errors.As // "Flush": {{}, {"error"}}, // http.Flusher and jpeg.writer conflict "Format": {[]string{"=fmt.State", "rune"}, []string{}}, // fmt.Formatter "GobDecode": {[]string{"[]byte"}, []string{"error"}}, // gob.GobDecoder "GobEncode": {[]string{}, []string{"[]byte", "error"}}, // gob.GobEncoder + "Is": {[]string{"error"}, []string{"bool"}}, // errors.Is "MarshalJSON": {[]string{}, []string{"[]byte", "error"}}, // json.Marshaler "MarshalXML": {[]string{"*xml.Encoder", "xml.StartElement"}, []string{"error"}}, // xml.Marshaler "ReadByte": {[]string{}, []string{"byte", "error"}}, // io.ByteReader @@ -76,6 +78,7 @@ var canonicalMethods = map[string]struct{ args, results []string }{ "UnmarshalXML": {[]string{"*xml.Decoder", "xml.StartElement"}, []string{"error"}}, // xml.Unmarshaler "UnreadByte": {[]string{}, []string{"error"}}, "UnreadRune": {[]string{}, []string{"error"}}, + "Unwrap": {[]string{}, []string{"error"}}, // errors.Unwrap "WriteByte": {[]string{"byte"}, []string{"error"}}, // jpeg.writer (matching bufio.Writer) "WriteTo": {[]string{"=io.Writer"}, []string{"int64", "error"}}, // io.WriterTo } @@ -123,6 +126,14 @@ func canonicalMethod(pass *analysis.Pass, id *ast.Ident) { return } + // Special case: Is, As and Unwrap only apply when type + // implements error. + if id.Name == "Is" || id.Name == "As" || id.Name == "Unwrap" { + if recv := sign.Recv(); recv == nil || !implementsError(recv.Type()) { + return + } + } + // Do the =s (if any) all match? if !matchParams(pass, expect.args, args, "=") || !matchParams(pass, expect.results, results, "=") { return @@ -185,3 +196,9 @@ func matchParamType(expect string, actual types.Type) bool { // Overkill but easy. return typeString(actual) == expect } + +var errorType = types.Universe.Lookup("error").Type().Underlying().(*types.Interface) + +func implementsError(actual types.Type) bool { + return types.Implements(actual, errorType) +} diff --git a/src/cmd/vendor/modules.txt b/src/cmd/vendor/modules.txt index 016ec011a97..9a1723d32c7 100644 --- a/src/cmd/vendor/modules.txt +++ b/src/cmd/vendor/modules.txt @@ -48,7 +48,7 @@ golang.org/x/sys/windows # golang.org/x/term v0.0.0-20210503060354-a79de5458b56 ## explicit; go 1.17 golang.org/x/term -# golang.org/x/tools v0.1.1-0.20210505014545-7cab0ef2e9a5 +# golang.org/x/tools v0.1.2-0.20210519160823-49064d2332f9 ## explicit; go 1.17 golang.org/x/tools/cover golang.org/x/tools/go/analysis From 831573cd21e65c37b4e1bf5d44dc23b125084b7a Mon Sep 17 00:00:00 2001 From: Adam Mitha Date: Thu, 13 May 2021 20:52:41 -0700 Subject: [PATCH 050/100] io/fs: added an example for io/fs.WalkDir The documentation currently does not show how to get an `FS` instance for the operating system's filesystem. This example demonstrates how to accomplish this using the `os` package. Fixes #46083 Change-Id: I053111c12ab09ef13f0d04fcdff8a6ea0dccf379 Reviewed-on: https://go-review.googlesource.com/c/go/+/319989 Run-TryBot: Ian Lance Taylor TryBot-Result: Go Bot Reviewed-by: Ian Lance Taylor Trust: Emmanuel Odeke --- src/io/fs/example_test.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/io/fs/example_test.go diff --git a/src/io/fs/example_test.go b/src/io/fs/example_test.go new file mode 100644 index 00000000000..c9027034c4a --- /dev/null +++ b/src/io/fs/example_test.go @@ -0,0 +1,25 @@ +// Copyright 2021 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 fs_test + +import ( + "fmt" + "io/fs" + "log" + "os" +) + +func ExampleWalkDir() { + root := "/usr/local/go/bin" + fileSystem := os.DirFS(root) + + fs.WalkDir(fileSystem, ".", func(path string, d fs.DirEntry, err error) error { + if err != nil { + log.Fatal(err) + } + fmt.Println(path) + return nil + }) +} From 7e63c8b765c30823131bd136d190afbe4c21abc9 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Fri, 21 May 2021 12:01:39 +0200 Subject: [PATCH 051/100] runtime: wait for Go runtime to initialize in Windows signal test The test harness waits for "ready" as a sign that the Go runtime has installed its signal handler and is ready to be tested. But actually, while LoadLibrary starts the loading of the Go runtime, it does so asynchronously, so the "ready" sign is potentially premature and certainly racy. However, all exported cgo entry points make a call to _cgo_wait_runtime_init_done which waits for that asynchronous initialization to complete. Therefore, this commit fixes the test to call into the exported "Dummy" cgo function before emitting the "ready" sign, so that we're sure the Go runtime is actually loaded. Updates #45638. Change-Id: I9b12b172d45bdcc09d54dd301de3a3e499544834 Reviewed-on: https://go-review.googlesource.com/c/go/+/321769 Trust: Jason A. Donenfeld Run-TryBot: Jason A. Donenfeld TryBot-Result: Go Bot Reviewed-by: Michael Knyszek --- src/runtime/testdata/testwinlibsignal/main.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/runtime/testdata/testwinlibsignal/main.c b/src/runtime/testdata/testwinlibsignal/main.c index 1787fef3b94..37f24823e66 100644 --- a/src/runtime/testdata/testwinlibsignal/main.c +++ b/src/runtime/testdata/testwinlibsignal/main.c @@ -19,13 +19,13 @@ int main(void) { waitForCtrlBreakEvent = CreateEvent(NULL, TRUE, FALSE, NULL); if (!waitForCtrlBreakEvent) { - fprintf(stderr, "ERROR: Could not create event"); + fprintf(stderr, "ERROR: Could not create event\n"); return 1; } if (!SetConsoleCtrlHandler(CtrlHandler, TRUE)) { - fprintf(stderr, "ERROR: Could not set control handler"); + fprintf(stderr, "ERROR: Could not set control handler\n"); return 1; } @@ -34,7 +34,14 @@ int main(void) // This way the library handler gets called first. HMODULE dummyDll = LoadLibrary("dummy.dll"); if (!dummyDll) { - fprintf(stderr, "ERROR: Could not load dummy.dll"); + fprintf(stderr, "ERROR: Could not load dummy.dll\n"); + return 1; + } + + // Call the Dummy function so that Go initialization completes, since + // all cgo entry points call out to _cgo_wait_runtime_init_done. + if (((int(*)(void))GetProcAddress(dummyDll, "Dummy"))() != 42) { + fprintf(stderr, "ERROR: Dummy function did not return 42\n"); return 1; } @@ -42,7 +49,7 @@ int main(void) fflush(stdout); if (WaitForSingleObject(waitForCtrlBreakEvent, 5000) != WAIT_OBJECT_0) { - fprintf(stderr, "FAILURE: No signal received"); + fprintf(stderr, "FAILURE: No signal received\n"); return 1; } From 3148694f607b77731420a20ef2117ac7d0d55ba3 Mon Sep 17 00:00:00 2001 From: Tim Heckman Date: Thu, 20 May 2021 16:51:28 -0700 Subject: [PATCH 052/100] cmd/go: remove warning from module deprecation notice printing Fixes #46294 Change-Id: I50023006dab83dee455f98a702ca1c72e61764ea Reviewed-on: https://go-review.googlesource.com/c/go/+/321649 Trust: Jay Conrod Trust: Michael Matloob Run-TryBot: Jay Conrod TryBot-Result: Go Bot Reviewed-by: Jay Conrod --- src/cmd/go/internal/modget/get.go | 2 +- src/cmd/go/testdata/script/mod_deprecate_message.txt | 8 ++++---- src/cmd/go/testdata/script/mod_get_deprecated.txt | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/cmd/go/internal/modget/get.go b/src/cmd/go/internal/modget/get.go index 2a7fe5226fd..563f1a988f0 100644 --- a/src/cmd/go/internal/modget/get.go +++ b/src/cmd/go/internal/modget/get.go @@ -1598,7 +1598,7 @@ func (r *resolver) checkPackageProblems(ctx context.Context, pkgPatterns []strin // Report deprecations, then retractions. for _, mm := range deprecations { if mm.message != "" { - fmt.Fprintf(os.Stderr, "go: warning: module %s is deprecated: %s\n", mm.m.Path, mm.message) + fmt.Fprintf(os.Stderr, "go: module %s is deprecated: %s\n", mm.m.Path, mm.message) } } var retractPath string diff --git a/src/cmd/go/testdata/script/mod_deprecate_message.txt b/src/cmd/go/testdata/script/mod_deprecate_message.txt index 4a0674b8084..567027935dc 100644 --- a/src/cmd/go/testdata/script/mod_deprecate_message.txt +++ b/src/cmd/go/testdata/script/mod_deprecate_message.txt @@ -1,26 +1,26 @@ # When there is a short single-line message, 'go get' should print it all. go get -d short -stderr '^go: warning: module short is deprecated: short$' +stderr '^go: module short is deprecated: short$' go list -m -u -f '{{.Deprecated}}' short stdout '^short$' # When there is a multi-line message, 'go get' should print the first line. go get -d multiline -stderr '^go: warning: module multiline is deprecated: first line$' +stderr '^go: module multiline is deprecated: first line$' ! stderr 'second line' go list -m -u -f '{{.Deprecated}}' multiline stdout '^first line\nsecond line.$' # When there is a long message, 'go get' should print a placeholder. go get -d long -stderr '^go: warning: module long is deprecated: \(message omitted: too long\)$' +stderr '^go: module long is deprecated: \(message omitted: too long\)$' go list -m -u -f '{{.Deprecated}}' long stdout '^aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa$' # When a message contains unprintable chracters, 'go get' should say that # without printing the message. go get -d unprintable -stderr '^go: warning: module unprintable is deprecated: \(message omitted: contains non-printable characters\)$' +stderr '^go: module unprintable is deprecated: \(message omitted: contains non-printable characters\)$' go list -m -u -f '{{.Deprecated}}' unprintable stdout '^message contains ASCII BEL\x07$' diff --git a/src/cmd/go/testdata/script/mod_get_deprecated.txt b/src/cmd/go/testdata/script/mod_get_deprecated.txt index 4633009f69b..7bdd7a58a89 100644 --- a/src/cmd/go/testdata/script/mod_get_deprecated.txt +++ b/src/cmd/go/testdata/script/mod_get_deprecated.txt @@ -4,14 +4,14 @@ go get -d ./use/nothing # 'go get pkg' should show a deprecation message for the module providing pkg. go get -d example.com/deprecated/a -stderr '^go: warning: module example.com/deprecated/a is deprecated: in example.com/deprecated/a@v1.9.0$' +stderr '^go: module example.com/deprecated/a is deprecated: in example.com/deprecated/a@v1.9.0$' go get -d example.com/deprecated/a@v1.0.0 -stderr '^go: warning: module example.com/deprecated/a is deprecated: in example.com/deprecated/a@v1.9.0$' +stderr '^go: module example.com/deprecated/a is deprecated: in example.com/deprecated/a@v1.9.0$' # 'go get pkg' should show a deprecation message for a module providing # packages directly imported by pkg. go get -d ./use/a -stderr '^go: warning: module example.com/deprecated/a is deprecated: in example.com/deprecated/a@v1.9.0$' +stderr '^go: module example.com/deprecated/a is deprecated: in example.com/deprecated/a@v1.9.0$' # 'go get pkg' may show a deprecation message for an indirectly required module # if it provides a package named on the command line. @@ -20,7 +20,7 @@ go get -d ./use/b go get -d local/use ! stderr 'module.*is deprecated' go get -d example.com/deprecated/b -stderr '^go: warning: module example.com/deprecated/b is deprecated: in example.com/deprecated/b@v1.9.0$' +stderr '^go: module example.com/deprecated/b is deprecated: in example.com/deprecated/b@v1.9.0$' # 'go get pkg' does not show a deprecation message for a module providing a # directly imported package if the module is no longer deprecated in its From 5fee772c872fcbf35c059b241d0b60c0aecd0f20 Mon Sep 17 00:00:00 2001 From: Aaron Sheah Date: Tue, 18 May 2021 14:54:02 +0000 Subject: [PATCH 053/100] doc/go1.17: document archive/zip changes for Go 1.17 For #44513. Fixes #46000 Change-Id: I299d0b5657f1f96174d6e35d60daac8b36e59d29 GitHub-Last-Rev: e63461bff042a8abe79e0ec3515eefbf56ba1d82 GitHub-Pull-Request: golang/go#46235 Reviewed-on: https://go-review.googlesource.com/c/go/+/320809 Reviewed-by: Heschi Kreinick Trust: Robert Findley --- doc/go1.17.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/go1.17.html b/doc/go1.17.html index 48b5563602a..ae9deabf654 100644 --- a/doc/go1.17.html +++ b/doc/go1.17.html @@ -272,7 +272,7 @@ Do not send CLs removing the interior tags from such phrases.
archive/zip

- TODO: https://golang.org/cl/312310: add File.OpenRaw, Writer.CreateRaw, Writer.Copy + The new methods File.OpenRaw, Writer.CreateRaw, Writer.Copy provide support for cases where performance is a primary concern.

From 8876b9bd6a8a0c206c0a5d59302ce5167f26e9f3 Mon Sep 17 00:00:00 2001 From: Adam Mitha Date: Fri, 14 May 2021 10:58:01 -0700 Subject: [PATCH 054/100] doc/go1.17: document io/fs changes for Go 1.17 For #44513 Fixes #46011 Change-Id: I862ef9a4314cd34fb8c828a8cd7d0a7b36c6f683 Reviewed-on: https://go-review.googlesource.com/c/go/+/320151 Reviewed-by: Heschi Kreinick Trust: Heschi Kreinick Trust: Robert Findley Trust: Dmitri Shuralyov --- doc/go1.17.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/go1.17.html b/doc/go1.17.html index ae9deabf654..4561b6ccf52 100644 --- a/doc/go1.17.html +++ b/doc/go1.17.html @@ -351,7 +351,7 @@ Do not send CLs removing the interior tags from such phrases.
io/fs

- TODO: https://golang.org/cl/293649: implement FileInfoToDirEntry + The new FileInfoToDirEntry function converts a FileInfo to a DirEntry.

From 4fda54ce3f6761104e835fc4e7847f89e34b7d6d Mon Sep 17 00:00:00 2001 From: sryoya Date: Sun, 16 May 2021 23:36:05 +0900 Subject: [PATCH 055/100] doc/go1.17: document database/sql changes for Go 1.17 For #44513 Fixes #46008 Change-Id: If80d484f73a0eb6946abdc654eb2c0d3dd6db416 Reviewed-on: https://go-review.googlesource.com/c/go/+/320251 Reviewed-by: Heschi Kreinick Trust: Robert Findley --- doc/go1.17.html | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/doc/go1.17.html b/doc/go1.17.html index 4561b6ccf52..3534f7be040 100644 --- a/doc/go1.17.html +++ b/doc/go1.17.html @@ -320,11 +320,19 @@ Do not send CLs removing the interior tags from such phrases.
database/sql

- TODO: https://golang.org/cl/258360: close driver.Connector if it implements io.Closer + The DB.Close method now closes + the connector field if the type in this field implements the + io.Closer interface.

- TODO: https://golang.org/cl/311572: add NullInt16 and NullByte + The new + NullInt16 + and + NullByte + structs represent the int16 and byte values that may be null. These can be used as + destinations of the Scan method, + similar to NullString.

From 4fb10b2118cb16445f2d089f79beb3d32db3db12 Mon Sep 17 00:00:00 2001 From: Jay Conrod Date: Mon, 10 May 2021 18:10:18 -0400 Subject: [PATCH 056/100] cmd/go: in 'go mod download' without args, don't save module zip sums 'go mod download' without arguments is frequently used to populate the module cache. It tends to fetch a lot of extra files (for modules in the build list that aren't needed to build packages in the main module). It's annoying when sums are written for these extra files. 'go mod download mod@version' will still write sums for specific modules in the build list. 'go mod download all' still has the previous behavior. For now, all invocations of 'go mod download' still update go.mod and go.sum with changes needed to load the build list (1.15 behavior). Fixes #45332 Change-Id: I9e17d18a7466ac7271a0e1a2b663f6b3cb168c97 Reviewed-on: https://go-review.googlesource.com/c/go/+/318629 Trust: Jay Conrod Reviewed-by: Bryan C. Mills --- doc/go1.17.html | 11 ++++++ src/cmd/go/internal/modcmd/download.go | 29 +++++++++++++-- .../go/testdata/mod/rsc.io_sampler_v1.2.1.txt | 2 +- src/cmd/go/testdata/script/mod_download.txt | 37 +++++++++++++++++-- .../script/mod_get_trailing_slash.txt | 10 +++-- src/cmd/go/testdata/script/mod_query.txt | 5 ++- src/cmd/go/testdata/script/mod_retract.txt | 8 ++-- 7 files changed, 85 insertions(+), 17 deletions(-) diff --git a/doc/go1.17.html b/doc/go1.17.html index 3534f7be040..f00c649e048 100644 --- a/doc/go1.17.html +++ b/doc/go1.17.html @@ -186,6 +186,17 @@ Do not send CLs removing the interior tags from such phrases. password-protected SSH keys.

+

go mod download

+ +

+ When go mod download is invoked without + arguments, it will no longer save sums for downloaded module content to + go.sum. It may still make changes to go.mod and + go.sum needed to load the build list. This is the same as the + behavior in Go 1.15. To save sums for all modules, use go + mod download all. +

+

TODO: https://golang.org/cl/249759: cmd/cover: replace code using optimized golang.org/x/tools/cover

diff --git a/src/cmd/go/internal/modcmd/download.go b/src/cmd/go/internal/modcmd/download.go index a6c6d914e1d..42b06dbc95c 100644 --- a/src/cmd/go/internal/modcmd/download.go +++ b/src/cmd/go/internal/modcmd/download.go @@ -86,9 +86,11 @@ func runDownload(ctx context.Context, cmd *base.Command, args []string) { if !modload.HasModRoot() && len(args) == 0 { base.Fatalf("go mod download: no modules specified (see 'go help mod download')") } - if len(args) == 0 { + haveExplicitArgs := len(args) > 0 + if !haveExplicitArgs { args = []string{"all"} - } else if modload.HasModRoot() { + } + if modload.HasModRoot() { modload.LoadModFile(ctx) // to fill Target targetAtUpgrade := modload.Target.Path + "@upgrade" targetAtPatch := modload.Target.Path + "@patch" @@ -135,6 +137,18 @@ func runDownload(ctx context.Context, cmd *base.Command, args []string) { type token struct{} sem := make(chan token, runtime.GOMAXPROCS(0)) infos, infosErr := modload.ListModules(ctx, args, 0) + if !haveExplicitArgs { + // 'go mod download' is sometimes run without arguments to pre-populate + // the module cache. It may fetch modules that aren't needed to build + // packages in the main mdoule. This is usually not intended, so don't save + // sums for downloaded modules (golang.org/issue/45332). + // TODO(golang.org/issue/45551): For now, save sums needed to load the + // build list (same as 1.15 behavior). In the future, report an error if + // go.mod or go.sum need to be updated after loading the build list. + modload.WriteGoMod(ctx) + modload.DisallowWriteGoMod() + } + for _, info := range infos { if info.Replace != nil { info = info.Replace @@ -185,8 +199,15 @@ func runDownload(ctx context.Context, cmd *base.Command, args []string) { base.ExitIfErrors() } - // Update go.mod and especially go.sum if needed. - modload.WriteGoMod(ctx) + // If there were explicit arguments, update go.mod and especially go.sum. + // 'go mod download mod@version' is a useful way to add a sum without using + // 'go get mod@version', which may have other side effects. We print this in + // some error message hints. + // + // Don't save sums for 'go mod download' without arguments; see comment above. + if haveExplicitArgs { + modload.WriteGoMod(ctx) + } // If there was an error matching some of the requested packages, emit it now // (after we've written the checksums for the modules that were downloaded diff --git a/src/cmd/go/testdata/mod/rsc.io_sampler_v1.2.1.txt b/src/cmd/go/testdata/mod/rsc.io_sampler_v1.2.1.txt index 00b71bf0d59..7982cccea10 100644 --- a/src/cmd/go/testdata/mod/rsc.io_sampler_v1.2.1.txt +++ b/src/cmd/go/testdata/mod/rsc.io_sampler_v1.2.1.txt @@ -5,7 +5,7 @@ module "rsc.io/sampler" require "golang.org/x/text" v0.0.0-20170915032832-14c0d48ead0c -- .info -- -{"Version":"v1.2.1","Name":"cac3af4f8a0ab40054fa6f8d423108a63a1255bb","Short":"cac3af4f8a0a","Time":"2018-02-13T18:16:22Z"}EOF +{"Version":"v1.2.1","Name":"cac3af4f8a0ab40054fa6f8d423108a63a1255bb","Short":"cac3af4f8a0a","Time":"2018-02-13T18:16:22Z"} -- hello.go -- // Copyright 2018 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style diff --git a/src/cmd/go/testdata/script/mod_download.txt b/src/cmd/go/testdata/script/mod_download.txt index 8a9faffe4e0..ad640b45de1 100644 --- a/src/cmd/go/testdata/script/mod_download.txt +++ b/src/cmd/go/testdata/script/mod_download.txt @@ -107,13 +107,28 @@ stderr '^go mod download: skipping argument m that resolves to the main module\n ! go mod download m@latest stderr '^go mod download: m@latest: malformed module path "m": missing dot in first path element$' -# download updates go.mod and populates go.sum +# download without arguments updates go.mod and go.sum after loading the +# build list, but does not save sums for downloaded zips. cd update +cp go.mod.orig go.mod ! exists go.sum go mod download +cmp go.mod.update go.mod +cmp go.sum.update go.sum +cp go.mod.orig go.mod +rm go.sum + +# download with arguments (even "all") does update go.mod and go.sum. +go mod download rsc.io/sampler +cmp go.mod.update go.mod grep '^rsc.io/sampler v1.3.0 ' go.sum -go list -m rsc.io/sampler -stdout '^rsc.io/sampler v1.3.0$' +cp go.mod.orig go.mod +rm go.sum + +go mod download all +cmp go.mod.update go.mod +grep '^rsc.io/sampler v1.3.0 ' go.sum +cd .. # allow go mod download without go.mod env GO111MODULE=auto @@ -131,7 +146,7 @@ stderr 'get '$GOPROXY -- go.mod -- module m --- update/go.mod -- +-- update/go.mod.orig -- module m go 1.16 @@ -140,3 +155,17 @@ require ( rsc.io/quote v1.5.2 rsc.io/sampler v1.2.1 // older version than in build list ) +-- update/go.mod.update -- +module m + +go 1.16 + +require ( + rsc.io/quote v1.5.2 + rsc.io/sampler v1.3.0 // older version than in build list +) +-- update/go.sum.update -- +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +rsc.io/quote v1.5.2/go.mod h1:LzX7hefJvL54yjefDEDHNONDjII0t9xZLPXsUe+TKr0= +rsc.io/sampler v1.2.1/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/src/cmd/go/testdata/script/mod_get_trailing_slash.txt b/src/cmd/go/testdata/script/mod_get_trailing_slash.txt index 3b38d8ba7d3..c5366935379 100644 --- a/src/cmd/go/testdata/script/mod_get_trailing_slash.txt +++ b/src/cmd/go/testdata/script/mod_get_trailing_slash.txt @@ -1,6 +1,3 @@ -# Populate go.sum -go mod download - # go list should succeed to load a package ending with ".go" if the path does # not correspond to an existing local file. Listing a pattern ending with # ".go/" should try to list a package regardless of whether a file exists at the @@ -31,3 +28,10 @@ module m go 1.13 require example.com/dotgo.go v1.0.0 +-- go.sum -- +example.com/dotgo.go v1.0.0 h1:XKJfs0V8x2PvY2tX8bJBCEbCDLnt15ma2onwhVpew/I= +example.com/dotgo.go v1.0.0/go.mod h1:Qi6z/X3AC5vHiuMt6HF2ICx3KhIBGrMdrA7YoPDKqR0= +-- use.go -- +package use + +import _ "example.com/dotgo.go" diff --git a/src/cmd/go/testdata/script/mod_query.txt b/src/cmd/go/testdata/script/mod_query.txt index e10185709d9..a75f86ed7c5 100644 --- a/src/cmd/go/testdata/script/mod_query.txt +++ b/src/cmd/go/testdata/script/mod_query.txt @@ -1,9 +1,7 @@ env GO111MODULE=on -# Populate go.sum. # TODO(golang.org/issue/41297): we shouldn't need go.sum. None of the commands # below depend on the build list. -go mod download go list -m -versions rsc.io/quote stdout '^rsc.io/quote v1.0.0 v1.1.0 v1.2.0 v1.2.1 v1.3.0 v1.4.0 v1.5.0 v1.5.1 v1.5.2 v1.5.3-pre1$' @@ -36,6 +34,9 @@ stdout 'no matching versions for query ">v1.5.3"' module x require rsc.io/quote v1.0.0 +-- go.sum -- +rsc.io/quote v1.0.0 h1:kQ3IZQzPTiDJxSZI98YaWgxFEhlNdYASHvh+MplbViw= +rsc.io/quote v1.0.0/go.mod h1:v83Ri/njykPcgJltBc/gEkJTmjTsNgtO1Y7vyIK1CQA= -- use.go -- package use diff --git a/src/cmd/go/testdata/script/mod_retract.txt b/src/cmd/go/testdata/script/mod_retract.txt index a52e05bc72e..4f95ece8d7a 100644 --- a/src/cmd/go/testdata/script/mod_retract.txt +++ b/src/cmd/go/testdata/script/mod_retract.txt @@ -1,8 +1,5 @@ cp go.mod go.mod.orig -# Populate go.sum. -go mod download - # 'go list pkg' does not report an error when a retracted version is used. go list -e -f '{{if .Error}}{{.Error}}{{end}}' ./use ! stdout . @@ -32,6 +29,11 @@ go 1.15 require example.com/retract v1.0.0-bad +-- go.sum -- +example.com/retract v1.0.0-bad h1:liAW69rbtjY67x2CcNzat668L/w+YGgNX3lhJsWIJis= +example.com/retract v1.0.0-bad/go.mod h1:0DvGGofJ9hr1q63cBrOY/jSY52OwhRGA0K47NE80I5Y= +example.com/retract/self/prev v1.1.0 h1:0/8I/GTG+1eJTFeDQ/fUbgrMsVHHyKhh3Z8DSZp1fuA= +example.com/retract/self/prev v1.1.0/go.mod h1:xl2EcklWuZZHVtHWcpzfSJQmnzAGpKZYpA/Wto7SZN4= -- use/use.go -- package use From e4d7525c3e119de30490550fe2516fd6958eac30 Mon Sep 17 00:00:00 2001 From: Constantin Konstantinidis Date: Fri, 14 May 2021 15:00:46 +0200 Subject: [PATCH 057/100] cmd/dist: display first class port status in json output MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #38874 Change-Id: I819dd008fd6869d335888b4aa03dcf739da9a9a4 Reviewed-on: https://go-review.googlesource.com/c/go/+/320069 Run-TryBot: Dmitri Shuralyov TryBot-Result: Go Bot Reviewed-by: Ian Lance Taylor Reviewed-by: Dmitri Shuralyov Trust: Daniel Martí --- src/cmd/dist/build.go | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/cmd/dist/build.go b/src/cmd/dist/build.go index 00e23ef179e..1abb03bcc56 100644 --- a/src/cmd/dist/build.go +++ b/src/cmd/dist/build.go @@ -1607,6 +1607,18 @@ var incomplete = map[string]bool{ "linux/sparc64": true, } +// List of platforms which are first class ports. See golang.org/issue/38874. +var firstClass = map[string]bool{ + "darwin/amd64": true, + "darwin/arm64": true, + "linux/386": true, + "linux/amd64": true, + "linux/arm": true, + "linux/arm64": true, + "windows/386": true, + "windows/amd64": true, +} + func needCC() bool { switch os.Getenv("CGO_ENABLED") { case "1": @@ -1743,6 +1755,7 @@ func cmdlist() { GOOS string GOARCH string CgoSupported bool + FirstClass bool } var results []jsonResult for _, p := range plats { @@ -1750,7 +1763,8 @@ func cmdlist() { results = append(results, jsonResult{ GOOS: fields[0], GOARCH: fields[1], - CgoSupported: cgoEnabled[p]}) + CgoSupported: cgoEnabled[p], + FirstClass: firstClass[p]}) } out, err := json.MarshalIndent(results, "", "\t") if err != nil { From 76b2d6afed1e22556bd6c52e74b546eb8bf9a225 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Fri, 21 May 2021 12:50:52 -0700 Subject: [PATCH 058/100] os: document that StartProcess puts files into blocking mode Fixes #43894 Change-Id: I2add7b8a4f6ae69a5ef1c48703fde21a4b74307c Reviewed-on: https://go-review.googlesource.com/c/go/+/321852 Trust: Ian Lance Taylor Run-TryBot: Ian Lance Taylor TryBot-Result: Go Bot Reviewed-by: Dmitri Shuralyov --- src/os/exec.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/os/exec.go b/src/os/exec.go index edb773a092b..bc75d4dd66c 100644 --- a/src/os/exec.go +++ b/src/os/exec.go @@ -54,6 +54,9 @@ type ProcAttr struct { // standard error. An implementation may support additional entries, // depending on the underlying operating system. A nil entry corresponds // to that file being closed when the process starts. + // On Unix systems, StartProcess will change these File values + // to blocking mode, which means that SetDeadline will stop working + // and calling Close will not interrupt a Read or Write. Files []*File // Operating system-specific process creation attributes. From 3c656445f139d8b6def40aa7beffd5da9fceccdb Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Fri, 21 May 2021 16:33:42 -0400 Subject: [PATCH 059/100] cmd/go: in TestScript/mod_replace, download an explicit module path MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit As of CL 318629, 'go mod download' without arguments does not save checksums for module source code. Without a checksum, 'go list' will not report the location of the source code even if it is present, in order to prevent accidental access of mismatched code. Downloading an explicit module here also more clearly expresses the intent of the test (“download this module and see where it is”), and may be somewhat more efficient (since the test doesn't need source code for the other modules in the build list). Updates #45332 Change-Id: Ic589b22478e3ed140b95365bb6729101dd598ccc Reviewed-on: https://go-review.googlesource.com/c/go/+/321956 Trust: Bryan C. Mills Run-TryBot: Bryan C. Mills Reviewed-by: Dmitri Shuralyov TryBot-Result: Go Bot --- src/cmd/go/testdata/script/mod_replace.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cmd/go/testdata/script/mod_replace.txt b/src/cmd/go/testdata/script/mod_replace.txt index dc9667f1d0d..a0a367fb1db 100644 --- a/src/cmd/go/testdata/script/mod_replace.txt +++ b/src/cmd/go/testdata/script/mod_replace.txt @@ -48,7 +48,7 @@ stderr 'module rsc.io/quote/v3@upgrade found \(v3.0.0, replaced by ./local/rsc.i # The reported Dir and GoMod for a replaced module should be accurate. cp go.mod.orig go.mod go mod edit -replace=rsc.io/quote/v3=not-rsc.io/quote@v0.1.0-nomod -go mod download +go mod download rsc.io/quote/v3 go list -m -f '{{.Path}} {{.Version}} {{.Dir}} {{.GoMod}}{{with .Replace}} => {{.Path}} {{.Version}} {{.Dir}} {{.GoMod}}{{end}}' rsc.io/quote/v3 stdout '^rsc.io/quote/v3 v3.0.0 '$GOPATH'[/\\]pkg[/\\]mod[/\\]not-rsc.io[/\\]quote@v0.1.0-nomod '$GOPATH'[/\\]pkg[/\\]mod[/\\]cache[/\\]download[/\\]not-rsc.io[/\\]quote[/\\]@v[/\\]v0.1.0-nomod.mod => not-rsc.io/quote v0.1.0-nomod '$GOPATH'[/\\]pkg[/\\]mod[/\\]not-rsc.io[/\\]quote@v0.1.0-nomod '$GOPATH'[/\\]pkg[/\\]mod[/\\]cache[/\\]download[/\\]not-rsc.io[/\\]quote[/\\]@v[/\\]v0.1.0-nomod.mod$' From 217f5dd496e14f0e0617c9efe0509073dec95d61 Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Wed, 12 May 2021 13:55:59 -0700 Subject: [PATCH 060/100] doc: document additional atomic.Value methods For #44513. Fixes #46022. Change-Id: Id1d87fbd4034461953760ce77201f87ed723ff88 Reviewed-on: https://go-review.googlesource.com/c/go/+/319549 Trust: Keith Randall Reviewed-by: Ian Lance Taylor --- doc/go1.17.html | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/doc/go1.17.html b/doc/go1.17.html index f00c649e048..5ab99c29edb 100644 --- a/doc/go1.17.html +++ b/doc/go1.17.html @@ -507,7 +507,9 @@ Do not send CLs removing the interior tags from such phrases.
sync/atomic

- TODO: https://golang.org/cl/241678: add (*Value).Swap and (*Value).CompareAndSwap + atomic.Value now has Swap and + CompareAndSwap methods that provide + additional atomic operations.

From f87194cbd7e79eef07c897a6240fbf2dc115f9ff Mon Sep 17 00:00:00 2001 From: ian woolf Date: Fri, 7 May 2021 16:31:00 +0800 Subject: [PATCH 061/100] doc/go1.17: document changes to net/http package Changes include: * ReadRequest function now returns an error when a request has multiple Host headers. For #44513. Updates #46015. Change-Id: I48ea7c5cee3f1d1a247035fd37191362a53d1f04 Reviewed-on: https://go-review.googlesource.com/c/go/+/317914 Reviewed-by: Dmitri Shuralyov Trust: Heschi Kreinick --- doc/go1.17.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/doc/go1.17.html b/doc/go1.17.html index 5ab99c29edb..46ee1da6fa6 100644 --- a/doc/go1.17.html +++ b/doc/go1.17.html @@ -423,7 +423,8 @@ Do not send CLs removing the interior tags from such phrases.

- TODO: https://golang.org/cl/308952: make ReadRequest return an error when requests have multiple Host headers + The ReadRequest function + now returns an error when the request has multiple Host headers.

From cca23a73733ff166722c69359f0bb45e12ccaa2b Mon Sep 17 00:00:00 2001 From: Than McIntosh Date: Fri, 21 May 2021 10:53:10 -0400 Subject: [PATCH 062/100] cmd/compile: revert CL/316890 This is a revert of https://go-review.googlesource.com/c/go/+/316890, which has positive effects on debugging + DWARF variable locations for register parameters when the reg abi is in effect, but also turns out to interact badly with the register allocator. Fixes #46304. Change-Id: I624bd980493411a9cde45d44fcd3c46cad796909 Reviewed-on: https://go-review.googlesource.com/c/go/+/321830 Trust: Than McIntosh Run-TryBot: Than McIntosh Reviewed-by: Cherry Mui TryBot-Result: Go Bot --- src/cmd/compile/internal/ssa/expand_calls.go | 16 ----- test/fixedbugs/issue46304.go | 76 ++++++++++++++++++++ 2 files changed, 76 insertions(+), 16 deletions(-) create mode 100644 test/fixedbugs/issue46304.go diff --git a/src/cmd/compile/internal/ssa/expand_calls.go b/src/cmd/compile/internal/ssa/expand_calls.go index d37d06f8e71..7e973ab2059 100644 --- a/src/cmd/compile/internal/ssa/expand_calls.go +++ b/src/cmd/compile/internal/ssa/expand_calls.go @@ -1717,22 +1717,6 @@ func (x *expandState) newArgToMemOrRegs(baseArg, toReplace *Value, offset int64, } else { w = baseArg.Block.NewValue0IA(pos, op, t, auxInt, aux) } - // If we are creating an OpArgIntReg/OpArgFloatReg that - // corresponds to an in-param that fits entirely in a register, - // then enter it into the name/value table. The LocalSlot - // is somewhat fictitious, since there is no incoming live - // memory version of the parameter, but we need an entry in - // NamedValues in order for ssa debug tracking to include - // the value in the tracking analysis. - if len(pa.Registers) == 1 { - loc := LocalSlot{N: aux.Name, Type: t, Off: 0} - values, ok := x.f.NamedValues[loc] - if !ok { - ploc := x.f.localSlotAddr(loc) - x.f.Names = append(x.f.Names, ploc) - } - x.f.NamedValues[loc] = append(values, w) - } x.commonArgs[key] = w if toReplace != nil { toReplace.copyOf(w) diff --git a/test/fixedbugs/issue46304.go b/test/fixedbugs/issue46304.go new file mode 100644 index 00000000000..b8ecfc93a59 --- /dev/null +++ b/test/fixedbugs/issue46304.go @@ -0,0 +1,76 @@ +// run + +// Copyright 2021 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. + +// This testcase caused a crash when the register ABI was in effect, +// on amd64 (problem with register allocation). + +package main + +type Op struct { + tag string + _x []string + _q [20]uint64 + plist []P +} + +type P struct { + tag string + _x [10]uint64 + b bool +} + +type M int + +//go:noinline +func (w *M) walkP(p *P) *P { + np := &P{} + *np = *p + np.tag += "new" + return np +} + +func (w *M) walkOp(op *Op) *Op { + if op == nil { + return nil + } + + orig := op + cloned := false + clone := func() { + if !cloned { + cloned = true + op = &Op{} + *op = *orig + } + } + + pCloned := false + for i := range op.plist { + if s := w.walkP(&op.plist[i]); s != &op.plist[i] { + if !pCloned { + pCloned = true + clone() + op.plist = make([]P, len(orig.plist)) + copy(op.plist, orig.plist) + } + op.plist[i] = *s + } + } + + return op +} + +func main() { + var ww M + w := &ww + p1 := P{tag: "a"} + p1._x[1] = 9 + o := Op{tag: "old", plist: []P{p1}} + no := w.walkOp(&o) + if no.plist[0].tag != "anew" { + panic("bad") + } +} From 05819bc104c3021d20ad21aa685fb6b4db35ceb0 Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Fri, 14 May 2021 23:14:22 -0400 Subject: [PATCH 063/100] cmd/go/internal/modcmd: factor out a type for flags whose arguments are Go versions For #46141 Updates #45094 Change-Id: I6553600c69273762a81795ef021c66f4e0872b6b Reviewed-on: https://go-review.googlesource.com/c/go/+/321069 Trust: Bryan C. Mills Run-TryBot: Bryan C. Mills TryBot-Result: Go Bot Reviewed-by: Jay Conrod --- src/cmd/go/internal/modcmd/edit.go | 2 +- src/cmd/go/internal/modcmd/tidy.go | 42 ++++++++++++++----- src/cmd/go/internal/modload/init.go | 10 ++--- src/cmd/go/internal/modload/load.go | 4 +- src/cmd/go/internal/modload/modfile.go | 2 +- .../go/testdata/script/mod_tidy_version.txt | 12 +++++- 6 files changed, 52 insertions(+), 20 deletions(-) diff --git a/src/cmd/go/internal/modcmd/edit.go b/src/cmd/go/internal/modcmd/edit.go index 79a93ca44b9..e856e7c6304 100644 --- a/src/cmd/go/internal/modcmd/edit.go +++ b/src/cmd/go/internal/modcmd/edit.go @@ -196,7 +196,7 @@ func runEdit(ctx context.Context, cmd *base.Command, args []string) { if *editGo != "" { if !modfile.GoVersionRE.MatchString(*editGo) { - base.Fatalf(`go mod: invalid -go option; expecting something like "-go 1.12"`) + base.Fatalf(`go mod: invalid -go option; expecting something like "-go %s"`, modload.LatestGoVersion()) } } diff --git a/src/cmd/go/internal/modcmd/tidy.go b/src/cmd/go/internal/modcmd/tidy.go index c72ec30a572..9af624028a3 100644 --- a/src/cmd/go/internal/modcmd/tidy.go +++ b/src/cmd/go/internal/modcmd/tidy.go @@ -12,8 +12,10 @@ import ( "cmd/go/internal/imports" "cmd/go/internal/modload" "context" + "fmt" "golang.org/x/mod/modfile" + "golang.org/x/mod/semver" ) var cmdTidy = &base.Command{ @@ -44,28 +46,48 @@ See https://golang.org/ref/mod#go-mod-tidy for more about 'go mod tidy'. } var ( - tidyE bool // if true, report errors but proceed anyway. - tidyGo string // go version to write to the tidied go.mod file (toggles lazy loading) + tidyE bool // if true, report errors but proceed anyway. + tidyGo goVersionFlag // go version to write to the tidied go.mod file (toggles lazy loading) ) func init() { cmdTidy.Flag.BoolVar(&cfg.BuildV, "v", false, "") cmdTidy.Flag.BoolVar(&tidyE, "e", false, "") - cmdTidy.Flag.StringVar(&tidyGo, "go", "", "") + cmdTidy.Flag.Var(&tidyGo, "go", "") base.AddModCommonFlags(&cmdTidy.Flag) } +// A goVersionFlag is a flag.Value representing a supported Go version. +// +// (Note that the -go argument to 'go mod edit' is *not* a goVersionFlag. +// It intentionally allows newer-than-supported versions as arguments.) +type goVersionFlag struct { + v string +} + +func (f *goVersionFlag) String() string { return f.v } +func (f *goVersionFlag) Get() interface{} { return f.v } + +func (f *goVersionFlag) Set(s string) error { + if s != "" { + latest := modload.LatestGoVersion() + if !modfile.GoVersionRE.MatchString(s) { + return fmt.Errorf("expecting a Go version like %q", latest) + } + if semver.Compare("v"+s, "v"+latest) > 0 { + return fmt.Errorf("maximum supported Go version is %s", latest) + } + } + + f.v = s + return nil +} + func runTidy(ctx context.Context, cmd *base.Command, args []string) { if len(args) > 0 { base.Fatalf("go mod tidy: no arguments allowed") } - if tidyGo != "" { - if !modfile.GoVersionRE.MatchString(tidyGo) { - base.Fatalf(`go mod: invalid -go option %q; expecting something like "-go 1.17"`, tidyGo) - } - } - // Tidy aims to make 'go test' reproducible for any package in 'all', so we // need to include test dependencies. For modules that specify go 1.15 or // earlier this is a no-op (because 'all' saturates transitive test @@ -80,7 +102,7 @@ func runTidy(ctx context.Context, cmd *base.Command, args []string) { modload.RootMode = modload.NeedRoot modload.LoadPackages(ctx, modload.PackageOpts{ - GoVersion: tidyGo, + GoVersion: tidyGo.String(), Tags: imports.AnyTags(), Tidy: true, VendorModulesInGOROOTSrc: true, diff --git a/src/cmd/go/internal/modload/init.go b/src/cmd/go/internal/modload/init.go index 5cdea12cd3e..e358230e748 100644 --- a/src/cmd/go/internal/modload/init.go +++ b/src/cmd/go/internal/modload/init.go @@ -405,7 +405,7 @@ func loadModFile(ctx context.Context) (rs *Requirements, needCommit bool) { if modRoot == "" { Target = module.Version{Path: "command-line-arguments"} targetPrefix = "command-line-arguments" - goVersion := latestGoVersion() + goVersion := LatestGoVersion() rawGoVersion.Store(Target, goVersion) requirements = newRequirements(modDepthFromGoVersion(goVersion), nil, nil) return requirements, false @@ -448,7 +448,7 @@ func loadModFile(ctx context.Context) (rs *Requirements, needCommit bool) { // TODO(#45551): Do something more principled instead of checking // cfg.CmdName directly here. if cfg.BuildMod == "mod" && cfg.CmdName != "mod graph" && cfg.CmdName != "mod why" { - addGoStmt(latestGoVersion()) + addGoStmt(LatestGoVersion()) if go117EnableLazyLoading { // We need to add a 'go' version to the go.mod file, but we must assume // that its existing contents match something between Go 1.11 and 1.16. @@ -500,7 +500,7 @@ func CreateModFile(ctx context.Context, modPath string) { modFile = new(modfile.File) modFile.AddModuleStmt(modPath) initTarget(modFile.Module.Mod) - addGoStmt(latestGoVersion()) // Add the go directive before converted module requirements. + addGoStmt(LatestGoVersion()) // Add the go directive before converted module requirements. convertedFrom, err := convertLegacyConfig(modPath) if convertedFrom != "" { @@ -793,9 +793,9 @@ func addGoStmt(v string) { rawGoVersion.Store(Target, v) } -// latestGoVersion returns the latest version of the Go language supported by +// LatestGoVersion returns the latest version of the Go language supported by // this toolchain, like "1.17". -func latestGoVersion() string { +func LatestGoVersion() string { tags := build.Default.ReleaseTags version := tags[len(tags)-1] if !strings.HasPrefix(version, "go") || !modfile.GoVersionRE.MatchString(version[2:]) { diff --git a/src/cmd/go/internal/modload/load.go b/src/cmd/go/internal/modload/load.go index 83fc7c09c37..23ee3824f31 100644 --- a/src/cmd/go/internal/modload/load.go +++ b/src/cmd/go/internal/modload/load.go @@ -931,8 +931,8 @@ func loadFromRoots(ctx context.Context, params loaderParams) *loader { ld.allClosesOverTests = true } - if ld.Tidy && semver.Compare(goVersionV, "v"+latestGoVersion()) > 0 { - ld.errorf("go mod tidy: go.mod file indicates go %s, but maximum supported version is %s\n", params.GoVersion, latestGoVersion()) + if ld.Tidy && semver.Compare(goVersionV, "v"+LatestGoVersion()) > 0 { + ld.errorf("go mod tidy: go.mod file indicates go %s, but maximum supported version is %s\n", params.GoVersion, LatestGoVersion()) base.ExitIfErrors() } diff --git a/src/cmd/go/internal/modload/modfile.go b/src/cmd/go/internal/modload/modfile.go index bafff3e080e..a9c3a91d35d 100644 --- a/src/cmd/go/internal/modload/modfile.go +++ b/src/cmd/go/internal/modload/modfile.go @@ -55,7 +55,7 @@ var modFile *modfile.File // in modFile are intepreted, or the latest Go version if modFile is nil. func modFileGoVersion() string { if modFile == nil { - return latestGoVersion() + return LatestGoVersion() } if modFile.Go == nil || modFile.Go.Version == "" { // The main module necessarily has a go.mod file, and that file lacks a diff --git a/src/cmd/go/testdata/script/mod_tidy_version.txt b/src/cmd/go/testdata/script/mod_tidy_version.txt index 5441d9cc06f..eaa6ee7b0db 100644 --- a/src/cmd/go/testdata/script/mod_tidy_version.txt +++ b/src/cmd/go/testdata/script/mod_tidy_version.txt @@ -32,12 +32,22 @@ cp go.mod go.mod.orig + # An invalid argument should be rejected. ! go mod tidy -go=bananas -stderr '^go mod: invalid -go option "bananas"; expecting something like "-go 1.17"$' +stderr '^invalid value "bananas" for flag -go: expecting a Go version like "'$goversion'"$' cmp go.mod go.mod.orig +! go mod tidy -go=0.9 +stderr '^invalid value "0.9" for flag -go: expecting a Go version like "'$goversion'"$' + +! go mod tidy -go=2000.0 +stderr '^invalid value "2000.0" for flag -go: maximum supported Go version is '$goversion'$' + + +# Supported versions should change the go.mod file to be tidy according to the +# indicated version. go mod tidy -go=1.15 cmp go.mod go.mod.115 From 52d7033ff6d56094b7fa852bbdf51b4525bd6bb2 Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Fri, 14 May 2021 16:51:57 -0400 Subject: [PATCH 064/100] cmd/go/internal/modload: set the default GoVersion in a single location For #46141 Updates #36460 Change-Id: Ie4c13c73a451650d1e8abb8e5cebfc30d0a71a70 Reviewed-on: https://go-review.googlesource.com/c/go/+/321070 Trust: Bryan C. Mills Run-TryBot: Bryan C. Mills TryBot-Result: Go Bot Reviewed-by: Jay Conrod --- src/cmd/go/internal/modload/load.go | 41 ++++++++++++----------------- 1 file changed, 17 insertions(+), 24 deletions(-) diff --git a/src/cmd/go/internal/modload/load.go b/src/cmd/go/internal/modload/load.go index 23ee3824f31..37b0032d43e 100644 --- a/src/cmd/go/internal/modload/load.go +++ b/src/cmd/go/internal/modload/load.go @@ -314,10 +314,6 @@ func LoadPackages(ctx context.Context, opts PackageOpts, patterns ...string) (ma initialRS, _ := loadModFile(ctx) // Ignore needCommit — we're going to commit at the end regardless. - if opts.GoVersion == "" { - opts.GoVersion = modFileGoVersion() - } - ld := loadFromRoots(ctx, loaderParams{ PackageOpts: opts, requirements: initialRS, @@ -380,7 +376,7 @@ func LoadPackages(ctx context.Context, opts PackageOpts, patterns ...string) (ma // Success! Update go.mod and go.sum (if needed) and return the results. loaded = ld - commitRequirements(ctx, opts.GoVersion, loaded.requirements) + commitRequirements(ctx, loaded.GoVersion, loaded.requirements) for _, pkg := range ld.pkgs { if !pkg.isTest() { @@ -605,10 +601,8 @@ func ImportFromFiles(ctx context.Context, gofiles []string) { base.Fatalf("go: %v", err) } - goVersion := modFileGoVersion() loaded = loadFromRoots(ctx, loaderParams{ PackageOpts: PackageOpts{ - GoVersion: goVersion, Tags: tags, ResolveMissingImports: true, SilencePackageErrors: true, @@ -620,7 +614,7 @@ func ImportFromFiles(ctx context.Context, gofiles []string) { return roots }, }) - commitRequirements(ctx, goVersion, loaded.requirements) + commitRequirements(ctx, loaded.GoVersion, loaded.requirements) } // DirImportPath returns the effective import path for dir, @@ -921,26 +915,25 @@ func loadFromRoots(ctx context.Context, params loaderParams) *loader { work: par.NewQueue(runtime.GOMAXPROCS(0)), } - if params.GoVersion != "" { - goVersionV := "v" + params.GoVersion - if semver.Compare(goVersionV, narrowAllVersionV) < 0 && !ld.UseVendorAll { - // The module's go version explicitly predates the change in "all" for lazy - // loading, so continue to use the older interpretation. - // (If params.GoVersion is empty, we are probably not in any module at all - // and should use the latest semantics.) - ld.allClosesOverTests = true - } + if ld.GoVersion == "" { + ld.GoVersion = modFileGoVersion() - if ld.Tidy && semver.Compare(goVersionV, "v"+LatestGoVersion()) > 0 { - ld.errorf("go mod tidy: go.mod file indicates go %s, but maximum supported version is %s\n", params.GoVersion, LatestGoVersion()) + if ld.Tidy && semver.Compare("v"+ld.GoVersion, "v"+LatestGoVersion()) > 0 { + ld.errorf("go mod tidy: go.mod file indicates go %s, but maximum supported version is %s\n", ld.GoVersion, LatestGoVersion()) base.ExitIfErrors() } + } - var err error - ld.requirements, err = convertDepth(ctx, ld.requirements, modDepthFromGoVersion(params.GoVersion)) - if err != nil { - ld.errorf("go: %v\n", err) - } + if semver.Compare("v"+ld.GoVersion, narrowAllVersionV) < 0 && !ld.UseVendorAll { + // The module's go version explicitly predates the change in "all" for lazy + // loading, so continue to use the older interpretation. + ld.allClosesOverTests = true + } + + var err error + ld.requirements, err = convertDepth(ctx, ld.requirements, modDepthFromGoVersion(ld.GoVersion)) + if err != nil { + ld.errorf("go: %v\n", err) } if ld.requirements.depth == eager { From 4356e7e85fcd8f59de6bc1fd1db6e4f01a92f19e Mon Sep 17 00:00:00 2001 From: Michael Anthony Knyszek Date: Fri, 21 May 2021 20:30:02 +0000 Subject: [PATCH 065/100] runtime: account for spill slots in Windows callback compilation The Go ABI, as it stands, requires spill space to be reserved for register arguments. syscall.NewCallback (because of compileCallback) does not actually reserve this space, leading to issues if the Go code it invokes actually makes use of it. Fixes #46301. Change-Id: Idbc3578accaaaa29e4ba32291ef08d464da0b7b0 Reviewed-on: https://go-review.googlesource.com/c/go/+/322029 Trust: Michael Knyszek Run-TryBot: Michael Knyszek TryBot-Result: Go Bot Reviewed-by: Egon Elbre Reviewed-by: Cherry Mui --- src/runtime/syscall_windows.go | 23 ++++++++++++++++++++--- src/runtime/syscall_windows_test.go | 15 +++++++++++++++ 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/runtime/syscall_windows.go b/src/runtime/syscall_windows.go index 6b9195bcd52..4763a440e7e 100644 --- a/src/runtime/syscall_windows.go +++ b/src/runtime/syscall_windows.go @@ -64,6 +64,7 @@ type abiDesc struct { srcStackSize uintptr // stdcall/fastcall stack space tracking dstStackSize uintptr // Go stack space used + dstSpill uintptr // Extra stack space for argument spill slots dstRegisters int // Go ABI int argument registers used // retOffset is the offset of the uintptr-sized result in the Go @@ -110,7 +111,14 @@ func (p *abiDesc) assignArg(t *_type) { // arguments. The same is true on arm. oldParts := p.parts - if !p.tryRegAssignArg(t, 0) { + if p.tryRegAssignArg(t, 0) { + // Account for spill space. + // + // TODO(mknyszek): Remove this when we no longer have + // caller reserved spill space. + p.dstSpill = alignUp(p.dstSpill, uintptr(t.align)) + p.dstSpill += t.size + } else { // Register assignment failed. // Undo the work and stack assign. p.parts = oldParts @@ -277,7 +285,11 @@ func compileCallback(fn eface, cdecl bool) (code uintptr) { abiMap.dstStackSize += sys.PtrSize } - if abiMap.dstStackSize > callbackMaxFrame { + // TODO(mknyszek): Remove dstSpill from this calculation when we no longer have + // caller reserved spill space. + frameSize := alignUp(abiMap.dstStackSize, sys.PtrSize) + frameSize += abiMap.dstSpill + if frameSize > callbackMaxFrame { panic("compileCallback: function argument frame too large") } @@ -356,9 +368,14 @@ func callbackWrap(a *callbackArgs) { } } + // TODO(mknyszek): Remove this when we no longer have + // caller reserved spill space. + frameSize := alignUp(c.abiMap.dstStackSize, sys.PtrSize) + frameSize += c.abiMap.dstSpill + // Even though this is copying back results, we can pass a nil // type because those results must not require write barriers. - reflectcall(nil, unsafe.Pointer(c.fn), noescape(goArgs), uint32(c.abiMap.dstStackSize), uint32(c.abiMap.retOffset), uint32(c.abiMap.dstStackSize), ®s) + reflectcall(nil, unsafe.Pointer(c.fn), noescape(goArgs), uint32(c.abiMap.dstStackSize), uint32(c.abiMap.retOffset), uint32(frameSize), ®s) // Extract the result. // diff --git a/src/runtime/syscall_windows_test.go b/src/runtime/syscall_windows_test.go index 5e9694d444c..e3f772ac4bb 100644 --- a/src/runtime/syscall_windows_test.go +++ b/src/runtime/syscall_windows_test.go @@ -389,6 +389,10 @@ var cbFuncs = []cbFunc{ {func(i1, i2, i3, i4, i5 uint8Pair) uintptr { return uintptr(i1.x + i1.y + i2.x + i2.y + i3.x + i3.y + i4.x + i4.y + i5.x + i5.y) }}, + {func(i1, i2, i3, i4, i5, i6, i7, i8, i9 uint32) uintptr { + runtime.GC() + return uintptr(i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8 + i9) + }}, } //go:registerparams @@ -461,6 +465,16 @@ func sum5andPair(i1, i2, i3, i4, i5 uint8Pair) uintptr { return uintptr(i1.x + i1.y + i2.x + i2.y + i3.x + i3.y + i4.x + i4.y + i5.x + i5.y) } +// This test forces a GC. The idea is to have enough arguments +// that insufficient spill slots allocated (according to the ABI) +// may cause compiler-generated spills to clobber the return PC. +// Then, the GC stack scanning will catch that. +//go:registerparams +func sum9andGC(i1, i2, i3, i4, i5, i6, i7, i8, i9 uint32) uintptr { + runtime.GC() + return uintptr(i1 + i2 + i3 + i4 + i5 + i6 + i7 + i8 + i9) +} + // TODO(register args): Remove this once we switch to using the register // calling convention by default, since this is redundant with the existing // tests. @@ -479,6 +493,7 @@ var cbFuncsRegABI = []cbFunc{ {sum9int8}, {sum5mix}, {sum5andPair}, + {sum9andGC}, } func getCallbackTestFuncs() []cbFunc { From a22e3172200d4bdd0afcbbe6564dbb67fea4b03a Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Sat, 22 May 2021 21:59:00 -0700 Subject: [PATCH 066/100] cmd/compile: always include underlying type for map types This is a different fix for #37716. Should help make the fix for #46283 easier, since we will no longer need to keep compiler-generated hash functions and the runtime hash function in sync. Change-Id: I84cb93144e425dcd03afc552b5fbd0f2d2cc6d39 Reviewed-on: https://go-review.googlesource.com/c/go/+/322150 Trust: Keith Randall Run-TryBot: Keith Randall TryBot-Result: Go Bot Reviewed-by: Cherry Mui --- .../compile/internal/reflectdata/reflect.go | 9 +++ src/cmd/internal/objabi/reloctype.go | 3 + src/cmd/internal/objabi/reloctype_string.go | 71 ++++++++++--------- src/runtime/alg.go | 19 +---- src/runtime/export_test.go | 25 ------- src/runtime/hash_test.go | 49 ------------- 6 files changed, 49 insertions(+), 127 deletions(-) diff --git a/src/cmd/compile/internal/reflectdata/reflect.go b/src/cmd/compile/internal/reflectdata/reflect.go index 8c0e33f6df1..b3688fca673 100644 --- a/src/cmd/compile/internal/reflectdata/reflect.go +++ b/src/cmd/compile/internal/reflectdata/reflect.go @@ -1112,6 +1112,15 @@ func writeType(t *types.Type) *obj.LSym { } ot = objw.Uint32(lsym, ot, flags) ot = dextratype(lsym, ot, t, 0) + if u := t.Underlying(); u != t { + // If t is a named map type, also keep the underlying map + // type live in the binary. This is important to make sure that + // a named map and that same map cast to its underlying type via + // reflection, use the same hash function. See issue 37716. + r := obj.Addrel(lsym) + r.Sym = writeType(u) + r.Type = objabi.R_KEEP + } case types.TPTR: if t.Elem().Kind() == types.TANY { diff --git a/src/cmd/internal/objabi/reloctype.go b/src/cmd/internal/objabi/reloctype.go index ea55fa3b0ad..52827a6deee 100644 --- a/src/cmd/internal/objabi/reloctype.go +++ b/src/cmd/internal/objabi/reloctype.go @@ -101,6 +101,9 @@ const ( // *rtype, and may be set to zero by the linker if it determines the method // text is unreachable by the linked program. R_METHODOFF + // R_KEEP tells the linker to keep the referred-to symbol in the final binary + // if the symbol containing the R_KEEP relocation is in the final binary. + R_KEEP R_POWER_TOC R_GOTPCREL // R_JMPMIPS (only used on mips64) resolves to non-PC-relative target address diff --git a/src/cmd/internal/objabi/reloctype_string.go b/src/cmd/internal/objabi/reloctype_string.go index 8882d19f883..4638ef14d91 100644 --- a/src/cmd/internal/objabi/reloctype_string.go +++ b/src/cmd/internal/objabi/reloctype_string.go @@ -34,44 +34,45 @@ func _() { _ = x[R_USEIFACE-24] _ = x[R_USEIFACEMETHOD-25] _ = x[R_METHODOFF-26] - _ = x[R_POWER_TOC-27] - _ = x[R_GOTPCREL-28] - _ = x[R_JMPMIPS-29] - _ = x[R_DWARFSECREF-30] - _ = x[R_DWARFFILEREF-31] - _ = x[R_ARM64_TLS_LE-32] - _ = x[R_ARM64_TLS_IE-33] - _ = x[R_ARM64_GOTPCREL-34] - _ = x[R_ARM64_GOT-35] - _ = x[R_ARM64_PCREL-36] - _ = x[R_ARM64_LDST8-37] - _ = x[R_ARM64_LDST16-38] - _ = x[R_ARM64_LDST32-39] - _ = x[R_ARM64_LDST64-40] - _ = x[R_ARM64_LDST128-41] - _ = x[R_POWER_TLS_LE-42] - _ = x[R_POWER_TLS_IE-43] - _ = x[R_POWER_TLS-44] - _ = x[R_ADDRPOWER_DS-45] - _ = x[R_ADDRPOWER_GOT-46] - _ = x[R_ADDRPOWER_PCREL-47] - _ = x[R_ADDRPOWER_TOCREL-48] - _ = x[R_ADDRPOWER_TOCREL_DS-49] - _ = x[R_RISCV_PCREL_ITYPE-50] - _ = x[R_RISCV_PCREL_STYPE-51] - _ = x[R_RISCV_TLS_IE_ITYPE-52] - _ = x[R_RISCV_TLS_IE_STYPE-53] - _ = x[R_PCRELDBL-54] - _ = x[R_ADDRMIPSU-55] - _ = x[R_ADDRMIPSTLS-56] - _ = x[R_ADDRCUOFF-57] - _ = x[R_WASMIMPORT-58] - _ = x[R_XCOFFREF-59] + _ = x[R_KEEP-27] + _ = x[R_POWER_TOC-28] + _ = x[R_GOTPCREL-29] + _ = x[R_JMPMIPS-30] + _ = x[R_DWARFSECREF-31] + _ = x[R_DWARFFILEREF-32] + _ = x[R_ARM64_TLS_LE-33] + _ = x[R_ARM64_TLS_IE-34] + _ = x[R_ARM64_GOTPCREL-35] + _ = x[R_ARM64_GOT-36] + _ = x[R_ARM64_PCREL-37] + _ = x[R_ARM64_LDST8-38] + _ = x[R_ARM64_LDST16-39] + _ = x[R_ARM64_LDST32-40] + _ = x[R_ARM64_LDST64-41] + _ = x[R_ARM64_LDST128-42] + _ = x[R_POWER_TLS_LE-43] + _ = x[R_POWER_TLS_IE-44] + _ = x[R_POWER_TLS-45] + _ = x[R_ADDRPOWER_DS-46] + _ = x[R_ADDRPOWER_GOT-47] + _ = x[R_ADDRPOWER_PCREL-48] + _ = x[R_ADDRPOWER_TOCREL-49] + _ = x[R_ADDRPOWER_TOCREL_DS-50] + _ = x[R_RISCV_PCREL_ITYPE-51] + _ = x[R_RISCV_PCREL_STYPE-52] + _ = x[R_RISCV_TLS_IE_ITYPE-53] + _ = x[R_RISCV_TLS_IE_STYPE-54] + _ = x[R_PCRELDBL-55] + _ = x[R_ADDRMIPSU-56] + _ = x[R_ADDRMIPSTLS-57] + _ = x[R_ADDRCUOFF-58] + _ = x[R_WASMIMPORT-59] + _ = x[R_XCOFFREF-60] } -const _RelocType_name = "R_ADDRR_ADDRPOWERR_ADDRARM64R_ADDRMIPSR_ADDROFFR_SIZER_CALLR_CALLARMR_CALLARM64R_CALLINDR_CALLPOWERR_CALLMIPSR_CALLRISCVR_CONSTR_PCRELR_TLS_LER_TLS_IER_GOTOFFR_PLT0R_PLT1R_PLT2R_USEFIELDR_USETYPER_USEIFACER_USEIFACEMETHODR_METHODOFFR_POWER_TOCR_GOTPCRELR_JMPMIPSR_DWARFSECREFR_DWARFFILEREFR_ARM64_TLS_LER_ARM64_TLS_IER_ARM64_GOTPCRELR_ARM64_GOTR_ARM64_PCRELR_ARM64_LDST8R_ARM64_LDST16R_ARM64_LDST32R_ARM64_LDST64R_ARM64_LDST128R_POWER_TLS_LER_POWER_TLS_IER_POWER_TLSR_ADDRPOWER_DSR_ADDRPOWER_GOTR_ADDRPOWER_PCRELR_ADDRPOWER_TOCRELR_ADDRPOWER_TOCREL_DSR_RISCV_PCREL_ITYPER_RISCV_PCREL_STYPER_RISCV_TLS_IE_ITYPER_RISCV_TLS_IE_STYPER_PCRELDBLR_ADDRMIPSUR_ADDRMIPSTLSR_ADDRCUOFFR_WASMIMPORTR_XCOFFREF" +const _RelocType_name = "R_ADDRR_ADDRPOWERR_ADDRARM64R_ADDRMIPSR_ADDROFFR_SIZER_CALLR_CALLARMR_CALLARM64R_CALLINDR_CALLPOWERR_CALLMIPSR_CALLRISCVR_CONSTR_PCRELR_TLS_LER_TLS_IER_GOTOFFR_PLT0R_PLT1R_PLT2R_USEFIELDR_USETYPER_USEIFACER_USEIFACEMETHODR_METHODOFFR_KEEPR_POWER_TOCR_GOTPCRELR_JMPMIPSR_DWARFSECREFR_DWARFFILEREFR_ARM64_TLS_LER_ARM64_TLS_IER_ARM64_GOTPCRELR_ARM64_GOTR_ARM64_PCRELR_ARM64_LDST8R_ARM64_LDST16R_ARM64_LDST32R_ARM64_LDST64R_ARM64_LDST128R_POWER_TLS_LER_POWER_TLS_IER_POWER_TLSR_ADDRPOWER_DSR_ADDRPOWER_GOTR_ADDRPOWER_PCRELR_ADDRPOWER_TOCRELR_ADDRPOWER_TOCREL_DSR_RISCV_PCREL_ITYPER_RISCV_PCREL_STYPER_RISCV_TLS_IE_ITYPER_RISCV_TLS_IE_STYPER_PCRELDBLR_ADDRMIPSUR_ADDRMIPSTLSR_ADDRCUOFFR_WASMIMPORTR_XCOFFREF" -var _RelocType_index = [...]uint16{0, 6, 17, 28, 38, 47, 53, 59, 68, 79, 88, 99, 109, 120, 127, 134, 142, 150, 158, 164, 170, 176, 186, 195, 205, 221, 232, 243, 253, 262, 275, 289, 303, 317, 333, 344, 357, 370, 384, 398, 412, 427, 441, 455, 466, 480, 495, 512, 530, 551, 570, 589, 609, 629, 639, 650, 663, 674, 686, 696} +var _RelocType_index = [...]uint16{0, 6, 17, 28, 38, 47, 53, 59, 68, 79, 88, 99, 109, 120, 127, 134, 142, 150, 158, 164, 170, 176, 186, 195, 205, 221, 232, 238, 249, 259, 268, 281, 295, 309, 323, 339, 350, 363, 376, 390, 404, 418, 433, 447, 461, 472, 486, 501, 518, 536, 557, 576, 595, 615, 635, 645, 656, 669, 680, 692, 702} func (i RelocType) String() string { i -= 1 diff --git a/src/runtime/alg.go b/src/runtime/alg.go index 1b3bf1180d9..39c74268421 100644 --- a/src/runtime/alg.go +++ b/src/runtime/alg.go @@ -178,28 +178,11 @@ func typehash(t *_type, p unsafe.Pointer, h uintptr) uintptr { return h case kindStruct: s := (*structtype)(unsafe.Pointer(t)) - memStart := uintptr(0) - memEnd := uintptr(0) for _, f := range s.fields { - if memEnd > memStart && (f.name.isBlank() || f.offset() != memEnd || f.typ.tflag&tflagRegularMemory == 0) { - // flush any pending regular memory hashing - h = memhash(add(p, memStart), h, memEnd-memStart) - memStart = memEnd - } if f.name.isBlank() { continue } - if f.typ.tflag&tflagRegularMemory == 0 { - h = typehash(f.typ, add(p, f.offset()), h) - continue - } - if memStart == memEnd { - memStart = f.offset() - } - memEnd = f.offset() + f.typ.size - } - if memEnd > memStart { - h = memhash(add(p, memStart), h, memEnd-memStart) + h = typehash(f.typ, add(p, f.offset()), h) } return h default: diff --git a/src/runtime/export_test.go b/src/runtime/export_test.go index a6fc1e4785f..c8d01fbb157 100644 --- a/src/runtime/export_test.go +++ b/src/runtime/export_test.go @@ -1148,31 +1148,6 @@ func SemNwait(addr *uint32) uint32 { return atomic.Load(&root.nwait) } -// MapHashCheck computes the hash of the key k for the map m, twice. -// Method 1 uses the built-in hasher for the map. -// Method 2 uses the typehash function (the one used by reflect). -// Returns the two hash values, which should always be equal. -func MapHashCheck(m interface{}, k interface{}) (uintptr, uintptr) { - // Unpack m. - mt := (*maptype)(unsafe.Pointer(efaceOf(&m)._type)) - mh := (*hmap)(efaceOf(&m).data) - - // Unpack k. - kt := efaceOf(&k)._type - var p unsafe.Pointer - if isDirectIface(kt) { - q := efaceOf(&k).data - p = unsafe.Pointer(&q) - } else { - p = efaceOf(&k).data - } - - // Compute the hash functions. - x := mt.hasher(noescape(p), uintptr(mh.hash0)) - y := typehash(kt, noescape(p), uintptr(mh.hash0)) - return x, y -} - // mspan wrapper for testing. //go:notinheap type MSpan mspan diff --git a/src/runtime/hash_test.go b/src/runtime/hash_test.go index 502383557b8..7048874a71f 100644 --- a/src/runtime/hash_test.go +++ b/src/runtime/hash_test.go @@ -8,7 +8,6 @@ import ( "fmt" "math" "math/rand" - "reflect" . "runtime" "strings" "testing" @@ -49,54 +48,6 @@ func TestMemHash64Equality(t *testing.T) { } } -func TestCompilerVsRuntimeHash(t *testing.T) { - // Test to make sure the compiler's hash function and the runtime's hash function agree. - // See issue 37716. - for _, m := range []interface{}{ - map[bool]int{}, - map[int8]int{}, - map[uint8]int{}, - map[int16]int{}, - map[uint16]int{}, - map[int32]int{}, - map[uint32]int{}, - map[int64]int{}, - map[uint64]int{}, - map[int]int{}, - map[uint]int{}, - map[uintptr]int{}, - map[*byte]int{}, - map[chan int]int{}, - map[unsafe.Pointer]int{}, - map[float32]int{}, - map[float64]int{}, - map[complex64]int{}, - map[complex128]int{}, - map[string]int{}, - //map[interface{}]int{}, - //map[interface{F()}]int{}, - map[[8]uint64]int{}, - map[[8]string]int{}, - map[struct{ a, b, c, d int32 }]int{}, // Note: tests AMEM128 - map[struct{ a, b, _, d int32 }]int{}, - map[struct { - a, b int32 - c float32 - d, e [8]byte - }]int{}, - map[struct { - a int16 - b int64 - }]int{}, - } { - k := reflect.New(reflect.TypeOf(m).Key()).Elem().Interface() // the zero key - x, y := MapHashCheck(m, k) - if x != y { - t.Errorf("hashes did not match (%x vs %x) for map %T", x, y, m) - } - } -} - // Smhasher is a torture test for hash functions. // https://code.google.com/p/smhasher/ // This code is a port of some of the Smhasher tests to Go. From b83610699a4ea7da22a146c0eefe0ae4d5ac4610 Mon Sep 17 00:00:00 2001 From: Alessandro Arzilli Date: Sun, 9 May 2021 09:05:45 +0200 Subject: [PATCH 067/100] cmd/compile: record regabi status in DW_AT_producer Records if regabi was enabled during compilation in the DW_AT_producer attribute of each compile unit. This is useful to debuggers that support the debugCall protocol. Change-Id: I5ad2c48ebf126aeb8bfb459b53a1a5304550036a Reviewed-on: https://go-review.googlesource.com/c/go/+/318050 Trust: Dmitri Shuralyov Reviewed-by: Than McIntosh Reviewed-by: Cherry Mui Run-TryBot: Than McIntosh TryBot-Result: Go Bot --- src/cmd/compile/internal/dwarfgen/dwarf.go | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/cmd/compile/internal/dwarfgen/dwarf.go b/src/cmd/compile/internal/dwarfgen/dwarf.go index 5d7dc320aa8..0e22b61bc3f 100644 --- a/src/cmd/compile/internal/dwarfgen/dwarf.go +++ b/src/cmd/compile/internal/dwarfgen/dwarf.go @@ -531,6 +531,14 @@ func RecordFlags(flags ...string) { fmt.Fprintf(&cmd, " -%s=%v", f.Name, getter.Get()) } + // Adds flag to producer string singalling whether regabi is turned on or + // off. + // Once regabi is turned on across the board and the relative GOEXPERIMENT + // knobs no longer exist this code should be removed. + if buildcfg.Experiment.RegabiArgs { + cmd.Write([]byte(" regabi")) + } + if cmd.Len() == 0 { return } From 873401df5b202a751523b8cbd92bf3a8aaf989c8 Mon Sep 17 00:00:00 2001 From: Keith Randall Date: Sun, 23 May 2021 12:38:59 -0700 Subject: [PATCH 068/100] cmd/compile: ensure equal functions don't do unaligned loads On architectures which don't support unaligned loads, make sure we don't generate code that requires them. Generated hash functions also matter in this respect, but they all look ok. Update #37716 Fixes #46283 Change-Id: I6197fdfe04da4428092c99bd871d93738789e16b Reviewed-on: https://go-review.googlesource.com/c/go/+/322151 Trust: Keith Randall Trust: Josh Bleecher Snyder Run-TryBot: Keith Randall Reviewed-by: Cherry Mui Reviewed-by: Josh Bleecher Snyder Reviewed-by: eric fang TryBot-Result: Go Bot --- src/cmd/compile/internal/reflectdata/alg.go | 20 +++++ src/cmd/compile/internal/test/align_test.go | 96 +++++++++++++++++++++ src/cmd/internal/sys/arch.go | 19 ++++ 3 files changed, 135 insertions(+) create mode 100644 src/cmd/compile/internal/test/align_test.go diff --git a/src/cmd/compile/internal/reflectdata/alg.go b/src/cmd/compile/internal/reflectdata/alg.go index d12d9ca0a7d..0707e0b61ca 100644 --- a/src/cmd/compile/internal/reflectdata/alg.go +++ b/src/cmd/compile/internal/reflectdata/alg.go @@ -6,6 +6,7 @@ package reflectdata import ( "fmt" + "math/bits" "sort" "cmd/compile/internal/base" @@ -47,6 +48,11 @@ func eqCanPanic(t *types.Type) bool { func AlgType(t *types.Type) types.AlgKind { a, _ := types.AlgType(t) if a == types.AMEM { + if t.Alignment() < int64(base.Ctxt.Arch.Alignment) && t.Alignment() < t.Width { + // For example, we can't treat [2]int16 as an int32 if int32s require + // 4-byte alignment. See issue 46283. + return a + } switch t.Width { case 0: return types.AMEM0 @@ -769,6 +775,20 @@ func memrun(t *types.Type, start int) (size int64, next int) { if f := t.Field(next); f.Sym.IsBlank() || !isRegularMemory(f.Type) { break } + // For issue 46283, don't combine fields if the resulting load would + // require a larger alignment than the component fields. + if base.Ctxt.Arch.Alignment > 1 { + align := t.Alignment() + if off := t.Field(start).Offset; off&(align-1) != 0 { + // Offset is less aligned than the containing type. + // Use offset to determine alignment. + align = 1 << uint(bits.TrailingZeros64(uint64(off))) + } + size := t.Field(next).End() - t.Field(start).Offset + if size > align { + break + } + } } return t.Field(next-1).End() - t.Field(start).Offset, next } diff --git a/src/cmd/compile/internal/test/align_test.go b/src/cmd/compile/internal/test/align_test.go new file mode 100644 index 00000000000..32afc929736 --- /dev/null +++ b/src/cmd/compile/internal/test/align_test.go @@ -0,0 +1,96 @@ +// Copyright 2021 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. + +// Test to make sure that equality functions (and hash +// functions) don't do unaligned reads on architectures +// that can't do unaligned reads. See issue 46283. + +package test + +import "testing" + +type T1 struct { + x float32 + a, b, c, d int16 // memequal64 +} +type T2 struct { + x float32 + a, b, c, d int32 // memequal128 +} + +type A2 [2]byte // eq uses a 2-byte load +type A4 [4]byte // eq uses a 4-byte load +type A8 [8]byte // eq uses an 8-byte load + +//go:noinline +func cmpT1(p, q *T1) { + if *p != *q { + panic("comparison test wrong") + } +} + +//go:noinline +func cmpT2(p, q *T2) { + if *p != *q { + panic("comparison test wrong") + } +} + +//go:noinline +func cmpA2(p, q *A2) { + if *p != *q { + panic("comparison test wrong") + } +} + +//go:noinline +func cmpA4(p, q *A4) { + if *p != *q { + panic("comparison test wrong") + } +} + +//go:noinline +func cmpA8(p, q *A8) { + if *p != *q { + panic("comparison test wrong") + } +} + +func TestAlignEqual(t *testing.T) { + cmpT1(&T1{}, &T1{}) + cmpT2(&T2{}, &T2{}) + + m1 := map[T1]bool{} + m1[T1{}] = true + m1[T1{}] = false + if len(m1) != 1 { + t.Fatalf("len(m1)=%d, want 1", len(m1)) + } + m2 := map[T2]bool{} + m2[T2{}] = true + m2[T2{}] = false + if len(m2) != 1 { + t.Fatalf("len(m2)=%d, want 1", len(m2)) + } + + type X2 struct { + y byte + z A2 + } + var x2 X2 + cmpA2(&x2.z, &A2{}) + type X4 struct { + y byte + z A4 + } + var x4 X4 + cmpA4(&x4.z, &A4{}) + type X8 struct { + y byte + z A8 + } + var x8 X8 + cmpA8(&x8.z, &A8{}) +} diff --git a/src/cmd/internal/sys/arch.go b/src/cmd/internal/sys/arch.go index e8687363def..a3e39768b6f 100644 --- a/src/cmd/internal/sys/arch.go +++ b/src/cmd/internal/sys/arch.go @@ -40,6 +40,12 @@ type Arch struct { // MinLC is the minimum length of an instruction code. MinLC int + + // Alignment is maximum alignment required by the architecture + // for any (compiler-generated) load or store instruction. + // Loads or stores smaller than Alignment must be naturally aligned. + // Loads or stores larger than Alignment need only be Alignment-aligned. + Alignment int8 } // InFamily reports whether a is a member of any of the specified @@ -60,6 +66,7 @@ var Arch386 = &Arch{ PtrSize: 4, RegSize: 4, MinLC: 1, + Alignment: 1, } var ArchAMD64 = &Arch{ @@ -69,6 +76,7 @@ var ArchAMD64 = &Arch{ PtrSize: 8, RegSize: 8, MinLC: 1, + Alignment: 1, } var ArchARM = &Arch{ @@ -78,6 +86,7 @@ var ArchARM = &Arch{ PtrSize: 4, RegSize: 4, MinLC: 4, + Alignment: 4, // TODO: just for arm5? } var ArchARM64 = &Arch{ @@ -87,6 +96,7 @@ var ArchARM64 = &Arch{ PtrSize: 8, RegSize: 8, MinLC: 4, + Alignment: 1, } var ArchMIPS = &Arch{ @@ -96,6 +106,7 @@ var ArchMIPS = &Arch{ PtrSize: 4, RegSize: 4, MinLC: 4, + Alignment: 4, } var ArchMIPSLE = &Arch{ @@ -105,6 +116,7 @@ var ArchMIPSLE = &Arch{ PtrSize: 4, RegSize: 4, MinLC: 4, + Alignment: 4, } var ArchMIPS64 = &Arch{ @@ -114,6 +126,7 @@ var ArchMIPS64 = &Arch{ PtrSize: 8, RegSize: 8, MinLC: 4, + Alignment: 8, } var ArchMIPS64LE = &Arch{ @@ -123,6 +136,7 @@ var ArchMIPS64LE = &Arch{ PtrSize: 8, RegSize: 8, MinLC: 4, + Alignment: 8, } var ArchPPC64 = &Arch{ @@ -132,6 +146,7 @@ var ArchPPC64 = &Arch{ PtrSize: 8, RegSize: 8, MinLC: 4, + Alignment: 1, } var ArchPPC64LE = &Arch{ @@ -141,6 +156,7 @@ var ArchPPC64LE = &Arch{ PtrSize: 8, RegSize: 8, MinLC: 4, + Alignment: 1, } var ArchRISCV64 = &Arch{ @@ -150,6 +166,7 @@ var ArchRISCV64 = &Arch{ PtrSize: 8, RegSize: 8, MinLC: 4, + Alignment: 8, // riscv unaligned loads work, but are really slow (trap + simulated by OS) } var ArchS390X = &Arch{ @@ -159,6 +176,7 @@ var ArchS390X = &Arch{ PtrSize: 8, RegSize: 8, MinLC: 2, + Alignment: 1, } var ArchWasm = &Arch{ @@ -168,6 +186,7 @@ var ArchWasm = &Arch{ PtrSize: 8, RegSize: 8, MinLC: 1, + Alignment: 1, } var Archs = [...]*Arch{ From 15d9d4a009e3d2c9f1ad501143ed97a8b2c6f2c4 Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Fri, 14 May 2021 16:01:17 -0400 Subject: [PATCH 069/100] cmd/go: add tests illustrating what happens when Go 1.16 is used in a Go 1.17 main module For #46141 Updates #46160 Change-Id: Ib22435b8051aaf3fa74d43d3b7f2d091e67f05e2 Reviewed-on: https://go-review.googlesource.com/c/go/+/320172 Trust: Bryan C. Mills Run-TryBot: Bryan C. Mills TryBot-Result: Go Bot Reviewed-by: Jay Conrod --- .../go/testdata/script/mod_tidy_compat.txt | 100 +++++++++++++++ .../script/mod_tidy_compat_implicit.txt | 120 ++++++++++++++++++ .../script/mod_tidy_compat_incompatible.txt | 116 +++++++++++++++++ .../script/mod_tidy_compat_irrelevant.txt | 105 +++++++++++++++ 4 files changed, 441 insertions(+) create mode 100644 src/cmd/go/testdata/script/mod_tidy_compat.txt create mode 100644 src/cmd/go/testdata/script/mod_tidy_compat_implicit.txt create mode 100644 src/cmd/go/testdata/script/mod_tidy_compat_incompatible.txt create mode 100644 src/cmd/go/testdata/script/mod_tidy_compat_irrelevant.txt diff --git a/src/cmd/go/testdata/script/mod_tidy_compat.txt b/src/cmd/go/testdata/script/mod_tidy_compat.txt new file mode 100644 index 00000000000..e6f88dc7798 --- /dev/null +++ b/src/cmd/go/testdata/script/mod_tidy_compat.txt @@ -0,0 +1,100 @@ +# https://golang.org/issue/46141: 'go mod tidy' for a Go 1.17 module should by +# default preserve enough checksums for the module to be used by Go 1.16. +# +# We don't have a copy of Go 1.16 handy, but we can simulate it by editing the +# 'go' version in the go.mod file to 1.16, without actually updating the +# requirements to match. + +[short] skip + +env MODFMT='{{with .Module}}{{.Path}} {{.Version}}{{end}}' + + +# This module has the same module dependency graph in Go 1.16 as in Go 1.17, +# but in 1.16 requires (checksums for) additional (irrelevant) go.mod files. +# +# The module graph under both versions looks like: +# +# m ---- example.com/version v1.1.0 +# | +# + ---- example.net/lazy v0.1.0 ---- example.com/version v1.0.1 +# +# Go 1.17 avoids loading the go.mod file for example.com/version v1.0.1 +# (because it is lower than the verison explicitly required by m, +# and the module that requires it — m — specifies 'go 1.17'). +# +# That go.mod file happens not to affect the final 1.16 module graph anyway, +# so the pruned graph is equivalent to the unpruned one. + +cp go.mod go.mod.orig +go mod tidy +cmp go.mod go.mod.orig + +go list -m all +cmp stdout m_all.txt + +go mod edit -go=1.16 +! go list -m all +stderr '^go list -m: example.net/lazy@v0.1.0 requires\n\texample.com/version@v1.0.1: missing go.sum entry; to add it:\n\tgo mod download example.com/version$' + + +# If we combine a Go 1.16 go.sum file... +go mod tidy -go=1.16 + +# ...with a Go 1.17 go.mod file... +cp go.mod.orig go.mod + +# ...then Go 1.17 continues to work... +go list -m all +cmp stdout m_all.txt + +# ...and now 1.16 can load the same build list! +go mod edit -go=1.16 +go list -m all +cmp stdout m_all.txt + + +# TODO(#46141): Add a cleaner way to tidy a Go 1.17 module while preserving +# the checksums needed to work within it with Go 1.16. + + +-- go.mod -- +// Module m happens to have the exact same build list as what would be +// selected under Go 1.16, but computes that build list without looking at +// as many go.mod files. +module example.com/m + +go 1.17 + +replace example.net/lazy v0.1.0 => ./lazy + +require ( + example.com/version v1.1.0 + example.net/lazy v0.1.0 +) +-- m_all.txt -- +example.com/m +example.com/version v1.1.0 +example.net/lazy v0.1.0 => ./lazy +-- compatible.go -- +package compatible + +import ( + _ "example.com/version" + _ "example.net/lazy" +) +-- lazy/go.mod -- +// Module lazy requires example.com/version v1.0.1. +// +// However, since this module is lazy, its dependents +// should not need checksums for that version of the module +// unless they actually import packages from it. +module example.net/lazy + +go 1.17 + +require example.com/version v1.0.1 +-- lazy/lazy.go -- +package lazy + +import _ "example.com/version" diff --git a/src/cmd/go/testdata/script/mod_tidy_compat_implicit.txt b/src/cmd/go/testdata/script/mod_tidy_compat_implicit.txt new file mode 100644 index 00000000000..baaa5d63e31 --- /dev/null +++ b/src/cmd/go/testdata/script/mod_tidy_compat_implicit.txt @@ -0,0 +1,120 @@ +# https://golang.org/issue/46141: 'go mod tidy' for a Go 1.17 module should by +# default preserve enough checksums for the module to be used by Go 1.16. +# +# We don't have a copy of Go 1.16 handy, but we can simulate it by editing the +# 'go' version in the go.mod file to 1.16, without actually updating the +# requirements to match. + +[short] skip + +env MODFMT='{{with .Module}}{{.Path}} {{.Version}}{{end}}' + + +# For this module, Go 1.16 selects the same versions of all explicit dependencies +# as Go 1.17 does. However, Go 1.16 selects a higher version of an *implicit* +# dependency, imported by a test of one of the (external) imported packages. +# As a result, Go 1.16 also needs checksums for the module sources for that higher +# version. +# +# The Go 1.16 module graph looks like: +# +# m ---- lazy v0.1.0 ---- incompatible v1.0.0 +# | +# + ------------- requireincompatible v0.1.0 ---- incompatible v2.0.0+incompatible +# +# The Go 1.17 module graph is the same except that the dependencies of +# requireincompatible are pruned out (because the module that requires +# it — lazy v0.1.0 — specifies 'go 1.17', and it is not otherwise relevant to +# the main module). + +cp go.mod go.mod.orig +go mod tidy +cmp go.mod go.mod.orig + +go list -deps -test -f $MODFMT all +stdout '^example\.com/retract/incompatible v1\.0\.0$' + +go mod edit -go=1.16 +! go list -deps -test -f $MODFMT all + + # TODO(#46160): -count=1 instead of -count=2. +stderr -count=2 '^go: example\.net/lazy@v0\.1\.0 requires\n\texample\.com/retract/incompatible@v1\.0\.0: missing go\.sum entry; to add it:\n\tgo mod download example\.com/retract/incompatible$' + + +# If we combine a Go 1.16 go.sum file... +go mod tidy -go=1.16 + +# ...with a Go 1.17 go.mod file... +cp go.mod.orig go.mod + +# ...then Go 1.17 no longer works. 😞 +! go list -deps -test -f $MODFMT all +stderr -count=1 '^can''t load test package: lazy/lazy_test.go:3:8: missing go\.sum entry for module providing package example\.com/retract/incompatible \(imported by example\.net/lazy\); to add:\n\tgo get -t example.net/lazy@v0\.1\.0$' + + +# However, if we take the union of the go.sum files... +go list -mod=mod -deps -test all +cmp go.mod go.mod.orig + +# ...then Go 1.17 continues to work... +go list -deps -test -f $MODFMT all +stdout '^example\.com/retract/incompatible v1\.0\.0$' + +# ...and 1.16 also works(‽), but selects a different version for the +# external-test dependency. +go mod edit -go=1.16 +go list -deps -test -f $MODFMT all +stdout '^example\.com/retract/incompatible v2\.0\.0\+incompatible$' + + +# TODO(#46100): In compatibility mode, should we reject the above difference as +# incompatible, or save checksums for both possible versions of the test +# dependency? + + +-- go.mod -- +// Module m imports packages from the same versions under Go 1.17 +// as under Go 1.16, but under 1.16 its (implicit) external test dependencies +// are higher. +module example.com/m + +go 1.17 + +replace ( + example.net/lazy v0.1.0 => ./lazy + example.net/requireincompatible v0.1.0 => ./requireincompatible +) + +require example.net/lazy v0.1.0 +-- implicit.go -- +package implicit + +import _ "example.net/lazy" +-- lazy/go.mod -- +// Module lazy requires example.com/retract/incompatible v1.0.0. +// +// When viewed from the outside it also has a transitive dependency +// on v2.0.0+incompatible, but in lazy mode that transitive dependency +// is pruned out. +module example.net/lazy + +go 1.17 + +exclude example.com/retract/incompatible v2.0.0+incompatible + +require ( + example.com/retract/incompatible v1.0.0 + example.net/requireincompatible v0.1.0 +) +-- lazy/lazy.go -- +package lazy +-- lazy/lazy_test.go -- +package lazy_test + +import _ "example.com/retract/incompatible" +-- requireincompatible/go.mod -- +module example.net/requireincompatible + +go 1.15 + +require example.com/retract/incompatible v2.0.0+incompatible diff --git a/src/cmd/go/testdata/script/mod_tidy_compat_incompatible.txt b/src/cmd/go/testdata/script/mod_tidy_compat_incompatible.txt new file mode 100644 index 00000000000..08613524082 --- /dev/null +++ b/src/cmd/go/testdata/script/mod_tidy_compat_incompatible.txt @@ -0,0 +1,116 @@ +# https://golang.org/issue/46141: 'go mod tidy' for a Go 1.17 module should by +# default preserve enough checksums for the module to be used by Go 1.16. +# +# We don't have a copy of Go 1.16 handy, but we can simulate it by editing the +# 'go' version in the go.mod file to 1.16, without actually updating the +# requirements to match. + +[short] skip + +env MODFMT='{{with .Module}}{{.Path}} {{.Version}}{{end}}' + + +# For this module, Go 1.17 prunes out a (transitive and otherwise-irrelevant) +# requirement on a retracted higher version of a dependency. +# However, when Go 1.16 reads the same requirements from the go.mod file, +# it does not prune out that requirement, and selects the retracted version. +# +# The Go 1.16 module graph looks like: +# +# m ---- lazy v0.1.0 ---- requireincompatible v0.1.0 ---- incompatible v2.0.0+incompatible +# | | +# + -------+------------- incompatible v1.0.0 +# +# The Go 1.17 module graph is the same except that the dependencies of +# requireincompatible are pruned out (because the module that requires +# it — lazy v0.1.0 — specifies 'go 1.17', and it is not otherwise relevant to +# the main module). + + +# TODO(#46141): 'go mod tidy' should by default diagnose the difference in +# dependencies as an error, but it should still be possible to simply drop +# compatibility with Go 1.16 by passing an appropriate '-compat' flag. + +cp go.mod go.mod.orig +go mod tidy +cmp go.mod go.mod.orig + +go mod edit -go=1.16 +! go list -f $MODFMT -deps ./... + # TODO(#46160): -count=1 instead of -count=2. +stderr -count=2 '^go: example\.net/lazy@v0\.1\.0 requires\n\texample\.net/requireincompatible@v0\.1\.0 requires\n\texample\.com/retract/incompatible@v2\.0\.0\+incompatible: missing go.sum entry; to add it:\n\tgo mod download example.com/retract/incompatible$' + + +# There are two ways for the module author to bring the two into alignment. +# One is to *explicitly* 'exclude' the version that is already *implicitly* +# pruned out under 1.17. +go mod edit -exclude=example.com/retract/incompatible@v2.0.0+incompatible +go list -f $MODFMT -deps ./... +stdout '^example.com/retract/incompatible v1\.0\.0$' +! stdout 'v2\.0\.0' + + +# The other is to explicitly upgrade the version required under Go 1.17 +# to match the version selected by Go 1.16. +cp go.mod.orig go.mod + +go get -d example.com/retract/incompatible@v2.0.0+incompatible + # Note that we are not running 'go mod tidy' here: we need to preserve + # the checksum for v1.0.0 because it is also still in the module graph + # as seen by Go 1.16. + +go mod edit -go=1.16 +go list -f $MODFMT -deps ./... +stdout '^example.com/retract/incompatible v2\.0\.0\+incompatible$' +! stdout 'v1\.0\.0' + + +-- go.mod -- +// Module m indirectly imports a package from +// example.com/retract/incompatible. Its selected version of +// that module is lower under Go 1.17 semantics than under Go 1.16. +module example.com/m + +go 1.17 + +replace ( + example.net/lazy v0.1.0 => ./lazy + example.net/requireincompatible v0.1.0 => ./requireincompatible +) + +require ( + example.com/retract/incompatible v1.0.0 // indirect + example.net/lazy v0.1.0 +) +-- incompatible.go -- +package incompatible + +import _ "example.net/lazy" + +-- lazy/go.mod -- +// Module lazy requires example.com/retract/incompatible v1.0.0. +// +// When viewed from the outside it also has a transitive dependency +// on v2.0.0+incompatible, but in lazy mode that transitive dependency +// is pruned out. +module example.net/lazy + +go 1.17 + +exclude example.com/retract/incompatible v2.0.0+incompatible + +require ( + example.com/retract/incompatible v1.0.0 + example.net/requireincompatible v0.1.0 +) +-- lazy/lazy.go -- +package lazy + +import _ "example.com/retract/incompatible" + +-- requireincompatible/go.mod -- +module example.net/requireincompatible + +go 1.15 + +require example.com/retract/incompatible v2.0.0+incompatible diff --git a/src/cmd/go/testdata/script/mod_tidy_compat_irrelevant.txt b/src/cmd/go/testdata/script/mod_tidy_compat_irrelevant.txt new file mode 100644 index 00000000000..d4371e0f7d4 --- /dev/null +++ b/src/cmd/go/testdata/script/mod_tidy_compat_irrelevant.txt @@ -0,0 +1,105 @@ +# https://golang.org/issue/46141: 'go mod tidy' for a Go 1.17 module should by +# default preserve enough checksums for the module to be used by Go 1.16. +# +# We don't have a copy of Go 1.16 handy, but we can simulate it by editing the +# 'go' version in the go.mod file to 1.16, without actually updating the +# requirements to match. + +[short] skip + +env MODFMT='{{with .Module}}{{.Path}} {{.Version}}{{end}}' + + +# This module selects the same versions in Go 1.16 and 1.17 for all modules +# that provide packages (or test dependencies of packages) imported by the +# main module. However, in Go 1.16 it selects a higher version of a +# transitive module dependency that is not otherwise relevant to the main module. +# As a result, Go 1.16 needs an additional checksum for the go.mod file of +# that irrelevant dependency. +# +# The Go 1.16 module graph looks like: +# +# m ---- lazy v0.1.0 ---- incompatible v1.0.0 +# | +# + ------------- requireincompatible v0.1.0 ---- incompatible v2.0.0+incompatible + +cp go.mod go.mod.orig +go mod tidy +cmp go.mod go.mod.orig + +go list -m all +stdout '^example\.com/retract/incompatible v1\.0\.0$' + +go mod edit -go=1.16 +! go list -deps -test -f $MODFMT all + # TODO(#46160): -count=1 instead of -count=2. +stderr -count=2 '^go: example.net/lazy@v0.1.0 requires\n\texample.com/retract/incompatible@v1.0.0: missing go.sum entry; to add it:\n\tgo mod download example.com/retract/incompatible$' + + +# If we combine a Go 1.16 go.sum file... +go mod tidy -go=1.16 + +# ...with a Go 1.17 go.mod file... +cp go.mod.orig go.mod + +# ...then Go 1.17 continues to work... +go list -deps -test -f $MODFMT all +cp stdout out-117.txt + +# ...and 1.16 also works, and selects the same versions for all packages +# even remotely relevant to the main module. +go mod edit -go=1.16 +go list -deps -test -f $MODFMT all +cmp stdout out-117.txt + + +# TODO(#46160): Add a cleaner way to tidy a Go 1.17 module while preserving +# the checksums needed to work within it with Go 1.16. + + +-- go.mod -- +// Module m imports packages from the same versions under Go 1.17 +// as under Go 1.16, but under 1.16 its (implicit) external test dependencies +// are higher. +module example.com/m + +go 1.17 + +replace ( + example.net/lazy v0.1.0 => ./lazy + example.net/requireincompatible v0.1.0 => ./requireincompatible +) + +require example.net/lazy v0.1.0 +-- m.go -- +package m + +import _ "example.net/lazy" +-- lazy/go.mod -- +// Module lazy requires example.com/retract/incompatible v1.0.0. +// +// When viewed from the outside it also has a transitive dependency +// on v2.0.0+incompatible, but in lazy mode that transitive dependency +// is pruned out. +module example.net/lazy + +go 1.17 + +exclude example.com/retract/incompatible v2.0.0+incompatible + +require ( + example.com/retract/incompatible v1.0.0 + example.net/requireincompatible v0.1.0 +) +-- lazy/lazy.go -- +package lazy +-- lazy/unimported/unimported.go -- +package unimported + +import _ "example.com/retract/incompatible" +-- requireincompatible/go.mod -- +module example.net/requireincompatible + +go 1.15 + +require example.com/retract/incompatible v2.0.0+incompatible From 32b73ae18026e8a9dc4c5aa49999b1ea445bc68c Mon Sep 17 00:00:00 2001 From: Constantin Konstantinidis Date: Sun, 16 May 2021 11:03:34 +0200 Subject: [PATCH 070/100] cmd/go: align checks of module path during initialization. Fixes #45025. Change-Id: I70c2b745f764484e4b3a2824adc470f168fb2c50 Reviewed-on: https://go-review.googlesource.com/c/go/+/320310 Trust: Jay Conrod Trust: Bryan C. Mills Run-TryBot: Jay Conrod Reviewed-by: Bryan C. Mills Reviewed-by: Jay Conrod TryBot-Result: Go Bot --- src/cmd/go/internal/modload/init.go | 68 ++++--------------- src/cmd/go/testdata/script/mod_init_path.txt | 2 +- .../go/testdata/script/mod_invalid_path.txt | 9 +-- 3 files changed, 19 insertions(+), 60 deletions(-) diff --git a/src/cmd/go/internal/modload/init.go b/src/cmd/go/internal/modload/init.go index e358230e748..df9f48e8ea0 100644 --- a/src/cmd/go/internal/modload/init.go +++ b/src/cmd/go/internal/modload/init.go @@ -432,7 +432,10 @@ func loadModFile(ctx context.Context) (rs *Requirements, needCommit bool) { initTarget(f.Module.Mod) index = indexModFile(data, f, fixed) - if err := checkModulePathLax(f.Module.Mod.Path); err != nil { + if err := module.CheckImportPath(f.Module.Mod.Path); err != nil { + if pathErr, ok := err.(*module.InvalidPathError); ok { + pathErr.Kind = "module" + } base.Fatalf("go: %v", err) } @@ -492,7 +495,15 @@ func CreateModFile(ctx context.Context, modPath string) { if err != nil { base.Fatalf("go: %v", err) } - } else if err := checkModulePathLax(modPath); err != nil { + } else if err := module.CheckImportPath(modPath); err != nil { + if pathErr, ok := err.(*module.InvalidPathError); ok { + pathErr.Kind = "module" + // Same as build.IsLocalPath() + if pathErr.Path == "." || pathErr.Path == ".." || + strings.HasPrefix(pathErr.Path, "./") || strings.HasPrefix(pathErr.Path, "../") { + pathErr.Err = errors.New("is a local import path") + } + } base.Fatalf("go: %v", err) } @@ -536,49 +547,6 @@ func CreateModFile(ctx context.Context, modPath string) { } } -// checkModulePathLax checks that the path meets some minimum requirements -// to avoid confusing users or the module cache. The requirements are weaker -// than those of module.CheckPath to allow room for weakening module path -// requirements in the future, but strong enough to help users avoid significant -// problems. -func checkModulePathLax(p string) error { - // TODO(matloob): Replace calls of this function in this CL with calls - // to module.CheckImportPath once it's been laxened, if it becomes laxened. - // See golang.org/issue/29101 for a discussion about whether to make CheckImportPath - // more lax or more strict. - - errorf := func(format string, args ...interface{}) error { - return fmt.Errorf("invalid module path %q: %s", p, fmt.Sprintf(format, args...)) - } - - // Disallow shell characters " ' * < > ? ` | to avoid triggering bugs - // with file systems and subcommands. Disallow file path separators : and \ - // because path separators other than / will confuse the module cache. - // See fileNameOK in golang.org/x/mod/module/module.go. - shellChars := "`" + `"'*<>?|` - fsChars := `\:` - if i := strings.IndexAny(p, shellChars); i >= 0 { - return errorf("contains disallowed shell character %q", p[i]) - } - if i := strings.IndexAny(p, fsChars); i >= 0 { - return errorf("contains disallowed path separator character %q", p[i]) - } - - // Ensure path.IsAbs and build.IsLocalImport are false, and that the path is - // invariant under path.Clean, also to avoid confusing the module cache. - if path.IsAbs(p) { - return errorf("is an absolute path") - } - if build.IsLocalImport(p) { - return errorf("is a local import path") - } - if path.Clean(p) != p { - return errorf("is not clean") - } - - return nil -} - // fixVersion returns a modfile.VersionFixer implemented using the Query function. // // It resolves commit hashes and branch names to versions, @@ -918,14 +886,8 @@ func findModulePath(dir string) (string, error) { } if rel := search.InDir(dir, filepath.Join(gpdir, "src")); rel != "" && rel != "." { path := filepath.ToSlash(rel) - // TODO(matloob): replace this with module.CheckImportPath - // once it's been laxened. - // Only checkModulePathLax here. There are some unpublishable - // module names that are compatible with checkModulePathLax - // but they already work in GOPATH so don't break users - // trying to do a build with modules. gorelease will alert users - // publishing their modules to fix their paths. - if err := checkModulePathLax(path); err != nil { + // gorelease will alert users publishing their modules to fix their paths. + if err := module.CheckImportPath(path); err != nil { badPathErr = err break } diff --git a/src/cmd/go/testdata/script/mod_init_path.txt b/src/cmd/go/testdata/script/mod_init_path.txt index ccdfc923175..e5fd4ddbcb9 100644 --- a/src/cmd/go/testdata/script/mod_init_path.txt +++ b/src/cmd/go/testdata/script/mod_init_path.txt @@ -1,7 +1,7 @@ env GO111MODULE=on ! go mod init . -stderr '^go: invalid module path "\.": is a local import path$' +stderr '^go: malformed module path ".": is a local import path$' cd x go mod init example.com/x diff --git a/src/cmd/go/testdata/script/mod_invalid_path.txt b/src/cmd/go/testdata/script/mod_invalid_path.txt index c8c075daaef..333a3ffa35c 100644 --- a/src/cmd/go/testdata/script/mod_invalid_path.txt +++ b/src/cmd/go/testdata/script/mod_invalid_path.txt @@ -8,11 +8,8 @@ stderr '^go: no module declaration in go.mod. To specify the module path:\n\tgo # Test that go mod init in GOPATH doesn't add a module declaration # with a path that can't possibly be a module path, because # it isn't even a valid import path. -# The single quote and backtick are the only characters we don't allow -# in checkModulePathLax, but is allowed in a Windows file name. -# TODO(matloob): choose a different character once -# module.CheckImportPath is laxened and replaces -# checkModulePathLax. +# The single quote and backtick are the only characters which are not allowed +# but are a valid Windows file name. cd $WORK/'gopath/src/m''d' ! go mod init stderr 'cannot determine module path' @@ -21,7 +18,7 @@ stderr 'cannot determine module path' # possibly be a module path, because it isn't even a valid import path cd $WORK/gopath/src/badname ! go list . -stderr 'invalid module path' +stderr 'malformed module path' # Test that an import path containing an element with a leading dot is valid, # but such a module path is not. From 08a8fa9c471603c7ec44895392c6bfa31a8ddcb6 Mon Sep 17 00:00:00 2001 From: Richard Musiol Date: Sun, 23 May 2021 23:06:43 +0200 Subject: [PATCH 071/100] misc/wasm: ensure correct stack pointer in catch clauses The stack pointer may have changed after a call from JavaScript into Go code because of stack growth. The normal case already updated the sp variable accordingly, but the catch case did not yet. Fixes #45433 Change-Id: I3e0a33381929626f6b21902948935eb5ffb26c96 Reviewed-on: https://go-review.googlesource.com/c/go/+/321936 Trust: Richard Musiol Run-TryBot: Richard Musiol TryBot-Result: Go Bot Reviewed-by: Cherry Mui --- misc/wasm/wasm_exec.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/misc/wasm/wasm_exec.js b/misc/wasm/wasm_exec.js index 3e41e628ef9..231185a123e 100644 --- a/misc/wasm/wasm_exec.js +++ b/misc/wasm/wasm_exec.js @@ -401,6 +401,7 @@ storeValue(sp + 56, result); this.mem.setUint8(sp + 64, 1); } catch (err) { + sp = this._inst.exports.getsp() >>> 0; // see comment above storeValue(sp + 56, err); this.mem.setUint8(sp + 64, 0); } @@ -417,6 +418,7 @@ storeValue(sp + 40, result); this.mem.setUint8(sp + 48, 1); } catch (err) { + sp = this._inst.exports.getsp() >>> 0; // see comment above storeValue(sp + 40, err); this.mem.setUint8(sp + 48, 0); } @@ -433,6 +435,7 @@ storeValue(sp + 40, result); this.mem.setUint8(sp + 48, 1); } catch (err) { + sp = this._inst.exports.getsp() >>> 0; // see comment above storeValue(sp + 40, err); this.mem.setUint8(sp + 48, 0); } From c89f1224a544cde464fcb86e78ebb0cc97eedba2 Mon Sep 17 00:00:00 2001 From: Roland Shoemaker Date: Mon, 17 May 2021 10:06:51 -0700 Subject: [PATCH 072/100] net: verify results from Lookup* are valid domain names For the methods LookupCNAME, LookupSRV, LookupMX, LookupNS, and LookupAddr check that the returned domain names are in fact valid DNS names using the existing isDomainName function. Thanks to Philipp Jeitner and Haya Shulman from Fraunhofer SIT for reporting this issue. Fixes #46241 Fixes CVE-2021-33195 Change-Id: Icf231acd93178a3b6aec3f178cff7e693f74ef8c Reviewed-on: https://go-review.googlesource.com/c/go/+/320949 Trust: Roland Shoemaker Trust: Katie Hockman Run-TryBot: Roland Shoemaker TryBot-Result: Go Bot Reviewed-by: Katie Hockman --- src/net/dnsclient_unix_test.go | 121 +++++++++++++++++++++++++++++++++ src/net/lookup.go | 98 +++++++++++++++++++++++--- 2 files changed, 211 insertions(+), 8 deletions(-) diff --git a/src/net/dnsclient_unix_test.go b/src/net/dnsclient_unix_test.go index ec690a1c0cf..69a9b972f08 100644 --- a/src/net/dnsclient_unix_test.go +++ b/src/net/dnsclient_unix_test.go @@ -1799,3 +1799,124 @@ func TestPTRandNonPTR(t *testing.T) { t.Errorf("names = %q; want %q", names, want) } } + +func TestCVE202133195(t *testing.T) { + fake := fakeDNSServer{ + rh: func(n, _ string, q dnsmessage.Message, _ time.Time) (dnsmessage.Message, error) { + r := dnsmessage.Message{ + Header: dnsmessage.Header{ + ID: q.Header.ID, + Response: true, + RCode: dnsmessage.RCodeSuccess, + RecursionAvailable: true, + }, + Questions: q.Questions, + } + switch q.Questions[0].Type { + case dnsmessage.TypeCNAME: + r.Answers = []dnsmessage.Resource{} + case dnsmessage.TypeA: // CNAME lookup uses a A/AAAA as a proxy + r.Answers = append(r.Answers, + dnsmessage.Resource{ + Header: dnsmessage.ResourceHeader{ + Name: dnsmessage.MustNewName(".golang.org."), + Type: dnsmessage.TypeA, + Class: dnsmessage.ClassINET, + Length: 4, + }, + Body: &dnsmessage.AResource{ + A: TestAddr, + }, + }, + ) + case dnsmessage.TypeSRV: + n := q.Questions[0].Name + if n.String() == "_hdr._tcp.golang.org." { + n = dnsmessage.MustNewName(".golang.org.") + } + r.Answers = append(r.Answers, + dnsmessage.Resource{ + Header: dnsmessage.ResourceHeader{ + Name: n, + Type: dnsmessage.TypeSRV, + Class: dnsmessage.ClassINET, + Length: 4, + }, + Body: &dnsmessage.SRVResource{ + Target: dnsmessage.MustNewName(".golang.org."), + }, + }, + ) + case dnsmessage.TypeMX: + r.Answers = append(r.Answers, + dnsmessage.Resource{ + Header: dnsmessage.ResourceHeader{ + Name: dnsmessage.MustNewName(".golang.org."), + Type: dnsmessage.TypeMX, + Class: dnsmessage.ClassINET, + Length: 4, + }, + Body: &dnsmessage.MXResource{ + MX: dnsmessage.MustNewName(".golang.org."), + }, + }, + ) + case dnsmessage.TypeNS: + r.Answers = append(r.Answers, + dnsmessage.Resource{ + Header: dnsmessage.ResourceHeader{ + Name: dnsmessage.MustNewName(".golang.org."), + Type: dnsmessage.TypeNS, + Class: dnsmessage.ClassINET, + Length: 4, + }, + Body: &dnsmessage.NSResource{ + NS: dnsmessage.MustNewName(".golang.org."), + }, + }, + ) + case dnsmessage.TypePTR: + r.Answers = append(r.Answers, + dnsmessage.Resource{ + Header: dnsmessage.ResourceHeader{ + Name: dnsmessage.MustNewName(".golang.org."), + Type: dnsmessage.TypePTR, + Class: dnsmessage.ClassINET, + Length: 4, + }, + Body: &dnsmessage.PTRResource{ + PTR: dnsmessage.MustNewName(".golang.org."), + }, + }, + ) + } + return r, nil + }, + } + r := Resolver{PreferGo: true, Dial: fake.DialContext} + + _, err := r.LookupCNAME(context.Background(), "golang.org") + if expected := "lookup golang.org: CNAME target is invalid"; err.Error() != expected { + t.Errorf("LookupCNAME returned unexpected error, got %q, want %q", err.Error(), expected) + } + _, _, err = r.LookupSRV(context.Background(), "target", "tcp", "golang.org") + if expected := "lookup golang.org: SRV target is invalid"; err.Error() != expected { + t.Errorf("LookupSRV returned unexpected error, got %q, want %q", err.Error(), expected) + } + _, _, err = r.LookupSRV(context.Background(), "hdr", "tcp", "golang.org") + if expected := "lookup golang.org: SRV header name is invalid"; err.Error() != expected { + t.Errorf("LookupSRV returned unexpected error, got %q, want %q", err.Error(), expected) + } + _, err = r.LookupMX(context.Background(), "golang.org") + if expected := "lookup golang.org: MX target is invalid"; err.Error() != expected { + t.Errorf("LookupMX returned unexpected error, got %q, want %q", err.Error(), expected) + } + _, err = r.LookupNS(context.Background(), "golang.org") + if expected := "lookup golang.org: NS target is invalid"; err.Error() != expected { + t.Errorf("LookupNS returned unexpected error, got %q, want %q", err.Error(), expected) + } + _, err = r.LookupAddr(context.Background(), "1.2.3.4") + if expected := "lookup 1.2.3.4: PTR target is invalid"; err.Error() != expected { + t.Errorf("LookupAddr returned unexpected error, got %q, want %q", err.Error(), expected) + } +} diff --git a/src/net/lookup.go b/src/net/lookup.go index 03599503bd1..39d33796d5b 100644 --- a/src/net/lookup.go +++ b/src/net/lookup.go @@ -396,6 +396,9 @@ func (r *Resolver) LookupPort(ctx context.Context, network, service string) (por // contain DNS "CNAME" records, as long as host resolves to // address records. // +// The returned canonical name is validated to be a properly +// formatted presentation-format domain name. +// // LookupCNAME uses context.Background internally; to specify the context, use // Resolver.LookupCNAME. func LookupCNAME(host string) (cname string, err error) { @@ -412,8 +415,18 @@ func LookupCNAME(host string) (cname string, err error) { // LookupCNAME does not return an error if host does not // contain DNS "CNAME" records, as long as host resolves to // address records. -func (r *Resolver) LookupCNAME(ctx context.Context, host string) (cname string, err error) { - return r.lookupCNAME(ctx, host) +// +// The returned canonical name is validated to be a properly +// formatted presentation-format domain name. +func (r *Resolver) LookupCNAME(ctx context.Context, host string) (string, error) { + cname, err := r.lookupCNAME(ctx, host) + if err != nil { + return "", err + } + if !isDomainName(cname) { + return "", &DNSError{Err: "CNAME target is invalid", Name: host} + } + return cname, nil } // LookupSRV tries to resolve an SRV query of the given service, @@ -425,6 +438,9 @@ func (r *Resolver) LookupCNAME(ctx context.Context, host string) (cname string, // That is, it looks up _service._proto.name. To accommodate services // publishing SRV records under non-standard names, if both service // and proto are empty strings, LookupSRV looks up name directly. +// +// The returned service names are validated to be properly +// formatted presentation-format domain names. func LookupSRV(service, proto, name string) (cname string, addrs []*SRV, err error) { return DefaultResolver.lookupSRV(context.Background(), service, proto, name) } @@ -438,12 +454,33 @@ func LookupSRV(service, proto, name string) (cname string, addrs []*SRV, err err // That is, it looks up _service._proto.name. To accommodate services // publishing SRV records under non-standard names, if both service // and proto are empty strings, LookupSRV looks up name directly. -func (r *Resolver) LookupSRV(ctx context.Context, service, proto, name string) (cname string, addrs []*SRV, err error) { - return r.lookupSRV(ctx, service, proto, name) +// +// The returned service names are validated to be properly +// formatted presentation-format domain names. +func (r *Resolver) LookupSRV(ctx context.Context, service, proto, name string) (string, []*SRV, error) { + cname, addrs, err := r.lookupSRV(ctx, service, proto, name) + if err != nil { + return "", nil, err + } + if cname != "" && !isDomainName(cname) { + return "", nil, &DNSError{Err: "SRV header name is invalid", Name: name} + } + for _, addr := range addrs { + if addr == nil { + continue + } + if !isDomainName(addr.Target) { + return "", nil, &DNSError{Err: "SRV target is invalid", Name: name} + } + } + return cname, addrs, nil } // LookupMX returns the DNS MX records for the given domain name sorted by preference. // +// The returned mail server names are validated to be properly +// formatted presentation-format domain names. +// // LookupMX uses context.Background internally; to specify the context, use // Resolver.LookupMX. func LookupMX(name string) ([]*MX, error) { @@ -451,12 +488,30 @@ func LookupMX(name string) ([]*MX, error) { } // LookupMX returns the DNS MX records for the given domain name sorted by preference. +// +// The returned mail server names are validated to be properly +// formatted presentation-format domain names. func (r *Resolver) LookupMX(ctx context.Context, name string) ([]*MX, error) { - return r.lookupMX(ctx, name) + records, err := r.lookupMX(ctx, name) + if err != nil { + return nil, err + } + for _, mx := range records { + if mx == nil { + continue + } + if !isDomainName(mx.Host) { + return nil, &DNSError{Err: "MX target is invalid", Name: name} + } + } + return records, nil } // LookupNS returns the DNS NS records for the given domain name. // +// The returned name server names are validated to be properly +// formatted presentation-format domain names. +// // LookupNS uses context.Background internally; to specify the context, use // Resolver.LookupNS. func LookupNS(name string) ([]*NS, error) { @@ -464,8 +519,23 @@ func LookupNS(name string) ([]*NS, error) { } // LookupNS returns the DNS NS records for the given domain name. +// +// The returned name server names are validated to be properly +// formatted presentation-format domain names. func (r *Resolver) LookupNS(ctx context.Context, name string) ([]*NS, error) { - return r.lookupNS(ctx, name) + records, err := r.lookupNS(ctx, name) + if err != nil { + return nil, err + } + for _, ns := range records { + if ns == nil { + continue + } + if !isDomainName(ns.Host) { + return nil, &DNSError{Err: "NS target is invalid", Name: name} + } + } + return records, nil } // LookupTXT returns the DNS TXT records for the given domain name. @@ -495,6 +565,18 @@ func LookupAddr(addr string) (names []string, err error) { // LookupAddr performs a reverse lookup for the given address, returning a list // of names mapping to that address. -func (r *Resolver) LookupAddr(ctx context.Context, addr string) (names []string, err error) { - return r.lookupAddr(ctx, addr) +// +// The returned names are validated to be properly +// formatted presentation-format domain names. +func (r *Resolver) LookupAddr(ctx context.Context, addr string) ([]string, error) { + names, err := r.lookupAddr(ctx, addr) + if err != nil { + return nil, err + } + for _, name := range names { + if !isDomainName(name) { + return nil, &DNSError{Err: "PTR target is invalid", Name: addr} + } + } + return names, nil } From 8b462d75670dcd8b6a08cf9af225eb8e7628d412 Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Fri, 14 May 2021 16:53:06 -0400 Subject: [PATCH 073/100] cmd/go: add a -compat flag to 'go mod tidy' Fixes #46141 Change-Id: I9d4032e75252ade9eaa937389ea97ef3fb287499 Reviewed-on: https://go-review.googlesource.com/c/go/+/321071 Trust: Bryan C. Mills Run-TryBot: Bryan C. Mills TryBot-Result: Go Bot Reviewed-by: Jay Conrod --- doc/go1.17.html | 5 + src/cmd/go.sum | 23 ++ src/cmd/go/alldocs.go | 10 +- src/cmd/go/internal/modcmd/tidy.go | 17 +- src/cmd/go/internal/modload/init.go | 24 +- src/cmd/go/internal/modload/load.go | 254 +++++++++++++++++- .../go/testdata/script/mod_tidy_compat.txt | 35 ++- .../testdata/script/mod_tidy_compat_added.txt | 105 ++++++++ .../script/mod_tidy_compat_ambiguous.txt | 98 +++++++ .../script/mod_tidy_compat_deleted.txt | 128 +++++++++ .../script/mod_tidy_compat_implicit.txt | 23 +- .../script/mod_tidy_compat_incompatible.txt | 37 ++- .../script/mod_tidy_compat_irrelevant.txt | 34 +-- src/cmd/go/testdata/script/mod_tidy_oldgo.txt | 21 ++ src/go.sum | 7 + 15 files changed, 758 insertions(+), 63 deletions(-) create mode 100644 src/cmd/go/testdata/script/mod_tidy_compat_added.txt create mode 100644 src/cmd/go/testdata/script/mod_tidy_compat_ambiguous.txt create mode 100644 src/cmd/go/testdata/script/mod_tidy_compat_deleted.txt create mode 100644 src/cmd/go/testdata/script/mod_tidy_oldgo.txt diff --git a/doc/go1.17.html b/doc/go1.17.html index 46ee1da6fa6..6dd1d0d1db5 100644 --- a/doc/go1.17.html +++ b/doc/go1.17.html @@ -106,6 +106,11 @@ Do not send CLs removing the interior tags from such phrases. go mod tidy -go=1.17 +

+ TODO: Describe the -compat flag + for go mod tidy. +

+

Module deprecation comments

diff --git a/src/cmd/go.sum b/src/cmd/go.sum index 9af4978d669..eeb625fcf8a 100644 --- a/src/cmd/go.sum +++ b/src/cmd/go.sum @@ -5,18 +5,41 @@ github.com/google/pprof v0.0.0-20210506205249-923b5ab0fc1a h1:jmAp/2PZAScNd62lTD github.com/google/pprof v0.0.0-20210506205249-923b5ab0fc1a/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639 h1:mV02weKRL81bEnm8A0HT1/CAelMQDBuQIfLw8n+d6xI= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= golang.org/x/arch v0.0.0-20210502124803-cbf565b21d1e h1:pv3V0NlNSh5Q6AX/StwGLBjcLS7UN4m4Gq+V+uSecqM= golang.org/x/arch v0.0.0-20210502124803-cbf565b21d1e/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20210503195802-e9a32991a82e h1:8foAy0aoO5GkqCvAEJ4VC4P3zksTg4X4aJCDpZzmgQI= golang.org/x/crypto v0.0.0-20210503195802-e9a32991a82e/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.3-0.20210512182355-6088ed88cecd h1:CuRnpyMrCCBulv0d/y0CswR4K0vGydgE3DZ2wYPIOo8= golang.org/x/mod v0.4.3-0.20210512182355-6088ed88cecd/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744 h1:yhBbb4IRs2HS9PPlAg6DMC6mUOKexJBNsLf4Z+6En1Q= golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210503060354-a79de5458b56 h1:b8jxX3zqjpqb2LklXPzKSGJhzyxCOZSz8ncv8Nv+y7w= golang.org/x/term v0.0.0-20210503060354-a79de5458b56/go.mod h1:tfny5GFUkzUvx4ps4ajbZsCe5lw1metzhBm9T3x7oIY= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.2-0.20210519160823-49064d2332f9 h1:2XlR/j4I4xz5GQZI7zBjqTfezYyRIE2jD5IMousB2rg= golang.org/x/tools v0.1.2-0.20210519160823-49064d2332f9/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= diff --git a/src/cmd/go/alldocs.go b/src/cmd/go/alldocs.go index fcc7f36335e..bad2b7f16ef 100644 --- a/src/cmd/go/alldocs.go +++ b/src/cmd/go/alldocs.go @@ -1221,7 +1221,7 @@ // // Usage: // -// go mod tidy [-e] [-v] [-go=version] +// go mod tidy [-e] [-v] [-go=version] [-compat=version] // // Tidy makes sure go.mod matches the source code in the module. // It adds any missing modules necessary to build the current module's @@ -1241,6 +1241,14 @@ // (Go versions 1.17 and higher retain more requirements in order to // support lazy module loading.) // +// The -compat flag preserves any additional checksums needed for the +// 'go' command from the indicated major Go release to successfully load +// the module graph, and causes tidy to error out if that version of the +// 'go' command would load any imported package from a different module +// version. By default, tidy acts as if the -compat flag were set to the +// version prior to the one indicated by the 'go' directive in the go.mod +// file. +// // See https://golang.org/ref/mod#go-mod-tidy for more about 'go mod tidy'. // // diff --git a/src/cmd/go/internal/modcmd/tidy.go b/src/cmd/go/internal/modcmd/tidy.go index 9af624028a3..fe25507e94f 100644 --- a/src/cmd/go/internal/modcmd/tidy.go +++ b/src/cmd/go/internal/modcmd/tidy.go @@ -19,7 +19,7 @@ import ( ) var cmdTidy = &base.Command{ - UsageLine: "go mod tidy [-e] [-v] [-go=version]", + UsageLine: "go mod tidy [-e] [-v] [-go=version] [-compat=version]", Short: "add missing and remove unused modules", Long: ` Tidy makes sure go.mod matches the source code in the module. @@ -40,20 +40,30 @@ are retained as explicit requirements in the go.mod file. (Go versions 1.17 and higher retain more requirements in order to support lazy module loading.) +The -compat flag preserves any additional checksums needed for the +'go' command from the indicated major Go release to successfully load +the module graph, and causes tidy to error out if that version of the +'go' command would load any imported package from a different module +version. By default, tidy acts as if the -compat flag were set to the +version prior to the one indicated by the 'go' directive in the go.mod +file. + See https://golang.org/ref/mod#go-mod-tidy for more about 'go mod tidy'. `, Run: runTidy, } var ( - tidyE bool // if true, report errors but proceed anyway. - tidyGo goVersionFlag // go version to write to the tidied go.mod file (toggles lazy loading) + tidyE bool // if true, report errors but proceed anyway. + tidyGo goVersionFlag // go version to write to the tidied go.mod file (toggles lazy loading) + tidyCompat goVersionFlag // go version for which the tidied go.mod and go.sum files should be “compatible” ) func init() { cmdTidy.Flag.BoolVar(&cfg.BuildV, "v", false, "") cmdTidy.Flag.BoolVar(&tidyE, "e", false, "") cmdTidy.Flag.Var(&tidyGo, "go", "") + cmdTidy.Flag.Var(&tidyCompat, "compat", "") base.AddModCommonFlags(&cmdTidy.Flag) } @@ -105,6 +115,7 @@ func runTidy(ctx context.Context, cmd *base.Command, args []string) { GoVersion: tidyGo.String(), Tags: imports.AnyTags(), Tidy: true, + TidyCompatibleVersion: tidyCompat.String(), VendorModulesInGOROOTSrc: true, ResolveMissingImports: true, LoadTests: true, diff --git a/src/cmd/go/internal/modload/init.go b/src/cmd/go/internal/modload/init.go index df9f48e8ea0..86c0db3fe4f 100644 --- a/src/cmd/go/internal/modload/init.go +++ b/src/cmd/go/internal/modload/init.go @@ -767,11 +767,33 @@ func LatestGoVersion() string { tags := build.Default.ReleaseTags version := tags[len(tags)-1] if !strings.HasPrefix(version, "go") || !modfile.GoVersionRE.MatchString(version[2:]) { - base.Fatalf("go: unrecognized default version %q", version) + base.Fatalf("go: internal error: unrecognized default version %q", version) } return version[2:] } +// priorGoVersion returns the Go major release immediately preceding v, +// or v itself if v is the first Go major release (1.0) or not a supported +// Go version. +func priorGoVersion(v string) string { + vTag := "go" + v + tags := build.Default.ReleaseTags + for i, tag := range tags { + if tag == vTag { + if i == 0 { + return v + } + + version := tags[i-1] + if !strings.HasPrefix(version, "go") || !modfile.GoVersionRE.MatchString(version[2:]) { + base.Fatalf("go: internal error: unrecognized version %q", version) + } + return version[2:] + } + } + return v +} + var altConfigs = []string{ "Gopkg.lock", diff --git a/src/cmd/go/internal/modload/load.go b/src/cmd/go/internal/modload/load.go index 37b0032d43e..a9d1777125e 100644 --- a/src/cmd/go/internal/modload/load.go +++ b/src/cmd/go/internal/modload/load.go @@ -152,6 +152,13 @@ type PackageOpts struct { // packages. Tidy bool + // TidyCompatibleVersion is the oldest Go version that must be able to + // reproducibly reload the requested packages. + // + // If empty, the compatible version is the Go version immediately prior to the + // 'go' version listed in the go.mod file. + TidyCompatibleVersion string + // VendorModulesInGOROOTSrc indicates that if we are within a module in // GOROOT/src, packages in the module's vendor directory should be resolved as // actual module dependencies (instead of standard-library packages). @@ -371,7 +378,26 @@ func LoadPackages(ctx context.Context, opts PackageOpts, patterns ...string) (ma } } - modfetch.TrimGoSum(keepSums(ctx, ld, ld.requirements, loadedZipSumsOnly)) + keep := keepSums(ctx, ld, ld.requirements, loadedZipSumsOnly) + if compatDepth := modDepthFromGoVersion(ld.TidyCompatibleVersion); compatDepth != ld.requirements.depth { + compatRS := newRequirements(compatDepth, ld.requirements.rootModules, ld.requirements.direct) + ld.checkTidyCompatibility(ctx, compatRS) + + for m := range keepSums(ctx, ld, compatRS, loadedZipSumsOnly) { + keep[m] = true + } + } + + if allowWriteGoMod { + modfetch.TrimGoSum(keep) + + // commitRequirements below will also call WriteGoSum, but the "keep" map + // we have here could be strictly larger: commitRequirements only commits + // loaded.requirements, but here we may have also loaded (and want to + // preserve checksums for) additional entities from compatRS, which are + // only needed for compatibility with ld.TidyCompatibleVersion. + modfetch.WriteGoSum(keep) + } } // Success! Update go.mod and go.sum (if needed) and return the results. @@ -924,6 +950,17 @@ func loadFromRoots(ctx context.Context, params loaderParams) *loader { } } + if ld.Tidy { + if ld.TidyCompatibleVersion == "" { + ld.TidyCompatibleVersion = priorGoVersion(ld.GoVersion) + } else if semver.Compare("v"+ld.TidyCompatibleVersion, "v"+ld.GoVersion) > 0 { + // Each version of the Go toolchain knows how to interpret go.mod and + // go.sum files produced by all previous versions, so a compatibility + // version higher than the go.mod version adds nothing. + ld.TidyCompatibleVersion = ld.GoVersion + } + } + if semver.Compare("v"+ld.GoVersion, narrowAllVersionV) < 0 && !ld.UseVendorAll { // The module's go version explicitly predates the change in "all" for lazy // loading, so continue to use the older interpretation. @@ -1072,7 +1109,7 @@ func loadFromRoots(ctx context.Context, params loaderParams) *loader { // If that is not the case, there is a bug in the loading loop above. for _, m := range rs.rootModules { if v, ok := ld.requirements.rootSelected(m.Path); !ok || v != m.Version { - ld.errorf("go: internal error: a requirement on %v is needed but was not added during package loading\n", m) + ld.errorf("go mod tidy: internal error: a requirement on %v is needed but was not added during package loading\n", m) base.ExitIfErrors() } } @@ -1743,6 +1780,219 @@ func (ld *loader) checkMultiplePaths() { } } +// checkTidyCompatibility emits an error if any package would be loaded from a +// different module under rs than under ld.requirements. +func (ld *loader) checkTidyCompatibility(ctx context.Context, rs *Requirements) { + suggestUpgrade := false + suggestEFlag := false + suggestFixes := func() { + if ld.AllowErrors { + // The user is explicitly ignoring these errors, so don't bother them with + // other options. + return + } + + // We print directly to os.Stderr because this information is advice about + // how to fix errors, not actually an error itself. + // (The actual errors should have been logged already.) + + fmt.Fprintln(os.Stderr) + + goFlag := "" + if ld.GoVersion != modFileGoVersion() { + goFlag = " -go=" + ld.GoVersion + } + + compatFlag := "" + if ld.TidyCompatibleVersion != priorGoVersion(ld.GoVersion) { + compatFlag = " -compat=" + ld.TidyCompatibleVersion + } + if suggestUpgrade { + eDesc := "" + eFlag := "" + if suggestEFlag { + eDesc = ", leaving some packages unresolved" + eFlag = " -e" + } + fmt.Fprintf(os.Stderr, "To upgrade to the versions selected by go %s%s:\n\tgo mod tidy%s -go=%s && go mod tidy%s -go=%s%s\n", ld.TidyCompatibleVersion, eDesc, eFlag, ld.TidyCompatibleVersion, eFlag, ld.GoVersion, compatFlag) + } else if suggestEFlag { + // If some packages are missing but no package is upgraded, then we + // shouldn't suggest upgrading to the Go 1.16 versions explicitly — that + // wouldn't actually fix anything for Go 1.16 users, and *would* break + // something for Go 1.17 users. + fmt.Fprintf(os.Stderr, "To proceed despite packages unresolved in go %s:\n\tgo mod tidy -e%s%s\n", ld.TidyCompatibleVersion, goFlag, compatFlag) + } + + fmt.Fprintf(os.Stderr, "If reproducibility with go %s is not needed:\n\tgo mod tidy%s -compat=%s\n", ld.TidyCompatibleVersion, goFlag, ld.GoVersion) + + // TODO(#46141): Populate the linked wiki page. + fmt.Fprintf(os.Stderr, "For other options, see:\n\thttps://golang.org/wiki/PruningModules\n") + } + + mg, err := rs.Graph(ctx) + if err != nil { + ld.errorf("go mod tidy: error loading go %s module graph: %v\n", ld.TidyCompatibleVersion, err) + suggestFixes() + return + } + + // Re-resolve packages in parallel. + // + // We re-resolve each package — rather than just checking versions — to ensure + // that we have fetched module source code (and, importantly, checksums for + // that source code) for all modules that are necessary to ensure that imports + // are unambiguous. That also produces clearer diagnostics, since we can say + // exactly what happened to the package if it became ambiguous or disappeared + // entirely. + // + // We re-resolve the packages in parallel because this process involves disk + // I/O to check for package sources, and because the process of checking for + // ambiguous imports may require us to download additional modules that are + // otherwise pruned out in Go 1.17 — we don't want to block progress on other + // packages while we wait for a single new download. + type mismatch struct { + mod module.Version + err error + } + mismatchMu := make(chan map[*loadPkg]mismatch, 1) + mismatchMu <- map[*loadPkg]mismatch{} + for _, pkg := range ld.pkgs { + if pkg.mod.Path == "" && pkg.err == nil { + // This package is from the standard library (which does not vary based on + // the module graph). + continue + } + + pkg := pkg + ld.work.Add(func() { + mod, _, err := importFromModules(ctx, pkg.path, rs, mg) + if mod != pkg.mod { + mismatches := <-mismatchMu + mismatches[pkg] = mismatch{mod: mod, err: err} + mismatchMu <- mismatches + } + }) + } + <-ld.work.Idle() + + mismatches := <-mismatchMu + if len(mismatches) == 0 { + // Since we're running as part of 'go mod tidy', the roots of the module + // graph should contain only modules that are relevant to some package in + // the package graph. We checked every package in the package graph and + // didn't find any mismatches, so that must mean that all of the roots of + // the module graph are also consistent. + // + // If we're wrong, Go 1.16 in -mod=readonly mode will error out with + // "updates to go.mod needed", which would be very confusing. So instead, + // we'll double-check that our reasoning above actually holds — if it + // doesn't, we'll emit an internal error and hopefully the user will report + // it as a bug. + for _, m := range ld.requirements.rootModules { + if v := mg.Selected(m.Path); v != m.Version { + fmt.Fprintln(os.Stderr) + base.Fatalf("go: internal error: failed to diagnose selected-version mismatch for module %s: go %s selects %s, but go %s selects %s\n\tPlease report this at https://golang.org/issue.", m.Path, ld.GoVersion, m.Version, ld.TidyCompatibleVersion, v) + } + } + return + } + + // Iterate over the packages (instead of the mismatches map) to emit errors in + // deterministic order. + for _, pkg := range ld.pkgs { + mismatch, ok := mismatches[pkg] + if !ok { + continue + } + + if pkg.isTest() { + // We already did (or will) report an error for the package itself, + // so don't report a duplicate (and more vebose) error for its test. + if _, ok := mismatches[pkg.testOf]; !ok { + base.Fatalf("go: internal error: mismatch recorded for test %s, but not its non-test package", pkg.path) + } + continue + } + + switch { + case mismatch.err != nil: + // pkg resolved successfully, but errors out using the requirements in rs. + // + // This could occur because the import is provided by a single lazy root + // (and is thus unambiguous in lazy mode) and also one or more + // transitive dependencies (and is ambiguous in eager mode). + // + // It could also occur because some transitive dependency upgrades the + // module that previously provided the package to a version that no + // longer does, or to a version for which the module source code (but + // not the go.mod file in isolation) has a checksum error. + if missing := (*ImportMissingError)(nil); errors.As(mismatch.err, &missing) { + selected := module.Version{ + Path: pkg.mod.Path, + Version: mg.Selected(pkg.mod.Path), + } + ld.errorf("%s loaded from %v,\n\tbut go %s would fail to locate it in %s\n", pkg.stackText(), pkg.mod, ld.TidyCompatibleVersion, selected) + } else { + if ambiguous := (*AmbiguousImportError)(nil); errors.As(mismatch.err, &ambiguous) { + // TODO: Is this check needed? + } + ld.errorf("%s loaded from %v,\n\tbut go %s would fail to locate it:\n\t%v\n", pkg.stackText(), pkg.mod, ld.TidyCompatibleVersion, mismatch.err) + } + + suggestEFlag = true + + // Even if we press ahead with the '-e' flag, the older version will + // error out in readonly mode if it thinks the go.mod file contains + // any *explicit* dependency that is not at its selected version, + // even if that dependency is not relevant to any package being loaded. + // + // We check for that condition here. If all of the roots are consistent + // the '-e' flag suffices, but otherwise we need to suggest an upgrade. + if !suggestUpgrade { + for _, m := range ld.requirements.rootModules { + if v := mg.Selected(m.Path); v != m.Version { + suggestUpgrade = true + break + } + } + } + + case pkg.err != nil: + // pkg had an error in lazy mode (presumably suppressed with the -e flag), + // but not in eager mode. + // + // This is possible, if, say, the import is unresolved in lazy mode + // (because the "latest" version of each candidate module either is + // unavailable or does not contain the package), but is resolved in + // eager mode due to a newer-than-latest dependency that is normally + // runed out of the module graph. + // + // This could also occur if the source code for the module providing the + // package in lazy mode has a checksum error, but eager mode upgrades + // that module to a version with a correct checksum. + // + // pkg.err should have already been logged elsewhere — along with a + // stack trace — so log only the import path and non-error info here. + suggestUpgrade = true + ld.errorf("%s failed to load from any module,\n\tbut go %s would load it from %v\n", pkg.path, ld.TidyCompatibleVersion, mismatch.mod) + + case pkg.mod != mismatch.mod: + // The package is loaded successfully by both Go versions, but from a + // different module in each. This could lead to subtle (and perhaps even + // unnoticed!) variations in behavior between builds with different + // toolchains. + suggestUpgrade = true + ld.errorf("%s loaded from %v,\n\tbut go %s would select %v\n", pkg.stackText(), pkg.mod, ld.TidyCompatibleVersion, mismatch.mod.Version) + + default: + base.Fatalf("go: internal error: mismatch recorded for package %s, but no differences found", pkg.path) + } + } + + suggestFixes() + base.ExitIfErrors() +} + // scanDir is like imports.ScanDir but elides known magic imports from the list, // so that we do not go looking for packages that don't really exist. // diff --git a/src/cmd/go/testdata/script/mod_tidy_compat.txt b/src/cmd/go/testdata/script/mod_tidy_compat.txt index e6f88dc7798..e6edef5ee3b 100644 --- a/src/cmd/go/testdata/script/mod_tidy_compat.txt +++ b/src/cmd/go/testdata/script/mod_tidy_compat.txt @@ -33,31 +33,26 @@ cmp go.mod go.mod.orig go list -m all cmp stdout m_all.txt +go mod edit -go=1.16 +go list -m all +cmp stdout m_all.txt + + +# If we explicitly drop compatibility with 1.16, we retain fewer checksums, +# which gives a cleaner go.sum file but causes 1.16 to fail in readonly mode. + +cp go.mod.orig go.mod +go mod tidy -compat=1.17 +cmp go.mod go.mod.orig + +go list -m all +cmp stdout m_all.txt + go mod edit -go=1.16 ! go list -m all stderr '^go list -m: example.net/lazy@v0.1.0 requires\n\texample.com/version@v1.0.1: missing go.sum entry; to add it:\n\tgo mod download example.com/version$' -# If we combine a Go 1.16 go.sum file... -go mod tidy -go=1.16 - -# ...with a Go 1.17 go.mod file... -cp go.mod.orig go.mod - -# ...then Go 1.17 continues to work... -go list -m all -cmp stdout m_all.txt - -# ...and now 1.16 can load the same build list! -go mod edit -go=1.16 -go list -m all -cmp stdout m_all.txt - - -# TODO(#46141): Add a cleaner way to tidy a Go 1.17 module while preserving -# the checksums needed to work within it with Go 1.16. - - -- go.mod -- // Module m happens to have the exact same build list as what would be // selected under Go 1.16, but computes that build list without looking at diff --git a/src/cmd/go/testdata/script/mod_tidy_compat_added.txt b/src/cmd/go/testdata/script/mod_tidy_compat_added.txt new file mode 100644 index 00000000000..94fa79bc9f5 --- /dev/null +++ b/src/cmd/go/testdata/script/mod_tidy_compat_added.txt @@ -0,0 +1,105 @@ +# https://golang.org/issue/46141: 'go mod tidy' for a Go 1.17 module should by +# default preserve enough checksums for the module to be used by Go 1.16. +# +# We don't have a copy of Go 1.16 handy, but we can simulate it by editing the +# 'go' version in the go.mod file to 1.16, without actually updating the +# requirements to match. + +[short] skip + +env MODFMT='{{with .Module}}{{.Path}} {{.Version}}{{end}}' + + +# For this module, Go 1.17 produces an error for one module, and Go 1.16 +# produces a different error for a different module. + +cp go.mod go.mod.orig + +! go mod tidy + +stderr '^example\.com/m imports\n\texample\.net/added: module example\.net/added@latest found \(v0\.3\.0, replaced by \./a1\), but does not contain package example\.net/added$' + +cmp go.mod go.mod.orig + + +# When we run 'go mod tidy -e', we should proceed past the first error and follow +# it with a second error describing the version descrepancy. +# +# We should not provide advice on how to push past the version descrepancy, +# because the '-e' flag should already do that, writing out an otherwise-tidied +# go.mod file. + +go mod tidy -e + +stderr '^example\.com/m imports\n\texample\.net/added: module example\.net/added@latest found \(v0\.3\.0, replaced by \./a1\), but does not contain package example\.net/added\nexample\.net/added failed to load from any module,\n\tbut go 1\.16 would load it from example\.net/added@v0\.2\.0$' + +! stderr '\n\tgo mod tidy' + +cmp go.mod go.mod.tidy + + +-- go.mod -- +module example.com/m + +go 1.17 + +replace ( + example.net/added v0.1.0 => ./a1 + example.net/added v0.2.0 => ./a2 + example.net/added v0.3.0 => ./a1 + example.net/lazy v0.1.0 => ./lazy + example.net/pruned v0.1.0 => ./pruned +) + +require ( + example.net/added v0.1.0 + example.net/lazy v0.1.0 +) +-- go.mod.tidy -- +module example.com/m + +go 1.17 + +replace ( + example.net/added v0.1.0 => ./a1 + example.net/added v0.2.0 => ./a2 + example.net/added v0.3.0 => ./a1 + example.net/lazy v0.1.0 => ./lazy + example.net/pruned v0.1.0 => ./pruned +) + +require example.net/lazy v0.1.0 +-- m.go -- +package m + +import ( + _ "example.net/added" + _ "example.net/lazy" +) + +-- a1/go.mod -- +module example.net/added + +go 1.17 +-- a2/go.mod -- +module example.net/added + +go 1.17 +-- a2/added.go -- +package added + +-- lazy/go.mod -- +module example.net/lazy + +go 1.17 + +require example.net/pruned v0.1.0 +-- lazy/lazy.go -- +package lazy + +-- pruned/go.mod -- +module example.net/pruned + +go 1.17 + +require example.net/added v0.2.0 diff --git a/src/cmd/go/testdata/script/mod_tidy_compat_ambiguous.txt b/src/cmd/go/testdata/script/mod_tidy_compat_ambiguous.txt new file mode 100644 index 00000000000..ed1dd53eff1 --- /dev/null +++ b/src/cmd/go/testdata/script/mod_tidy_compat_ambiguous.txt @@ -0,0 +1,98 @@ +# https://golang.org/issue/46141: 'go mod tidy' for a Go 1.17 module should by +# default preserve enough checksums for the module to be used by Go 1.16. +# +# We don't have a copy of Go 1.16 handy, but we can simulate it by editing the +# 'go' version in the go.mod file to 1.16, without actually updating the +# requirements to match. + +[short] skip + +env MODFMT='{{with .Module}}{{.Path}} {{.Version}}{{end}}' + +# For this module, the dependency providing package +# example.net/ambiguous/nested/pkg is unambiguous in Go 1.17 (because only one +# root of the module graph contains the package), whereas it is ambiguous in +# Go 1.16 (because two different modules contain plausible packages and Go 1.16 +# does not privilege roots above other dependencies). +# +# However, the overall build list is identical for both versions. + +cp go.mod go.mod.orig + +! go mod tidy + +stderr '^example\.com/m imports\n\texample\.net/indirect imports\n\texample\.net/ambiguous/nested/pkg loaded from example\.net/ambiguous/nested@v0\.1\.0,\n\tbut go 1.16 would fail to locate it:\n\tambiguous import: found package example\.net/ambiguous/nested/pkg in multiple modules:\n\texample\.net/ambiguous v0.1.0 \(.*\)\n\texample\.net/ambiguous/nested v0.1.0 \(.*\)\n\n' + +stderr '\n\nTo proceed despite packages unresolved in go 1\.16:\n\tgo mod tidy -e\nIf reproducibility with go 1.16 is not needed:\n\tgo mod tidy -compat=1\.17\nFor other options, see:\n\thttps://golang\.org/wiki/PruningModules\n' + +cmp go.mod go.mod.orig + + +# If we run 'go mod tidy -e', we should still save enough checksums to run +# 'go list -m all' reproducibly with go 1.16, even though we can't list +# the specific package. + +go mod tidy -e +! stderr '\n\tgo mod tidy' +cmp go.mod go.mod.orig + +go list -m all +cmp stdout all-m.txt + +go list -f $MODFMT example.net/ambiguous/nested/pkg +stdout '^example.net/ambiguous/nested v0\.1\.0$' +! stderr . + +go mod edit -go=1.16 +go list -m all +cmp stdout all-m.txt + +! go list -f $MODFMT example.net/ambiguous/nested/pkg +stderr '^ambiguous import: found package example\.net/ambiguous/nested/pkg in multiple modules:\n\texample\.net/ambiguous v0\.1\.0 \(.*\)\n\texample\.net/ambiguous/nested v0\.1\.0 \(.*\)\n' + + +# On the other hand, if we use -compat=1.17, 1.16 can't even load +# the build list (due to missing checksums). + +cp go.mod.orig go.mod +go mod tidy -compat=1.17 +! stderr . +go list -m all +cmp stdout all-m.txt + +go mod edit -go=1.16 +! go list -m all +stderr '^go list -m: example\.net/indirect@v0\.1\.0 requires\n\texample\.net/ambiguous@v0\.1\.0: missing go\.sum entry; to add it:\n\tgo mod download example\.net/ambiguous\n' + + +-- go.mod -- +module example.com/m + +go 1.17 + +replace example.net/indirect v0.1.0 => ./indirect + +require ( + example.net/ambiguous/nested v0.1.0 // indirect + example.net/indirect v0.1.0 +) +-- all-m.txt -- +example.com/m +example.net/ambiguous v0.1.0 +example.net/ambiguous/nested v0.1.0 +example.net/indirect v0.1.0 => ./indirect +-- m.go -- +package m + +import _ "example.net/indirect" + +-- indirect/go.mod -- +module example.net/indirect + +go 1.17 + +require example.net/ambiguous v0.1.0 +-- indirect/indirect.go -- +package indirect + +import _ "example.net/ambiguous/nested/pkg" diff --git a/src/cmd/go/testdata/script/mod_tidy_compat_deleted.txt b/src/cmd/go/testdata/script/mod_tidy_compat_deleted.txt new file mode 100644 index 00000000000..3aacde2025d --- /dev/null +++ b/src/cmd/go/testdata/script/mod_tidy_compat_deleted.txt @@ -0,0 +1,128 @@ +# https://golang.org/issue/46141: 'go mod tidy' for a Go 1.17 module should by +# default preserve enough checksums for the module to be used by Go 1.16. +# +# We don't have a copy of Go 1.16 handy, but we can simulate it by editing the +# 'go' version in the go.mod file to 1.16, without actually updating the +# requirements to match. + +[short] skip + +env MODFMT='{{with .Module}}{{.Path}} {{.Version}}{{end}}' + + +# For this module, the "deleted" dependency contains an imported package, but +# Go 1.16 selects a higher version (in which that package has been deleted). + +cp go.mod go.mod.orig + +! go mod tidy + +stderr '^example\.com/m imports\n\texample\.net/deleted loaded from example\.net/deleted@v0\.1\.0,\n\tbut go 1\.16 would fail to locate it in example\.net/deleted@v0\.2\.0\n\n' + +stderr '\n\nTo upgrade to the versions selected by go 1.16, leaving some packages unresolved:\n\tgo mod tidy -e -go=1\.16 && go mod tidy -e -go=1\.17\nIf reproducibility with go 1.16 is not needed:\n\tgo mod tidy -compat=1\.17\nFor other options, see:\n\thttps://golang\.org/wiki/PruningModules\n' + + +# The suggested 'go mod tidy -e' command should proceed anyway. + +go mod tidy -e +cmp go.mod go.mod.tidy + + +# In 'go 1.16' mode we should error out in the way we claimed. + +cd 116-outside +! go list -deps -f $MODFMT example.com/m +stderr '^\.\.[/\\]m\.go:4:2: no required module provides package example\.net/deleted; to add it:\n\tgo get example\.net/deleted$' +cd .. + +go mod edit -go=1.16 +! go list -deps -f $MODFMT example.com/m +stderr '^go: updates to go\.mod needed; to update it:\n\tgo mod tidy$' + +! go mod tidy +stderr '^example\.com/m imports\n\texample\.net/deleted: module example\.net/deleted@latest found \(v0\.2\.0, replaced by \./d2\), but does not contain package example\.net/deleted$' + + +-- go.mod -- +module example.com/m + +go 1.17 + +replace ( + example.net/deleted v0.1.0 => ./d1 + example.net/deleted v0.2.0 => ./d2 + example.net/lazy v0.1.0 => ./lazy + example.net/pruned v0.1.0 => ./pruned +) + +require ( + example.net/deleted v0.1.0 + example.net/deleted v0.1.0 // redundant + example.net/lazy v0.1.0 +) +-- go.mod.tidy -- +module example.com/m + +go 1.17 + +replace ( + example.net/deleted v0.1.0 => ./d1 + example.net/deleted v0.2.0 => ./d2 + example.net/lazy v0.1.0 => ./lazy + example.net/pruned v0.1.0 => ./pruned +) + +require ( + example.net/deleted v0.1.0 + example.net/lazy v0.1.0 +) +-- 116-outside/go.mod -- +module outside + +go 1.16 + +replace ( + example.com/m => ../ + example.net/deleted v0.1.0 => ../d1 + example.net/deleted v0.2.0 => ../d2 + example.net/lazy v0.1.0 => ../lazy + example.net/pruned v0.1.0 => ../pruned +) + +require example.com/m v0.1.0 +-- m.go -- +package m + +import ( + _ "example.net/deleted" + _ "example.net/lazy" +) + +-- d1/go.mod -- +module example.net/deleted + +go 1.17 +-- d1/deleted.go -- +package deleted +-- d2/go.mod -- +module example.net/deleted + +go 1.17 +-- d2/README -- +There is no longer a Go package here. + +-- lazy/go.mod -- +module example.net/lazy + +go 1.17 + +require example.net/pruned v0.1.0 +-- lazy/lazy.go -- +package lazy + +-- pruned/go.mod -- +module example.net/pruned + +go 1.17 + +require example.net/deleted v0.2.0 diff --git a/src/cmd/go/testdata/script/mod_tidy_compat_implicit.txt b/src/cmd/go/testdata/script/mod_tidy_compat_implicit.txt index baaa5d63e31..e00aea930ee 100644 --- a/src/cmd/go/testdata/script/mod_tidy_compat_implicit.txt +++ b/src/cmd/go/testdata/script/mod_tidy_compat_implicit.txt @@ -27,8 +27,22 @@ env MODFMT='{{with .Module}}{{.Path}} {{.Version}}{{end}}' # it — lazy v0.1.0 — specifies 'go 1.17', and it is not otherwise relevant to # the main module). +# 'go mod tidy' should by default diagnose the difference in dependencies as an +# error, with useful suggestions about how to resolve it. + cp go.mod go.mod.orig -go mod tidy +! go mod tidy +stderr '^example\.com/m imports\n\texample\.net/lazy tested by\n\texample\.net/lazy.test imports\n\texample\.com/retract/incompatible loaded from example\.com/retract/incompatible@v1\.0\.0,\n\tbut go 1\.16 would select v2\.0\.0\+incompatible\n\n' +stderr '\n\nTo upgrade to the versions selected by go 1\.16:\n\tgo mod tidy -go=1\.16 && go mod tidy -go=1\.17\nIf reproducibility with go 1.16 is not needed:\n\tgo mod tidy -compat=1.17\nFor other options, see:\n\thttps://golang\.org/wiki/PruningModules\n' + +cmp go.mod go.mod.orig + +# The suggested '-compat' flag to ignore differences should silence the error +# and leave go.mod unchanged, resulting in checksum errors when Go 1.16 tries +# to load a module pruned out by Go 1.17. + +go mod tidy -compat=1.17 +! stderr . cmp go.mod go.mod.orig go list -deps -test -f $MODFMT all @@ -49,7 +63,7 @@ cp go.mod.orig go.mod # ...then Go 1.17 no longer works. 😞 ! go list -deps -test -f $MODFMT all -stderr -count=1 '^can''t load test package: lazy/lazy_test.go:3:8: missing go\.sum entry for module providing package example\.com/retract/incompatible \(imported by example\.net/lazy\); to add:\n\tgo get -t example.net/lazy@v0\.1\.0$' +stderr -count=1 '^can''t load test package: lazy[/\\]lazy_test.go:3:8: missing go\.sum entry for module providing package example\.com/retract/incompatible \(imported by example\.net/lazy\); to add:\n\tgo get -t example.net/lazy@v0\.1\.0$' # However, if we take the union of the go.sum files... @@ -67,11 +81,6 @@ go list -deps -test -f $MODFMT all stdout '^example\.com/retract/incompatible v2\.0\.0\+incompatible$' -# TODO(#46100): In compatibility mode, should we reject the above difference as -# incompatible, or save checksums for both possible versions of the test -# dependency? - - -- go.mod -- // Module m imports packages from the same versions under Go 1.17 // as under Go 1.16, but under 1.16 its (implicit) external test dependencies diff --git a/src/cmd/go/testdata/script/mod_tidy_compat_incompatible.txt b/src/cmd/go/testdata/script/mod_tidy_compat_incompatible.txt index 08613524082..2d8726544a3 100644 --- a/src/cmd/go/testdata/script/mod_tidy_compat_incompatible.txt +++ b/src/cmd/go/testdata/script/mod_tidy_compat_incompatible.txt @@ -27,12 +27,23 @@ env MODFMT='{{with .Module}}{{.Path}} {{.Version}}{{end}}' # the main module). -# TODO(#46141): 'go mod tidy' should by default diagnose the difference in -# dependencies as an error, but it should still be possible to simply drop -# compatibility with Go 1.16 by passing an appropriate '-compat' flag. +# 'go mod tidy' should by default diagnose the difference in dependencies as an +# error, with useful suggestions about how to resolve it. cp go.mod go.mod.orig -go mod tidy +! go mod tidy +stderr '^example\.com/m imports\n\texample\.net/lazy imports\n\texample\.com/retract/incompatible loaded from example\.com/retract/incompatible@v1\.0\.0,\n\tbut go 1\.16 would select v2\.0\.0\+incompatible\n\n' +stderr '\n\nTo upgrade to the versions selected by go 1\.16:\n\tgo mod tidy -go=1\.16 && go mod tidy -go=1\.17\nIf reproducibility with go 1\.16 is not needed:\n\tgo mod tidy -compat=1.17\nFor other options, see:\n\thttps://golang\.org/wiki/PruningModules\n' + +cmp go.mod go.mod.orig + + +# The suggested '-compat' flag to ignore differences should silence the error +# and leave go.mod unchanged, resulting in checksum errors when Go 1.16 tries +# to load a module pruned out by Go 1.17. + +go mod tidy -compat=1.17 +! stderr . cmp go.mod go.mod.orig go mod edit -go=1.16 @@ -44,6 +55,7 @@ stderr -count=2 '^go: example\.net/lazy@v0\.1\.0 requires\n\texample\.net/requir # There are two ways for the module author to bring the two into alignment. # One is to *explicitly* 'exclude' the version that is already *implicitly* # pruned out under 1.17. + go mod edit -exclude=example.com/retract/incompatible@v2.0.0+incompatible go list -f $MODFMT -deps ./... stdout '^example.com/retract/incompatible v1\.0\.0$' @@ -51,13 +63,20 @@ stdout '^example.com/retract/incompatible v1\.0\.0$' # The other is to explicitly upgrade the version required under Go 1.17 -# to match the version selected by Go 1.16. +# to match the version selected by Go 1.16. The commands suggested by +# 'go mod tidy' should do exactly that. + cp go.mod.orig go.mod -go get -d example.com/retract/incompatible@v2.0.0+incompatible - # Note that we are not running 'go mod tidy' here: we need to preserve - # the checksum for v1.0.0 because it is also still in the module graph - # as seen by Go 1.16. +go mod tidy -go=1.16 +go list -f $MODFMT -deps ./... +stdout '^example.com/retract/incompatible v2\.0\.0\+incompatible$' +! stdout 'v1\.0\.0' + +go mod tidy -go=1.17 +go list -f $MODFMT -deps ./... +stdout '^example.com/retract/incompatible v2\.0\.0\+incompatible$' +! stdout 'v1\.0\.0' go mod edit -go=1.16 go list -f $MODFMT -deps ./... diff --git a/src/cmd/go/testdata/script/mod_tidy_compat_irrelevant.txt b/src/cmd/go/testdata/script/mod_tidy_compat_irrelevant.txt index d4371e0f7d4..7c22fca6c0f 100644 --- a/src/cmd/go/testdata/script/mod_tidy_compat_irrelevant.txt +++ b/src/cmd/go/testdata/script/mod_tidy_compat_irrelevant.txt @@ -27,34 +27,28 @@ cp go.mod go.mod.orig go mod tidy cmp go.mod go.mod.orig -go list -m all -stdout '^example\.com/retract/incompatible v1\.0\.0$' - -go mod edit -go=1.16 -! go list -deps -test -f $MODFMT all - # TODO(#46160): -count=1 instead of -count=2. -stderr -count=2 '^go: example.net/lazy@v0.1.0 requires\n\texample.com/retract/incompatible@v1.0.0: missing go.sum entry; to add it:\n\tgo mod download example.com/retract/incompatible$' - - -# If we combine a Go 1.16 go.sum file... -go mod tidy -go=1.16 - -# ...with a Go 1.17 go.mod file... -cp go.mod.orig go.mod - -# ...then Go 1.17 continues to work... go list -deps -test -f $MODFMT all cp stdout out-117.txt -# ...and 1.16 also works, and selects the same versions for all packages -# even remotely relevant to the main module. go mod edit -go=1.16 go list -deps -test -f $MODFMT all cmp stdout out-117.txt -# TODO(#46160): Add a cleaner way to tidy a Go 1.17 module while preserving -# the checksums needed to work within it with Go 1.16. +# If we explicitly drop compatibility with 1.16, we retain fewer checksums, +# which gives a cleaner go.sum file but causes 1.16 to fail in readonly mode. + +cp go.mod.orig go.mod +go mod tidy -compat=1.17 +cmp go.mod go.mod.orig + +go list -deps -test -f $MODFMT all +cmp stdout out-117.txt + +go mod edit -go=1.16 +! go list -deps -test -f $MODFMT all + # TODO(#46160): -count=1 instead of -count=2. +stderr -count=2 '^go: example.net/lazy@v0.1.0 requires\n\texample.com/retract/incompatible@v1.0.0: missing go.sum entry; to add it:\n\tgo mod download example.com/retract/incompatible$' -- go.mod -- diff --git a/src/cmd/go/testdata/script/mod_tidy_oldgo.txt b/src/cmd/go/testdata/script/mod_tidy_oldgo.txt new file mode 100644 index 00000000000..0e88b068a76 --- /dev/null +++ b/src/cmd/go/testdata/script/mod_tidy_oldgo.txt @@ -0,0 +1,21 @@ +# Modules were introduced in Go 1.11, but for various reasons users may +# decide to declare a (much!) older go version in their go.mod file. +# Modules with very old versions should not be rejected, and should have +# the same module-graph semantics as in Go 1.11. + +cp go.mod go.mod.orig +go mod tidy +cmp go.mod go.mod.orig + +-- go.mod -- +module example.com/legacy/go1 + +go 1.0 + +require golang.org/x/text v0.3.0 +-- main.go -- +package main + +import _ "golang.org/x/text/language" + +func main() {} diff --git a/src/go.sum b/src/go.sum index b3de6c526c9..6e869b96f71 100644 --- a/src/go.sum +++ b/src/go.sum @@ -1,8 +1,15 @@ golang.org/x/crypto v0.0.0-20210503195802-e9a32991a82e h1:8foAy0aoO5GkqCvAEJ4VC4P3zksTg4X4aJCDpZzmgQI= golang.org/x/crypto v0.0.0-20210503195802-e9a32991a82e/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= +golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210510120150-4163338589ed h1:p9UgmWI9wKpfYmgaV/IZKGdXc5qEK45tDwwwDyjS26I= golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744 h1:yhBbb4IRs2HS9PPlAg6DMC6mUOKexJBNsLf4Z+6En1Q= golang.org/x/sys v0.0.0-20210511113859-b0526f3d8744/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7-0.20210503195748-5c7c50ebbd4f h1:yQJrRE0hDxDFmZLlRaw+3vusO4fwNHgHIjUOMO7bHYI= golang.org/x/text v0.3.7-0.20210503195748-5c7c50ebbd4f/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= From f22ec51debeddc0903096e66bfaf641568bede3b Mon Sep 17 00:00:00 2001 From: Dan Scales Date: Sat, 22 May 2021 13:40:20 -0700 Subject: [PATCH 074/100] doc: add Go 1.17 release note about inlining functions with closures Fixes #45781 Change-Id: Ia5bc2845f7f94aff4f3f0ff15533feb148223adb Reviewed-on: https://go-review.googlesource.com/c/go/+/322089 Trust: Dan Scales Reviewed-by: Cherry Mui --- doc/go1.17.html | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/doc/go1.17.html b/doc/go1.17.html index 6dd1d0d1db5..c2317a40352 100644 --- a/doc/go1.17.html +++ b/doc/go1.17.html @@ -228,7 +228,14 @@ Do not send CLs removing the interior tags from such phrases.

Compiler

-

+

+ + Functions containing closures can now be inlined. One effect of this change is + that a function with a closure may actually produce a distinct closure function + for each place that the function is inlined. Hence, this change could reveal + bugs where Go functions are compared (incorrectly) by pointer value. Go + functions are by definition not comparable. + TODO: complete the Compiler section, or delete if not needed

From 74242baa4136c7a9132a8ccd9881354442788c8c Mon Sep 17 00:00:00 2001 From: Roland Shoemaker Date: Tue, 11 May 2021 11:31:31 -0700 Subject: [PATCH 075/100] archive/zip: only preallocate File slice if reasonably sized Since the number of files in the EOCD record isn't validated, it isn't safe to preallocate Reader.Files using that field. A malformed archive can indicate it contains up to 1 << 128 - 1 files. We can still safely preallocate the slice by checking if the specified number of files in the archive is reasonable, given the size of the archive. Thanks to the OSS-Fuzz project for discovering this issue and to Emmanuel Odeke for reporting it. Fixes #46242 Fixes CVE-2021-33196 Change-Id: I3c76d8eec178468b380d87fdb4a3f2cb06f0ee76 Reviewed-on: https://go-review.googlesource.com/c/go/+/318909 Trust: Roland Shoemaker Trust: Katie Hockman Trust: Joe Tsai Run-TryBot: Roland Shoemaker TryBot-Result: Go Bot Reviewed-by: Katie Hockman Reviewed-by: Joe Tsai --- src/archive/zip/reader.go | 10 +++++- src/archive/zip/reader_test.go | 59 ++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 1 deletion(-) diff --git a/src/archive/zip/reader.go b/src/archive/zip/reader.go index 808cf274cad..2d53f4c7231 100644 --- a/src/archive/zip/reader.go +++ b/src/archive/zip/reader.go @@ -96,7 +96,15 @@ func (z *Reader) init(r io.ReaderAt, size int64) error { return err } z.r = r - z.File = make([]*File, 0, end.directoryRecords) + // Since the number of directory records is not validated, it is not + // safe to preallocate z.File without first checking that the specified + // number of files is reasonable, since a malformed archive may + // indicate it contains up to 1 << 128 - 1 files. Since each file has a + // header which will be _at least_ 30 bytes we can safely preallocate + // if (data size / 30) >= end.directoryRecords. + if (uint64(size)-end.directorySize)/30 >= end.directoryRecords { + z.File = make([]*File, 0, end.directoryRecords) + } z.Comment = end.comment rs := io.NewSectionReader(r, 0, size) if _, err = rs.Seek(int64(end.directoryOffset), io.SeekStart); err != nil { diff --git a/src/archive/zip/reader_test.go b/src/archive/zip/reader_test.go index 35e681ec699..37dafe6c8e7 100644 --- a/src/archive/zip/reader_test.go +++ b/src/archive/zip/reader_test.go @@ -1325,3 +1325,62 @@ func TestReadDataDescriptor(t *testing.T) { }) } } + +func TestCVE202133196(t *testing.T) { + // Archive that indicates it has 1 << 128 -1 files, + // this would previously cause a panic due to attempting + // to allocate a slice with 1 << 128 -1 elements. + data := []byte{ + 0x50, 0x4b, 0x03, 0x04, 0x14, 0x00, 0x08, 0x08, + 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x02, + 0x03, 0x62, 0x61, 0x65, 0x03, 0x04, 0x00, 0x00, + 0xff, 0xff, 0x50, 0x4b, 0x07, 0x08, 0xbe, 0x20, + 0x5c, 0x6c, 0x09, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x50, 0x4b, 0x01, 0x02, 0x14, 0x00, + 0x14, 0x00, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xbe, 0x20, 0x5c, 0x6c, 0x09, 0x00, + 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x03, 0x50, 0x4b, 0x06, 0x06, 0x2c, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2d, + 0x00, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x31, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x50, 0x4b, 0x06, 0x07, 0x00, + 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x50, + 0x4b, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0x00, 0x00, + } + _, err := NewReader(bytes.NewReader(data), int64(len(data))) + if err != ErrFormat { + t.Fatalf("unexpected error, got: %v, want: %v", err, ErrFormat) + } + + // Also check that an archive containing a handful of empty + // files doesn't cause an issue + b := bytes.NewBuffer(nil) + w := NewWriter(b) + for i := 0; i < 5; i++ { + _, err := w.Create("") + if err != nil { + t.Fatalf("Writer.Create failed: %s", err) + } + } + if err := w.Close(); err != nil { + t.Fatalf("Writer.Close failed: %s", err) + } + r, err := NewReader(bytes.NewReader(b.Bytes()), int64(b.Len())) + if err != nil { + t.Fatalf("NewReader failed: %s", err) + } + if len(r.File) != 5 { + t.Errorf("Archive has unexpected number of files, got %d, want 5", len(r.File)) + } +} From d050238bb653711b47335583c5425c9efec30e4e Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Tue, 25 May 2021 10:33:02 +0200 Subject: [PATCH 076/100] doc/go1.17: fix formatting for time changes Also add a link to the time.Time type and adjust the wording a bit. Change-Id: I2f4210ada6d253eb5804e6327b2432487beb8a05 Reviewed-on: https://go-review.googlesource.com/c/go/+/321811 Trust: Tobias Klauser Reviewed-by: Ian Lance Taylor --- doc/go1.17.html | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/doc/go1.17.html b/doc/go1.17.html index c2317a40352..bdde26bd108 100644 --- a/doc/go1.17.html +++ b/doc/go1.17.html @@ -558,9 +558,10 @@ Do not send CLs removing the interior tags from such phrases.
time

- time.Time now has a GoString - method that will return a more useful value for times when printed with - the "%#v" format specifier in the fmt package. + The Time type now has a + GoString method that + will return a more useful value for times when printed with the + %#v format specifier in the fmt package.

From e4615ad74d5becdd1fcee4879775a6d4118583c5 Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Wed, 12 May 2021 23:04:25 -0400 Subject: [PATCH 077/100] math/big: move division into natdiv.go Code moved and functions reordered to be in a consistent top-down dependency order, but otherwise unchanged. First step toward commenting division algorithms. Change-Id: Ib5e604fb5b2867edff3a228ba4e57b5cb32c4137 Reviewed-on: https://go-review.googlesource.com/c/go/+/321077 Trust: Russ Cox Trust: Katie Hockman Trust: Robert Griesemer Run-TryBot: Russ Cox TryBot-Result: Go Bot Reviewed-by: Katie Hockman Reviewed-by: Robert Griesemer --- src/math/big/arith.go | 14 -- src/math/big/nat.go | 325 -------------------------------------- src/math/big/natdiv.go | 346 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 346 insertions(+), 339 deletions(-) create mode 100644 src/math/big/natdiv.go diff --git a/src/math/big/arith.go b/src/math/big/arith.go index e1947936d49..8f55c195d4b 100644 --- a/src/math/big/arith.go +++ b/src/math/big/arith.go @@ -267,20 +267,6 @@ func divWW(x1, x0, y, m Word) (q, r Word) { return Word(qq), Word(r0 >> s) } -func divWVW(z []Word, xn Word, x []Word, y Word) (r Word) { - r = xn - if len(x) == 1 { - qq, rr := bits.Div(uint(r), uint(x[0]), uint(y)) - z[0] = Word(qq) - return Word(rr) - } - rec := reciprocalWord(y) - for i := len(z) - 1; i >= 0; i-- { - z[i], r = divWW(r, x[i], y, rec) - } - return r -} - // reciprocalWord return the reciprocal of the divisor. rec = floor(( _B^2 - 1 ) / u - _B). u = d1 << nlz(d1). func reciprocalWord(d1 Word) Word { u := uint(d1 << nlz(d1)) diff --git a/src/math/big/nat.go b/src/math/big/nat.go index bbd6c8850b6..140c619c8ca 100644 --- a/src/math/big/nat.go +++ b/src/math/big/nat.go @@ -631,48 +631,6 @@ func (z nat) mulRange(a, b uint64) nat { return z.mul(nat(nil).mulRange(a, m), nat(nil).mulRange(m+1, b)) } -// q = (x-r)/y, with 0 <= r < y -func (z nat) divW(x nat, y Word) (q nat, r Word) { - m := len(x) - switch { - case y == 0: - panic("division by zero") - case y == 1: - q = z.set(x) // result is x - return - case m == 0: - q = z[:0] // result is 0 - return - } - // m > 0 - z = z.make(m) - r = divWVW(z, 0, x, y) - q = z.norm() - return -} - -func (z nat) div(z2, u, v nat) (q, r nat) { - if len(v) == 0 { - panic("division by zero") - } - - if u.cmp(v) < 0 { - q = z[:0] - r = z2.set(u) - return - } - - if len(v) == 1 { - var r2 Word - q, r2 = z.divW(u, v[0]) - r = z2.setWord(r2) - return - } - - q, r = z.divLarge(z2, u, v) - return -} - // getNat returns a *nat of len n. The contents may not be zero. // The pool holds *nat to avoid allocation when converting to interface{}. func getNat(n int) *nat { @@ -693,276 +651,6 @@ func putNat(x *nat) { var natPool sync.Pool -// q = (uIn-r)/vIn, with 0 <= r < vIn -// Uses z as storage for q, and u as storage for r if possible. -// See Knuth, Volume 2, section 4.3.1, Algorithm D. -// Preconditions: -// len(vIn) >= 2 -// len(uIn) >= len(vIn) -// u must not alias z -func (z nat) divLarge(u, uIn, vIn nat) (q, r nat) { - n := len(vIn) - m := len(uIn) - n - - // D1. - shift := nlz(vIn[n-1]) - // do not modify vIn, it may be used by another goroutine simultaneously - vp := getNat(n) - v := *vp - shlVU(v, vIn, shift) - - // u may safely alias uIn or vIn, the value of uIn is used to set u and vIn was already used - u = u.make(len(uIn) + 1) - u[len(uIn)] = shlVU(u[0:len(uIn)], uIn, shift) - - // z may safely alias uIn or vIn, both values were used already - if alias(z, u) { - z = nil // z is an alias for u - cannot reuse - } - q = z.make(m + 1) - - if n < divRecursiveThreshold { - q.divBasic(u, v) - } else { - q.divRecursive(u, v) - } - putNat(vp) - - q = q.norm() - shrVU(u, u, shift) - r = u.norm() - - return q, r -} - -// divBasic performs word-by-word division of u by v. -// The quotient is written in pre-allocated q. -// The remainder overwrites input u. -// -// Precondition: -// - q is large enough to hold the quotient u / v -// which has a maximum length of len(u)-len(v)+1. -func (q nat) divBasic(u, v nat) { - n := len(v) - m := len(u) - n - - qhatvp := getNat(n + 1) - qhatv := *qhatvp - - // D2. - vn1 := v[n-1] - rec := reciprocalWord(vn1) - for j := m; j >= 0; j-- { - // D3. - qhat := Word(_M) - var ujn Word - if j+n < len(u) { - ujn = u[j+n] - } - if ujn != vn1 { - var rhat Word - qhat, rhat = divWW(ujn, u[j+n-1], vn1, rec) - - // x1 | x2 = q̂v_{n-2} - vn2 := v[n-2] - x1, x2 := mulWW(qhat, vn2) - // test if q̂v_{n-2} > br̂ + u_{j+n-2} - ujn2 := u[j+n-2] - for greaterThan(x1, x2, rhat, ujn2) { - qhat-- - prevRhat := rhat - rhat += vn1 - // v[n-1] >= 0, so this tests for overflow. - if rhat < prevRhat { - break - } - x1, x2 = mulWW(qhat, vn2) - } - } - - // D4. - // Compute the remainder u - (q̂*v) << (_W*j). - // The subtraction may overflow if q̂ estimate was off by one. - qhatv[n] = mulAddVWW(qhatv[0:n], v, qhat, 0) - qhl := len(qhatv) - if j+qhl > len(u) && qhatv[n] == 0 { - qhl-- - } - c := subVV(u[j:j+qhl], u[j:], qhatv) - if c != 0 { - c := addVV(u[j:j+n], u[j:], v) - // If n == qhl, the carry from subVV and the carry from addVV - // cancel out and don't affect u[j+n]. - if n < qhl { - u[j+n] += c - } - qhat-- - } - - if j == m && m == len(q) && qhat == 0 { - continue - } - q[j] = qhat - } - - putNat(qhatvp) -} - -const divRecursiveThreshold = 100 - -// divRecursive performs word-by-word division of u by v. -// The quotient is written in pre-allocated z. -// The remainder overwrites input u. -// -// Precondition: -// - len(z) >= len(u)-len(v) -// -// See Burnikel, Ziegler, "Fast Recursive Division", Algorithm 1 and 2. -func (z nat) divRecursive(u, v nat) { - // Recursion depth is less than 2 log2(len(v)) - // Allocate a slice of temporaries to be reused across recursion. - recDepth := 2 * bits.Len(uint(len(v))) - // large enough to perform Karatsuba on operands as large as v - tmp := getNat(3 * len(v)) - temps := make([]*nat, recDepth) - z.clear() - z.divRecursiveStep(u, v, 0, tmp, temps) - for _, n := range temps { - if n != nil { - putNat(n) - } - } - putNat(tmp) -} - -// divRecursiveStep computes the division of u by v. -// - z must be large enough to hold the quotient -// - the quotient will overwrite z -// - the remainder will overwrite u -func (z nat) divRecursiveStep(u, v nat, depth int, tmp *nat, temps []*nat) { - u = u.norm() - v = v.norm() - - if len(u) == 0 { - z.clear() - return - } - n := len(v) - if n < divRecursiveThreshold { - z.divBasic(u, v) - return - } - m := len(u) - n - if m < 0 { - return - } - - // Produce the quotient by blocks of B words. - // Division by v (length n) is done using a length n/2 division - // and a length n/2 multiplication for each block. The final - // complexity is driven by multiplication complexity. - B := n / 2 - - // Allocate a nat for qhat below. - if temps[depth] == nil { - temps[depth] = getNat(n) - } else { - *temps[depth] = temps[depth].make(B + 1) - } - - j := m - for j > B { - // Divide u[j-B:j+n] by vIn. Keep remainder in u - // for next block. - // - // The following property will be used (Lemma 2): - // if u = u1 << s + u0 - // v = v1 << s + v0 - // then floor(u1/v1) >= floor(u/v) - // - // Moreover, the difference is at most 2 if len(v1) >= len(u/v) - // We choose s = B-1 since len(v)-s >= B+1 >= len(u/v) - s := (B - 1) - // Except for the first step, the top bits are always - // a division remainder, so the quotient length is <= n. - uu := u[j-B:] - - qhat := *temps[depth] - qhat.clear() - qhat.divRecursiveStep(uu[s:B+n], v[s:], depth+1, tmp, temps) - qhat = qhat.norm() - // Adjust the quotient: - // u = u_h << s + u_l - // v = v_h << s + v_l - // u_h = q̂ v_h + rh - // u = q̂ (v - v_l) + rh << s + u_l - // After the above step, u contains a remainder: - // u = rh << s + u_l - // and we need to subtract q̂ v_l - // - // But it may be a bit too large, in which case q̂ needs to be smaller. - qhatv := tmp.make(3 * n) - qhatv.clear() - qhatv = qhatv.mul(qhat, v[:s]) - for i := 0; i < 2; i++ { - e := qhatv.cmp(uu.norm()) - if e <= 0 { - break - } - subVW(qhat, qhat, 1) - c := subVV(qhatv[:s], qhatv[:s], v[:s]) - if len(qhatv) > s { - subVW(qhatv[s:], qhatv[s:], c) - } - addAt(uu[s:], v[s:], 0) - } - if qhatv.cmp(uu.norm()) > 0 { - panic("impossible") - } - c := subVV(uu[:len(qhatv)], uu[:len(qhatv)], qhatv) - if c > 0 { - subVW(uu[len(qhatv):], uu[len(qhatv):], c) - } - addAt(z, qhat, j-B) - j -= B - } - - // Now u < (v< 0 { - subVW(qhat, qhat, 1) - c := subVV(qhatv[:s], qhatv[:s], v[:s]) - if len(qhatv) > s { - subVW(qhatv[s:], qhatv[s:], c) - } - addAt(u[s:], v[s:], 0) - } - } - if qhatv.cmp(u.norm()) > 0 { - panic("impossible") - } - c := subVV(u[0:len(qhatv)], u[0:len(qhatv)], qhatv) - if c > 0 { - c = subVW(u[len(qhatv):], u[len(qhatv):], c) - } - if c > 0 { - panic("impossible") - } - - // Done! - addAt(z, qhat.norm(), 0) -} - // Length of x in bits. x must be normalized. func (x nat) bitLen() int { if i := len(x) - 1; i >= 0 { @@ -1170,19 +858,6 @@ func (z nat) xor(x, y nat) nat { return z.norm() } -// greaterThan reports whether (x1<<_W + x2) > (y1<<_W + y2) -func greaterThan(x1, x2, y1, y2 Word) bool { - return x1 > y1 || x1 == y1 && x2 > y2 -} - -// modW returns x % d. -func (x nat) modW(d Word) (r Word) { - // TODO(agl): we don't actually need to store the q value. - var q nat - q = q.make(len(x)) - return divWVW(q, 0, x, d) -} - // random creates a random integer in [0..limit), using the space in z if // possible. n is the bit length of limit. func (z nat) random(rand *rand.Rand, limit nat, n int) nat { diff --git a/src/math/big/natdiv.go b/src/math/big/natdiv.go new file mode 100644 index 00000000000..1330990c2cd --- /dev/null +++ b/src/math/big/natdiv.go @@ -0,0 +1,346 @@ +// Copyright 2009 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 big + +import "math/bits" + +func (z nat) div(z2, u, v nat) (q, r nat) { + if len(v) == 0 { + panic("division by zero") + } + + if u.cmp(v) < 0 { + q = z[:0] + r = z2.set(u) + return + } + + if len(v) == 1 { + var r2 Word + q, r2 = z.divW(u, v[0]) + r = z2.setWord(r2) + return + } + + q, r = z.divLarge(z2, u, v) + return +} + +// q = (x-r)/y, with 0 <= r < y +func (z nat) divW(x nat, y Word) (q nat, r Word) { + m := len(x) + switch { + case y == 0: + panic("division by zero") + case y == 1: + q = z.set(x) // result is x + return + case m == 0: + q = z[:0] // result is 0 + return + } + // m > 0 + z = z.make(m) + r = divWVW(z, 0, x, y) + q = z.norm() + return +} + +// modW returns x % d. +func (x nat) modW(d Word) (r Word) { + // TODO(agl): we don't actually need to store the q value. + var q nat + q = q.make(len(x)) + return divWVW(q, 0, x, d) +} + +func divWVW(z []Word, xn Word, x []Word, y Word) (r Word) { + r = xn + if len(x) == 1 { + qq, rr := bits.Div(uint(r), uint(x[0]), uint(y)) + z[0] = Word(qq) + return Word(rr) + } + rec := reciprocalWord(y) + for i := len(z) - 1; i >= 0; i-- { + z[i], r = divWW(r, x[i], y, rec) + } + return r +} + +// q = (uIn-r)/vIn, with 0 <= r < vIn +// Uses z as storage for q, and u as storage for r if possible. +// See Knuth, Volume 2, section 4.3.1, Algorithm D. +// Preconditions: +// len(vIn) >= 2 +// len(uIn) >= len(vIn) +// u must not alias z +func (z nat) divLarge(u, uIn, vIn nat) (q, r nat) { + n := len(vIn) + m := len(uIn) - n + + // D1. + shift := nlz(vIn[n-1]) + // do not modify vIn, it may be used by another goroutine simultaneously + vp := getNat(n) + v := *vp + shlVU(v, vIn, shift) + + // u may safely alias uIn or vIn, the value of uIn is used to set u and vIn was already used + u = u.make(len(uIn) + 1) + u[len(uIn)] = shlVU(u[0:len(uIn)], uIn, shift) + + // z may safely alias uIn or vIn, both values were used already + if alias(z, u) { + z = nil // z is an alias for u - cannot reuse + } + q = z.make(m + 1) + + if n < divRecursiveThreshold { + q.divBasic(u, v) + } else { + q.divRecursive(u, v) + } + putNat(vp) + + q = q.norm() + shrVU(u, u, shift) + r = u.norm() + + return q, r +} + +// divBasic performs word-by-word division of u by v. +// The quotient is written in pre-allocated q. +// The remainder overwrites input u. +// +// Precondition: +// - q is large enough to hold the quotient u / v +// which has a maximum length of len(u)-len(v)+1. +func (q nat) divBasic(u, v nat) { + n := len(v) + m := len(u) - n + + qhatvp := getNat(n + 1) + qhatv := *qhatvp + + // D2. + vn1 := v[n-1] + rec := reciprocalWord(vn1) + for j := m; j >= 0; j-- { + // D3. + qhat := Word(_M) + var ujn Word + if j+n < len(u) { + ujn = u[j+n] + } + if ujn != vn1 { + var rhat Word + qhat, rhat = divWW(ujn, u[j+n-1], vn1, rec) + + // x1 | x2 = q̂v_{n-2} + vn2 := v[n-2] + x1, x2 := mulWW(qhat, vn2) + // test if q̂v_{n-2} > br̂ + u_{j+n-2} + ujn2 := u[j+n-2] + for greaterThan(x1, x2, rhat, ujn2) { + qhat-- + prevRhat := rhat + rhat += vn1 + // v[n-1] >= 0, so this tests for overflow. + if rhat < prevRhat { + break + } + x1, x2 = mulWW(qhat, vn2) + } + } + + // D4. + // Compute the remainder u - (q̂*v) << (_W*j). + // The subtraction may overflow if q̂ estimate was off by one. + qhatv[n] = mulAddVWW(qhatv[0:n], v, qhat, 0) + qhl := len(qhatv) + if j+qhl > len(u) && qhatv[n] == 0 { + qhl-- + } + c := subVV(u[j:j+qhl], u[j:], qhatv) + if c != 0 { + c := addVV(u[j:j+n], u[j:], v) + // If n == qhl, the carry from subVV and the carry from addVV + // cancel out and don't affect u[j+n]. + if n < qhl { + u[j+n] += c + } + qhat-- + } + + if j == m && m == len(q) && qhat == 0 { + continue + } + q[j] = qhat + } + + putNat(qhatvp) +} + +// greaterThan reports whether (x1<<_W + x2) > (y1<<_W + y2) +func greaterThan(x1, x2, y1, y2 Word) bool { + return x1 > y1 || x1 == y1 && x2 > y2 +} + +const divRecursiveThreshold = 100 + +// divRecursive performs word-by-word division of u by v. +// The quotient is written in pre-allocated z. +// The remainder overwrites input u. +// +// Precondition: +// - len(z) >= len(u)-len(v) +// +// See Burnikel, Ziegler, "Fast Recursive Division", Algorithm 1 and 2. +func (z nat) divRecursive(u, v nat) { + // Recursion depth is less than 2 log2(len(v)) + // Allocate a slice of temporaries to be reused across recursion. + recDepth := 2 * bits.Len(uint(len(v))) + // large enough to perform Karatsuba on operands as large as v + tmp := getNat(3 * len(v)) + temps := make([]*nat, recDepth) + z.clear() + z.divRecursiveStep(u, v, 0, tmp, temps) + for _, n := range temps { + if n != nil { + putNat(n) + } + } + putNat(tmp) +} + +// divRecursiveStep computes the division of u by v. +// - z must be large enough to hold the quotient +// - the quotient will overwrite z +// - the remainder will overwrite u +func (z nat) divRecursiveStep(u, v nat, depth int, tmp *nat, temps []*nat) { + u = u.norm() + v = v.norm() + + if len(u) == 0 { + z.clear() + return + } + n := len(v) + if n < divRecursiveThreshold { + z.divBasic(u, v) + return + } + m := len(u) - n + if m < 0 { + return + } + + // Produce the quotient by blocks of B words. + // Division by v (length n) is done using a length n/2 division + // and a length n/2 multiplication for each block. The final + // complexity is driven by multiplication complexity. + B := n / 2 + + // Allocate a nat for qhat below. + if temps[depth] == nil { + temps[depth] = getNat(n) + } else { + *temps[depth] = temps[depth].make(B + 1) + } + + j := m + for j > B { + // Divide u[j-B:j+n] by vIn. Keep remainder in u + // for next block. + // + // The following property will be used (Lemma 2): + // if u = u1 << s + u0 + // v = v1 << s + v0 + // then floor(u1/v1) >= floor(u/v) + // + // Moreover, the difference is at most 2 if len(v1) >= len(u/v) + // We choose s = B-1 since len(v)-s >= B+1 >= len(u/v) + s := (B - 1) + // Except for the first step, the top bits are always + // a division remainder, so the quotient length is <= n. + uu := u[j-B:] + + qhat := *temps[depth] + qhat.clear() + qhat.divRecursiveStep(uu[s:B+n], v[s:], depth+1, tmp, temps) + qhat = qhat.norm() + // Adjust the quotient: + // u = u_h << s + u_l + // v = v_h << s + v_l + // u_h = q̂ v_h + rh + // u = q̂ (v - v_l) + rh << s + u_l + // After the above step, u contains a remainder: + // u = rh << s + u_l + // and we need to subtract q̂ v_l + // + // But it may be a bit too large, in which case q̂ needs to be smaller. + qhatv := tmp.make(3 * n) + qhatv.clear() + qhatv = qhatv.mul(qhat, v[:s]) + for i := 0; i < 2; i++ { + e := qhatv.cmp(uu.norm()) + if e <= 0 { + break + } + subVW(qhat, qhat, 1) + c := subVV(qhatv[:s], qhatv[:s], v[:s]) + if len(qhatv) > s { + subVW(qhatv[s:], qhatv[s:], c) + } + addAt(uu[s:], v[s:], 0) + } + if qhatv.cmp(uu.norm()) > 0 { + panic("impossible") + } + c := subVV(uu[:len(qhatv)], uu[:len(qhatv)], qhatv) + if c > 0 { + subVW(uu[len(qhatv):], uu[len(qhatv):], c) + } + addAt(z, qhat, j-B) + j -= B + } + + // Now u < (v< 0 { + subVW(qhat, qhat, 1) + c := subVV(qhatv[:s], qhatv[:s], v[:s]) + if len(qhatv) > s { + subVW(qhatv[s:], qhatv[s:], c) + } + addAt(u[s:], v[s:], 0) + } + } + if qhatv.cmp(u.norm()) > 0 { + panic("impossible") + } + c := subVV(u[0:len(qhatv)], u[0:len(qhatv)], qhatv) + if c > 0 { + c = subVW(u[len(qhatv):], u[len(qhatv):], c) + } + if c > 0 { + panic("impossible") + } + + // Done! + addAt(z, qhat.norm(), 0) +} From bfd7798a6c756b22d7376db527339b41bf7f7327 Mon Sep 17 00:00:00 2001 From: tyltr Date: Wed, 26 May 2021 15:41:27 +0000 Subject: [PATCH 078/100] runtime,cmd/link/internal/ld: fix typos Change-Id: I558590cef7e2311aadbdcb4088033e350d3aae32 GitHub-Last-Rev: 513944a6238e0e32e2a2c266b70f7d50c9db508d GitHub-Pull-Request: golang/go#46389 Reviewed-on: https://go-review.googlesource.com/c/go/+/322809 Reviewed-by: Cherry Mui Reviewed-by: Ian Lance Taylor --- src/cmd/link/internal/ld/data.go | 2 +- src/runtime/malloc.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cmd/link/internal/ld/data.go b/src/cmd/link/internal/ld/data.go index 223df63d9df..70fbb9dc4e2 100644 --- a/src/cmd/link/internal/ld/data.go +++ b/src/cmd/link/internal/ld/data.go @@ -1550,7 +1550,7 @@ func (ctxt *Link) dodata(symGroupType []sym.SymKind) { if ctxt.HeadType == objabi.Haix && ctxt.LinkMode == LinkExternal { // These symbols must have the same alignment as their section. - // Otherwize, ld might change the layout of Go sections. + // Otherwise, ld might change the layout of Go sections. ldr.SetSymAlign(ldr.Lookup("runtime.data", 0), state.dataMaxAlign[sym.SDATA]) ldr.SetSymAlign(ldr.Lookup("runtime.bss", 0), state.dataMaxAlign[sym.SBSS]) } diff --git a/src/runtime/malloc.go b/src/runtime/malloc.go index 81e52258830..2759bbdaf90 100644 --- a/src/runtime/malloc.go +++ b/src/runtime/malloc.go @@ -296,7 +296,7 @@ const ( // high addresses if viewed as unsigned). // // On aix/ppc64, this offset allows to keep the heapAddrBits to - // 48. Otherwize, it would be 60 in order to handle mmap addresses + // 48. Otherwise, it would be 60 in order to handle mmap addresses // (in range 0x0a00000000000000 - 0x0afffffffffffff). But in this // case, the memory reserved in (s *pageAlloc).init for chunks // is causing important slowdowns. From 39da9ae5130afa58f8b9e4ea609a57d516bd78db Mon Sep 17 00:00:00 2001 From: Rob Findley Date: Thu, 6 May 2021 22:28:37 -0400 Subject: [PATCH 079/100] go/types: ensure that Named.check is nilled out once it is expanded To support lazy expansion of defined types, *Named holds on to a *Checker field, which can pin the *Checker in memory. This can have meaningful memory implications for applications that keep type information around. Ensure that the Checker field is nilled out for any Named types that are instantiated during the type checking pass, by deferring a clean up to 'later' boundaries. In testing this almost exactly offset the ~6% memory footprint increase I observed with 1.17. Fixes #45580 Change-Id: I8aa5bb777573a924afe36e79fa65f8729336bceb Reviewed-on: https://go-review.googlesource.com/c/go/+/318849 Trust: Robert Findley Trust: Robert Griesemer Run-TryBot: Robert Findley TryBot-Result: Go Bot Reviewed-by: Robert Griesemer --- src/go/types/decl.go | 53 ++++++++++++++++++++++++++++++---------- src/go/types/sanitize.go | 3 +++ src/go/types/type.go | 17 ++++++++++++- 3 files changed, 59 insertions(+), 14 deletions(-) diff --git a/src/go/types/decl.go b/src/go/types/decl.go index 5f38a346cee..9211febc6da 100644 --- a/src/go/types/decl.go +++ b/src/go/types/decl.go @@ -577,15 +577,37 @@ func (check *Checker) varDecl(obj *Var, lhs []*Var, typ, init ast.Expr) { // n0.check != nil, the cycle is reported. func (n0 *Named) under() Type { u := n0.underlying - if u == nil { - return Typ[Invalid] + + if u == Typ[Invalid] { + return u } // If the underlying type of a defined type is not a defined - // type, then that is the desired underlying type. + // (incl. instance) type, then that is the desired underlying + // type. + switch u.(type) { + case nil: + return Typ[Invalid] + default: + // common case + return u + case *Named, *instance: + // handled below + } + + if n0.check == nil { + panic("internal error: Named.check == nil but type is incomplete") + } + + // Invariant: after this point n0 as well as any named types in its + // underlying chain should be set up when this function exits. + check := n0.check + + // If we can't expand u at this point, it is invalid. n := asNamed(u) if n == nil { - return u // common case + n0.underlying = Typ[Invalid] + return n0.underlying } // Otherwise, follow the forward chain. @@ -597,7 +619,16 @@ func (n0 *Named) under() Type { u = Typ[Invalid] break } - n1 := asNamed(u) + var n1 *Named + switch u1 := u.(type) { + case *Named: + n1 = u1 + case *instance: + n1, _ = u1.expand().(*Named) + if n1 == nil { + u = Typ[Invalid] + } + } if n1 == nil { break // end of chain } @@ -608,11 +639,7 @@ func (n0 *Named) under() Type { if i, ok := seen[n]; ok { // cycle - // TODO(rFindley) revert this to a method on Checker. Having a possibly - // nil Checker on Named and TypeParam is too subtle. - if n0.check != nil { - n0.check.cycleError(path[i:]) - } + check.cycleError(path[i:]) u = Typ[Invalid] break } @@ -622,8 +649,8 @@ func (n0 *Named) under() Type { // We should never have to update the underlying type of an imported type; // those underlying types should have been resolved during the import. // Also, doing so would lead to a race condition (was issue #31749). - // Do this check always, not just in debug more (it's cheap). - if n0.check != nil && n.obj.pkg != n0.check.pkg { + // Do this check always, not just in debug mode (it's cheap). + if n.obj.pkg != check.pkg { panic("internal error: imported type with unresolved underlying type") } n.underlying = u @@ -665,7 +692,7 @@ func (check *Checker) typeDecl(obj *TypeName, tdecl *ast.TypeSpec, def *Named) { } else { // defined type declaration - named := &Named{check: check, obj: obj} + named := check.newNamed(obj, nil, nil) def.setUnderlying(named) obj.typ = named // make sure recursive type declarations terminate diff --git a/src/go/types/sanitize.go b/src/go/types/sanitize.go index 5970ab38c71..727ec173eac 100644 --- a/src/go/types/sanitize.go +++ b/src/go/types/sanitize.go @@ -135,6 +135,9 @@ func (s sanitizer) typ(typ Type) Type { } case *Named: + if debug && t.check != nil { + panic("internal error: Named.check != nil") + } if orig := s.typ(t.orig); orig != t.orig { t.orig = orig } diff --git a/src/go/types/type.go b/src/go/types/type.go index 3303cfc0774..3fdb2365a03 100644 --- a/src/go/types/type.go +++ b/src/go/types/type.go @@ -644,7 +644,7 @@ func (c *Chan) Elem() Type { return c.elem } // A Named represents a named (defined) type. type Named struct { - check *Checker // for Named.under implementation + check *Checker // for Named.under implementation; nilled once under has been called info typeInfo // for cycle detection obj *TypeName // corresponding declared object orig Type // type (on RHS of declaration) this *Named type is derived of (for cycle reporting) @@ -673,6 +673,21 @@ func (check *Checker) newNamed(obj *TypeName, underlying Type, methods []*Func) if obj.typ == nil { obj.typ = typ } + // Ensure that typ is always expanded, at which point the check field can be + // nilled out. + // + // Note that currently we cannot nil out check inside typ.under(), because + // it's possible that typ is expanded multiple times. + // + // TODO(rFindley): clean this up so that under is the only function mutating + // named types. + check.later(func() { + switch typ.under().(type) { + case *Named, *instance: + panic("internal error: unexpanded underlying type") + } + typ.check = nil + }) return typ } From 55aefbb268d7d33ebf300ed5b1e38e55c10c8070 Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Wed, 19 May 2021 16:34:58 -0400 Subject: [PATCH 080/100] doc/go1.17: mention enabling frame pointer on all ARM64 Updates #44513. Change-Id: I43e95de0423779b3311d96c56f7c8c1cc5be27b6 Reviewed-on: https://go-review.googlesource.com/c/go/+/321311 Trust: Cherry Mui Reviewed-by: Jeremy Faller --- doc/go1.17.html | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/doc/go1.17.html b/doc/go1.17.html index bdde26bd108..5448b2af975 100644 --- a/doc/go1.17.html +++ b/doc/go1.17.html @@ -68,6 +68,14 @@ Do not send CLs removing the interior tags from such phrases. OpenBSD.

+

ARM64

+ +

+ Go programs now maintain stack frame pointers on the 64-bit ARM + architecture on all operating systems. Previously it maintained + stack frame pointers only on Linux, macOS, and iOS. +

+

TODO: complete the Ports section

From a92460fd2f5537bbd91a713ced00731d429563ac Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Wed, 26 May 2021 12:18:32 -0400 Subject: [PATCH 081/100] doc/go1.17: add release notes for runtime/metrics package Updates #44513. Change-Id: I571a791e9c76371be3b3f1a323f1ea8ff485cf0f Reviewed-on: https://go-review.googlesource.com/c/go/+/322857 Trust: Cherry Mui Reviewed-by: Jeremy Faller Reviewed-by: Michael Knyszek --- doc/go1.17.html | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/doc/go1.17.html b/doc/go1.17.html index 5448b2af975..da50935a612 100644 --- a/doc/go1.17.html +++ b/doc/go1.17.html @@ -496,6 +496,16 @@ Do not send CLs removing the interior tags from such phrases.
+
runtime/metrics
+
+

+ New metrics were added that track total bytes and objects allocated and freed. + A new metric tracking the distribution of goroutine scheduling latencies was + also added. +

+
+
+
strconv

From 02beecb3974e9010d2deefaf09266286b0c6f408 Mon Sep 17 00:00:00 2001 From: Damien Neil Date: Wed, 26 May 2021 13:43:15 -0700 Subject: [PATCH 082/100] mime: document use of the Shared MIME-Info Database For #44513. Fixes #46013. Change-Id: I382603208aa94b66d5220cf0f418b8528a4e4148 Reviewed-on: https://go-review.googlesource.com/c/go/+/322892 Trust: Damien Neil Run-TryBot: Damien Neil TryBot-Result: Go Bot Reviewed-by: Ian Lance Taylor --- doc/go1.17.html | 4 +++- src/mime/type.go | 6 ++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/doc/go1.17.html b/doc/go1.17.html index da50935a612..771e2a6c8d9 100644 --- a/doc/go1.17.html +++ b/doc/go1.17.html @@ -408,7 +408,9 @@ Do not send CLs removing the interior tags from such phrases.

mime

- TODO: https://golang.org/cl/305230: support reading shared mime-info database on unix systems + On Unix systems, the table of MIME types is now read from the local system's + Shared MIME-info Database + when available.

diff --git a/src/mime/type.go b/src/mime/type.go index 9bbbf216a1d..26424339af8 100644 --- a/src/mime/type.go +++ b/src/mime/type.go @@ -96,9 +96,11 @@ func initMime() { // Extensions are looked up first case-sensitively, then case-insensitively. // // The built-in table is small but on unix it is augmented by the local -// system's mime.types file(s) if available under one or more of these -// names: +// system's MIME-info database or mime.types file(s) if available under one or +// more of these names: // +// /usr/local/share/mime/globs2 +// /usr/share/mime/globs2 // /etc/mime.types // /etc/apache2/mime.types // /etc/apache/mime.types From 0fbecece98977f6d0578cef1e8f3ae00a54c8ac4 Mon Sep 17 00:00:00 2001 From: Damien Neil Date: Wed, 26 May 2021 11:12:43 -0700 Subject: [PATCH 083/100] doc/go1.17: document syscall changes Fixes #46023 Change-Id: Ia63829d03afb0936862b16f0971175cbaa1095bc Reviewed-on: https://go-review.googlesource.com/c/go/+/322890 Trust: Damien Neil Run-TryBot: Damien Neil TryBot-Result: Go Bot Reviewed-by: Ian Lance Taylor --- doc/go1.17.html | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/doc/go1.17.html b/doc/go1.17.html index 771e2a6c8d9..194d3a0cd84 100644 --- a/doc/go1.17.html +++ b/doc/go1.17.html @@ -550,11 +550,16 @@ Do not send CLs removing the interior tags from such phrases.
syscall

- TODO: https://golang.org/cl/295371: do not overflow key memory in GetQueuedCompletionStatus +

+ The GetQueuedCompletionStatus and + PostQueuedCompletionStatus + functions are now deprecated. These functions have incorrect signatures and are superseded by + equivalents in the golang.org/x/sys/windows package.

- TODO: https://golang.org/cl/313653: restore signal mask after setting foreground process group + On Unix-like systems, the process group of a child process is now set with signals blocked. + This avoids sending a SIGTTOU to the child when the parent is in a background process group.

From 1d5298d46a695219ab4622ae5aa59898459fd0f5 Mon Sep 17 00:00:00 2001 From: Damien Neil Date: Wed, 26 May 2021 11:28:01 -0700 Subject: [PATCH 084/100] doc/go1.17: document net/... changes For #44513. Fixes #46014. Fixes #46015. Fixes #46016. Fixes #46017. Change-Id: I356483d68d07159281dfe2ea1e49430ddf200973 Reviewed-on: https://go-review.googlesource.com/c/go/+/322891 Trust: Damien Neil Run-TryBot: Damien Neil Reviewed-by: Ian Lance Taylor --- doc/go1.17.html | 23 +++++++++++++++++------ src/os/pipe_test.go | 2 +- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/doc/go1.17.html b/doc/go1.17.html index 194d3a0cd84..8313c2bc575 100644 --- a/doc/go1.17.html +++ b/doc/go1.17.html @@ -418,15 +418,20 @@ Do not send CLs removing the interior tags from such phrases.
net

- TODO: https://golang.org/cl/272668: add IP.IsPrivate + The new method IP.IsPrivate reports whether an address is + a private IPv4 address according to RFC 1918 + or a local IPv6 address according RFC 4193.

- TODO: https://golang.org/cl/301709: make go resolver aware of network parameter + The Go DNS resolver now only sends one DNS query when resolving an address for an IPv4-only or IPv6-only network, + rather than querying for both address families.

- TODO: https://golang.org/cl/307030: make ErrClosed and ParseError implement net.Error + The ErrClosed sentinel error and + ParseError error type now implement + the net.Error interface.

@@ -441,7 +446,9 @@ Do not send CLs removing the interior tags from such phrases.

- TODO: https://golang.org/cl/235437: add to deadlines only when positive + Setting the Server + ReadTimeout or WriteTimeout fields to a negative value now indicates no timeout + rather than an immediate timeout.

@@ -454,7 +461,10 @@ Do not send CLs removing the interior tags from such phrases.

net/http/httptest

- TODO: https://golang.org/cl/308950: panic on non-3 digit (XXX) status code in Recorder.WriteHeader + ResponseRecorder.WriteHeader> + now panics when the provided code is not a valid three-digit HTTP status code. + This matches the behavior of ResponseWriter> + implementations in the net/http package.

@@ -462,7 +472,8 @@ Do not send CLs removing the interior tags from such phrases.
net/url

- TODO: https://golang.org/cl/314850: add Values.Has + The new method Values.Has + reports whether a query parameter is set.

diff --git a/src/os/pipe_test.go b/src/os/pipe_test.go index b6636185029..b3d5380b8da 100644 --- a/src/os/pipe_test.go +++ b/src/os/pipe_test.go @@ -462,7 +462,7 @@ func TestFdReadRace(t *testing.T) { // Give the other goroutine a chance to enter the Read. // It doesn't matter if this occasionally fails, the test // will still pass, it just won't test anything. - time.Sleep(10 * time.Millisecond) + //time.Sleep(10 * time.Millisecond) r.Fd() // The bug was that Fd would hang until Read timed out. From a62c08734f8e2fc5333036e3a069a55288d1f674 Mon Sep 17 00:00:00 2001 From: Damien Neil Date: Wed, 26 May 2021 15:44:46 -0700 Subject: [PATCH 085/100] src/os: revert accidentally submitted change Change-Id: Ib34984a6bd0abc76266e8aac96f9f8ad8ae21d17 Reviewed-on: https://go-review.googlesource.com/c/go/+/322894 Trust: Damien Neil Run-TryBot: Damien Neil Run-TryBot: Ian Lance Taylor Reviewed-by: Ian Lance Taylor --- src/os/pipe_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/os/pipe_test.go b/src/os/pipe_test.go index b3d5380b8da..b6636185029 100644 --- a/src/os/pipe_test.go +++ b/src/os/pipe_test.go @@ -462,7 +462,7 @@ func TestFdReadRace(t *testing.T) { // Give the other goroutine a chance to enter the Read. // It doesn't matter if this occasionally fails, the test // will still pass, it just won't test anything. - //time.Sleep(10 * time.Millisecond) + time.Sleep(10 * time.Millisecond) r.Fd() // The bug was that Fd would hang until Read timed out. From 3075ffc93e962792ddf43b2a528ef19b1577ffb7 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 26 May 2021 15:17:27 -0700 Subject: [PATCH 086/100] os: deflake TestFdReadRace The test would hang if the call to Fd set the pipe to be non-blocking before the Read entered the first read system call. Avoid that problem by writing data to the pipe to wake up the read. For #24481 Fixes #44818 Change-Id: I0b798874c7b81e7308a38ebbf657efc4392ffacd Reviewed-on: https://go-review.googlesource.com/c/go/+/322893 Trust: Ian Lance Taylor Run-TryBot: Ian Lance Taylor TryBot-Result: Go Bot Reviewed-by: Damien Neil --- src/os/pipe_test.go | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/os/pipe_test.go b/src/os/pipe_test.go index b6636185029..41a1e9c78aa 100644 --- a/src/os/pipe_test.go +++ b/src/os/pipe_test.go @@ -442,12 +442,14 @@ func TestFdReadRace(t *testing.T) { defer r.Close() defer w.Close() - c := make(chan bool) + const count = 10 + + c := make(chan bool, 1) var wg sync.WaitGroup wg.Add(1) go func() { defer wg.Done() - var buf [10]byte + var buf [count]byte r.SetReadDeadline(time.Now().Add(time.Minute)) c <- true if _, err := r.Read(buf[:]); os.IsTimeout(err) { @@ -466,8 +468,9 @@ func TestFdReadRace(t *testing.T) { r.Fd() // The bug was that Fd would hang until Read timed out. - // If the bug is fixed, then closing r here will cause - // the Read to exit before the timeout expires. + // If the bug is fixed, then writing to w and closing r here + // will cause the Read to exit before the timeout expires. + w.Write(make([]byte, count)) r.Close() }() From 6ff0ae2aa4fdb9c6c267efb30927e87563387c49 Mon Sep 17 00:00:00 2001 From: Filippo Valsorda Date: Thu, 13 May 2021 13:45:55 -0400 Subject: [PATCH 087/100] crypto/elliptic: fix typo in p521Point type name Change-Id: I6cab3624c875d9a70441a560e84f91c9b2df17b9 Reviewed-on: https://go-review.googlesource.com/c/go/+/320070 Trust: Filippo Valsorda Trust: Katie Hockman Run-TryBot: Filippo Valsorda Run-TryBot: Katie Hockman TryBot-Result: Go Bot Reviewed-by: Katie Hockman --- src/crypto/elliptic/p521.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/crypto/elliptic/p521.go b/src/crypto/elliptic/p521.go index ce74e0539c9..3d355943ec7 100644 --- a/src/crypto/elliptic/p521.go +++ b/src/crypto/elliptic/p521.go @@ -52,7 +52,7 @@ func (curve p521Curve) IsOnCurve(x, y *big.Int) bool { return x3.Equal(y2) == 1 } -type p512Point struct { +type p521Point struct { x, y, z *fiat.P521Element } @@ -67,7 +67,7 @@ func fiatP521ToBigInt(x *fiat.P521Element) *big.Int { // affineFromJacobian brings a point in Jacobian coordinates back to affine // coordinates, with (0, 0) representing infinity by convention. It also goes // back to big.Int values to match the exposed API. -func (curve p521Curve) affineFromJacobian(p *p512Point) (x, y *big.Int) { +func (curve p521Curve) affineFromJacobian(p *p521Point) (x, y *big.Int) { if p.z.IsZero() == 1 { return new(big.Int), new(big.Int) } @@ -99,17 +99,17 @@ func bigIntToFiatP521(x *big.Int) *fiat.P521Element { // jacobianFromAffine converts (x, y) affine coordinates into (x, y, z) Jacobian // coordinates. It also converts from big.Int to fiat, which is necessarily a // messy and variable-time operation, which we can't avoid due to the exposed API. -func (curve p521Curve) jacobianFromAffine(x, y *big.Int) *p512Point { +func (curve p521Curve) jacobianFromAffine(x, y *big.Int) *p521Point { // (0, 0) is by convention the point at infinity, which can't be represented // in affine coordinates, but is (0, 0, 0) in Jacobian. if x.Sign() == 0 && y.Sign() == 0 { - return &p512Point{ + return &p521Point{ x: new(fiat.P521Element), y: new(fiat.P521Element), z: new(fiat.P521Element), } } - return &p512Point{ + return &p521Point{ x: bigIntToFiatP521(x), y: bigIntToFiatP521(y), z: new(fiat.P521Element).One(), @@ -123,7 +123,7 @@ func (curve p521Curve) Add(x1, y1, x2, y2 *big.Int) (*big.Int, *big.Int) { } // addJacobian sets q = p1 + p2, and returns q. The points may overlap. -func (q *p512Point) addJacobian(p1, p2 *p512Point) *p512Point { +func (q *p521Point) addJacobian(p1, p2 *p521Point) *p521Point { // https://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#addition-add-2007-bl z1IsZero := p1.z.IsZero() z2IsZero := p2.z.IsZero() @@ -189,7 +189,7 @@ func (curve p521Curve) Double(x1, y1 *big.Int) (*big.Int, *big.Int) { } // doubleJacobian sets q = p + p, and returns q. The points may overlap. -func (q *p512Point) doubleJacobian(p *p512Point) *p512Point { +func (q *p521Point) doubleJacobian(p *p521Point) *p521Point { // https://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b delta := new(fiat.P521Element).Square(p.z) gamma := new(fiat.P521Element).Square(p.y) @@ -230,11 +230,11 @@ func (q *p512Point) doubleJacobian(p *p512Point) *p512Point { func (curve p521Curve) ScalarMult(Bx, By *big.Int, scalar []byte) (*big.Int, *big.Int) { B := curve.jacobianFromAffine(Bx, By) - p, t := &p512Point{ + p, t := &p521Point{ x: new(fiat.P521Element), y: new(fiat.P521Element), z: new(fiat.P521Element), - }, &p512Point{ + }, &p521Point{ x: new(fiat.P521Element), y: new(fiat.P521Element), z: new(fiat.P521Element), From 9bc52686da81b515cf3ad654dfb1a536fabceafa Mon Sep 17 00:00:00 2001 From: "Bryan C. Mills" Date: Tue, 25 May 2021 12:21:11 -0400 Subject: [PATCH 088/100] cmd/go,cmd/link: do not check for staleness in most tests Instead, check that stale packages in the standard library are not rebuilt when already present in the build cache, and are not installed implicitly when rebuilt. We retain the staleness checks for the runtime package in tests involving '-i', because those are guaranteed to fail anyway if the package is stale and the "stale" failure message is arguably clearer. They can be removed if/when we remove the '-i' flag, but the runtime package is less likely to become stale because it does not have cgo dependencies. Fixes #46347 Updates #33598 Updates #35459 Updates #41696 Change-Id: I7b0a808addd930f9f4911ff53ded62272af75a40 Reviewed-on: https://go-review.googlesource.com/c/go/+/322629 Trust: Bryan C. Mills Run-TryBot: Bryan C. Mills TryBot-Result: Go Bot Reviewed-by: Cherry Mui Reviewed-by: Jay Conrod --- ...build_package_not_stale_trailing_slash.txt | 13 ----- src/cmd/go/testdata/script/cgo_stale.txt | 39 ++++++++++++++ src/cmd/go/testdata/script/list_std_stale.txt | 31 ----------- .../go/testdata/script/list_std_vendor.txt | 32 ++++++++++++ .../testdata/script/test_race_install_cgo.txt | 2 - src/cmd/go/testdata/script/toolexec.txt | 6 +++ src/cmd/link/dwarf_test.go | 52 +++++++++++++------ 7 files changed, 112 insertions(+), 63 deletions(-) delete mode 100644 src/cmd/go/testdata/script/build_package_not_stale_trailing_slash.txt create mode 100644 src/cmd/go/testdata/script/cgo_stale.txt delete mode 100644 src/cmd/go/testdata/script/list_std_stale.txt create mode 100644 src/cmd/go/testdata/script/list_std_vendor.txt diff --git a/src/cmd/go/testdata/script/build_package_not_stale_trailing_slash.txt b/src/cmd/go/testdata/script/build_package_not_stale_trailing_slash.txt deleted file mode 100644 index 38a151ef1f6..00000000000 --- a/src/cmd/go/testdata/script/build_package_not_stale_trailing_slash.txt +++ /dev/null @@ -1,13 +0,0 @@ -# Tests Issue #12690 - -[gccgo] skip 'gccgo does not have GOROOT' - -! stale runtime -! stale os -! stale io - -env GOROOT=$GOROOT'/' - -! stale runtime -! stale os -! stale io \ No newline at end of file diff --git a/src/cmd/go/testdata/script/cgo_stale.txt b/src/cmd/go/testdata/script/cgo_stale.txt new file mode 100644 index 00000000000..9e46855eadb --- /dev/null +++ b/src/cmd/go/testdata/script/cgo_stale.txt @@ -0,0 +1,39 @@ +# golang.org/issue/46347: a stale runtime/cgo should only force a single rebuild + +[!cgo] skip +[short] skip + + +# If we set a unique CGO_CFLAGS, the installed copy of runtime/cgo +# should be reported as stale. + +env CGO_CFLAGS=-DTestScript_cgo_stale=true +stale runtime/cgo + + +# If we then build a package that uses cgo, runtime/cgo should be rebuilt and +# cached with the new flag, but not installed to GOROOT (and thus still stale). + +env GOCACHE=$WORK/cache # Use a fresh cache to avoid interference between runs. + +go build -x . +stderr '[/\\]cgo'$GOEXE'["]? .* -importpath runtime/cgo' +stale runtime/cgo + + +# After runtime/cgo has been rebuilt and cached, it should not be rebuilt again +# even though it is still reported as stale. + +go build -x . +! stderr '[/\\]cgo'$GOEXE'["]? .* -importpath runtime/cgo' +stale runtime/cgo + + +-- go.mod -- +module example.com/m + +go 1.17 +-- m.go -- +package m + +import "C" diff --git a/src/cmd/go/testdata/script/list_std_stale.txt b/src/cmd/go/testdata/script/list_std_stale.txt deleted file mode 100644 index e5c1f334fd4..00000000000 --- a/src/cmd/go/testdata/script/list_std_stale.txt +++ /dev/null @@ -1,31 +0,0 @@ -# https://golang.org/issue/44725: packages in std should not be reported as stale, -# regardless of whether they are listed from within or outside GOROOT/src. - -# Control case: net should not be stale at the start of the test, -# and should depend on vendor/golang.org/… instead of golang.org/…. - -! stale net - -go list -deps net -stdout '^vendor/golang.org/x/net' -! stdout '^golang.org/x/net' - -# Net should also not be stale when viewed from within GOROOT/src, -# and should still report the same package dependencies. - -cd $GOROOT/src -! stale net - -go list -deps net -stdout '^vendor/golang.org/x/net' -! stdout '^golang.org/x/net' - - -# However, 'go mod' and 'go get' subcommands should report the original module -# dependencies, not the vendored packages. - -[!net] stop - -env GOPROXY= -go mod why -m golang.org/x/net -stdout '^# golang.org/x/net\nnet\ngolang.org/x/net' diff --git a/src/cmd/go/testdata/script/list_std_vendor.txt b/src/cmd/go/testdata/script/list_std_vendor.txt new file mode 100644 index 00000000000..8f27cc1e8d8 --- /dev/null +++ b/src/cmd/go/testdata/script/list_std_vendor.txt @@ -0,0 +1,32 @@ +# https://golang.org/issue/44725: packages in std should have the same +# dependencies regardless of whether they are listed from within or outside +# GOROOT/src. + +# Control case: net, viewed from outside the 'std' module, +# should depend on vendor/golang.org/… instead of golang.org/…. + +go list -deps net +stdout '^vendor/golang.org/x/net' +! stdout '^golang.org/x/net' +cp stdout $WORK/net-deps.txt + + +# It should still report the same package dependencies when viewed from +# within GOROOT/src. + +cd $GOROOT/src + +go list -deps net +stdout '^vendor/golang.org/x/net' +! stdout '^golang.org/x/net' +cmp stdout $WORK/net-deps.txt + + +# However, 'go mod' and 'go get' subcommands should report the original module +# dependencies, not the vendored packages. + +[!net] stop + +env GOPROXY= +go mod why -m golang.org/x/net +stdout '^# golang.org/x/net\nnet\ngolang.org/x/net' diff --git a/src/cmd/go/testdata/script/test_race_install_cgo.txt b/src/cmd/go/testdata/script/test_race_install_cgo.txt index 3f4eb90e3f6..e1fe4f2acea 100644 --- a/src/cmd/go/testdata/script/test_race_install_cgo.txt +++ b/src/cmd/go/testdata/script/test_race_install_cgo.txt @@ -2,8 +2,6 @@ [!race] skip -[!darwin] ! stale cmd/cgo # The darwin builders are spuriously stale; see #33598. - env GOBIN=$WORK/bin go install m/mtime m/sametime diff --git a/src/cmd/go/testdata/script/toolexec.txt b/src/cmd/go/testdata/script/toolexec.txt index 4f26da6d26b..bb86467942b 100644 --- a/src/cmd/go/testdata/script/toolexec.txt +++ b/src/cmd/go/testdata/script/toolexec.txt @@ -3,6 +3,12 @@ # Build our simple toolexec program. go build ./cmd/mytool +# Use an ephemeral build cache so that our toolexec output is not cached +# for any stale standard-library dependencies. +# +# TODO(#27628): This should not be necessary. +env GOCACHE=$WORK/gocache + # Build the main package with our toolexec program. For each action, it will # print the tool's name and the TOOLEXEC_IMPORTPATH value. We expect to compile # each package once, and link the main package once. diff --git a/src/cmd/link/dwarf_test.go b/src/cmd/link/dwarf_test.go index 0419613cbe2..3ca59bd47f0 100644 --- a/src/cmd/link/dwarf_test.go +++ b/src/cmd/link/dwarf_test.go @@ -19,6 +19,36 @@ import ( "testing" ) +// TestMain allows this test binary to run as a -toolexec wrapper for the 'go' +// command. If LINK_TEST_TOOLEXEC is set, TestMain runs the binary as if it were +// cmd/link, and otherwise runs the requested tool as a subprocess. +// +// This allows the test to verify the behavior of the current contents of the +// cmd/link package even if the installed cmd/link binary is stale. +func TestMain(m *testing.M) { + if os.Getenv("LINK_TEST_TOOLEXEC") == "" { + // Not running as a -toolexec wrapper. Just run the tests. + os.Exit(m.Run()) + } + + if strings.TrimSuffix(filepath.Base(os.Args[1]), ".exe") == "link" { + // Running as a -toolexec linker, and the tool is cmd/link. + // Substitute this test binary for the linker. + os.Args = os.Args[1:] + main() + os.Exit(0) + } + + cmd := exec.Command(os.Args[1], os.Args[2:]...) + cmd.Stdin = os.Stdin + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + if err := cmd.Run(); err != nil { + os.Exit(1) + } + os.Exit(0) +} + func testDWARF(t *testing.T, buildmode string, expectDWARF bool, env ...string) { testenv.MustHaveCGO(t) testenv.MustHaveGoBuild(t) @@ -29,17 +59,6 @@ func testDWARF(t *testing.T, buildmode string, expectDWARF bool, env ...string) t.Parallel() - out, err := exec.Command(testenv.GoToolPath(t), "list", "-f", "{{.Stale}}", "cmd/link").CombinedOutput() - if err != nil { - t.Fatalf("go list: %v\n%s", err, out) - } - if string(out) != "false\n" { - if strings.HasPrefix(testenv.Builder(), "darwin-") { - t.Skipf("cmd/link is spuriously stale on Darwin builders - see #33598") - } - t.Fatalf("cmd/link is stale - run go install cmd/link") - } - for _, prog := range []string{"testprog", "testprogcgo"} { prog := prog expectDWARF := expectDWARF @@ -48,11 +67,11 @@ func testDWARF(t *testing.T, buildmode string, expectDWARF bool, env ...string) if extld == "" { extld = "gcc" } + var err error expectDWARF, err = cmddwarf.IsDWARFEnabledOnAIXLd(extld) if err != nil { t.Fatal(err) } - } t.Run(prog, func(t *testing.T) { @@ -62,15 +81,14 @@ func testDWARF(t *testing.T, buildmode string, expectDWARF bool, env ...string) exe := filepath.Join(tmpDir, prog+".exe") dir := "../../runtime/testdata/" + prog - cmd := exec.Command(testenv.GoToolPath(t), "build", "-o", exe) + cmd := exec.Command(testenv.GoToolPath(t), "build", "-toolexec", os.Args[0], "-o", exe) if buildmode != "" { cmd.Args = append(cmd.Args, "-buildmode", buildmode) } cmd.Args = append(cmd.Args, dir) - if env != nil { - cmd.Env = append(os.Environ(), env...) - cmd.Env = append(cmd.Env, "CGO_CFLAGS=") // ensure CGO_CFLAGS does not contain any flags. Issue #35459 - } + cmd.Env = append(os.Environ(), env...) + cmd.Env = append(cmd.Env, "CGO_CFLAGS=") // ensure CGO_CFLAGS does not contain any flags. Issue #35459 + cmd.Env = append(cmd.Env, "LINK_TEST_TOOLEXEC=1") out, err := cmd.CombinedOutput() if err != nil { t.Fatalf("go build -o %v %v: %v\n%s", exe, dir, err, out) From 950fa11c4cb01a145bb07eeb167d90a1846061b3 Mon Sep 17 00:00:00 2001 From: Filippo Valsorda Date: Fri, 21 May 2021 14:02:30 -0400 Subject: [PATCH 089/100] net/http/httputil: always remove hop-by-hop headers Previously, we'd fail to remove the Connection header from a request like this: Connection: Connection: x-header Fixes #46313 Fixes CVE-2021-33197 Change-Id: Ie3009e926ceecfa86dfa6bcc6fe14ff01086be7d Reviewed-on: https://go-review.googlesource.com/c/go/+/321929 Run-TryBot: Filippo Valsorda Reviewed-by: Katie Hockman Trust: Katie Hockman Trust: Filippo Valsorda TryBot-Result: Go Bot --- src/net/http/httputil/reverseproxy.go | 22 ++++---- src/net/http/httputil/reverseproxy_test.go | 63 +++++++++++++++++++++- 2 files changed, 70 insertions(+), 15 deletions(-) diff --git a/src/net/http/httputil/reverseproxy.go b/src/net/http/httputil/reverseproxy.go index 1432ee26d37..5d39955d62d 100644 --- a/src/net/http/httputil/reverseproxy.go +++ b/src/net/http/httputil/reverseproxy.go @@ -253,22 +253,18 @@ func (p *ReverseProxy) ServeHTTP(rw http.ResponseWriter, req *http.Request) { // important is "Connection" because we want a persistent // connection, regardless of what the client sent to us. for _, h := range hopHeaders { - hv := outreq.Header.Get(h) - if hv == "" { - continue - } - if h == "Te" && hv == "trailers" { - // Issue 21096: tell backend applications that - // care about trailer support that we support - // trailers. (We do, but we don't go out of - // our way to advertise that unless the - // incoming client request thought it was - // worth mentioning) - continue - } outreq.Header.Del(h) } + // Issue 21096: tell backend applications that care about trailer support + // that we support trailers. (We do, but we don't go out of our way to + // advertise that unless the incoming client request thought it was worth + // mentioning.) Note that we look at req.Header, not outreq.Header, since + // the latter has passed through removeConnectionHeaders. + if httpguts.HeaderValuesContainsToken(req.Header["Te"], "trailers") { + outreq.Header.Set("Te", "trailers") + } + // After stripping all the hop-by-hop connection headers above, add back any // necessary for protocol upgrades, such as for websockets. if reqUpType != "" { diff --git a/src/net/http/httputil/reverseproxy_test.go b/src/net/http/httputil/reverseproxy_test.go index 22720caf930..1898ed8b8af 100644 --- a/src/net/http/httputil/reverseproxy_test.go +++ b/src/net/http/httputil/reverseproxy_test.go @@ -91,8 +91,9 @@ func TestReverseProxy(t *testing.T) { getReq, _ := http.NewRequest("GET", frontend.URL, nil) getReq.Host = "some-name" - getReq.Header.Set("Connection", "close") - getReq.Header.Set("Te", "trailers") + getReq.Header.Set("Connection", "close, TE") + getReq.Header.Add("Te", "foo") + getReq.Header.Add("Te", "bar, trailers") getReq.Header.Set("Proxy-Connection", "should be deleted") getReq.Header.Set("Upgrade", "foo") getReq.Close = true @@ -236,6 +237,64 @@ func TestReverseProxyStripHeadersPresentInConnection(t *testing.T) { } } +func TestReverseProxyStripEmptyConnection(t *testing.T) { + // See Issue 46313. + const backendResponse = "I am the backend" + + // someConnHeader is some arbitrary header to be declared as a hop-by-hop header + // in the Request's Connection header. + const someConnHeader = "X-Some-Conn-Header" + + backend := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if c := r.Header.Values("Connection"); len(c) != 0 { + t.Errorf("handler got header %q = %v; want empty", "Connection", c) + } + if c := r.Header.Get(someConnHeader); c != "" { + t.Errorf("handler got header %q = %q; want empty", someConnHeader, c) + } + w.Header().Add("Connection", "") + w.Header().Add("Connection", someConnHeader) + w.Header().Set(someConnHeader, "should be deleted") + io.WriteString(w, backendResponse) + })) + defer backend.Close() + backendURL, err := url.Parse(backend.URL) + if err != nil { + t.Fatal(err) + } + proxyHandler := NewSingleHostReverseProxy(backendURL) + frontend := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + proxyHandler.ServeHTTP(w, r) + if c := r.Header.Get(someConnHeader); c != "should be deleted" { + t.Errorf("handler modified header %q = %q; want %q", someConnHeader, c, "should be deleted") + } + })) + defer frontend.Close() + + getReq, _ := http.NewRequest("GET", frontend.URL, nil) + getReq.Header.Add("Connection", "") + getReq.Header.Add("Connection", someConnHeader) + getReq.Header.Set(someConnHeader, "should be deleted") + res, err := frontend.Client().Do(getReq) + if err != nil { + t.Fatalf("Get: %v", err) + } + defer res.Body.Close() + bodyBytes, err := io.ReadAll(res.Body) + if err != nil { + t.Fatalf("reading body: %v", err) + } + if got, want := string(bodyBytes), backendResponse; got != want { + t.Errorf("got body %q; want %q", got, want) + } + if c := res.Header.Get("Connection"); c != "" { + t.Errorf("handler got header %q = %q; want empty", "Connection", c) + } + if c := res.Header.Get(someConnHeader); c != "" { + t.Errorf("handler got header %q = %q; want empty", someConnHeader, c) + } +} + func TestXForwardedFor(t *testing.T) { const prevForwardedFor = "client ip" const backendResponse = "I am the backend" From fca7b8f3e690ec0562dd6ed609a8c7e6bef744c8 Mon Sep 17 00:00:00 2001 From: Roland Shoemaker Date: Thu, 27 May 2021 15:14:18 +0000 Subject: [PATCH 090/100] Revert "net: verify results from Lookup* are valid domain names" This reverts commit c89f1224a544cde464fcb86e78ebb0cc97eedba2. Reason for revert: reverting so we can apply follow-up fixes and do a single cherry pick. Change-Id: I16c6283a0bcab056216f330fb98fa3b5f2b0780c Reviewed-on: https://go-review.googlesource.com/c/go/+/323129 Reviewed-by: Katie Hockman Reviewed-by: Filippo Valsorda Trust: Katie Hockman Run-TryBot: Katie Hockman TryBot-Result: Go Bot --- src/net/dnsclient_unix_test.go | 121 --------------------------------- src/net/lookup.go | 98 +++----------------------- 2 files changed, 8 insertions(+), 211 deletions(-) diff --git a/src/net/dnsclient_unix_test.go b/src/net/dnsclient_unix_test.go index 69a9b972f08..ec690a1c0cf 100644 --- a/src/net/dnsclient_unix_test.go +++ b/src/net/dnsclient_unix_test.go @@ -1799,124 +1799,3 @@ func TestPTRandNonPTR(t *testing.T) { t.Errorf("names = %q; want %q", names, want) } } - -func TestCVE202133195(t *testing.T) { - fake := fakeDNSServer{ - rh: func(n, _ string, q dnsmessage.Message, _ time.Time) (dnsmessage.Message, error) { - r := dnsmessage.Message{ - Header: dnsmessage.Header{ - ID: q.Header.ID, - Response: true, - RCode: dnsmessage.RCodeSuccess, - RecursionAvailable: true, - }, - Questions: q.Questions, - } - switch q.Questions[0].Type { - case dnsmessage.TypeCNAME: - r.Answers = []dnsmessage.Resource{} - case dnsmessage.TypeA: // CNAME lookup uses a A/AAAA as a proxy - r.Answers = append(r.Answers, - dnsmessage.Resource{ - Header: dnsmessage.ResourceHeader{ - Name: dnsmessage.MustNewName(".golang.org."), - Type: dnsmessage.TypeA, - Class: dnsmessage.ClassINET, - Length: 4, - }, - Body: &dnsmessage.AResource{ - A: TestAddr, - }, - }, - ) - case dnsmessage.TypeSRV: - n := q.Questions[0].Name - if n.String() == "_hdr._tcp.golang.org." { - n = dnsmessage.MustNewName(".golang.org.") - } - r.Answers = append(r.Answers, - dnsmessage.Resource{ - Header: dnsmessage.ResourceHeader{ - Name: n, - Type: dnsmessage.TypeSRV, - Class: dnsmessage.ClassINET, - Length: 4, - }, - Body: &dnsmessage.SRVResource{ - Target: dnsmessage.MustNewName(".golang.org."), - }, - }, - ) - case dnsmessage.TypeMX: - r.Answers = append(r.Answers, - dnsmessage.Resource{ - Header: dnsmessage.ResourceHeader{ - Name: dnsmessage.MustNewName(".golang.org."), - Type: dnsmessage.TypeMX, - Class: dnsmessage.ClassINET, - Length: 4, - }, - Body: &dnsmessage.MXResource{ - MX: dnsmessage.MustNewName(".golang.org."), - }, - }, - ) - case dnsmessage.TypeNS: - r.Answers = append(r.Answers, - dnsmessage.Resource{ - Header: dnsmessage.ResourceHeader{ - Name: dnsmessage.MustNewName(".golang.org."), - Type: dnsmessage.TypeNS, - Class: dnsmessage.ClassINET, - Length: 4, - }, - Body: &dnsmessage.NSResource{ - NS: dnsmessage.MustNewName(".golang.org."), - }, - }, - ) - case dnsmessage.TypePTR: - r.Answers = append(r.Answers, - dnsmessage.Resource{ - Header: dnsmessage.ResourceHeader{ - Name: dnsmessage.MustNewName(".golang.org."), - Type: dnsmessage.TypePTR, - Class: dnsmessage.ClassINET, - Length: 4, - }, - Body: &dnsmessage.PTRResource{ - PTR: dnsmessage.MustNewName(".golang.org."), - }, - }, - ) - } - return r, nil - }, - } - r := Resolver{PreferGo: true, Dial: fake.DialContext} - - _, err := r.LookupCNAME(context.Background(), "golang.org") - if expected := "lookup golang.org: CNAME target is invalid"; err.Error() != expected { - t.Errorf("LookupCNAME returned unexpected error, got %q, want %q", err.Error(), expected) - } - _, _, err = r.LookupSRV(context.Background(), "target", "tcp", "golang.org") - if expected := "lookup golang.org: SRV target is invalid"; err.Error() != expected { - t.Errorf("LookupSRV returned unexpected error, got %q, want %q", err.Error(), expected) - } - _, _, err = r.LookupSRV(context.Background(), "hdr", "tcp", "golang.org") - if expected := "lookup golang.org: SRV header name is invalid"; err.Error() != expected { - t.Errorf("LookupSRV returned unexpected error, got %q, want %q", err.Error(), expected) - } - _, err = r.LookupMX(context.Background(), "golang.org") - if expected := "lookup golang.org: MX target is invalid"; err.Error() != expected { - t.Errorf("LookupMX returned unexpected error, got %q, want %q", err.Error(), expected) - } - _, err = r.LookupNS(context.Background(), "golang.org") - if expected := "lookup golang.org: NS target is invalid"; err.Error() != expected { - t.Errorf("LookupNS returned unexpected error, got %q, want %q", err.Error(), expected) - } - _, err = r.LookupAddr(context.Background(), "1.2.3.4") - if expected := "lookup 1.2.3.4: PTR target is invalid"; err.Error() != expected { - t.Errorf("LookupAddr returned unexpected error, got %q, want %q", err.Error(), expected) - } -} diff --git a/src/net/lookup.go b/src/net/lookup.go index 39d33796d5b..03599503bd1 100644 --- a/src/net/lookup.go +++ b/src/net/lookup.go @@ -396,9 +396,6 @@ func (r *Resolver) LookupPort(ctx context.Context, network, service string) (por // contain DNS "CNAME" records, as long as host resolves to // address records. // -// The returned canonical name is validated to be a properly -// formatted presentation-format domain name. -// // LookupCNAME uses context.Background internally; to specify the context, use // Resolver.LookupCNAME. func LookupCNAME(host string) (cname string, err error) { @@ -415,18 +412,8 @@ func LookupCNAME(host string) (cname string, err error) { // LookupCNAME does not return an error if host does not // contain DNS "CNAME" records, as long as host resolves to // address records. -// -// The returned canonical name is validated to be a properly -// formatted presentation-format domain name. -func (r *Resolver) LookupCNAME(ctx context.Context, host string) (string, error) { - cname, err := r.lookupCNAME(ctx, host) - if err != nil { - return "", err - } - if !isDomainName(cname) { - return "", &DNSError{Err: "CNAME target is invalid", Name: host} - } - return cname, nil +func (r *Resolver) LookupCNAME(ctx context.Context, host string) (cname string, err error) { + return r.lookupCNAME(ctx, host) } // LookupSRV tries to resolve an SRV query of the given service, @@ -438,9 +425,6 @@ func (r *Resolver) LookupCNAME(ctx context.Context, host string) (string, error) // That is, it looks up _service._proto.name. To accommodate services // publishing SRV records under non-standard names, if both service // and proto are empty strings, LookupSRV looks up name directly. -// -// The returned service names are validated to be properly -// formatted presentation-format domain names. func LookupSRV(service, proto, name string) (cname string, addrs []*SRV, err error) { return DefaultResolver.lookupSRV(context.Background(), service, proto, name) } @@ -454,33 +438,12 @@ func LookupSRV(service, proto, name string) (cname string, addrs []*SRV, err err // That is, it looks up _service._proto.name. To accommodate services // publishing SRV records under non-standard names, if both service // and proto are empty strings, LookupSRV looks up name directly. -// -// The returned service names are validated to be properly -// formatted presentation-format domain names. -func (r *Resolver) LookupSRV(ctx context.Context, service, proto, name string) (string, []*SRV, error) { - cname, addrs, err := r.lookupSRV(ctx, service, proto, name) - if err != nil { - return "", nil, err - } - if cname != "" && !isDomainName(cname) { - return "", nil, &DNSError{Err: "SRV header name is invalid", Name: name} - } - for _, addr := range addrs { - if addr == nil { - continue - } - if !isDomainName(addr.Target) { - return "", nil, &DNSError{Err: "SRV target is invalid", Name: name} - } - } - return cname, addrs, nil +func (r *Resolver) LookupSRV(ctx context.Context, service, proto, name string) (cname string, addrs []*SRV, err error) { + return r.lookupSRV(ctx, service, proto, name) } // LookupMX returns the DNS MX records for the given domain name sorted by preference. // -// The returned mail server names are validated to be properly -// formatted presentation-format domain names. -// // LookupMX uses context.Background internally; to specify the context, use // Resolver.LookupMX. func LookupMX(name string) ([]*MX, error) { @@ -488,30 +451,12 @@ func LookupMX(name string) ([]*MX, error) { } // LookupMX returns the DNS MX records for the given domain name sorted by preference. -// -// The returned mail server names are validated to be properly -// formatted presentation-format domain names. func (r *Resolver) LookupMX(ctx context.Context, name string) ([]*MX, error) { - records, err := r.lookupMX(ctx, name) - if err != nil { - return nil, err - } - for _, mx := range records { - if mx == nil { - continue - } - if !isDomainName(mx.Host) { - return nil, &DNSError{Err: "MX target is invalid", Name: name} - } - } - return records, nil + return r.lookupMX(ctx, name) } // LookupNS returns the DNS NS records for the given domain name. // -// The returned name server names are validated to be properly -// formatted presentation-format domain names. -// // LookupNS uses context.Background internally; to specify the context, use // Resolver.LookupNS. func LookupNS(name string) ([]*NS, error) { @@ -519,23 +464,8 @@ func LookupNS(name string) ([]*NS, error) { } // LookupNS returns the DNS NS records for the given domain name. -// -// The returned name server names are validated to be properly -// formatted presentation-format domain names. func (r *Resolver) LookupNS(ctx context.Context, name string) ([]*NS, error) { - records, err := r.lookupNS(ctx, name) - if err != nil { - return nil, err - } - for _, ns := range records { - if ns == nil { - continue - } - if !isDomainName(ns.Host) { - return nil, &DNSError{Err: "NS target is invalid", Name: name} - } - } - return records, nil + return r.lookupNS(ctx, name) } // LookupTXT returns the DNS TXT records for the given domain name. @@ -565,18 +495,6 @@ func LookupAddr(addr string) (names []string, err error) { // LookupAddr performs a reverse lookup for the given address, returning a list // of names mapping to that address. -// -// The returned names are validated to be properly -// formatted presentation-format domain names. -func (r *Resolver) LookupAddr(ctx context.Context, addr string) ([]string, error) { - names, err := r.lookupAddr(ctx, addr) - if err != nil { - return nil, err - } - for _, name := range names { - if !isDomainName(name) { - return nil, &DNSError{Err: "PTR target is invalid", Name: addr} - } - } - return names, nil +func (r *Resolver) LookupAddr(ctx context.Context, addr string) (names []string, err error) { + return r.lookupAddr(ctx, addr) } From 6b8c94b6c524710bc3290546176a0da2f7c8c9db Mon Sep 17 00:00:00 2001 From: Rob Findley Date: Thu, 27 May 2021 12:35:01 -0400 Subject: [PATCH 091/100] go/types: guard against check==nil in newNamed When importing generic named types, it is possible for Checker.newNamed to be called during type instantiation when the Checker is nil. In this case we should be able to safely skip this delayed expansion. Updates #45580 Change-Id: I75422100464d57eba24642c93e06e8b47d904fc3 Reviewed-on: https://go-review.googlesource.com/c/go/+/322974 Trust: Robert Findley Run-TryBot: Robert Findley TryBot-Result: Go Bot Reviewed-by: Robert Griesemer --- src/go/types/type.go | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/src/go/types/type.go b/src/go/types/type.go index 3fdb2365a03..2660ce4408c 100644 --- a/src/go/types/type.go +++ b/src/go/types/type.go @@ -661,11 +661,7 @@ func NewNamed(obj *TypeName, underlying Type, methods []*Func) *Named { if _, ok := underlying.(*Named); ok { panic("types.NewNamed: underlying type must not be *Named") } - typ := &Named{obj: obj, orig: underlying, underlying: underlying, methods: methods} - if obj.typ == nil { - obj.typ = typ - } - return typ + return (*Checker)(nil).newNamed(obj, underlying, methods) } func (check *Checker) newNamed(obj *TypeName, underlying Type, methods []*Func) *Named { @@ -681,13 +677,15 @@ func (check *Checker) newNamed(obj *TypeName, underlying Type, methods []*Func) // // TODO(rFindley): clean this up so that under is the only function mutating // named types. - check.later(func() { - switch typ.under().(type) { - case *Named, *instance: - panic("internal error: unexpanded underlying type") - } - typ.check = nil - }) + if check != nil { + check.later(func() { + switch typ.under().(type) { + case *Named, *instance: + panic("internal error: unexpanded underlying type") + } + typ.check = nil + }) + } return typ } From db66e9e15d16cfdb555140b26a5f009fd0d23d0e Mon Sep 17 00:00:00 2001 From: Cherry Mui Date: Thu, 27 May 2021 10:11:42 -0400 Subject: [PATCH 092/100] cmd/link: accept Windows line-ending in TestTrampolineCgo Apparently C printf emits "\r\n" on Windows. Accept that. Change-Id: If87ba41435e3147d3892cfc3fe3a105b066ff0aa Reviewed-on: https://go-review.googlesource.com/c/go/+/322973 Trust: Cherry Mui Run-TryBot: Cherry Mui TryBot-Result: Go Bot Reviewed-by: Than McIntosh --- src/cmd/link/link_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/cmd/link/link_test.go b/src/cmd/link/link_test.go index 8805ff1f02c..4d6bc76aca8 100644 --- a/src/cmd/link/link_test.go +++ b/src/cmd/link/link_test.go @@ -698,7 +698,7 @@ func TestTrampolineCgo(t *testing.T) { if err != nil { t.Errorf("executable failed to run: %v\n%s", err, out) } - if string(out) != "hello\n" { + if string(out) != "hello\n" && string(out) != "hello\r\n" { t.Errorf("unexpected output:\n%s", out) } @@ -717,7 +717,7 @@ func TestTrampolineCgo(t *testing.T) { if err != nil { t.Errorf("executable failed to run: %v\n%s", err, out) } - if string(out) != "hello\n" { + if string(out) != "hello\n" && string(out) != "hello\r\n" { t.Errorf("unexpected output:\n%s", out) } } From 56af34f875f55485b4ebc521fe0c695dafb9bc23 Mon Sep 17 00:00:00 2001 From: Than McIntosh Date: Tue, 25 May 2021 10:13:07 -0400 Subject: [PATCH 093/100] cmd/compile: place reg spills after OpArg{Int,Float}Reg ops Tweak the register allocator to maintain the invariant that OpArg{Int,Float}Reg values are placed together at the start of the entry block, before any other non-pseudo-op values. Without this change, when the register allocator adds spills we can wind up with an interleaving of OpArg*Reg and stores, which complicates debug location analysis. Updates #40724. Change-Id: Icf30dd814a9e25263ecbea2e48feb840a6e7f2bd Reviewed-on: https://go-review.googlesource.com/c/go/+/322630 Trust: Than McIntosh Run-TryBot: Than McIntosh TryBot-Result: Go Bot Reviewed-by: Cherry Mui --- src/cmd/compile/internal/ssa/regalloc.go | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/cmd/compile/internal/ssa/regalloc.go b/src/cmd/compile/internal/ssa/regalloc.go index c81d5574fe5..3b90b8769c2 100644 --- a/src/cmd/compile/internal/ssa/regalloc.go +++ b/src/cmd/compile/internal/ssa/regalloc.go @@ -1882,6 +1882,10 @@ func (s *regAllocState) placeSpills() { phiRegs[b.ID] = m } + mustBeFirst := func(op Op) bool { + return op.isLoweredGetClosurePtr() || op == OpPhi || op == OpArgIntReg || op == OpArgFloatReg + } + // Start maps block IDs to the list of spills // that go at the start of the block (but after any phis). start := map[ID][]*Value{} @@ -1971,7 +1975,7 @@ func (s *regAllocState) placeSpills() { // Put the spill in the best block we found. spill.Block = best spill.AddArg(bestArg) - if best == v.Block && v.Op != OpPhi { + if best == v.Block && !mustBeFirst(v.Op) { // Place immediately after v. after[v.ID] = append(after[v.ID], spill) } else { @@ -1983,15 +1987,15 @@ func (s *regAllocState) placeSpills() { // Insert spill instructions into the block schedules. var oldSched []*Value for _, b := range s.visitOrder { - nphi := 0 + nfirst := 0 for _, v := range b.Values { - if v.Op != OpPhi { + if !mustBeFirst(v.Op) { break } - nphi++ + nfirst++ } - oldSched = append(oldSched[:0], b.Values[nphi:]...) - b.Values = b.Values[:nphi] + oldSched = append(oldSched[:0], b.Values[nfirst:]...) + b.Values = b.Values[:nfirst] b.Values = append(b.Values, start[b.ID]...) for _, v := range oldSched { b.Values = append(b.Values, v) From 8bf5bf51738a198902e03bbec7e6ff220f4cb002 Mon Sep 17 00:00:00 2001 From: Than McIntosh Date: Mon, 10 May 2021 07:31:57 -0400 Subject: [PATCH 094/100] cmd/compile: improve debug locations for partially live in-params During DWARF debug location generation, as a preamble to the main data flow analysis, examine the function entry block to look for in-params arriving in registers that are partially or completely dead, and insert new OpArg{Int,Float}Reg values for the dead or partially-dead pieces. In addition, add entries to the f.NamedValues table for incoming live register-resident params that don't already have entries. This helps create better/saner DWARF location expressions for params. Example: func foo(s string, used int, notused int) int { return len(s) + used } When optimization is complete for this function, the parameter "notused" is completely dead, meaning that there is no entry for it in the f.NamedValues table (which then means we don't emit a DWARF variable location expression for it in the function enty block). In addition, since only the length field of "s" is used, there is no DWARF location expression for the other component of "s", leading to degraded DWARF. There are still problems/issues with DWARF location generation, but this does improve things with respect to being able to print the values of incoming parameters when stopped in the debugger at the entry point of a function (when optimization is enabled). Updates #40724. Change-Id: I5bb5253648942f9fd33b081fe1a5a36208e75785 Reviewed-on: https://go-review.googlesource.com/c/go/+/322631 Trust: Than McIntosh Run-TryBot: Than McIntosh TryBot-Result: Go Bot Reviewed-by: Cherry Mui --- src/cmd/compile/internal/ssa/debug.go | 217 ++++++++++++++++++++++++++ 1 file changed, 217 insertions(+) diff --git a/src/cmd/compile/internal/ssa/debug.go b/src/cmd/compile/internal/ssa/debug.go index a2c2a2d98e8..eaa94975ec2 100644 --- a/src/cmd/compile/internal/ssa/debug.go +++ b/src/cmd/compile/internal/ssa/debug.go @@ -7,10 +7,13 @@ package ssa import ( "cmd/compile/internal/abi" "cmd/compile/internal/ir" + "cmd/compile/internal/types" "cmd/internal/dwarf" "cmd/internal/obj" + "cmd/internal/src" "encoding/hex" "fmt" + "internal/buildcfg" "math/bits" "sort" "strings" @@ -335,6 +338,216 @@ func (s *debugState) stateString(state stateAtPC) string { return strings.Join(strs, "") } +// slotCanonicalizer is a table used to lookup and canonicalize +// LocalSlot's in a type insensitive way (e.g. taking into account the +// base name, offset, and width of the slot, but ignoring the slot +// type). +type slotCanonicalizer struct { + slmap map[slotKey]SlKeyIdx + slkeys []LocalSlot +} + +func newSlotCanonicalizer() *slotCanonicalizer { + return &slotCanonicalizer{ + slmap: make(map[slotKey]SlKeyIdx), + slkeys: []LocalSlot{LocalSlot{N: nil}}, + } +} + +type SlKeyIdx uint32 + +const noSlot = SlKeyIdx(0) + +// slotKey is a type-insensitive encapsulation of a LocalSlot; it +// is used to key a map within slotCanonicalizer. +type slotKey struct { + name *ir.Name + offset int64 + width int64 + splitOf SlKeyIdx // idx in slkeys slice in slotCanonicalizer + splitOffset int64 +} + +// lookup looks up a LocalSlot in the slot canonicalizer "sc", returning +// a canonical index for the slot, and adding it to the table if need +// be. Return value is the canonical slot index, and a boolean indicating +// whether the slot was found in the table already (TRUE => found). +func (sc *slotCanonicalizer) lookup(ls LocalSlot) (SlKeyIdx, bool) { + split := noSlot + if ls.SplitOf != nil { + split, _ = sc.lookup(*ls.SplitOf) + } + k := slotKey{ + name: ls.N, offset: ls.Off, width: ls.Type.Width, + splitOf: split, splitOffset: ls.SplitOffset, + } + if idx, ok := sc.slmap[k]; ok { + return idx, true + } + rv := SlKeyIdx(len(sc.slkeys)) + sc.slkeys = append(sc.slkeys, ls) + sc.slmap[k] = rv + return rv, false +} + +func (sc *slotCanonicalizer) canonSlot(idx SlKeyIdx) LocalSlot { + return sc.slkeys[idx] +} + +// PopulateABIInRegArgOps examines the entry block of the function +// and looks for incoming parameters that have missing or partial +// OpArg{Int,Float}Reg values, inserting additional values in +// cases where they are missing. Example: +// +// func foo(s string, used int, notused int) int { +// return len(s) + used +// } +// +// In the function above, the incoming parameter "used" is fully live, +// "notused" is not live, and "s" is partially live (only the length +// field of the string is used). At the point where debug value +// analysis runs, we might expect to see an entry block with: +// +// b1: +// v4 = ArgIntReg {s+8} [0] : BX +// v5 = ArgIntReg {used} [0] : CX +// +// While this is an accurate picture of the live incoming params, +// we also want to have debug locations for non-live params (or +// their non-live pieces), e.g. something like +// +// b1: +// v9 = ArgIntReg <*uint8> {s+0} [0] : AX +// v4 = ArgIntReg {s+8} [0] : BX +// v5 = ArgIntReg {used} [0] : CX +// v10 = ArgIntReg {unused} [0] : DI +// +// This function examines the live OpArg{Int,Float}Reg values and +// synthesizes new (dead) values for the non-live params or the +// non-live pieces of partially live params. +// +func PopulateABIInRegArgOps(f *Func) { + pri := f.ABISelf.ABIAnalyzeFuncType(f.Type.FuncType()) + + // When manufacturing new slots that correspond to splits of + // composite parameters, we want to avoid creating a new sub-slot + // that differs from some existing sub-slot only by type, since + // the debug location analysis will treat that slot as a separate + // entity. To achieve this, create a lookup table of existing + // slots that is type-insenstitive. + sc := newSlotCanonicalizer() + for _, sl := range f.Names { + sc.lookup(*sl) + } + + // Add slot -> value entry to f.NamedValues if not already present. + addToNV := func(v *Value, sl LocalSlot) { + values, ok := f.NamedValues[sl] + if !ok { + // Haven't seen this slot yet. + sla := f.localSlotAddr(sl) + f.Names = append(f.Names, sla) + } else { + for _, ev := range values { + if v == ev { + return + } + } + } + values = append(values, v) + f.NamedValues[sl] = values + } + + newValues := []*Value{} + + abiRegIndexToRegister := func(reg abi.RegIndex) int8 { + i := f.ABISelf.FloatIndexFor(reg) + if i >= 0 { // float PR + return f.Config.floatParamRegs[i] + } else { + return f.Config.intParamRegs[reg] + } + } + + // Helper to construct a new OpArg{Float,Int}Reg op value. + var pos src.XPos + if len(f.Entry.Values) != 0 { + pos = f.Entry.Values[0].Pos + } + synthesizeOpIntFloatArg := func(n *ir.Name, t *types.Type, reg abi.RegIndex, sl LocalSlot) *Value { + aux := &AuxNameOffset{n, sl.Off} + op, auxInt := ArgOpAndRegisterFor(reg, f.ABISelf) + v := f.newValueNoBlock(op, t, pos) + v.AuxInt = auxInt + v.Aux = aux + v.Args = nil + v.Block = f.Entry + newValues = append(newValues, v) + addToNV(v, sl) + f.setHome(v, &f.Config.registers[abiRegIndexToRegister(reg)]) + return v + } + + // Make a pass through the entry block looking for + // OpArg{Int,Float}Reg ops. Record the slots they use in a table + // ("sc"). We use a type-insensitive lookup for the slot table, + // since the type we get from the ABI analyzer won't always match + // what the compiler uses when creating OpArg{Int,Float}Reg ops. + for _, v := range f.Entry.Values { + if v.Op == OpArgIntReg || v.Op == OpArgFloatReg { + aux := v.Aux.(*AuxNameOffset) + sl := LocalSlot{N: aux.Name, Type: v.Type, Off: aux.Offset} + // install slot in lookup table + idx, _ := sc.lookup(sl) + // add to f.NamedValues if not already present + addToNV(v, sc.canonSlot(idx)) + } else if v.Op.IsCall() { + // if we hit a call, we've gone too far. + break + } + } + + // Now make a pass through the ABI in-params, looking for params + // or pieces of params that we didn't encounter in the loop above. + for _, inp := range pri.InParams() { + if !isNamedRegParam(inp) { + continue + } + n := inp.Name.(*ir.Name) + + // Param is spread across one or more registers. Walk through + // each piece to see whether we've seen an arg reg op for it. + types, offsets := inp.RegisterTypesAndOffsets() + for k, t := range types { + // Note: this recipe for creating a LocalSlot is designed + // to be compatible with the one used in expand_calls.go + // as opposed to decompose.go. The expand calls code just + // takes the base name and creates an offset into it, + // without using the SplitOf/SplitOffset fields. The code + // in decompose.go does the opposite -- it creates a + // LocalSlot object with "Off" set to zero, but with + // SplitOf pointing to a parent slot, and SplitOffset + // holding the offset into the parent object. + pieceSlot := LocalSlot{N: n, Type: t, Off: offsets[k]} + + // Look up this piece to see if we've seen a reg op + // for it. If not, create one. + _, found := sc.lookup(pieceSlot) + if !found { + // This slot doesn't appear in the map, meaning it + // corresponds to an in-param that is not live, or + // a portion of an in-param that is not live/used. + // Add a new dummy OpArg{Int,Float}Reg for it. + synthesizeOpIntFloatArg(n, t, inp.Registers[k], + pieceSlot) + } + } + } + + // Insert the new values into the head of the block. + f.Entry.Values = append(newValues, f.Entry.Values...) +} + // BuildFuncDebug returns debug information for f. // f must be fully processed, so that each Value is where it will be when // machine code is emitted. @@ -349,6 +562,10 @@ func BuildFuncDebug(ctxt *obj.Link, f *Func, loggingEnabled bool, stackOffset fu state.stackOffset = stackOffset state.ctxt = ctxt + if buildcfg.Experiment.RegabiArgs { + PopulateABIInRegArgOps(f) + } + if state.loggingEnabled { state.logf("Generating location lists for function %q\n", f.Name) } From cdcd02842da7c004efd023881e3719105209c908 Mon Sep 17 00:00:00 2001 From: Roland Shoemaker Date: Thu, 27 May 2021 10:40:06 -0700 Subject: [PATCH 095/100] net: verify results from Lookup* are valid domain names For the methods LookupCNAME, LookupSRV, LookupMX, LookupNS, and LookupAddr check that the returned domain names are in fact valid DNS names using the existing isDomainName function. Thanks to Philipp Jeitner and Haya Shulman from Fraunhofer SIT for reporting this issue. Fixes #46241 Fixes CVE-2021-33195 Change-Id: I47a4f58c031cb752f732e88bbdae7f819f0af4f3 Reviewed-on: https://go-review.googlesource.com/c/go/+/323131 Trust: Roland Shoemaker Run-TryBot: Roland Shoemaker TryBot-Result: Go Bot Reviewed-by: Filippo Valsorda Reviewed-by: Katie Hockman --- src/net/dnsclient_unix_test.go | 157 +++++++++++++++++++++++++++++++++ src/net/lookup.go | 111 ++++++++++++++++++++--- 2 files changed, 255 insertions(+), 13 deletions(-) diff --git a/src/net/dnsclient_unix_test.go b/src/net/dnsclient_unix_test.go index ec690a1c0cf..a718e75a726 100644 --- a/src/net/dnsclient_unix_test.go +++ b/src/net/dnsclient_unix_test.go @@ -1799,3 +1799,160 @@ func TestPTRandNonPTR(t *testing.T) { t.Errorf("names = %q; want %q", names, want) } } + +func TestCVE202133195(t *testing.T) { + fake := fakeDNSServer{ + rh: func(n, _ string, q dnsmessage.Message, _ time.Time) (dnsmessage.Message, error) { + r := dnsmessage.Message{ + Header: dnsmessage.Header{ + ID: q.Header.ID, + Response: true, + RCode: dnsmessage.RCodeSuccess, + RecursionAvailable: true, + }, + Questions: q.Questions, + } + switch q.Questions[0].Type { + case dnsmessage.TypeCNAME: + r.Answers = []dnsmessage.Resource{} + case dnsmessage.TypeA: // CNAME lookup uses a A/AAAA as a proxy + r.Answers = append(r.Answers, + dnsmessage.Resource{ + Header: dnsmessage.ResourceHeader{ + Name: dnsmessage.MustNewName(".golang.org."), + Type: dnsmessage.TypeA, + Class: dnsmessage.ClassINET, + Length: 4, + }, + Body: &dnsmessage.AResource{ + A: TestAddr, + }, + }, + ) + case dnsmessage.TypeSRV: + n := q.Questions[0].Name + if n.String() == "_hdr._tcp.golang.org." { + n = dnsmessage.MustNewName(".golang.org.") + } + r.Answers = append(r.Answers, + dnsmessage.Resource{ + Header: dnsmessage.ResourceHeader{ + Name: n, + Type: dnsmessage.TypeSRV, + Class: dnsmessage.ClassINET, + Length: 4, + }, + Body: &dnsmessage.SRVResource{ + Target: dnsmessage.MustNewName(".golang.org."), + }, + }, + ) + case dnsmessage.TypeMX: + r.Answers = append(r.Answers, + dnsmessage.Resource{ + Header: dnsmessage.ResourceHeader{ + Name: dnsmessage.MustNewName(".golang.org."), + Type: dnsmessage.TypeMX, + Class: dnsmessage.ClassINET, + Length: 4, + }, + Body: &dnsmessage.MXResource{ + MX: dnsmessage.MustNewName(".golang.org."), + }, + }, + ) + case dnsmessage.TypeNS: + r.Answers = append(r.Answers, + dnsmessage.Resource{ + Header: dnsmessage.ResourceHeader{ + Name: dnsmessage.MustNewName(".golang.org."), + Type: dnsmessage.TypeNS, + Class: dnsmessage.ClassINET, + Length: 4, + }, + Body: &dnsmessage.NSResource{ + NS: dnsmessage.MustNewName(".golang.org."), + }, + }, + ) + case dnsmessage.TypePTR: + r.Answers = append(r.Answers, + dnsmessage.Resource{ + Header: dnsmessage.ResourceHeader{ + Name: dnsmessage.MustNewName(".golang.org."), + Type: dnsmessage.TypePTR, + Class: dnsmessage.ClassINET, + Length: 4, + }, + Body: &dnsmessage.PTRResource{ + PTR: dnsmessage.MustNewName(".golang.org."), + }, + }, + ) + } + return r, nil + }, + } + + r := Resolver{PreferGo: true, Dial: fake.DialContext} + // Change the default resolver to match our manipulated resolver + originalDefault := DefaultResolver + DefaultResolver = &r + defer func() { + DefaultResolver = originalDefault + }() + + _, err := r.LookupCNAME(context.Background(), "golang.org") + if expected := "lookup golang.org: CNAME target is invalid"; err == nil || err.Error() != expected { + t.Errorf("Resolver.LookupCNAME returned unexpected error, got %q, want %q", err.Error(), expected) + } + _, err = LookupCNAME("golang.org") + if expected := "lookup golang.org: CNAME target is invalid"; err == nil || err.Error() != expected { + t.Errorf("LookupCNAME returned unexpected error, got %q, want %q", err.Error(), expected) + } + + _, _, err = r.LookupSRV(context.Background(), "target", "tcp", "golang.org") + if expected := "lookup golang.org: SRV target is invalid"; err == nil || err.Error() != expected { + t.Errorf("Resolver.LookupSRV returned unexpected error, got %q, want %q", err.Error(), expected) + } + _, _, err = LookupSRV("target", "tcp", "golang.org") + if expected := "lookup golang.org: SRV target is invalid"; err == nil || err.Error() != expected { + t.Errorf("LookupSRV returned unexpected error, got %q, want %q", err.Error(), expected) + } + + _, _, err = r.LookupSRV(context.Background(), "hdr", "tcp", "golang.org") + if expected := "lookup golang.org: SRV header name is invalid"; err == nil || err.Error() != expected { + t.Errorf("Resolver.LookupSRV returned unexpected error, got %q, want %q", err.Error(), expected) + } + _, _, err = LookupSRV("hdr", "tcp", "golang.org") + if expected := "lookup golang.org: SRV header name is invalid"; err == nil || err.Error() != expected { + t.Errorf("LookupSRV returned unexpected error, got %q, want %q", err.Error(), expected) + } + + _, err = r.LookupMX(context.Background(), "golang.org") + if expected := "lookup golang.org: MX target is invalid"; err == nil || err.Error() != expected { + t.Errorf("Resolver.LookupMX returned unexpected error, got %q, want %q", err.Error(), expected) + } + _, err = LookupMX("golang.org") + if expected := "lookup golang.org: MX target is invalid"; err == nil || err.Error() != expected { + t.Errorf("LookupMX returned unexpected error, got %q, want %q", err.Error(), expected) + } + + _, err = r.LookupNS(context.Background(), "golang.org") + if expected := "lookup golang.org: NS target is invalid"; err == nil || err.Error() != expected { + t.Errorf("Resolver.LookupNS returned unexpected error, got %q, want %q", err.Error(), expected) + } + _, err = LookupNS("golang.org") + if expected := "lookup golang.org: NS target is invalid"; err == nil || err.Error() != expected { + t.Errorf("LookupNS returned unexpected error, got %q, want %q", err.Error(), expected) + } + + _, err = r.LookupAddr(context.Background(), "1.2.3.4") + if expected := "lookup 1.2.3.4: PTR target is invalid"; err == nil || err.Error() != expected { + t.Errorf("Resolver.LookupAddr returned unexpected error, got %q, want %q", err.Error(), expected) + } + _, err = LookupAddr("1.2.3.4") + if expected := "lookup 1.2.3.4: PTR target is invalid"; err == nil || err.Error() != expected { + t.Errorf("LookupAddr returned unexpected error, got %q, want %q", err.Error(), expected) + } +} diff --git a/src/net/lookup.go b/src/net/lookup.go index 03599503bd1..02a4cdcd1ee 100644 --- a/src/net/lookup.go +++ b/src/net/lookup.go @@ -396,10 +396,13 @@ func (r *Resolver) LookupPort(ctx context.Context, network, service string) (por // contain DNS "CNAME" records, as long as host resolves to // address records. // +// The returned canonical name is validated to be a properly +// formatted presentation-format domain name. +// // LookupCNAME uses context.Background internally; to specify the context, use // Resolver.LookupCNAME. func LookupCNAME(host string) (cname string, err error) { - return DefaultResolver.lookupCNAME(context.Background(), host) + return DefaultResolver.LookupCNAME(context.Background(), host) } // LookupCNAME returns the canonical name for the given host. @@ -412,8 +415,18 @@ func LookupCNAME(host string) (cname string, err error) { // LookupCNAME does not return an error if host does not // contain DNS "CNAME" records, as long as host resolves to // address records. -func (r *Resolver) LookupCNAME(ctx context.Context, host string) (cname string, err error) { - return r.lookupCNAME(ctx, host) +// +// The returned canonical name is validated to be a properly +// formatted presentation-format domain name. +func (r *Resolver) LookupCNAME(ctx context.Context, host string) (string, error) { + cname, err := r.lookupCNAME(ctx, host) + if err != nil { + return "", err + } + if !isDomainName(cname) { + return "", &DNSError{Err: "CNAME target is invalid", Name: host} + } + return cname, nil } // LookupSRV tries to resolve an SRV query of the given service, @@ -425,8 +438,11 @@ func (r *Resolver) LookupCNAME(ctx context.Context, host string) (cname string, // That is, it looks up _service._proto.name. To accommodate services // publishing SRV records under non-standard names, if both service // and proto are empty strings, LookupSRV looks up name directly. +// +// The returned service names are validated to be properly +// formatted presentation-format domain names. func LookupSRV(service, proto, name string) (cname string, addrs []*SRV, err error) { - return DefaultResolver.lookupSRV(context.Background(), service, proto, name) + return DefaultResolver.LookupSRV(context.Background(), service, proto, name) } // LookupSRV tries to resolve an SRV query of the given service, @@ -438,34 +454,88 @@ func LookupSRV(service, proto, name string) (cname string, addrs []*SRV, err err // That is, it looks up _service._proto.name. To accommodate services // publishing SRV records under non-standard names, if both service // and proto are empty strings, LookupSRV looks up name directly. -func (r *Resolver) LookupSRV(ctx context.Context, service, proto, name string) (cname string, addrs []*SRV, err error) { - return r.lookupSRV(ctx, service, proto, name) +// +// The returned service names are validated to be properly +// formatted presentation-format domain names. +func (r *Resolver) LookupSRV(ctx context.Context, service, proto, name string) (string, []*SRV, error) { + cname, addrs, err := r.lookupSRV(ctx, service, proto, name) + if err != nil { + return "", nil, err + } + if cname != "" && !isDomainName(cname) { + return "", nil, &DNSError{Err: "SRV header name is invalid", Name: name} + } + for _, addr := range addrs { + if addr == nil { + continue + } + if !isDomainName(addr.Target) { + return "", nil, &DNSError{Err: "SRV target is invalid", Name: name} + } + } + return cname, addrs, nil } // LookupMX returns the DNS MX records for the given domain name sorted by preference. // +// The returned mail server names are validated to be properly +// formatted presentation-format domain names. +// // LookupMX uses context.Background internally; to specify the context, use // Resolver.LookupMX. func LookupMX(name string) ([]*MX, error) { - return DefaultResolver.lookupMX(context.Background(), name) + return DefaultResolver.LookupMX(context.Background(), name) } // LookupMX returns the DNS MX records for the given domain name sorted by preference. +// +// The returned mail server names are validated to be properly +// formatted presentation-format domain names. func (r *Resolver) LookupMX(ctx context.Context, name string) ([]*MX, error) { - return r.lookupMX(ctx, name) + records, err := r.lookupMX(ctx, name) + if err != nil { + return nil, err + } + for _, mx := range records { + if mx == nil { + continue + } + if !isDomainName(mx.Host) { + return nil, &DNSError{Err: "MX target is invalid", Name: name} + } + } + return records, nil } // LookupNS returns the DNS NS records for the given domain name. // +// The returned name server names are validated to be properly +// formatted presentation-format domain names. +// // LookupNS uses context.Background internally; to specify the context, use // Resolver.LookupNS. func LookupNS(name string) ([]*NS, error) { - return DefaultResolver.lookupNS(context.Background(), name) + return DefaultResolver.LookupNS(context.Background(), name) } // LookupNS returns the DNS NS records for the given domain name. +// +// The returned name server names are validated to be properly +// formatted presentation-format domain names. func (r *Resolver) LookupNS(ctx context.Context, name string) ([]*NS, error) { - return r.lookupNS(ctx, name) + records, err := r.lookupNS(ctx, name) + if err != nil { + return nil, err + } + for _, ns := range records { + if ns == nil { + continue + } + if !isDomainName(ns.Host) { + return nil, &DNSError{Err: "NS target is invalid", Name: name} + } + } + return records, nil } // LookupTXT returns the DNS TXT records for the given domain name. @@ -484,17 +554,32 @@ func (r *Resolver) LookupTXT(ctx context.Context, name string) ([]string, error) // LookupAddr performs a reverse lookup for the given address, returning a list // of names mapping to that address. // +// The returned names are validated to be properly formatted presentation-format +// domain names. +// // When using the host C library resolver, at most one result will be // returned. To bypass the host resolver, use a custom Resolver. // // LookupAddr uses context.Background internally; to specify the context, use // Resolver.LookupAddr. func LookupAddr(addr string) (names []string, err error) { - return DefaultResolver.lookupAddr(context.Background(), addr) + return DefaultResolver.LookupAddr(context.Background(), addr) } // LookupAddr performs a reverse lookup for the given address, returning a list // of names mapping to that address. -func (r *Resolver) LookupAddr(ctx context.Context, addr string) (names []string, err error) { - return r.lookupAddr(ctx, addr) +// +// The returned names are validated to be properly formatted presentation-format +// domain names. +func (r *Resolver) LookupAddr(ctx context.Context, addr string) ([]string, error) { + names, err := r.lookupAddr(ctx, addr) + if err != nil { + return nil, err + } + for _, name := range names { + if !isDomainName(name) { + return nil, &DNSError{Err: "PTR target is invalid", Name: addr} + } + } + return names, nil } From 0ece95a0feafe151cadf1346464952bb5c95fab3 Mon Sep 17 00:00:00 2001 From: Jay Conrod Date: Mon, 24 May 2021 16:47:45 -0400 Subject: [PATCH 096/100] cmd/go: don't let 'go mod download' save sums for inconsistent requirements 'go mod download' calls modload.LoadModFile early to find the main module path in order to validate arguments. LoadModFile may write go.mod and go.sum to fix formatting and add a go directive. This calls keepSums, which, in eager mode, loaded the complete module graph in order to find out what sums are needed to load the complete module graph. If go.mod requires a lower version of a module than will be selected later, keepSums causes the sum for that version's go.mod to be retained, even though it isn't needed later after a consistent go.mod is written. This CL fixes keepSums not to load the graph if it hasn't already been loaded (whether eager or lazy), addressing comments from CL 318629. For #45332 Change-Id: I20d4404004e4ad335450fd0fd753e7bc0060f702 Reviewed-on: https://go-review.googlesource.com/c/go/+/322369 Trust: Jay Conrod Run-TryBot: Bryan C. Mills Reviewed-by: Bryan C. Mills TryBot-Result: Go Bot --- src/cmd/go/internal/modcmd/download.go | 16 ++++++++-------- src/cmd/go/internal/modload/init.go | 11 +++++------ src/cmd/go/testdata/script/mod_download.txt | 1 - 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/src/cmd/go/internal/modcmd/download.go b/src/cmd/go/internal/modcmd/download.go index 42b06dbc95c..0e5af852376 100644 --- a/src/cmd/go/internal/modcmd/download.go +++ b/src/cmd/go/internal/modcmd/download.go @@ -138,14 +138,14 @@ func runDownload(ctx context.Context, cmd *base.Command, args []string) { sem := make(chan token, runtime.GOMAXPROCS(0)) infos, infosErr := modload.ListModules(ctx, args, 0) if !haveExplicitArgs { - // 'go mod download' is sometimes run without arguments to pre-populate - // the module cache. It may fetch modules that aren't needed to build - // packages in the main mdoule. This is usually not intended, so don't save - // sums for downloaded modules (golang.org/issue/45332). - // TODO(golang.org/issue/45551): For now, save sums needed to load the - // build list (same as 1.15 behavior). In the future, report an error if - // go.mod or go.sum need to be updated after loading the build list. - modload.WriteGoMod(ctx) + // 'go mod download' is sometimes run without arguments to pre-populate the + // module cache. It may fetch modules that aren't needed to build packages + // in the main mdoule. This is usually not intended, so don't save sums for + // downloaded modules (golang.org/issue/45332). + // TODO(golang.org/issue/45551): For now, in ListModules, save sums needed + // to load the build list (same as 1.15 behavior). In the future, report an + // error if go.mod or go.sum need to be updated after loading the build + // list. modload.DisallowWriteGoMod() } diff --git a/src/cmd/go/internal/modload/init.go b/src/cmd/go/internal/modload/init.go index 86c0db3fe4f..ea404b9f78f 100644 --- a/src/cmd/go/internal/modload/init.go +++ b/src/cmd/go/internal/modload/init.go @@ -1122,12 +1122,11 @@ func keepSums(ctx context.Context, ld *loader, rs *Requirements, which whichSums } } - if rs.depth == lazy && rs.graph.Load() == nil { - // The main module is lazy and we haven't needed to load the module graph so - // far. Don't incur the cost of loading it now — since we haven't loaded the - // graph, we probably don't have any checksums to contribute to the distant - // parts of the graph anyway. Instead, just request sums for the roots that - // we know about. + if rs.graph.Load() == nil { + // The module graph was not loaded, possibly because the main module is lazy + // or possibly because we haven't needed to load the graph yet. + // Save sums for the root modules (or their replacements), but don't + // incur the cost of loading the graph just to find and retain the sums. for _, m := range rs.rootModules { r := resolveReplacement(m) keep[modkey(r)] = true diff --git a/src/cmd/go/testdata/script/mod_download.txt b/src/cmd/go/testdata/script/mod_download.txt index ad640b45de1..c2b72b2a02c 100644 --- a/src/cmd/go/testdata/script/mod_download.txt +++ b/src/cmd/go/testdata/script/mod_download.txt @@ -167,5 +167,4 @@ require ( -- update/go.sum.update -- golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= rsc.io/quote v1.5.2/go.mod h1:LzX7hefJvL54yjefDEDHNONDjII0t9xZLPXsUe+TKr0= -rsc.io/sampler v1.2.1/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= From ab2ef4aaa77dff91cd98ded88aeba0bf5b5b2e80 Mon Sep 17 00:00:00 2001 From: Damien Neil Date: Wed, 26 May 2021 18:06:26 -0700 Subject: [PATCH 097/100] doc/go1.17: document reflect changes For #44513. Fixes #46019. Change-Id: Ica84edd5703a4ccf343ff01e10483f8d51d1c79f Reviewed-on: https://go-review.googlesource.com/c/go/+/323069 Trust: Damien Neil Run-TryBot: Damien Neil TryBot-Result: Go Bot Reviewed-by: Dmitri Shuralyov Reviewed-by: Ian Lance Taylor --- doc/go1.17.html | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/doc/go1.17.html b/doc/go1.17.html index 8313c2bc575..d0a0c0f33f0 100644 --- a/doc/go1.17.html +++ b/doc/go1.17.html @@ -500,11 +500,13 @@ Do not send CLs removing the interior tags from such phrases.

- TODO: https://golang.org/cl/281233: add VisibleFields function + The new VisibleFields function + returns all the visible fields in a struct type, including fields inside anonymous struct members.

- TODO: https://golang.org/cl/284136: panic if ArrayOf is called with negative length + The ArrayOf function now panics when + called with a negative length.

From 193d5141318d65cea310d995258288bd000d734c Mon Sep 17 00:00:00 2001 From: Manlio Perillo Date: Thu, 27 May 2021 10:44:57 +0200 Subject: [PATCH 098/100] net/http: correct Client.Do doc about context cancelation The documentation of the Client.Do method and Get function incorrectly stated that, in case of context cancelation, the returned url.Error Timeout method returns true. Update the documentation to correctly match the implementation. See also CL 200798 that, due to an oversight, corrected only the documentation of the Client.Get method. Remove a TODO note added in CL 125575 (net/http: document that Client methods always return *url.Error), since it is no longer applicable after CL 200798 (net/http: fix and lock-in Client.Do docs on request cancelation). Fixes #46402 Change-Id: Ied2ee971ba22b61777762dbb19f16e08686634ca Reviewed-on: https://go-review.googlesource.com/c/go/+/323089 Reviewed-by: Damien Neil Trust: Michael Knyszek --- src/net/http/client.go | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/net/http/client.go b/src/net/http/client.go index 03c9155fbdd..e0cabc9d4cf 100644 --- a/src/net/http/client.go +++ b/src/net/http/client.go @@ -433,8 +433,7 @@ func basicAuth(username, password string) string { // An error is returned if there were too many redirects or if there // was an HTTP protocol error. A non-2xx response doesn't cause an // error. Any returned error will be of type *url.Error. The url.Error -// value's Timeout method will report true if request timed out or was -// canceled. +// value's Timeout method will report true if the request timed out. // // When err is nil, resp always contains a non-nil resp.Body. // Caller should close resp.Body when done reading from it. @@ -589,8 +588,7 @@ func urlErrorOp(method string) string { // standard library body types. // // Any returned error will be of type *url.Error. The url.Error -// value's Timeout method will report true if request timed out or was -// canceled. +// value's Timeout method will report true if the request timed out. func (c *Client) Do(req *Request) (*Response, error) { return c.do(req) } @@ -729,7 +727,6 @@ func (c *Client) do(req *Request) (retres *Response, reterr error) { reqBodyClosed = true if !deadline.IsZero() && didTimeout() { err = &httpError{ - // TODO: early in cycle: s/Client.Timeout exceeded/timeout or context cancellation/ err: err.Error() + " (Client.Timeout exceeded while awaiting headers)", timeout: true, } From 639acdc833bfd12b7edd43092d1b380d70cb2874 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Thu, 27 May 2021 16:12:12 -0700 Subject: [PATCH 099/100] doc/go1.17: clarify that compress/lzw Reader and Writer types are new For #26535 For #44513 For #46005 Change-Id: I70d3711ab6451a61b526abb3da8e91243f637656 Reviewed-on: https://go-review.googlesource.com/c/go/+/323273 Trust: Ian Lance Taylor Reviewed-by: Joe Tsai --- doc/go1.17.html | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/doc/go1.17.html b/doc/go1.17.html index d0a0c0f33f0..b3485a0ca64 100644 --- a/doc/go1.17.html +++ b/doc/go1.17.html @@ -331,11 +331,16 @@ Do not send CLs removing the interior tags from such phrases.
compress/lzw

- The new - Reader.Reset - and - Writer.Reset - methods allow reuse of a Reader or Writer. + The NewReader + function is guaranteed to return a value of the new + type Reader, + and similarly NewWriter + is guaranteed to return a value of the new + type Writer. + These new types both implement a Reset method + (Reader.Reset, + Writer.Reset) + that allows reuse of the Reader or Writer.

From 3de3440fb9b2d7f8a14b33f96fcfcee8eb61ec55 Mon Sep 17 00:00:00 2001 From: Rob Findley Date: Thu, 27 May 2021 22:27:55 -0400 Subject: [PATCH 100/100] go/ast: remove FuncDecl.IsMethod for Go 1.17 The IsMethod method was added to FuncDecl in the process of working on support for type parameters, but is now only used in one place. It also didn't go through the proposal process. Remove it for 1.17. Also clean up a doc comment that mentioned type parameters. Fixes #46297 Change-Id: I432bdd626324f613baf059540b7c5436985b2b16 Reviewed-on: https://go-review.googlesource.com/c/go/+/323369 Trust: Robert Findley Run-TryBot: Robert Findley TryBot-Result: Go Bot Reviewed-by: Robert Griesemer --- src/go/ast/ast.go | 6 +----- src/go/types/resolver.go | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/src/go/ast/ast.go b/src/go/ast/ast.go index c87529ec77d..337c87fd797 100644 --- a/src/go/ast/ast.go +++ b/src/go/ast/ast.go @@ -259,7 +259,7 @@ func (f *FieldList) End() token.Pos { return token.NoPos } -// NumFields returns the number of (type) parameters or struct fields represented by a FieldList. +// NumFields returns the number of parameters or struct fields represented by a FieldList. func (f *FieldList) NumFields() int { n := 0 if f != nil { @@ -973,10 +973,6 @@ type ( } ) -func (f *FuncDecl) IsMethod() bool { - return f.Recv.NumFields() != 0 -} - // Pos and End implementations for declaration nodes. func (d *BadDecl) Pos() token.Pos { return d.From } diff --git a/src/go/types/resolver.go b/src/go/types/resolver.go index f67fc65cd18..114647a2fff 100644 --- a/src/go/types/resolver.go +++ b/src/go/types/resolver.go @@ -383,7 +383,7 @@ func (check *Checker) collectObjects() { info := &declInfo{file: fileScope, fdecl: d.decl} name := d.decl.Name.Name obj := NewFunc(d.decl.Name.Pos(), pkg, name, nil) - if !d.decl.IsMethod() { + if d.decl.Recv.NumFields() == 0 { // regular function if d.decl.Recv != nil { check.error(d.decl.Recv, _BadRecv, "method is missing receiver")