mirror of
https://github.com/golang/go
synced 2024-11-11 20:50:23 -07:00
runtime,syscall: convert syscall on openbsd/amd64 to libc
Convert the syscall package on openbsd/amd64 to use libc rather than performing direct system calls. Updates #36435 Change-Id: Ieb5926a91ed34f7c722e3667004ec484c86804ef Reviewed-on: https://go-review.googlesource.com/c/go/+/270380 Trust: Joel Sing <joel@sing.id.au> Reviewed-by: Cherry Zhang <cherryyz@google.com> Run-TryBot: Cherry Zhang <cherryyz@google.com> TryBot-Result: Go Bot <gobot@golang.org>
This commit is contained in:
parent
1d5e14632e
commit
8634a234df
113
src/runtime/sys_openbsd3.go
Normal file
113
src/runtime/sys_openbsd3.go
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
// Copyright 2020 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.
|
||||||
|
|
||||||
|
// +build openbsd,amd64
|
||||||
|
|
||||||
|
package runtime
|
||||||
|
|
||||||
|
import "unsafe"
|
||||||
|
|
||||||
|
// The X versions of syscall expect the libc call to return a 64-bit result.
|
||||||
|
// Otherwise (the non-X version) expects a 32-bit result.
|
||||||
|
// This distinction is required because an error is indicated by returning -1,
|
||||||
|
// and we need to know whether to check 32 or 64 bits of the result.
|
||||||
|
// (Some libc functions that return 32 bits put junk in the upper 32 bits of AX.)
|
||||||
|
|
||||||
|
//go:linkname syscall_syscall syscall.syscall
|
||||||
|
//go:nosplit
|
||||||
|
//go:cgo_unsafe_args
|
||||||
|
func syscall_syscall(fn, a1, a2, a3 uintptr) (r1, r2, err uintptr) {
|
||||||
|
entersyscall()
|
||||||
|
libcCall(unsafe.Pointer(funcPC(syscall)), unsafe.Pointer(&fn))
|
||||||
|
exitsyscall()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
func syscall()
|
||||||
|
|
||||||
|
//go:linkname syscall_syscallX syscall.syscallX
|
||||||
|
//go:nosplit
|
||||||
|
//go:cgo_unsafe_args
|
||||||
|
func syscall_syscallX(fn, a1, a2, a3 uintptr) (r1, r2, err uintptr) {
|
||||||
|
entersyscall()
|
||||||
|
libcCall(unsafe.Pointer(funcPC(syscallX)), unsafe.Pointer(&fn))
|
||||||
|
exitsyscall()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
func syscallX()
|
||||||
|
|
||||||
|
//go:linkname syscall_syscall6 syscall.syscall6
|
||||||
|
//go:nosplit
|
||||||
|
//go:cgo_unsafe_args
|
||||||
|
func syscall_syscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr) {
|
||||||
|
entersyscall()
|
||||||
|
libcCall(unsafe.Pointer(funcPC(syscall6)), unsafe.Pointer(&fn))
|
||||||
|
exitsyscall()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
func syscall6()
|
||||||
|
|
||||||
|
//go:linkname syscall_syscall6X syscall.syscall6X
|
||||||
|
//go:nosplit
|
||||||
|
//go:cgo_unsafe_args
|
||||||
|
func syscall_syscall6X(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr) {
|
||||||
|
entersyscall()
|
||||||
|
libcCall(unsafe.Pointer(funcPC(syscall6X)), unsafe.Pointer(&fn))
|
||||||
|
exitsyscall()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
func syscall6X()
|
||||||
|
|
||||||
|
//go:linkname syscall_syscall10 syscall.syscall10
|
||||||
|
//go:nosplit
|
||||||
|
//go:cgo_unsafe_args
|
||||||
|
func syscall_syscall10(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10 uintptr) (r1, r2, err uintptr) {
|
||||||
|
entersyscall()
|
||||||
|
libcCall(unsafe.Pointer(funcPC(syscall10)), unsafe.Pointer(&fn))
|
||||||
|
exitsyscall()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
func syscall10()
|
||||||
|
|
||||||
|
//go:linkname syscall_syscall10X syscall.syscall10X
|
||||||
|
//go:nosplit
|
||||||
|
//go:cgo_unsafe_args
|
||||||
|
func syscall_syscall10X(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10 uintptr) (r1, r2, err uintptr) {
|
||||||
|
entersyscall()
|
||||||
|
libcCall(unsafe.Pointer(funcPC(syscall10X)), unsafe.Pointer(&fn))
|
||||||
|
exitsyscall()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
func syscall10X()
|
||||||
|
|
||||||
|
//go:linkname syscall_rawSyscall syscall.rawSyscall
|
||||||
|
//go:nosplit
|
||||||
|
//go:cgo_unsafe_args
|
||||||
|
func syscall_rawSyscall(fn, a1, a2, a3 uintptr) (r1, r2, err uintptr) {
|
||||||
|
libcCall(unsafe.Pointer(funcPC(syscall)), unsafe.Pointer(&fn))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
//go:linkname syscall_rawSyscall6 syscall.rawSyscall6
|
||||||
|
//go:nosplit
|
||||||
|
//go:cgo_unsafe_args
|
||||||
|
func syscall_rawSyscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr) {
|
||||||
|
libcCall(unsafe.Pointer(funcPC(syscall6)), unsafe.Pointer(&fn))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
//go:linkname syscall_rawSyscall6X syscall.rawSyscall6X
|
||||||
|
//go:nosplit
|
||||||
|
//go:cgo_unsafe_args
|
||||||
|
func syscall_rawSyscall6X(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2, err uintptr) {
|
||||||
|
libcCall(unsafe.Pointer(funcPC(syscall6X)), unsafe.Pointer(&fn))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
//go:linkname syscall_rawSyscall10X syscall.rawSyscall10X
|
||||||
|
//go:nosplit
|
||||||
|
//go:cgo_unsafe_args
|
||||||
|
func syscall_rawSyscall10X(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10 uintptr) (r1, r2, err uintptr) {
|
||||||
|
libcCall(unsafe.Pointer(funcPC(syscall10X)), unsafe.Pointer(&fn))
|
||||||
|
return
|
||||||
|
}
|
@ -445,3 +445,336 @@ TEXT runtime·sigaltstack_trampoline(SB),NOSPLIT,$0
|
|||||||
MOVL $0xf1, 0xf1 // crash
|
MOVL $0xf1, 0xf1 // crash
|
||||||
POPQ BP
|
POPQ BP
|
||||||
RET
|
RET
|
||||||
|
|
||||||
|
// syscall calls a function in libc on behalf of the syscall package.
|
||||||
|
// syscall takes a pointer to a struct like:
|
||||||
|
// struct {
|
||||||
|
// fn uintptr
|
||||||
|
// a1 uintptr
|
||||||
|
// a2 uintptr
|
||||||
|
// a3 uintptr
|
||||||
|
// r1 uintptr
|
||||||
|
// r2 uintptr
|
||||||
|
// err uintptr
|
||||||
|
// }
|
||||||
|
// syscall must be called on the g0 stack with the
|
||||||
|
// C calling convention (use libcCall).
|
||||||
|
//
|
||||||
|
// syscall expects a 32-bit result and tests for 32-bit -1
|
||||||
|
// to decide there was an error.
|
||||||
|
TEXT runtime·syscall(SB),NOSPLIT,$0
|
||||||
|
PUSHQ BP
|
||||||
|
MOVQ SP, BP
|
||||||
|
SUBQ $16, SP
|
||||||
|
MOVQ (0*8)(DI), CX // fn
|
||||||
|
MOVQ (2*8)(DI), SI // a2
|
||||||
|
MOVQ (3*8)(DI), DX // a3
|
||||||
|
MOVQ DI, (SP)
|
||||||
|
MOVQ (1*8)(DI), DI // a1
|
||||||
|
XORL AX, AX // vararg: say "no float args"
|
||||||
|
|
||||||
|
CALL CX
|
||||||
|
|
||||||
|
MOVQ (SP), DI
|
||||||
|
MOVQ AX, (4*8)(DI) // r1
|
||||||
|
MOVQ DX, (5*8)(DI) // r2
|
||||||
|
|
||||||
|
// Standard libc functions return -1 on error
|
||||||
|
// and set errno.
|
||||||
|
CMPL AX, $-1 // Note: high 32 bits are junk
|
||||||
|
JNE ok
|
||||||
|
|
||||||
|
// Get error code from libc.
|
||||||
|
CALL libc_errno(SB)
|
||||||
|
MOVLQSX (AX), AX
|
||||||
|
MOVQ (SP), DI
|
||||||
|
MOVQ AX, (6*8)(DI) // err
|
||||||
|
|
||||||
|
ok:
|
||||||
|
XORL AX, AX // no error (it's ignored anyway)
|
||||||
|
MOVQ BP, SP
|
||||||
|
POPQ BP
|
||||||
|
RET
|
||||||
|
|
||||||
|
// syscallX calls a function in libc on behalf of the syscall package.
|
||||||
|
// syscallX takes a pointer to a struct like:
|
||||||
|
// struct {
|
||||||
|
// fn uintptr
|
||||||
|
// a1 uintptr
|
||||||
|
// a2 uintptr
|
||||||
|
// a3 uintptr
|
||||||
|
// r1 uintptr
|
||||||
|
// r2 uintptr
|
||||||
|
// err uintptr
|
||||||
|
// }
|
||||||
|
// syscallX must be called on the g0 stack with the
|
||||||
|
// C calling convention (use libcCall).
|
||||||
|
//
|
||||||
|
// syscallX is like syscall but expects a 64-bit result
|
||||||
|
// and tests for 64-bit -1 to decide there was an error.
|
||||||
|
TEXT runtime·syscallX(SB),NOSPLIT,$0
|
||||||
|
PUSHQ BP
|
||||||
|
MOVQ SP, BP
|
||||||
|
SUBQ $16, SP
|
||||||
|
MOVQ (0*8)(DI), CX // fn
|
||||||
|
MOVQ (2*8)(DI), SI // a2
|
||||||
|
MOVQ (3*8)(DI), DX // a3
|
||||||
|
MOVQ DI, (SP)
|
||||||
|
MOVQ (1*8)(DI), DI // a1
|
||||||
|
XORL AX, AX // vararg: say "no float args"
|
||||||
|
|
||||||
|
CALL CX
|
||||||
|
|
||||||
|
MOVQ (SP), DI
|
||||||
|
MOVQ AX, (4*8)(DI) // r1
|
||||||
|
MOVQ DX, (5*8)(DI) // r2
|
||||||
|
|
||||||
|
// Standard libc functions return -1 on error
|
||||||
|
// and set errno.
|
||||||
|
CMPQ AX, $-1
|
||||||
|
JNE ok
|
||||||
|
|
||||||
|
// Get error code from libc.
|
||||||
|
CALL libc_errno(SB)
|
||||||
|
MOVLQSX (AX), AX
|
||||||
|
MOVQ (SP), DI
|
||||||
|
MOVQ AX, (6*8)(DI) // err
|
||||||
|
|
||||||
|
ok:
|
||||||
|
XORL AX, AX // no error (it's ignored anyway)
|
||||||
|
MOVQ BP, SP
|
||||||
|
POPQ BP
|
||||||
|
RET
|
||||||
|
|
||||||
|
// syscall6 calls a function in libc on behalf of the syscall package.
|
||||||
|
// syscall6 takes a pointer to a struct like:
|
||||||
|
// struct {
|
||||||
|
// fn uintptr
|
||||||
|
// a1 uintptr
|
||||||
|
// a2 uintptr
|
||||||
|
// a3 uintptr
|
||||||
|
// a4 uintptr
|
||||||
|
// a5 uintptr
|
||||||
|
// a6 uintptr
|
||||||
|
// r1 uintptr
|
||||||
|
// r2 uintptr
|
||||||
|
// err uintptr
|
||||||
|
// }
|
||||||
|
// syscall6 must be called on the g0 stack with the
|
||||||
|
// C calling convention (use libcCall).
|
||||||
|
//
|
||||||
|
// syscall6 expects a 32-bit result and tests for 32-bit -1
|
||||||
|
// to decide there was an error.
|
||||||
|
TEXT runtime·syscall6(SB),NOSPLIT,$0
|
||||||
|
PUSHQ BP
|
||||||
|
MOVQ SP, BP
|
||||||
|
SUBQ $16, SP
|
||||||
|
MOVQ (0*8)(DI), R11// fn
|
||||||
|
MOVQ (2*8)(DI), SI // a2
|
||||||
|
MOVQ (3*8)(DI), DX // a3
|
||||||
|
MOVQ (4*8)(DI), CX // a4
|
||||||
|
MOVQ (5*8)(DI), R8 // a5
|
||||||
|
MOVQ (6*8)(DI), R9 // a6
|
||||||
|
MOVQ DI, (SP)
|
||||||
|
MOVQ (1*8)(DI), DI // a1
|
||||||
|
XORL AX, AX // vararg: say "no float args"
|
||||||
|
|
||||||
|
CALL R11
|
||||||
|
|
||||||
|
MOVQ (SP), DI
|
||||||
|
MOVQ AX, (7*8)(DI) // r1
|
||||||
|
MOVQ DX, (8*8)(DI) // r2
|
||||||
|
|
||||||
|
CMPL AX, $-1
|
||||||
|
JNE ok
|
||||||
|
|
||||||
|
CALL libc_errno(SB)
|
||||||
|
MOVLQSX (AX), AX
|
||||||
|
MOVQ (SP), DI
|
||||||
|
MOVQ AX, (9*8)(DI) // err
|
||||||
|
|
||||||
|
ok:
|
||||||
|
XORL AX, AX // no error (it's ignored anyway)
|
||||||
|
MOVQ BP, SP
|
||||||
|
POPQ BP
|
||||||
|
RET
|
||||||
|
|
||||||
|
// syscall6X calls a function in libc on behalf of the syscall package.
|
||||||
|
// syscall6X takes a pointer to a struct like:
|
||||||
|
// struct {
|
||||||
|
// fn uintptr
|
||||||
|
// a1 uintptr
|
||||||
|
// a2 uintptr
|
||||||
|
// a3 uintptr
|
||||||
|
// a4 uintptr
|
||||||
|
// a5 uintptr
|
||||||
|
// a6 uintptr
|
||||||
|
// r1 uintptr
|
||||||
|
// r2 uintptr
|
||||||
|
// err uintptr
|
||||||
|
// }
|
||||||
|
// syscall6X must be called on the g0 stack with the
|
||||||
|
// C calling convention (use libcCall).
|
||||||
|
//
|
||||||
|
// syscall6X is like syscall6 but expects a 64-bit result
|
||||||
|
// and tests for 64-bit -1 to decide there was an error.
|
||||||
|
TEXT runtime·syscall6X(SB),NOSPLIT,$0
|
||||||
|
PUSHQ BP
|
||||||
|
MOVQ SP, BP
|
||||||
|
SUBQ $16, SP
|
||||||
|
MOVQ (0*8)(DI), R11// fn
|
||||||
|
MOVQ (2*8)(DI), SI // a2
|
||||||
|
MOVQ (3*8)(DI), DX // a3
|
||||||
|
MOVQ (4*8)(DI), CX // a4
|
||||||
|
MOVQ (5*8)(DI), R8 // a5
|
||||||
|
MOVQ (6*8)(DI), R9 // a6
|
||||||
|
MOVQ DI, (SP)
|
||||||
|
MOVQ (1*8)(DI), DI // a1
|
||||||
|
XORL AX, AX // vararg: say "no float args"
|
||||||
|
|
||||||
|
CALL R11
|
||||||
|
|
||||||
|
MOVQ (SP), DI
|
||||||
|
MOVQ AX, (7*8)(DI) // r1
|
||||||
|
MOVQ DX, (8*8)(DI) // r2
|
||||||
|
|
||||||
|
CMPQ AX, $-1
|
||||||
|
JNE ok
|
||||||
|
|
||||||
|
CALL libc_errno(SB)
|
||||||
|
MOVLQSX (AX), AX
|
||||||
|
MOVQ (SP), DI
|
||||||
|
MOVQ AX, (9*8)(DI) // err
|
||||||
|
|
||||||
|
ok:
|
||||||
|
XORL AX, AX // no error (it's ignored anyway)
|
||||||
|
MOVQ BP, SP
|
||||||
|
POPQ BP
|
||||||
|
RET
|
||||||
|
|
||||||
|
// syscall10 calls a function in libc on behalf of the syscall package.
|
||||||
|
// syscall10 takes a pointer to a struct like:
|
||||||
|
// struct {
|
||||||
|
// fn uintptr
|
||||||
|
// a1 uintptr
|
||||||
|
// a2 uintptr
|
||||||
|
// a3 uintptr
|
||||||
|
// a4 uintptr
|
||||||
|
// a5 uintptr
|
||||||
|
// a6 uintptr
|
||||||
|
// a7 uintptr
|
||||||
|
// a8 uintptr
|
||||||
|
// a9 uintptr
|
||||||
|
// a10 uintptr
|
||||||
|
// r1 uintptr
|
||||||
|
// r2 uintptr
|
||||||
|
// err uintptr
|
||||||
|
// }
|
||||||
|
// syscall10 must be called on the g0 stack with the
|
||||||
|
// C calling convention (use libcCall).
|
||||||
|
TEXT runtime·syscall10(SB),NOSPLIT,$0
|
||||||
|
PUSHQ BP
|
||||||
|
MOVQ SP, BP
|
||||||
|
SUBQ $48, SP
|
||||||
|
MOVQ (7*8)(DI), R10 // a7
|
||||||
|
MOVQ (8*8)(DI), R11 // a8
|
||||||
|
MOVQ (9*8)(DI), R12 // a9
|
||||||
|
MOVQ (10*8)(DI), R13 // a10
|
||||||
|
MOVQ R10, (1*8)(SP) // a7
|
||||||
|
MOVQ R11, (2*8)(SP) // a8
|
||||||
|
MOVQ R12, (3*8)(SP) // a9
|
||||||
|
MOVQ R13, (4*8)(SP) // a10
|
||||||
|
MOVQ (0*8)(DI), R11 // fn
|
||||||
|
MOVQ (2*8)(DI), SI // a2
|
||||||
|
MOVQ (3*8)(DI), DX // a3
|
||||||
|
MOVQ (4*8)(DI), CX // a4
|
||||||
|
MOVQ (5*8)(DI), R8 // a5
|
||||||
|
MOVQ (6*8)(DI), R9 // a6
|
||||||
|
MOVQ DI, (SP)
|
||||||
|
MOVQ (1*8)(DI), DI // a1
|
||||||
|
XORL AX, AX // vararg: say "no float args"
|
||||||
|
|
||||||
|
CALL R11
|
||||||
|
|
||||||
|
MOVQ (SP), DI
|
||||||
|
MOVQ AX, (11*8)(DI) // r1
|
||||||
|
MOVQ DX, (12*8)(DI) // r2
|
||||||
|
|
||||||
|
CMPL AX, $-1
|
||||||
|
JNE ok
|
||||||
|
|
||||||
|
CALL libc_errno(SB)
|
||||||
|
MOVLQSX (AX), AX
|
||||||
|
MOVQ (SP), DI
|
||||||
|
MOVQ AX, (13*8)(DI) // err
|
||||||
|
|
||||||
|
ok:
|
||||||
|
XORL AX, AX // no error (it's ignored anyway)
|
||||||
|
MOVQ BP, SP
|
||||||
|
POPQ BP
|
||||||
|
RET
|
||||||
|
|
||||||
|
// syscall10X calls a function in libc on behalf of the syscall package.
|
||||||
|
// syscall10X takes a pointer to a struct like:
|
||||||
|
// struct {
|
||||||
|
// fn uintptr
|
||||||
|
// a1 uintptr
|
||||||
|
// a2 uintptr
|
||||||
|
// a3 uintptr
|
||||||
|
// a4 uintptr
|
||||||
|
// a5 uintptr
|
||||||
|
// a6 uintptr
|
||||||
|
// a7 uintptr
|
||||||
|
// a8 uintptr
|
||||||
|
// a9 uintptr
|
||||||
|
// a10 uintptr
|
||||||
|
// r1 uintptr
|
||||||
|
// r2 uintptr
|
||||||
|
// err uintptr
|
||||||
|
// }
|
||||||
|
// syscall10X must be called on the g0 stack with the
|
||||||
|
// C calling convention (use libcCall).
|
||||||
|
//
|
||||||
|
// syscall10X is like syscall10 but expects a 64-bit result
|
||||||
|
// and tests for 64-bit -1 to decide there was an error.
|
||||||
|
TEXT runtime·syscall10X(SB),NOSPLIT,$0
|
||||||
|
PUSHQ BP
|
||||||
|
MOVQ SP, BP
|
||||||
|
SUBQ $48, SP
|
||||||
|
MOVQ (7*8)(DI), R10 // a7
|
||||||
|
MOVQ (8*8)(DI), R11 // a8
|
||||||
|
MOVQ (9*8)(DI), R12 // a9
|
||||||
|
MOVQ (10*8)(DI), R13 // a10
|
||||||
|
MOVQ R10, (1*8)(SP) // a7
|
||||||
|
MOVQ R11, (2*8)(SP) // a8
|
||||||
|
MOVQ R12, (3*8)(SP) // a9
|
||||||
|
MOVQ R13, (4*8)(SP) // a10
|
||||||
|
MOVQ (0*8)(DI), R11 // fn
|
||||||
|
MOVQ (2*8)(DI), SI // a2
|
||||||
|
MOVQ (3*8)(DI), DX // a3
|
||||||
|
MOVQ (4*8)(DI), CX // a4
|
||||||
|
MOVQ (5*8)(DI), R8 // a5
|
||||||
|
MOVQ (6*8)(DI), R9 // a6
|
||||||
|
MOVQ DI, (SP)
|
||||||
|
MOVQ (1*8)(DI), DI // a1
|
||||||
|
XORL AX, AX // vararg: say "no float args"
|
||||||
|
|
||||||
|
CALL R11
|
||||||
|
|
||||||
|
MOVQ (SP), DI
|
||||||
|
MOVQ AX, (11*8)(DI) // r1
|
||||||
|
MOVQ DX, (12*8)(DI) // r2
|
||||||
|
|
||||||
|
CMPQ AX, $-1
|
||||||
|
JNE ok
|
||||||
|
|
||||||
|
CALL libc_errno(SB)
|
||||||
|
MOVLQSX (AX), AX
|
||||||
|
MOVQ (SP), DI
|
||||||
|
MOVQ AX, (13*8)(DI) // err
|
||||||
|
|
||||||
|
ok:
|
||||||
|
XORL AX, AX // no error (it's ignored anyway)
|
||||||
|
MOVQ BP, SP
|
||||||
|
POPQ BP
|
||||||
|
RET
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// +build netbsd openbsd
|
// +build netbsd
|
||||||
|
|
||||||
// Copyright 2016 The Go Authors. All rights reserved.
|
// Copyright 2016 The Go Authors. All rights reserved.
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
@ -8,7 +8,7 @@
|
|||||||
#include "funcdata.h"
|
#include "funcdata.h"
|
||||||
|
|
||||||
//
|
//
|
||||||
// Syscall9 support for AMD64, NetBSD and OpenBSD
|
// Syscall9 support for AMD64, NetBSD
|
||||||
//
|
//
|
||||||
|
|
||||||
// func Syscall9(trap int64, a1, a2, a3, a4, a5, a6, a7, a8, a9 int64) (r1, r2, err int64);
|
// func Syscall9(trap int64, a1, a2, a3, a4, a5, a6, a7, a8, a9 int64) (r1, r2, err int64);
|
||||||
|
32
src/syscall/asm_openbsd_amd64.s
Normal file
32
src/syscall/asm_openbsd_amd64.s
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
// Copyright 2020 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.
|
||||||
|
|
||||||
|
#include "textflag.h"
|
||||||
|
|
||||||
|
//
|
||||||
|
// System call support for AMD64, OpenBSD
|
||||||
|
//
|
||||||
|
|
||||||
|
// Provide these function names via assembly so they are provided as ABI0,
|
||||||
|
// rather than ABIInternal.
|
||||||
|
|
||||||
|
// func Syscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
|
||||||
|
TEXT ·Syscall(SB),NOSPLIT,$0-56
|
||||||
|
JMP ·syscallInternal(SB)
|
||||||
|
|
||||||
|
// func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
|
||||||
|
TEXT ·Syscall6(SB),NOSPLIT,$0-80
|
||||||
|
JMP ·syscall6Internal(SB)
|
||||||
|
|
||||||
|
// func RawSyscall(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
|
||||||
|
TEXT ·RawSyscall(SB),NOSPLIT,$0-56
|
||||||
|
JMP ·rawSyscallInternal(SB)
|
||||||
|
|
||||||
|
// func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
|
||||||
|
TEXT ·RawSyscall6(SB),NOSPLIT,$0-80
|
||||||
|
JMP ·rawSyscall6Internal(SB)
|
||||||
|
|
||||||
|
// func Syscall9(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno)
|
||||||
|
TEXT ·Syscall9(SB),NOSPLIT,$0-104
|
||||||
|
JMP ·syscall9Internal(SB)
|
@ -1,4 +1,4 @@
|
|||||||
// +build netbsd freebsd openbsd dragonfly
|
// +build netbsd freebsd dragonfly
|
||||||
|
|
||||||
// Copyright 2009 The Go Authors. All rights reserved.
|
// Copyright 2009 The Go Authors. All rights reserved.
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// +build dragonfly freebsd netbsd openbsd
|
// +build dragonfly freebsd netbsd openbsd,!amd64
|
||||||
|
|
||||||
package syscall
|
package syscall
|
||||||
|
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// +build darwin openbsd,amd64
|
||||||
|
|
||||||
package syscall
|
package syscall
|
||||||
|
|
||||||
import (
|
import (
|
@ -272,6 +272,7 @@ func runtime_AfterExec()
|
|||||||
// avoids a build dependency for other platforms.
|
// avoids a build dependency for other platforms.
|
||||||
var execveLibc func(path uintptr, argv uintptr, envp uintptr) Errno
|
var execveLibc func(path uintptr, argv uintptr, envp uintptr) Errno
|
||||||
var execveDarwin func(path *byte, argv **byte, envp **byte) error
|
var execveDarwin func(path *byte, argv **byte, envp **byte) error
|
||||||
|
var execveOpenBSD func(path *byte, argv **byte, envp **byte) error
|
||||||
|
|
||||||
// Exec invokes the execve(2) system call.
|
// Exec invokes the execve(2) system call.
|
||||||
func Exec(argv0 string, argv []string, envv []string) (err error) {
|
func Exec(argv0 string, argv []string, envv []string) (err error) {
|
||||||
@ -299,6 +300,9 @@ func Exec(argv0 string, argv []string, envv []string) (err error) {
|
|||||||
} else if runtime.GOOS == "darwin" || runtime.GOOS == "ios" {
|
} else if runtime.GOOS == "darwin" || runtime.GOOS == "ios" {
|
||||||
// Similarly on Darwin.
|
// Similarly on Darwin.
|
||||||
err1 = execveDarwin(argv0p, &argvp[0], &envvp[0])
|
err1 = execveDarwin(argv0p, &argvp[0], &envvp[0])
|
||||||
|
} else if runtime.GOOS == "openbsd" && runtime.GOARCH == "amd64" {
|
||||||
|
// Similarly on OpenBSD.
|
||||||
|
err1 = execveOpenBSD(argv0p, &argvp[0], &envvp[0])
|
||||||
} else {
|
} else {
|
||||||
_, _, err1 = RawSyscall(SYS_EXECVE,
|
_, _, err1 = RawSyscall(SYS_EXECVE,
|
||||||
uintptr(unsafe.Pointer(argv0p)),
|
uintptr(unsafe.Pointer(argv0p)),
|
||||||
|
@ -283,6 +283,7 @@ netbsd_arm64)
|
|||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
||||||
;;
|
;;
|
||||||
openbsd_386)
|
openbsd_386)
|
||||||
|
GOOSARCH_in="syscall_openbsd1.go syscall_openbsd_$GOARCH.go"
|
||||||
mkerrors="$mkerrors -m32"
|
mkerrors="$mkerrors -m32"
|
||||||
mksyscall="./mksyscall.pl -l32 -openbsd"
|
mksyscall="./mksyscall.pl -l32 -openbsd"
|
||||||
mksysctl="./mksysctl_openbsd.pl"
|
mksysctl="./mksysctl_openbsd.pl"
|
||||||
@ -291,14 +292,17 @@ openbsd_386)
|
|||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
||||||
;;
|
;;
|
||||||
openbsd_amd64)
|
openbsd_amd64)
|
||||||
|
GOOSARCH_in="syscall_openbsd_libc.go syscall_openbsd_$GOARCH.go"
|
||||||
mkerrors="$mkerrors -m64"
|
mkerrors="$mkerrors -m64"
|
||||||
mksyscall="./mksyscall.pl -openbsd"
|
mksyscall="./mksyscall.pl -openbsd -libc"
|
||||||
mksysctl="./mksysctl_openbsd.pl"
|
mksysctl="./mksysctl_openbsd.pl"
|
||||||
zsysctl="zsysctl_openbsd.go"
|
zsysctl="zsysctl_openbsd.go"
|
||||||
mksysnum="curl -s 'http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_openbsd.pl"
|
mksysnum="curl -s 'http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_openbsd.pl"
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs"
|
||||||
|
mkasm="go run mkasm_openbsd.go"
|
||||||
;;
|
;;
|
||||||
openbsd_arm)
|
openbsd_arm)
|
||||||
|
GOOSARCH_in="syscall_openbsd1.go syscall_openbsd_$GOARCH.go"
|
||||||
mkerrors="$mkerrors"
|
mkerrors="$mkerrors"
|
||||||
mksyscall="./mksyscall.pl -l32 -openbsd -arm"
|
mksyscall="./mksyscall.pl -l32 -openbsd -arm"
|
||||||
mksysctl="./mksysctl_openbsd.pl"
|
mksysctl="./mksysctl_openbsd.pl"
|
||||||
@ -309,6 +313,7 @@ openbsd_arm)
|
|||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
||||||
;;
|
;;
|
||||||
openbsd_arm64)
|
openbsd_arm64)
|
||||||
|
GOOSARCH_in="syscall_openbsd1.go syscall_openbsd_$GOARCH.go"
|
||||||
mkerrors="$mkerrors -m64"
|
mkerrors="$mkerrors -m64"
|
||||||
mksyscall="./mksyscall.pl -openbsd"
|
mksyscall="./mksyscall.pl -openbsd"
|
||||||
mksysctl="./mksysctl_openbsd.pl"
|
mksysctl="./mksysctl_openbsd.pl"
|
||||||
@ -319,6 +324,7 @@ openbsd_arm64)
|
|||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
||||||
;;
|
;;
|
||||||
openbsd_mips64)
|
openbsd_mips64)
|
||||||
|
GOOSARCH_in="syscall_openbsd1.go syscall_openbsd_$GOARCH.go"
|
||||||
mkerrors="$mkerrors -m64"
|
mkerrors="$mkerrors -m64"
|
||||||
mksyscall="./mksyscall.pl -openbsd"
|
mksyscall="./mksyscall.pl -openbsd"
|
||||||
mksysctl="./mksysctl_openbsd.pl"
|
mksysctl="./mksysctl_openbsd.pl"
|
||||||
@ -327,7 +333,6 @@ openbsd_mips64)
|
|||||||
# Let the type of C char be signed to make the bare syscall
|
# Let the type of C char be signed to make the bare syscall
|
||||||
# API consistent between platforms.
|
# API consistent between platforms.
|
||||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
||||||
GOOSARCH_in=syscall_openbsd_mips64.go
|
|
||||||
;;
|
;;
|
||||||
plan9_386)
|
plan9_386)
|
||||||
mkerrors=
|
mkerrors=
|
||||||
|
64
src/syscall/mkasm.go
Normal file
64
src/syscall/mkasm.go
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
// Copyright 2018 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// +build ignore
|
||||||
|
|
||||||
|
// mkasm.go generates assembly trampolines to call library routines from Go.
|
||||||
|
// This program must be run after mksyscall.pl.
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
if len(os.Args) != 3 {
|
||||||
|
log.Fatalf("Usage: %s <goos> <arch>", os.Args[0])
|
||||||
|
}
|
||||||
|
goos, arch := os.Args[1], os.Args[2]
|
||||||
|
|
||||||
|
syscallFilename := fmt.Sprintf("syscall_%s.go", goos)
|
||||||
|
syscallArchFilename := fmt.Sprintf("syscall_%s_%s.go", goos, arch)
|
||||||
|
|
||||||
|
in1, err := os.ReadFile(syscallFilename)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("can't open syscall file: %s", err)
|
||||||
|
}
|
||||||
|
in2, err := os.ReadFile(syscallArchFilename)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("can't open syscall file: %s", err)
|
||||||
|
}
|
||||||
|
in3, err := os.ReadFile("z" + syscallArchFilename)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("can't open syscall file: %s", err)
|
||||||
|
}
|
||||||
|
in := string(in1) + string(in2) + string(in3)
|
||||||
|
|
||||||
|
trampolines := map[string]bool{}
|
||||||
|
|
||||||
|
var out bytes.Buffer
|
||||||
|
|
||||||
|
fmt.Fprintf(&out, "// go run mkasm.go %s\n", strings.Join(os.Args[1:], " "))
|
||||||
|
fmt.Fprintf(&out, "// Code generated by the command above; DO NOT EDIT.\n")
|
||||||
|
fmt.Fprintf(&out, "#include \"textflag.h\"\n")
|
||||||
|
for _, line := range strings.Split(in, "\n") {
|
||||||
|
if !strings.HasPrefix(line, "func ") || !strings.HasSuffix(line, "_trampoline()") {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
fn := line[5 : len(line)-13]
|
||||||
|
if !trampolines[fn] {
|
||||||
|
trampolines[fn] = true
|
||||||
|
fmt.Fprintf(&out, "TEXT ·%s_trampoline(SB),NOSPLIT,$0-0\n", fn)
|
||||||
|
fmt.Fprintf(&out, "\tJMP\t%s(SB)\n", fn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
err = os.WriteFile(fmt.Sprintf("zsyscall_%s_%s.s", goos, arch), out.Bytes(), 0644)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("can't write syscall file: %s", err)
|
||||||
|
}
|
||||||
|
}
|
@ -1,34 +1,35 @@
|
|||||||
// Copyright 2018 The Go Authors. All rights reserved.
|
// Copyright 2020 The Go Authors. All rights reserved.
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
// +build ignore
|
// +build ignore
|
||||||
|
|
||||||
// mkasm_darwin.go generates assembly trampolines to call libSystem routines from Go.
|
// mkasm_openbsd.go generates assembly trampolines to call libc routines from Go.
|
||||||
//This program must be run after mksyscall.pl.
|
// This program must be run after mksyscall.pl.
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
in1, err := os.ReadFile("syscall_darwin.go")
|
in1, err := ioutil.ReadFile("syscall_openbsd.go")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("can't open syscall_darwin.go: %s", err)
|
log.Fatalf("can't open syscall_openbsd.go: %s", err)
|
||||||
}
|
}
|
||||||
arch := os.Args[1]
|
arch := os.Args[1]
|
||||||
in2, err := os.ReadFile(fmt.Sprintf("syscall_darwin_%s.go", arch))
|
in2, err := ioutil.ReadFile(fmt.Sprintf("syscall_openbsd_%s.go", arch))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("can't open syscall_darwin_%s.go: %s", arch, err)
|
log.Fatalf("can't open syscall_openbsd_%s.go: %s", arch, err)
|
||||||
}
|
}
|
||||||
in3, err := os.ReadFile(fmt.Sprintf("zsyscall_darwin_%s.go", arch))
|
in3, err := ioutil.ReadFile(fmt.Sprintf("zsyscall_openbsd_%s.go", arch))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("can't open zsyscall_darwin_%s.go: %s", arch, err)
|
log.Fatalf("can't open zsyscall_openbsd_%s.go: %s", arch, err)
|
||||||
}
|
}
|
||||||
in := string(in1) + string(in2) + string(in3)
|
in := string(in1) + string(in2) + string(in3)
|
||||||
|
|
||||||
@ -36,7 +37,7 @@ func main() {
|
|||||||
|
|
||||||
var out bytes.Buffer
|
var out bytes.Buffer
|
||||||
|
|
||||||
fmt.Fprintf(&out, "// go run mkasm_darwin.go %s\n", strings.Join(os.Args[1:], " "))
|
fmt.Fprintf(&out, "// go run mkasm_openbsd.go %s\n", strings.Join(os.Args[1:], " "))
|
||||||
fmt.Fprintf(&out, "// Code generated by the command above; DO NOT EDIT.\n")
|
fmt.Fprintf(&out, "// Code generated by the command above; DO NOT EDIT.\n")
|
||||||
fmt.Fprintf(&out, "#include \"textflag.h\"\n")
|
fmt.Fprintf(&out, "#include \"textflag.h\"\n")
|
||||||
for _, line := range strings.Split(in, "\n") {
|
for _, line := range strings.Split(in, "\n") {
|
||||||
@ -50,8 +51,8 @@ func main() {
|
|||||||
fmt.Fprintf(&out, "\tJMP\t%s(SB)\n", fn)
|
fmt.Fprintf(&out, "\tJMP\t%s(SB)\n", fn)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
err = os.WriteFile(fmt.Sprintf("zsyscall_darwin_%s.s", arch), out.Bytes(), 0644)
|
err = ioutil.WriteFile(fmt.Sprintf("zsyscall_openbsd_%s.s", arch), out.Bytes(), 0644)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("can't write zsyscall_darwin_%s.s: %s", arch, err)
|
log.Fatalf("can't write zsyscall_openbsd_%s.s: %s", arch, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -30,6 +30,7 @@ my $openbsd = 0;
|
|||||||
my $netbsd = 0;
|
my $netbsd = 0;
|
||||||
my $dragonfly = 0;
|
my $dragonfly = 0;
|
||||||
my $arm = 0; # 64-bit value should use (even, odd)-pair
|
my $arm = 0; # 64-bit value should use (even, odd)-pair
|
||||||
|
my $libc = 0;
|
||||||
my $tags = ""; # build tags
|
my $tags = ""; # build tags
|
||||||
|
|
||||||
if($ARGV[0] eq "-b32") {
|
if($ARGV[0] eq "-b32") {
|
||||||
@ -45,6 +46,7 @@ if($ARGV[0] eq "-plan9") {
|
|||||||
}
|
}
|
||||||
if($ARGV[0] eq "-darwin") {
|
if($ARGV[0] eq "-darwin") {
|
||||||
$darwin = 1;
|
$darwin = 1;
|
||||||
|
$libc = 1;
|
||||||
shift;
|
shift;
|
||||||
}
|
}
|
||||||
if($ARGV[0] eq "-openbsd") {
|
if($ARGV[0] eq "-openbsd") {
|
||||||
@ -63,6 +65,10 @@ if($ARGV[0] eq "-arm") {
|
|||||||
$arm = 1;
|
$arm = 1;
|
||||||
shift;
|
shift;
|
||||||
}
|
}
|
||||||
|
if($ARGV[0] eq "-libc") {
|
||||||
|
$libc = 1;
|
||||||
|
shift;
|
||||||
|
}
|
||||||
if($ARGV[0] eq "-tags") {
|
if($ARGV[0] eq "-tags") {
|
||||||
shift;
|
shift;
|
||||||
$tags = $ARGV[0];
|
$tags = $ARGV[0];
|
||||||
@ -125,7 +131,7 @@ while(<>) {
|
|||||||
# without reading the header.
|
# without reading the header.
|
||||||
$text .= "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n";
|
$text .= "// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT\n\n";
|
||||||
|
|
||||||
if ($darwin && $func eq "ptrace1") {
|
if (($darwin || ($openbsd && $libc)) && $func eq "ptrace") {
|
||||||
# The ptrace function is called from forkAndExecInChild where stack
|
# The ptrace function is called from forkAndExecInChild where stack
|
||||||
# growth is forbidden.
|
# growth is forbidden.
|
||||||
$text .= "//go:nosplit\n"
|
$text .= "//go:nosplit\n"
|
||||||
@ -176,7 +182,9 @@ while(<>) {
|
|||||||
push @args, "uintptr(_p$n)", "uintptr(len($name))";
|
push @args, "uintptr(_p$n)", "uintptr(len($name))";
|
||||||
$n++;
|
$n++;
|
||||||
} elsif($type eq "int64" && ($openbsd || $netbsd)) {
|
} elsif($type eq "int64" && ($openbsd || $netbsd)) {
|
||||||
|
if (!$libc) {
|
||||||
push @args, "0";
|
push @args, "0";
|
||||||
|
}
|
||||||
if($_32bit eq "big-endian") {
|
if($_32bit eq "big-endian") {
|
||||||
push @args, "uintptr($name>>32)", "uintptr($name)";
|
push @args, "uintptr($name>>32)", "uintptr($name)";
|
||||||
} elsif($_32bit eq "little-endian") {
|
} elsif($_32bit eq "little-endian") {
|
||||||
@ -220,7 +228,7 @@ while(<>) {
|
|||||||
$asm = "RawSyscall";
|
$asm = "RawSyscall";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($darwin) {
|
if ($libc) {
|
||||||
# Call unexported syscall functions (which take
|
# Call unexported syscall functions (which take
|
||||||
# libc functions instead of syscall numbers).
|
# libc functions instead of syscall numbers).
|
||||||
$asm = lcfirst($asm);
|
$asm = lcfirst($asm);
|
||||||
@ -243,7 +251,7 @@ while(<>) {
|
|||||||
print STDERR "$ARGV:$.: too many arguments to system call\n";
|
print STDERR "$ARGV:$.: too many arguments to system call\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($darwin) {
|
if ($darwin || ($openbsd && $libc)) {
|
||||||
# Use extended versions for calls that generate a 64-bit result.
|
# Use extended versions for calls that generate a 64-bit result.
|
||||||
my ($name, $type) = parseparam($out[0]);
|
my ($name, $type) = parseparam($out[0]);
|
||||||
if ($type eq "int64" || ($type eq "uintptr" && $_32bit eq "")) {
|
if ($type eq "int64" || ($type eq "uintptr" && $_32bit eq "")) {
|
||||||
@ -257,13 +265,13 @@ while(<>) {
|
|||||||
$sysname = "SYS_$func";
|
$sysname = "SYS_$func";
|
||||||
$sysname =~ s/([a-z])([A-Z])/${1}_$2/g; # turn FooBar into Foo_Bar
|
$sysname =~ s/([a-z])([A-Z])/${1}_$2/g; # turn FooBar into Foo_Bar
|
||||||
$sysname =~ y/a-z/A-Z/;
|
$sysname =~ y/a-z/A-Z/;
|
||||||
if($darwin) {
|
if($libc) {
|
||||||
$sysname =~ y/A-Z/a-z/;
|
$sysname =~ y/A-Z/a-z/;
|
||||||
$sysname = substr $sysname, 4;
|
$sysname = substr $sysname, 4;
|
||||||
$funcname = "libc_$sysname";
|
$funcname = "libc_$sysname";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if($darwin) {
|
if($libc) {
|
||||||
if($funcname eq "") {
|
if($funcname eq "") {
|
||||||
$sysname = substr $sysname, 4;
|
$sysname = substr $sysname, 4;
|
||||||
$funcname = "libc_$sysname";
|
$funcname = "libc_$sysname";
|
||||||
@ -338,17 +346,21 @@ while(<>) {
|
|||||||
}
|
}
|
||||||
$text .= "\treturn\n";
|
$text .= "\treturn\n";
|
||||||
$text .= "}\n\n";
|
$text .= "}\n\n";
|
||||||
if($darwin) {
|
if($libc) {
|
||||||
if (not exists $trampolines{$funcname}) {
|
if (not exists $trampolines{$funcname}) {
|
||||||
$trampolines{$funcname} = 1;
|
$trampolines{$funcname} = 1;
|
||||||
# The assembly trampoline that jumps to the libc routine.
|
# The assembly trampoline that jumps to the libc routine.
|
||||||
$text .= "func ${funcname}_trampoline()\n";
|
$text .= "func ${funcname}_trampoline()\n";
|
||||||
# Map syscall.funcname to just plain funcname.
|
# Map syscall.funcname to just plain funcname.
|
||||||
# (The jump to this function is in the assembly trampoline, generated by mksyscallasm_darwin.go.)
|
# (The jump to this function is in the assembly trampoline, generated by mkasm_$GOOS.go.)
|
||||||
$text .= "//go:linkname $funcname $funcname\n";
|
$text .= "//go:linkname $funcname $funcname\n";
|
||||||
# Tell the linker that funcname can be found in libSystem using varname without the libc_ prefix.
|
# Tell the linker that funcname can be found in libSystem using varname without the libc_ prefix.
|
||||||
my $basename = substr $funcname, 5;
|
my $basename = substr $funcname, 5;
|
||||||
$text .= "//go:cgo_import_dynamic $funcname $basename \"/usr/lib/libSystem.B.dylib\"\n\n";
|
my $libc = "libc.so";
|
||||||
|
if ($darwin) {
|
||||||
|
$libc = "/usr/lib/libSystem.B.dylib";
|
||||||
|
}
|
||||||
|
$text .= "//go:cgo_import_dynamic $funcname $basename \"$libc\"\n\n";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -182,7 +182,6 @@ func setattrlistTimes(path string, times []Timespec) error {
|
|||||||
//sys Rename(from string, to string) (err error)
|
//sys Rename(from string, to string) (err error)
|
||||||
//sys Revoke(path string) (err error)
|
//sys Revoke(path string) (err error)
|
||||||
//sys Rmdir(path string) (err error)
|
//sys Rmdir(path string) (err error)
|
||||||
//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK
|
|
||||||
//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error)
|
//sys Select(n int, r *FdSet, w *FdSet, e *FdSet, timeout *Timeval) (err error)
|
||||||
//sysnb Setegid(egid int) (err error)
|
//sysnb Setegid(egid int) (err error)
|
||||||
//sysnb Seteuid(euid int) (err error)
|
//sysnb Seteuid(euid int) (err error)
|
||||||
@ -207,8 +206,4 @@ func setattrlistTimes(path string, times []Timespec) error {
|
|||||||
//sys write(fd int, p []byte) (n int, err error)
|
//sys write(fd int, p []byte) (n int, err error)
|
||||||
//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)
|
//sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error)
|
||||||
//sys munmap(addr uintptr, length uintptr) (err error)
|
//sys munmap(addr uintptr, length uintptr) (err error)
|
||||||
//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ
|
|
||||||
//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE
|
|
||||||
//sys utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error)
|
//sys utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error)
|
||||||
//sys getcwd(buf []byte) (n int, err error) = SYS___GETCWD
|
|
||||||
//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL
|
|
||||||
|
13
src/syscall/syscall_openbsd1.go
Normal file
13
src/syscall/syscall_openbsd1.go
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
// Copyright 2020 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.
|
||||||
|
|
||||||
|
// +build openbsd,!amd64
|
||||||
|
|
||||||
|
package syscall
|
||||||
|
|
||||||
|
//sys readlen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_READ
|
||||||
|
//sys writelen(fd int, buf *byte, nbuf int) (n int, err error) = SYS_WRITE
|
||||||
|
//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_LSEEK
|
||||||
|
//sys getcwd(buf []byte) (n int, err error) = SYS___GETCWD
|
||||||
|
//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS___SYSCTL
|
93
src/syscall/syscall_openbsd_libc.go
Normal file
93
src/syscall/syscall_openbsd_libc.go
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
// Copyright 2020 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.
|
||||||
|
|
||||||
|
// +build openbsd,amd64
|
||||||
|
|
||||||
|
package syscall
|
||||||
|
|
||||||
|
import "unsafe"
|
||||||
|
|
||||||
|
//sys directSyscall(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr, a4 uintptr, a5 uintptr) (ret uintptr, err error) = SYS_syscall
|
||||||
|
|
||||||
|
func syscallInternal(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) {
|
||||||
|
return syscall6X(funcPC(libc_syscall_trampoline), trap, a1, a2, a3, 0, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
func syscall6Internal(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) {
|
||||||
|
return syscall10X(funcPC(libc_syscall_trampoline), trap, a1, a2, a3, a4, a5, a6, 0, 0, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
func rawSyscallInternal(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) {
|
||||||
|
return rawSyscall6X(funcPC(libc_syscall_trampoline), trap, a1, a2, a3, 0, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
func rawSyscall6Internal(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) {
|
||||||
|
return rawSyscall10X(funcPC(libc_syscall_trampoline), trap, a1, a2, a3, a4, a5, a6, 0, 0, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
func syscall9Internal(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno) {
|
||||||
|
return rawSyscall10X(funcPC(libc_syscall_trampoline), trap, a1, a2, a3, a4, a5, a6, a7, a8, a9)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Implemented in the runtime package (runtime/sys_openbsd3.go)
|
||||||
|
func syscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
|
||||||
|
func syscallX(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
|
||||||
|
func syscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
|
||||||
|
func syscall6X(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
|
||||||
|
func syscall10(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10 uintptr) (r1, r2 uintptr, err Errno)
|
||||||
|
func syscall10X(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10 uintptr) (r1, r2 uintptr, err Errno)
|
||||||
|
func rawSyscall(fn, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno)
|
||||||
|
func rawSyscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
|
||||||
|
func rawSyscall6X(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno)
|
||||||
|
func rawSyscall10X(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10 uintptr) (r1, r2 uintptr, err Errno)
|
||||||
|
|
||||||
|
func syscall9(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno) {
|
||||||
|
return syscall10(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, 0)
|
||||||
|
}
|
||||||
|
func syscall9X(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno) {
|
||||||
|
return syscall10X(fn, a1, a2, a3, a4, a5, a6, a7, a8, a9, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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))
|
||||||
|
}
|
||||||
|
|
||||||
|
//sys Seek(fd int, offset int64, whence int) (newoffset int64, err error) = SYS_lseek
|
||||||
|
//sys getcwd(buf []byte) (n int, err error)
|
||||||
|
//sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error)
|
||||||
|
//sysnb fork() (pid int, err error)
|
||||||
|
//sysnb ioctl(fd int, req int, arg int) (err error)
|
||||||
|
//sysnb execve(path *byte, argv **byte, envp **byte) (err error)
|
||||||
|
//sysnb exit(res int) (err error)
|
||||||
|
//sys ptrace(request int, pid int, addr uintptr, data uintptr) (err error)
|
||||||
|
//sysnb getentropy(p []byte) (err error)
|
||||||
|
//sys fstatat(fd int, path string, stat *Stat_t, flags int) (err error)
|
||||||
|
//sys fcntlPtr(fd int, cmd int, arg unsafe.Pointer) (val int, err error) = SYS_fcntl
|
||||||
|
//sys unlinkat(fd int, path string, flags int) (err error)
|
||||||
|
//sys openat(fd int, path string, flags int, perm uint32) (fdret int, err error)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
execveOpenBSD = execve
|
||||||
|
}
|
||||||
|
|
||||||
|
func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
|
||||||
|
r0, _, e1 := syscall(funcPC(libc_read_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func writelen(fd int, buf *byte, nbuf int) (n int, err error) {
|
||||||
|
r0, _, e1 := syscall(funcPC(libc_write_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
|
||||||
|
n = int(r0)
|
||||||
|
if e1 != 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
// go run mkasm_darwin.go amd64
|
// go run mkasm.go darwin amd64
|
||||||
// Code generated by the command above; DO NOT EDIT.
|
// Code generated by the command above; DO NOT EDIT.
|
||||||
#include "textflag.h"
|
#include "textflag.h"
|
||||||
TEXT ·libc_getfsstat_trampoline(SB),NOSPLIT,$0-0
|
TEXT ·libc_getfsstat_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// go run mkasm_darwin.go arm64
|
// go run mkasm.go darwin arm64
|
||||||
// Code generated by the command above; DO NOT EDIT.
|
// Code generated by the command above; DO NOT EDIT.
|
||||||
#include "textflag.h"
|
#include "textflag.h"
|
||||||
TEXT ·libc_getfsstat_trampoline(SB),NOSPLIT,$0-0
|
TEXT ·libc_getfsstat_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
File diff suppressed because it is too large
Load Diff
233
src/syscall/zsyscall_openbsd_amd64.s
Normal file
233
src/syscall/zsyscall_openbsd_amd64.s
Normal file
@ -0,0 +1,233 @@
|
|||||||
|
// go run mkasm.go openbsd amd64
|
||||||
|
// Code generated by the command above; DO NOT EDIT.
|
||||||
|
#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_fcntl_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_fcntl(SB)
|
||||||
|
TEXT ·libc_pipe2_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_pipe2(SB)
|
||||||
|
TEXT ·libc_accept4_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_accept4(SB)
|
||||||
|
TEXT ·libc_getdents_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_getdents(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_close_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_close(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_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_fchown_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_fchown(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_fstat_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_fstat(SB)
|
||||||
|
TEXT ·libc_fstatfs_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_fstatfs(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_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_kill_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_kill(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_listen_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_listen(SB)
|
||||||
|
TEXT ·libc_lstat_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_lstat(SB)
|
||||||
|
TEXT ·libc_mkdir_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_mkdir(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_nanosleep_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_nanosleep(SB)
|
||||||
|
TEXT ·libc_open_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_open(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_rename_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_rename(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_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_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_stat_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_stat(SB)
|
||||||
|
TEXT ·libc_statfs_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_statfs(SB)
|
||||||
|
TEXT ·libc_symlink_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_symlink(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_unlink_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_unlink(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_utimensat_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_utimensat(SB)
|
||||||
|
TEXT ·libc_syscall_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_syscall(SB)
|
||||||
|
TEXT ·libc_lseek_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_lseek(SB)
|
||||||
|
TEXT ·libc_getcwd_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_getcwd(SB)
|
||||||
|
TEXT ·libc_sysctl_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_sysctl(SB)
|
||||||
|
TEXT ·libc_fork_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_fork(SB)
|
||||||
|
TEXT ·libc_ioctl_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_ioctl(SB)
|
||||||
|
TEXT ·libc_execve_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_execve(SB)
|
||||||
|
TEXT ·libc_exit_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_exit(SB)
|
||||||
|
TEXT ·libc_ptrace_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_ptrace(SB)
|
||||||
|
TEXT ·libc_getentropy_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_getentropy(SB)
|
||||||
|
TEXT ·libc_fstatat_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_fstatat(SB)
|
||||||
|
TEXT ·libc_unlinkat_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_unlinkat(SB)
|
||||||
|
TEXT ·libc_openat_trampoline(SB),NOSPLIT,$0-0
|
||||||
|
JMP libc_openat(SB)
|
Loading…
Reference in New Issue
Block a user