UPDATE: lang/go > 1.22.1
This commit is contained in:
parent
fe0c7238a7
commit
3b2a1bcc45
76 changed files with 1152 additions and 7534 deletions
|
@ -1,13 +1,13 @@
|
|||
ONLY_FOR_ARCHS = ${GO_ARCHS}
|
||||
|
||||
BIN_BOOTSTRAP_GOARCHS = 386 amd64 arm arm64
|
||||
BIN_BOOTSTRAP_GOARCHS = 386 amd64 arm arm64 mips64 riscv64
|
||||
BIN_BOOTSTRAP_VERSION = 1.20.4
|
||||
|
||||
COMMENT = Go programming language
|
||||
|
||||
# increment _MODGO_SYSTEM_VERSION in go.port.mk after updating to a new
|
||||
# version, to trigger updates of go-compiled ports
|
||||
VERSION = 1.21.1
|
||||
VERSION = 1.22.1
|
||||
DISTNAME = go${VERSION}.src
|
||||
PKGNAME = go-${VERSION}
|
||||
PKGSPEC = ${FULLPKGNAME:S/go-/go-=/}
|
||||
|
@ -53,6 +53,10 @@ GOARCH = arm
|
|||
GOARCH = arm64
|
||||
.elif ${MACHINE_ARCH} == "i386"
|
||||
GOARCH = 386
|
||||
.elif ${MACHINE_ARCH} == "mips64"
|
||||
GOARCH = mips64
|
||||
.elif ${MACHINE_ARCH} == "riscv64"
|
||||
GOARCH = riscv64
|
||||
.endif
|
||||
|
||||
MAKE_ENV += TMPDIR="${WRKBUILD}"
|
||||
|
|
|
@ -2,9 +2,13 @@ SHA256 (go-openbsd-386-bootstrap-1.20.4.tar.gz) = TnujxhLC6RBpp+Yq6G7jkz7dM+znj0
|
|||
SHA256 (go-openbsd-amd64-bootstrap-1.20.4.tar.gz) = 8WlSsDZ/ZLtSJ6I8s0FKX6CChU8ULsxaA1PEQZw2nWQ=
|
||||
SHA256 (go-openbsd-arm-bootstrap-1.20.4.tar.gz) = MFK9DdbKJSqyYFLANhKbD6KWT1x+wX8+w9NTJ21o1/4=
|
||||
SHA256 (go-openbsd-arm64-bootstrap-1.20.4.tar.gz) = G3sZhx63D+QLEgbwU1+d3ECiVJjVrFD5RqD2/qutXmI=
|
||||
SHA256 (go1.21.1.src.tar.gz) = v6Nr916aHpy725q8+dFwfkeb06B4gKiuNWTK7lcRy5k=
|
||||
SHA256 (go-openbsd-mips64-bootstrap-1.20.4.tar.gz) = CaZYJ+pIQp+lp721Ox45Y8uqkbsygcfyDFxQsqabPIs=
|
||||
SHA256 (go-openbsd-riscv64-bootstrap-1.20.4.tar.gz) = lQv/8KPWi8U3yLG+k3xVDNRVzxa5rmPIIpJUDrwVo0o=
|
||||
SHA256 (go1.22.1.src.tar.gz) = ecm5HX8QlRWiX8Ps2q0SXWfmvbVPbU2YWA9GeZyuoyE=
|
||||
SIZE (go-openbsd-386-bootstrap-1.20.4.tar.gz) = 100681343
|
||||
SIZE (go-openbsd-amd64-bootstrap-1.20.4.tar.gz) = 107075675
|
||||
SIZE (go-openbsd-arm-bootstrap-1.20.4.tar.gz) = 104680775
|
||||
SIZE (go-openbsd-arm64-bootstrap-1.20.4.tar.gz) = 102706601
|
||||
SIZE (go1.21.1.src.tar.gz) = 26974429
|
||||
SIZE (go-openbsd-mips64-bootstrap-1.20.4.tar.gz) = 105352848
|
||||
SIZE (go-openbsd-riscv64-bootstrap-1.20.4.tar.gz) = 106167229
|
||||
SIZE (go1.22.1.src.tar.gz) = 27548577
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
# increment after a go compiler update to trigger updates of
|
||||
# compiled go packages (see arch-defines.mk)
|
||||
_MODGO_SYSTEM_VERSION = 4
|
||||
_MODGO_SYSTEM_VERSION = 11
|
||||
|
||||
# not using the normal ports mechanism, but setting USE_NOBTCFI for
|
||||
# documentation in sqlports
|
||||
USE_NOBTCFI = Yes
|
||||
|
||||
ONLY_FOR_ARCHS ?= ${GO_ARCHS}
|
||||
|
||||
|
@ -58,6 +62,11 @@ MODGO_LIST_CMD = ${MODGO_CMD} list ${MODGO_FLAGS}
|
|||
MODGO_TEST_CMD = ${MODGO_CMD} test ${MODGO_FLAGS} ${MODGO_TEST_FLAGS}
|
||||
MODGO_BINDIR ?= bin
|
||||
|
||||
.if empty(DEBUG)
|
||||
# by default omit symbol table, debug information and DWARF symbol table
|
||||
MODGO_LDFLAGS += -s -w
|
||||
.endif
|
||||
|
||||
.if ! empty(MODGO_LDFLAGS)
|
||||
MODGO_BUILD_CMD += -ldflags="${MODGO_LDFLAGS}"
|
||||
MODGO_LIST_CMD += -ldflags="${MODGO_LDFLAGS}"
|
||||
|
@ -111,10 +120,7 @@ CATEGORIES += lang/go
|
|||
MODGO_BUILD_TARGET = ${MODGO_BUILD_CMD} ${ALL_TARGET}
|
||||
MODGO_FLAGS += -v -buildvcs=false -p=${MAKE_JOBS}
|
||||
|
||||
.if empty(DEBUG)
|
||||
# by default omit symbol table, debug information and DWARF symbol table
|
||||
MODGO_LDFLAGS += -s -w
|
||||
.else
|
||||
.if ! empty(DEBUG)
|
||||
MODGO_FLAGS += -x
|
||||
.endif
|
||||
|
||||
|
|
|
@ -1,15 +0,0 @@
|
|||
Index: src/cmd/asm/internal/asm/endtoend_test.go
|
||||
--- src/cmd/asm/internal/asm/endtoend_test.go.orig
|
||||
+++ src/cmd/asm/internal/asm/endtoend_test.go
|
||||
@@ -68,6 +68,11 @@ Diff:
|
||||
continue
|
||||
}
|
||||
|
||||
+ // Ignore GLOBL.
|
||||
+ if strings.HasPrefix(line, "GLOBL ") {
|
||||
+ continue
|
||||
+ }
|
||||
+
|
||||
// The general form of a test input line is:
|
||||
// // comment
|
||||
// INST args [// printed form] [// hex encoding]
|
|
@ -1,24 +0,0 @@
|
|||
Index: src/cmd/asm/internal/asm/testdata/riscv64.s
|
||||
--- src/cmd/asm/internal/asm/testdata/riscv64.s.orig
|
||||
+++ src/cmd/asm/internal/asm/testdata/riscv64.s
|
||||
@@ -354,6 +354,14 @@ start:
|
||||
MOVD F0, 4(X5) // 27b20200
|
||||
MOVD F0, F1 // d3000022
|
||||
|
||||
+ // TLS load with local-exec (LUI + ADDIW + ADD of TP + load)
|
||||
+ MOV tls(SB), X5 // b70f00009b8f0f00b38f4f0083b20f00
|
||||
+ MOVB tls(SB), X5 // b70f00009b8f0f00b38f4f0083820f00
|
||||
+
|
||||
+ // TLS store with local-exec (LUI + ADDIW + ADD of TP + store)
|
||||
+ MOV X5, tls(SB) // b70f00009b8f0f00b38f4f0023b05f00
|
||||
+ MOVB X5, tls(SB) // b70f00009b8f0f00b38f4f0023805f00
|
||||
+
|
||||
// NOT pseudo-instruction
|
||||
NOT X5 // 93c2f2ff
|
||||
NOT X5, X6 // 13c3f2ff
|
||||
@@ -407,3 +415,5 @@ start:
|
||||
FLTD F0, F1, X5 // d39200a2
|
||||
FLED F0, F1, X5 // d38200a2
|
||||
FEQD F0, F1, X5 // d3a200a2
|
||||
+
|
||||
+GLOBL tls(SB), TLSBSS, $8
|
|
@ -1,29 +1,23 @@
|
|||
Index: src/cmd/dist/build.go
|
||||
--- src/cmd/dist/build.go.orig
|
||||
+++ src/cmd/dist/build.go
|
||||
@@ -577,8 +577,7 @@ func mustLinkExternal(goos, goarch string, cgoEnabled
|
||||
if cgoEnabled {
|
||||
switch goarch {
|
||||
case "loong64",
|
||||
- "mips", "mipsle", "mips64", "mips64le",
|
||||
- "riscv64":
|
||||
+ "mips", "mipsle", "mips64", "mips64le":
|
||||
// Internally linking cgo is incomplete on some architectures.
|
||||
// https://golang.org/issue/14449
|
||||
return true
|
||||
@@ -1732,6 +1731,7 @@ var cgoEnabled = map[string]bool{
|
||||
@@ -1729,7 +1729,7 @@ var cgoEnabled = map[string]bool{
|
||||
"openbsd/arm64": true,
|
||||
"openbsd/mips64": true,
|
||||
"openbsd/ppc64": false,
|
||||
- "openbsd/riscv64": false,
|
||||
+ "openbsd/riscv64": true,
|
||||
"plan9/386": false,
|
||||
"plan9/amd64": false,
|
||||
"plan9/arm": false,
|
||||
@@ -1749,7 +1749,6 @@ var cgoEnabled = map[string]bool{
|
||||
@@ -1745,9 +1745,7 @@ var cgoEnabled = map[string]bool{
|
||||
// get filtered out of cgoEnabled for 'dist list'.
|
||||
// See go.dev/issue/56679.
|
||||
var broken = map[string]bool{
|
||||
"linux/sparc64": true, // An incomplete port. See CL 132155.
|
||||
"openbsd/ppc64": true, // An incomplete port: go.dev/issue/56001.
|
||||
- "linux/sparc64": true, // An incomplete port. See CL 132155.
|
||||
- "openbsd/mips64": true, // Broken: go.dev/issue/58110.
|
||||
- "openbsd/riscv64": true, // An incomplete port: go.dev/issue/55999.
|
||||
+ "linux/sparc64": true, // An incomplete port. See CL 132155.
|
||||
}
|
||||
|
||||
// List of platforms which are first class ports. See go.dev/issue/38874.
|
||||
|
|
12
lang/go/patches/patch-src_cmd_dist_test_go
Normal file
12
lang/go/patches/patch-src_cmd_dist_test_go
Normal file
|
@ -0,0 +1,12 @@
|
|||
Index: src/cmd/dist/test.go
|
||||
--- src/cmd/dist/test.go.orig
|
||||
+++ src/cmd/dist/test.go
|
||||
@@ -1554,7 +1554,7 @@ func raceDetectorSupported(goos, goarch string) bool {
|
||||
return goarch == "amd64" || goarch == "ppc64le" || goarch == "arm64" || goarch == "s390x"
|
||||
case "darwin":
|
||||
return goarch == "amd64" || goarch == "arm64"
|
||||
- case "freebsd", "netbsd", "openbsd", "windows":
|
||||
+ case "freebsd", "netbsd", "windows":
|
||||
return goarch == "amd64"
|
||||
default:
|
||||
return false
|
|
@ -1,32 +0,0 @@
|
|||
Index: src/cmd/internal/obj/riscv/cpu.go
|
||||
--- src/cmd/internal/obj/riscv/cpu.go.orig
|
||||
+++ src/cmd/internal/obj/riscv/cpu.go
|
||||
@@ -619,13 +619,25 @@ var unaryDst = map[obj.As]bool{
|
||||
|
||||
// Instruction encoding masks.
|
||||
const (
|
||||
- // JTypeImmMask is a mask including only the immediate portion of
|
||||
- // J-type instructions.
|
||||
- JTypeImmMask = 0xfffff000
|
||||
+ // BTypeImmMask is a mask including only the immediate portion of
|
||||
+ // B-type instructions.
|
||||
+ BTypeImmMask = 0xfe000f80
|
||||
|
||||
+ // CBTypeImmMask is a mask including only the immediate portion of
|
||||
+ // CB-type instructions.
|
||||
+ CBTypeImmMask = 0x1c7c
|
||||
+
|
||||
+ // CJTypeImmMask is a mask including only the immediate portion of
|
||||
+ // CJ-type instructions.
|
||||
+ CJTypeImmMask = 0x1f7c
|
||||
+
|
||||
// ITypeImmMask is a mask including only the immediate portion of
|
||||
// I-type instructions.
|
||||
ITypeImmMask = 0xfff00000
|
||||
+
|
||||
+ // JTypeImmMask is a mask including only the immediate portion of
|
||||
+ // J-type instructions.
|
||||
+ JTypeImmMask = 0xfffff000
|
||||
|
||||
// STypeImmMask is a mask including only the immediate portion of
|
||||
// S-type instructions.
|
|
@ -1,204 +0,0 @@
|
|||
Index: src/cmd/internal/obj/riscv/obj.go
|
||||
--- src/cmd/internal/obj/riscv/obj.go.orig
|
||||
+++ src/cmd/internal/obj/riscv/obj.go
|
||||
@@ -1272,6 +1272,11 @@ func encodeSF(ins *instruction) uint32 {
|
||||
return encodeS(ins.as, regI(ins.rd), regF(ins.rs1), uint32(ins.imm))
|
||||
}
|
||||
|
||||
+// encodeBImmediate encodes an immediate for a B-type RISC-V instruction.
|
||||
+func encodeBImmediate(imm uint32) uint32 {
|
||||
+ return (imm>>12)<<31 | ((imm>>5)&0x3f)<<25 | ((imm>>1)&0xf)<<8 | ((imm>>11)&0x1)<<7
|
||||
+}
|
||||
+
|
||||
// encodeB encodes a B-type RISC-V instruction.
|
||||
func encodeB(ins *instruction) uint32 {
|
||||
imm := immI(ins.as, ins.imm, 13)
|
||||
@@ -1281,7 +1286,7 @@ func encodeB(ins *instruction) uint32 {
|
||||
if enc == nil {
|
||||
panic("encodeB: could not encode instruction")
|
||||
}
|
||||
- return (imm>>12)<<31 | ((imm>>5)&0x3f)<<25 | rs2<<20 | rs1<<15 | enc.funct3<<12 | ((imm>>1)&0xf)<<8 | ((imm>>11)&0x1)<<7 | enc.opcode
|
||||
+ return encodeBImmediate(imm) | rs2<<20 | rs1<<15 | enc.funct3<<12 | enc.opcode
|
||||
}
|
||||
|
||||
// encodeU encodes a U-type RISC-V instruction.
|
||||
@@ -1324,16 +1329,67 @@ func encodeRawIns(ins *instruction) uint32 {
|
||||
return uint32(ins.imm)
|
||||
}
|
||||
|
||||
-func EncodeJImmediate(imm int64) (int64, error) {
|
||||
- if !immIFits(imm, 21) {
|
||||
- return 0, fmt.Errorf("immediate %#x does not fit in 21 bits", imm)
|
||||
+func extractAndShift(imm int64, bit, pos int) int64 {
|
||||
+ return ((imm >> (bit - 1)) & 1) << (pos - 1)
|
||||
+}
|
||||
+
|
||||
+func EncodeBImmediate(imm int64) (int64, error) {
|
||||
+ if !immIFits(imm, 13) {
|
||||
+ return 0, fmt.Errorf("immediate %#x does not fit in 13 bits", imm)
|
||||
}
|
||||
if imm&1 != 0 {
|
||||
return 0, fmt.Errorf("immediate %#x is not a multiple of two", imm)
|
||||
}
|
||||
- return int64(encodeJImmediate(uint32(imm))), nil
|
||||
+ return int64(encodeBImmediate(uint32(imm))), nil
|
||||
}
|
||||
|
||||
+func EncodeCBImmediate(imm int64) (int64, error) {
|
||||
+ if !immIFits(imm, 9) {
|
||||
+ return 0, fmt.Errorf("immediate %#x does not fit in 9 bits", imm)
|
||||
+ }
|
||||
+ if imm&1 != 0 {
|
||||
+ return 0, fmt.Errorf("immediate %#x is not a multiple of two", imm)
|
||||
+ }
|
||||
+ imm = imm >> 1
|
||||
+
|
||||
+ // Bit order - [8|4:3|7:6|2:1|5]
|
||||
+ bits := extractAndShift(imm, 8, 8)
|
||||
+ bits |= extractAndShift(imm, 4, 7)
|
||||
+ bits |= extractAndShift(imm, 3, 6)
|
||||
+ bits |= extractAndShift(imm, 7, 5)
|
||||
+ bits |= extractAndShift(imm, 6, 4)
|
||||
+ bits |= extractAndShift(imm, 2, 3)
|
||||
+ bits |= extractAndShift(imm, 1, 2)
|
||||
+ bits |= extractAndShift(imm, 5, 1)
|
||||
+
|
||||
+ return (bits>>5)<<10 | (bits&0x1f)<<2, nil
|
||||
+}
|
||||
+
|
||||
+func EncodeCJImmediate(imm int64) (int64, error) {
|
||||
+ if !immIFits(imm, 12) {
|
||||
+ return 0, fmt.Errorf("immediate %#x does not fit in 12 bits", imm)
|
||||
+ }
|
||||
+ if imm&1 != 0 {
|
||||
+ return 0, fmt.Errorf("immediate %#x is not a multiple of two", imm)
|
||||
+ }
|
||||
+ imm = imm >> 1
|
||||
+
|
||||
+ // Bit order - [11|4|9:8|10|6|7|3:1|5]
|
||||
+ bits := extractAndShift(imm, 11, 11)
|
||||
+ bits |= extractAndShift(imm, 4, 10)
|
||||
+ bits |= extractAndShift(imm, 9, 9)
|
||||
+ bits |= extractAndShift(imm, 8, 8)
|
||||
+ bits |= extractAndShift(imm, 10, 7)
|
||||
+ bits |= extractAndShift(imm, 6, 6)
|
||||
+ bits |= extractAndShift(imm, 7, 5)
|
||||
+ bits |= extractAndShift(imm, 3, 4)
|
||||
+ bits |= extractAndShift(imm, 2, 3)
|
||||
+ bits |= extractAndShift(imm, 1, 2)
|
||||
+ bits |= extractAndShift(imm, 5, 1)
|
||||
+
|
||||
+ return bits << 2, nil
|
||||
+}
|
||||
+
|
||||
func EncodeIImmediate(imm int64) (int64, error) {
|
||||
if !immIFits(imm, 12) {
|
||||
return 0, fmt.Errorf("immediate %#x does not fit in 12 bits", imm)
|
||||
@@ -1341,6 +1397,16 @@ func EncodeIImmediate(imm int64) (int64, error) {
|
||||
return imm << 20, nil
|
||||
}
|
||||
|
||||
+func EncodeJImmediate(imm int64) (int64, error) {
|
||||
+ if !immIFits(imm, 21) {
|
||||
+ return 0, fmt.Errorf("immediate %#x does not fit in 21 bits", imm)
|
||||
+ }
|
||||
+ if imm&1 != 0 {
|
||||
+ return 0, fmt.Errorf("immediate %#x is not a multiple of two", imm)
|
||||
+ }
|
||||
+ return int64(encodeJImmediate(uint32(imm))), nil
|
||||
+}
|
||||
+
|
||||
func EncodeSImmediate(imm int64) (int64, error) {
|
||||
if !immIFits(imm, 12) {
|
||||
return 0, fmt.Errorf("immediate %#x does not fit in 12 bits", imm)
|
||||
@@ -1827,6 +1893,53 @@ func instructionsForStore(p *obj.Prog, as obj.As, rd i
|
||||
return []*instruction{insLUI, insADD, ins}
|
||||
}
|
||||
|
||||
+func instructionsForTLS(p *obj.Prog, ins *instruction) []*instruction {
|
||||
+ insAddTP := &instruction{as: AADD, rd: REG_TMP, rs1: REG_TMP, rs2: REG_TP}
|
||||
+
|
||||
+ var inss []*instruction
|
||||
+ if p.Ctxt.Flag_shared {
|
||||
+ // TLS initial-exec mode - load TLS offset from GOT, add the thread pointer
|
||||
+ // register, then load from or store to the resulting memory location.
|
||||
+ insAUIPC := &instruction{as: AAUIPC, rd: REG_TMP}
|
||||
+ insLoadTLSOffset := &instruction{as: ALD, rd: REG_TMP, rs1: REG_TMP}
|
||||
+ inss = []*instruction{insAUIPC, insLoadTLSOffset, insAddTP, ins}
|
||||
+ } else {
|
||||
+ // TLS local-exec mode - load upper TLS offset, add the lower TLS offset,
|
||||
+ // add the thread pointer register, then load from or store to the resulting
|
||||
+ // memory location. Note that this differs from the suggested three
|
||||
+ // instruction sequence, as the Go linker does not currently have an
|
||||
+ // easy way to handle relocation across 12 bytes of machine code.
|
||||
+ insLUI := &instruction{as: ALUI, rd: REG_TMP}
|
||||
+ insADDIW := &instruction{as: AADDIW, rd: REG_TMP, rs1: REG_TMP}
|
||||
+ inss = []*instruction{insLUI, insADDIW, insAddTP, ins}
|
||||
+ }
|
||||
+ return inss
|
||||
+}
|
||||
+
|
||||
+func instructionsForTLSLoad(p *obj.Prog) []*instruction {
|
||||
+ if p.From.Sym.Type != objabi.STLSBSS {
|
||||
+ p.Ctxt.Diag("%v: %v is not a TLS symbol", p, p.From.Sym)
|
||||
+ return nil
|
||||
+ }
|
||||
+
|
||||
+ ins := instructionForProg(p)
|
||||
+ ins.as, ins.rs1, ins.rs2, ins.imm = movToLoad(p.As), REG_TMP, obj.REG_NONE, 0
|
||||
+
|
||||
+ return instructionsForTLS(p, ins)
|
||||
+}
|
||||
+
|
||||
+func instructionsForTLSStore(p *obj.Prog) []*instruction {
|
||||
+ if p.To.Sym.Type != objabi.STLSBSS {
|
||||
+ p.Ctxt.Diag("%v: %v is not a TLS symbol", p, p.To.Sym)
|
||||
+ return nil
|
||||
+ }
|
||||
+
|
||||
+ ins := instructionForProg(p)
|
||||
+ ins.as, ins.rd, ins.rs1, ins.rs2, ins.imm = movToStore(p.As), REG_TMP, uint32(p.From.Reg), obj.REG_NONE, 0
|
||||
+
|
||||
+ return instructionsForTLS(p, ins)
|
||||
+}
|
||||
+
|
||||
// instructionsForMOV returns the machine instructions for an *obj.Prog that
|
||||
// uses a MOV pseudo-instruction.
|
||||
func instructionsForMOV(p *obj.Prog) []*instruction {
|
||||
@@ -1939,6 +2052,10 @@ func instructionsForMOV(p *obj.Prog) []*instruction {
|
||||
inss = instructionsForLoad(p, movToLoad(p.As), addrToReg(p.From))
|
||||
|
||||
case obj.NAME_EXTERN, obj.NAME_STATIC:
|
||||
+ if p.From.Sym.Type == objabi.STLSBSS {
|
||||
+ return instructionsForTLSLoad(p)
|
||||
+ }
|
||||
+
|
||||
// Note that the values for $off_hi and $off_lo are currently
|
||||
// zero and will be assigned during relocation.
|
||||
//
|
||||
@@ -1966,6 +2083,10 @@ func instructionsForMOV(p *obj.Prog) []*instruction {
|
||||
inss = instructionsForStore(p, movToStore(p.As), addrToReg(p.To))
|
||||
|
||||
case obj.NAME_EXTERN, obj.NAME_STATIC:
|
||||
+ if p.To.Sym.Type == objabi.STLSBSS {
|
||||
+ return instructionsForTLSStore(p)
|
||||
+ }
|
||||
+
|
||||
// Note that the values for $off_hi and $off_lo are currently
|
||||
// zero and will be assigned during relocation.
|
||||
//
|
||||
@@ -2244,10 +2365,10 @@ func assemble(ctxt *obj.Link, cursym *obj.LSym, newpro
|
||||
break
|
||||
}
|
||||
if addr.Sym.Type == objabi.STLSBSS {
|
||||
- if rt == objabi.R_RISCV_PCREL_ITYPE {
|
||||
- rt = objabi.R_RISCV_TLS_IE_ITYPE
|
||||
- } else if rt == objabi.R_RISCV_PCREL_STYPE {
|
||||
- rt = objabi.R_RISCV_TLS_IE_STYPE
|
||||
+ if ctxt.Flag_shared {
|
||||
+ rt = objabi.R_RISCV_TLS_IE
|
||||
+ } else {
|
||||
+ rt = objabi.R_RISCV_TLS_LE
|
||||
}
|
||||
}
|
||||
|
|
@ -1,57 +1,7 @@
|
|||
Index: src/cmd/internal/objabi/reloctype.go
|
||||
--- src/cmd/internal/objabi/reloctype.go.orig
|
||||
+++ src/cmd/internal/objabi/reloctype.go
|
||||
@@ -277,14 +277,43 @@ const (
|
||||
// AUIPC + S-type instruction pair.
|
||||
R_RISCV_PCREL_STYPE
|
||||
|
||||
- // R_RISCV_TLS_IE_ITYPE resolves a 32-bit TLS initial-exec TOC offset
|
||||
- // address using an AUIPC + I-type instruction pair.
|
||||
- R_RISCV_TLS_IE_ITYPE
|
||||
+ // R_RISCV_TLS_IE resolves a 32-bit TLS initial-exec address using an
|
||||
+ // AUIPC + I-type instruction pair.
|
||||
+ R_RISCV_TLS_IE
|
||||
|
||||
- // R_RISCV_TLS_IE_STYPE resolves a 32-bit TLS initial-exec TOC offset
|
||||
- // address using an AUIPC + S-type instruction pair.
|
||||
- R_RISCV_TLS_IE_STYPE
|
||||
+ // R_RISCV_TLS_LE_ITYPE resolves a 32-bit TLS local-exec address using an
|
||||
+ // LUI + I-type instruction sequence.
|
||||
+ R_RISCV_TLS_LE
|
||||
|
||||
+ // R_RISCV_GOT_HI20 resolves the high 20 bits of a 32-bit PC-relative GOT
|
||||
+ // address.
|
||||
+ R_RISCV_GOT_HI20
|
||||
+
|
||||
+ // R_RISCV_PCREL_32 resolves a 32-bit PC-relative address to an absolute
|
||||
+ // value.
|
||||
+ R_RISCV_PCREL_32
|
||||
+
|
||||
+ // R_RISCV_PCREL_HI20 resolves the high 20 bits of a 32-bit PC-relative
|
||||
+ // address.
|
||||
+ R_RISCV_PCREL_HI20
|
||||
+
|
||||
+ // R_RISCV_PCREL_LO12_I resolves the low 12 bits of a 32-bit PC-relative
|
||||
+ // address using an I-type instruction.
|
||||
+ R_RISCV_PCREL_LO12_I
|
||||
+
|
||||
+ // R_RISCV_PCREL_LO12_S resolves the low 12 bits of a 32-bit PC-relative
|
||||
+ // address using an S-type instruction.
|
||||
+ R_RISCV_PCREL_LO12_S
|
||||
+
|
||||
+ // R_RISCV_BRANCH resolves a 12-bit PC-relative branch offset.
|
||||
+ R_RISCV_BRANCH
|
||||
+
|
||||
+ // R_RISCV_RVC_BRANCH resolves an 8-bit PC-relative branch offset.
|
||||
+ R_RISCV_RVC_BRANCH
|
||||
+
|
||||
+ // R_RISCV_RVC_JUMP resolves an 11-bit PC-relative jump offset.
|
||||
+ R_RISCV_RVC_JUMP
|
||||
+
|
||||
// R_PCRELDBL relocates s390x 2-byte aligned PC-relative addresses.
|
||||
// TODO(mundaym): remove once variants can be serialized - see issue 14218.
|
||||
R_PCRELDBL
|
||||
@@ -323,9 +352,24 @@ const (
|
||||
@@ -357,9 +357,24 @@ const (
|
||||
// R_ADDRMIPSU (only used on mips/mips64) resolves to the sign-adjusted "upper" 16
|
||||
// bits (bit 16-31) of an external address, by encoding it into the instruction.
|
||||
R_ADDRMIPSU
|
||||
|
@ -66,12 +16,12 @@ Index: src/cmd/internal/objabi/reloctype.go
|
|||
+ // R_MIPS_GPREL_LO16 resolves to the lower 16 bits of a GP relative address.
|
||||
+ R_MIPS_GPREL_LO16
|
||||
+
|
||||
+ // R_MIPS_CALL16 resolves to the lower 16 bits of a PLT entry address, for a
|
||||
+ // call made via the GOT.
|
||||
+ // R_MIPS_CALL16 resolves to a 16 bit offset into the GOT, which contains the
|
||||
+ // the address for a PLT entry.
|
||||
+ R_MIPS_CALL16
|
||||
+
|
||||
+ // R_MIPS_JALR marks a JALR instruction of an external call, which may be
|
||||
+ // optimized by the linker.
|
||||
+ // optimized by the external linker.
|
||||
+ R_MIPS_JALR
|
||||
|
||||
// R_ADDRCUOFF resolves to a pointer-sized offset from the start of the
|
||||
|
|
|
@ -1,65 +1,31 @@
|
|||
Index: src/cmd/internal/objabi/reloctype_string.go
|
||||
--- src/cmd/internal/objabi/reloctype_string.go.orig
|
||||
+++ src/cmd/internal/objabi/reloctype_string.go
|
||||
@@ -71,29 +71,41 @@ func _() {
|
||||
_ = x[R_RISCV_CALL_TRAMP-61]
|
||||
_ = x[R_RISCV_PCREL_ITYPE-62]
|
||||
_ = x[R_RISCV_PCREL_STYPE-63]
|
||||
- _ = x[R_RISCV_TLS_IE_ITYPE-64]
|
||||
- _ = x[R_RISCV_TLS_IE_STYPE-65]
|
||||
- _ = x[R_PCRELDBL-66]
|
||||
- _ = x[R_ADDRLOONG64-67]
|
||||
- _ = x[R_ADDRLOONG64U-68]
|
||||
- _ = x[R_ADDRLOONG64TLS-69]
|
||||
- _ = x[R_ADDRLOONG64TLSU-70]
|
||||
- _ = x[R_CALLLOONG64-71]
|
||||
- _ = x[R_LOONG64_TLS_IE_PCREL_HI-72]
|
||||
- _ = x[R_LOONG64_TLS_IE_LO-73]
|
||||
- _ = x[R_JMPLOONG64-74]
|
||||
- _ = x[R_ADDRMIPSU-75]
|
||||
- _ = x[R_ADDRMIPSTLS-76]
|
||||
- _ = x[R_ADDRCUOFF-77]
|
||||
- _ = x[R_WASMIMPORT-78]
|
||||
- _ = x[R_XCOFFREF-79]
|
||||
- _ = x[R_PEIMAGEOFF-80]
|
||||
- _ = x[R_INITORDER-81]
|
||||
+ _ = x[R_RISCV_TLS_IE-64]
|
||||
+ _ = x[R_RISCV_TLS_LE-65]
|
||||
+ _ = x[R_RISCV_GOT_HI20-66]
|
||||
+ _ = x[R_RISCV_PCREL_32-67]
|
||||
+ _ = x[R_RISCV_PCREL_HI20-68]
|
||||
+ _ = x[R_RISCV_PCREL_LO12_I-69]
|
||||
+ _ = x[R_RISCV_PCREL_LO12_S-70]
|
||||
+ _ = x[R_RISCV_BRANCH-71]
|
||||
+ _ = x[R_RISCV_RVC_BRANCH-72]
|
||||
+ _ = x[R_RISCV_RVC_JUMP-73]
|
||||
+ _ = x[R_PCRELDBL-74]
|
||||
+ _ = x[R_ADDRLOONG64-75]
|
||||
+ _ = x[R_ADDRLOONG64U-76]
|
||||
+ _ = x[R_ADDRLOONG64TLS-77]
|
||||
+ _ = x[R_ADDRLOONG64TLSU-78]
|
||||
+ _ = x[R_CALLLOONG64-79]
|
||||
+ _ = x[R_LOONG64_TLS_IE_PCREL_HI-80]
|
||||
+ _ = x[R_LOONG64_TLS_IE_LO-81]
|
||||
+ _ = x[R_JMPLOONG64-82]
|
||||
+ _ = x[R_ADDRMIPSU-83]
|
||||
+ _ = x[R_ADDRMIPSTLS-84]
|
||||
+ _ = x[R_MIPS_GPREL_HI16-85]
|
||||
+ _ = x[R_MIPS_GPREL_LO16-86]
|
||||
+ _ = x[R_MIPS_CALL16-87]
|
||||
+ _ = x[R_MIPS_JALR-88]
|
||||
+ _ = x[R_ADDRCUOFF-89]
|
||||
+ _ = x[R_WASMIMPORT-90]
|
||||
+ _ = x[R_XCOFFREF-91]
|
||||
+ _ = x[R_PEIMAGEOFF-92]
|
||||
+ _ = x[R_INITORDER-93]
|
||||
@@ -94,16 +94,20 @@ func _() {
|
||||
_ = x[R_JMPLOONG64-84]
|
||||
_ = x[R_ADDRMIPSU-85]
|
||||
_ = x[R_ADDRMIPSTLS-86]
|
||||
- _ = x[R_ADDRCUOFF-87]
|
||||
- _ = x[R_WASMIMPORT-88]
|
||||
- _ = x[R_XCOFFREF-89]
|
||||
- _ = x[R_PEIMAGEOFF-90]
|
||||
- _ = x[R_INITORDER-91]
|
||||
+ _ = x[R_MIPS_GPREL_HI16-87]
|
||||
+ _ = x[R_MIPS_GPREL_LO16-88]
|
||||
+ _ = x[R_MIPS_CALL16-89]
|
||||
+ _ = x[R_MIPS_JALR-90]
|
||||
+ _ = x[R_ADDRCUOFF-91]
|
||||
+ _ = x[R_WASMIMPORT-92]
|
||||
+ _ = x[R_XCOFFREF-93]
|
||||
+ _ = x[R_PEIMAGEOFF-94]
|
||||
+ _ = x[R_INITORDER-95]
|
||||
}
|
||||
|
||||
-const _RelocType_name = "R_ADDRR_ADDRPOWERR_ADDRARM64R_ADDRMIPSR_ADDROFFR_SIZER_CALLR_CALLARMR_CALLARM64R_CALLINDR_CALLPOWERR_CALLMIPSR_CONSTR_PCRELR_TLS_LER_TLS_IER_GOTOFFR_PLT0R_PLT1R_PLT2R_USEFIELDR_USETYPER_USEIFACER_USEIFACEMETHODR_USEGENERICIFACEMETHODR_METHODOFFR_KEEPR_POWER_TOCR_GOTPCRELR_JMPMIPSR_DWARFSECREFR_DWARFFILEREFR_ARM64_TLS_LER_ARM64_TLS_IER_ARM64_GOTPCRELR_ARM64_GOTR_ARM64_PCRELR_ARM64_PCREL_LDST8R_ARM64_PCREL_LDST16R_ARM64_PCREL_LDST32R_ARM64_PCREL_LDST64R_ARM64_LDST8R_ARM64_LDST16R_ARM64_LDST32R_ARM64_LDST64R_ARM64_LDST128R_POWER_TLS_LER_POWER_TLS_IER_POWER_TLSR_POWER_TLS_IE_PCREL34R_POWER_TLS_LE_TPREL34R_ADDRPOWER_DSR_ADDRPOWER_GOTR_ADDRPOWER_GOT_PCREL34R_ADDRPOWER_PCRELR_ADDRPOWER_TOCRELR_ADDRPOWER_TOCREL_DSR_ADDRPOWER_D34R_ADDRPOWER_PCREL34R_RISCV_CALLR_RISCV_CALL_TRAMPR_RISCV_PCREL_ITYPER_RISCV_PCREL_STYPER_RISCV_TLS_IE_ITYPER_RISCV_TLS_IE_STYPER_PCRELDBLR_ADDRLOONG64R_ADDRLOONG64UR_ADDRLOONG64TLSR_ADDRLOONG64TLSUR_CALLLOONG64R_LOONG64_TLS_IE_PCREL_HIR_LOONG64_TLS_IE_LOR_JMPLOONG64R_ADDRMIPSUR_ADDRMIPSTLSR_ADDRCUOFFR_WASMIMPORTR_XCOFFREFR_PEIMAGEOFFR_INITORDER"
|
||||
+const _RelocType_name = "R_ADDRR_ADDRPOWERR_ADDRARM64R_ADDRMIPSR_ADDROFFR_SIZER_CALLR_CALLARMR_CALLARM64R_CALLINDR_CALLPOWERR_CALLMIPSR_CONSTR_PCRELR_TLS_LER_TLS_IER_GOTOFFR_PLT0R_PLT1R_PLT2R_USEFIELDR_USETYPER_USEIFACER_USEIFACEMETHODR_USEGENERICIFACEMETHODR_METHODOFFR_KEEPR_POWER_TOCR_GOTPCRELR_JMPMIPSR_DWARFSECREFR_DWARFFILEREFR_ARM64_TLS_LER_ARM64_TLS_IER_ARM64_GOTPCRELR_ARM64_GOTR_ARM64_PCRELR_ARM64_PCREL_LDST8R_ARM64_PCREL_LDST16R_ARM64_PCREL_LDST32R_ARM64_PCREL_LDST64R_ARM64_LDST8R_ARM64_LDST16R_ARM64_LDST32R_ARM64_LDST64R_ARM64_LDST128R_POWER_TLS_LER_POWER_TLS_IER_POWER_TLSR_POWER_TLS_IE_PCREL34R_POWER_TLS_LE_TPREL34R_ADDRPOWER_DSR_ADDRPOWER_GOTR_ADDRPOWER_GOT_PCREL34R_ADDRPOWER_PCRELR_ADDRPOWER_TOCRELR_ADDRPOWER_TOCREL_DSR_ADDRPOWER_D34R_ADDRPOWER_PCREL34R_RISCV_CALLR_RISCV_CALL_TRAMPR_RISCV_PCREL_ITYPER_RISCV_PCREL_STYPER_RISCV_TLS_IER_RISCV_TLS_LER_RISCV_GOT_HI20R_RISCV_PCREL_32R_RISCV_PCREL_HI20R_RISCV_PCREL_LO12_IR_RISCV_PCREL_LO12_SR_RISCV_BRANCHR_RISCV_RVC_BRANCHR_RISCV_RVC_JUMPR_PCRELDBLR_ADDRLOONG64R_ADDRLOONG64UR_ADDRLOONG64TLSR_ADDRLOONG64TLSUR_CALLLOONG64R_LOONG64_TLS_IE_PCREL_HIR_LOONG64_TLS_IE_LOR_JMPLOONG64R_ADDRMIPSUR_ADDRMIPSTLSR_MIPS_GPREL_HI16R_MIPS_GPREL_LO16R_MIPS_CALL16R_MIPS_JALRR_ADDRCUOFFR_WASMIMPORTR_XCOFFREFR_PEIMAGEOFFR_INITORDER"
|
||||
-const _RelocType_name = "R_ADDRR_ADDRPOWERR_ADDRARM64R_ADDRMIPSR_ADDROFFR_SIZER_CALLR_CALLARMR_CALLARM64R_CALLINDR_CALLPOWERR_CALLMIPSR_CONSTR_PCRELR_TLS_LER_TLS_IER_GOTOFFR_PLT0R_PLT1R_PLT2R_USEFIELDR_USETYPER_USEIFACER_USEIFACEMETHODR_USENAMEDMETHODR_METHODOFFR_KEEPR_POWER_TOCR_GOTPCRELR_JMPMIPSR_DWARFSECREFR_DWARFFILEREFR_ARM64_TLS_LER_ARM64_TLS_IER_ARM64_GOTPCRELR_ARM64_GOTR_ARM64_PCRELR_ARM64_PCREL_LDST8R_ARM64_PCREL_LDST16R_ARM64_PCREL_LDST32R_ARM64_PCREL_LDST64R_ARM64_LDST8R_ARM64_LDST16R_ARM64_LDST32R_ARM64_LDST64R_ARM64_LDST128R_POWER_TLS_LER_POWER_TLS_IER_POWER_TLSR_POWER_TLS_IE_PCREL34R_POWER_TLS_LE_TPREL34R_ADDRPOWER_DSR_ADDRPOWER_GOTR_ADDRPOWER_GOT_PCREL34R_ADDRPOWER_PCRELR_ADDRPOWER_TOCRELR_ADDRPOWER_TOCREL_DSR_ADDRPOWER_D34R_ADDRPOWER_PCREL34R_RISCV_JALR_RISCV_JAL_TRAMPR_RISCV_CALLR_RISCV_PCREL_ITYPER_RISCV_PCREL_STYPER_RISCV_TLS_IER_RISCV_TLS_LER_RISCV_GOT_HI20R_RISCV_PCREL_HI20R_RISCV_PCREL_LO12_IR_RISCV_PCREL_LO12_SR_RISCV_BRANCHR_RISCV_RVC_BRANCHR_RISCV_RVC_JUMPR_PCRELDBLR_ADDRLOONG64R_ADDRLOONG64UR_ADDRLOONG64TLSR_ADDRLOONG64TLSUR_CALLLOONG64R_LOONG64_TLS_IE_PCREL_HIR_LOONG64_TLS_IE_LOR_LOONG64_GOT_HIR_LOONG64_GOT_LOR_JMPLOONG64R_ADDRMIPSUR_ADDRMIPSTLSR_ADDRCUOFFR_WASMIMPORTR_XCOFFREFR_PEIMAGEOFFR_INITORDER"
|
||||
+const _RelocType_name = "R_ADDRR_ADDRPOWERR_ADDRARM64R_ADDRMIPSR_ADDROFFR_SIZER_CALLR_CALLARMR_CALLARM64R_CALLINDR_CALLPOWERR_CALLMIPSR_CONSTR_PCRELR_TLS_LER_TLS_IER_GOTOFFR_PLT0R_PLT1R_PLT2R_USEFIELDR_USETYPER_USEIFACER_USEIFACEMETHODR_USENAMEDMETHODR_METHODOFFR_KEEPR_POWER_TOCR_GOTPCRELR_JMPMIPSR_DWARFSECREFR_DWARFFILEREFR_ARM64_TLS_LER_ARM64_TLS_IER_ARM64_GOTPCRELR_ARM64_GOTR_ARM64_PCRELR_ARM64_PCREL_LDST8R_ARM64_PCREL_LDST16R_ARM64_PCREL_LDST32R_ARM64_PCREL_LDST64R_ARM64_LDST8R_ARM64_LDST16R_ARM64_LDST32R_ARM64_LDST64R_ARM64_LDST128R_POWER_TLS_LER_POWER_TLS_IER_POWER_TLSR_POWER_TLS_IE_PCREL34R_POWER_TLS_LE_TPREL34R_ADDRPOWER_DSR_ADDRPOWER_GOTR_ADDRPOWER_GOT_PCREL34R_ADDRPOWER_PCRELR_ADDRPOWER_TOCRELR_ADDRPOWER_TOCREL_DSR_ADDRPOWER_D34R_ADDRPOWER_PCREL34R_RISCV_JALR_RISCV_JAL_TRAMPR_RISCV_CALLR_RISCV_PCREL_ITYPER_RISCV_PCREL_STYPER_RISCV_TLS_IER_RISCV_TLS_LER_RISCV_GOT_HI20R_RISCV_PCREL_HI20R_RISCV_PCREL_LO12_IR_RISCV_PCREL_LO12_SR_RISCV_BRANCHR_RISCV_RVC_BRANCHR_RISCV_RVC_JUMPR_PCRELDBLR_ADDRLOONG64R_ADDRLOONG64UR_ADDRLOONG64TLSR_ADDRLOONG64TLSUR_CALLLOONG64R_LOONG64_TLS_IE_PCREL_HIR_LOONG64_TLS_IE_LOR_LOONG64_GOT_HIR_LOONG64_GOT_LOR_JMPLOONG64R_ADDRMIPSUR_ADDRMIPSTLSR_MIPS_GPREL_HI16R_MIPS_GPREL_LO16R_MIPS_CALL16R_MIPS_JALRR_ADDRCUOFFR_WASMIMPORTR_XCOFFREFR_PEIMAGEOFFR_INITORDER"
|
||||
|
||||
-var _RelocType_index = [...]uint16{0, 6, 17, 28, 38, 47, 53, 59, 68, 79, 88, 99, 109, 116, 123, 131, 139, 147, 153, 159, 165, 175, 184, 194, 210, 233, 244, 250, 261, 271, 280, 293, 307, 321, 335, 351, 362, 375, 394, 414, 434, 454, 467, 481, 495, 509, 524, 538, 552, 563, 585, 607, 621, 636, 659, 676, 694, 715, 730, 749, 761, 779, 798, 817, 837, 857, 867, 880, 894, 910, 927, 940, 965, 984, 996, 1007, 1020, 1031, 1043, 1053, 1065, 1076}
|
||||
+var _RelocType_index = [...]uint16{0, 6, 17, 28, 38, 47, 53, 59, 68, 79, 88, 99, 109, 116, 123, 131, 139, 147, 153, 159, 165, 175, 184, 194, 210, 233, 244, 250, 261, 271, 280, 293, 307, 321, 335, 351, 362, 375, 394, 414, 434, 454, 467, 481, 495, 509, 524, 538, 552, 563, 585, 607, 621, 636, 659, 676, 694, 715, 730, 749, 761, 779, 798, 817, 831, 845, 861, 877, 895, 915, 935, 949, 967, 983, 993, 1006, 1020, 1036, 1053, 1066, 1091, 1110, 1122, 1133, 1146, 1163, 1180, 1193, 1204, 1215, 1227, 1237, 1249, 1260}
|
||||
-var _RelocType_index = [...]uint16{0, 6, 17, 28, 38, 47, 53, 59, 68, 79, 88, 99, 109, 116, 123, 131, 139, 147, 153, 159, 165, 175, 184, 194, 210, 226, 237, 243, 254, 264, 273, 286, 300, 314, 328, 344, 355, 368, 387, 407, 427, 447, 460, 474, 488, 502, 517, 531, 545, 556, 578, 600, 614, 629, 652, 669, 687, 708, 723, 742, 753, 770, 782, 801, 820, 834, 848, 864, 882, 902, 922, 936, 954, 970, 980, 993, 1007, 1023, 1040, 1053, 1078, 1097, 1113, 1129, 1141, 1152, 1165, 1176, 1188, 1198, 1210, 1221}
|
||||
+var _RelocType_index = [...]uint16{0, 6, 17, 28, 38, 47, 53, 59, 68, 79, 88, 99, 109, 116, 123, 131, 139, 147, 153, 159, 165, 175, 184, 194, 210, 226, 237, 243, 254, 264, 273, 286, 300, 314, 328, 344, 355, 368, 387, 407, 427, 447, 460, 474, 488, 502, 517, 531, 545, 556, 578, 600, 614, 629, 652, 669, 687, 708, 723, 742, 753, 770, 782, 801, 820, 834, 848, 864, 882, 902, 922, 936, 954, 970, 980, 993, 1007, 1023, 1040, 1053, 1078, 1097, 1113, 1129, 1141, 1152, 1165, 1182, 1199, 1212, 1223, 1234, 1246, 1256, 1268, 1279}
|
||||
|
||||
func (i RelocType) String() string {
|
||||
i -= 1
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
Index: src/cmd/link/internal/amd64/asm.go
|
||||
--- src/cmd/link/internal/amd64/asm.go.orig
|
||||
+++ src/cmd/link/internal/amd64/asm.go
|
||||
@@ -554,7 +554,7 @@ func archrelocvariant(*ld.Target, *loader.Loader, load
|
||||
return -1
|
||||
}
|
||||
|
||||
-func elfsetupplt(ctxt *ld.Link, plt, got *loader.SymbolBuilder, dynamic loader.Sym) {
|
||||
+func elfsetupplt(ctxt *ld.Link, ldr *loader.Loader, plt, got *loader.SymbolBuilder, dynamic loader.Sym) {
|
||||
if plt.Size() == 0 {
|
||||
// pushq got+8(IP)
|
||||
plt.AddUint8(0xff)
|
|
@ -1,12 +0,0 @@
|
|||
Index: src/cmd/link/internal/arm64/asm.go
|
||||
--- src/cmd/link/internal/arm64/asm.go.orig
|
||||
+++ src/cmd/link/internal/arm64/asm.go
|
||||
@@ -1061,7 +1061,7 @@ func extreloc(target *ld.Target, ldr *loader.Loader, r
|
||||
return loader.ExtReloc{}, false
|
||||
}
|
||||
|
||||
-func elfsetupplt(ctxt *ld.Link, plt, gotplt *loader.SymbolBuilder, dynamic loader.Sym) {
|
||||
+func elfsetupplt(ctxt *ld.Link, ldr *loader.Loader, plt, gotplt *loader.SymbolBuilder, dynamic loader.Sym) {
|
||||
if plt.Size() == 0 {
|
||||
// stp x16, x30, [sp, #-16]!
|
||||
// identifying information
|
|
@ -1,12 +0,0 @@
|
|||
Index: src/cmd/link/internal/arm/asm.go
|
||||
--- src/cmd/link/internal/arm/asm.go.orig
|
||||
+++ src/cmd/link/internal/arm/asm.go
|
||||
@@ -304,7 +304,7 @@ func elfreloc1(ctxt *ld.Link, out *ld.OutBuf, ldr *loa
|
||||
return true
|
||||
}
|
||||
|
||||
-func elfsetupplt(ctxt *ld.Link, plt, got *loader.SymbolBuilder, dynamic loader.Sym) {
|
||||
+func elfsetupplt(ctxt *ld.Link, ldr *loader.Loader, plt, got *loader.SymbolBuilder, dynamic loader.Sym) {
|
||||
if plt.Size() == 0 {
|
||||
// str lr, [sp, #-4]!
|
||||
plt.AddUint32(ctxt.Arch, 0xe52de004)
|
|
@ -1,40 +1,31 @@
|
|||
Index: src/cmd/link/internal/ld/data.go
|
||||
--- src/cmd/link/internal/ld/data.go.orig
|
||||
+++ src/cmd/link/internal/ld/data.go
|
||||
@@ -273,6 +273,7 @@ func (st *relocSymState) relocsym(s loader.Sym, P []by
|
||||
@@ -76,13 +76,16 @@ func maxSizeTrampolines(ctxt *Link, ldr *loader.Loader
|
||||
return 0
|
||||
}
|
||||
|
||||
var o int64
|
||||
+ var archReloc bool
|
||||
switch rt {
|
||||
default:
|
||||
switch siz {
|
||||
@@ -287,6 +288,7 @@ func (st *relocSymState) relocsym(s loader.Sym, P []by
|
||||
case 8:
|
||||
o = int64(target.Arch.ByteOrder.Uint64(P[off:]))
|
||||
- n := uint64(0)
|
||||
+ n, sdn := uint64(0), uint64(0)
|
||||
relocs := ldr.Relocs(s)
|
||||
for ri := 0; ri < relocs.Count(); ri++ {
|
||||
r := relocs.At(ri)
|
||||
if r.Type().IsDirectCallOrJump() {
|
||||
n++
|
||||
}
|
||||
+ archReloc = true
|
||||
out, n, ok := thearch.Archreloc(target, ldr, syms, r, s, o)
|
||||
if target.IsExternal() {
|
||||
nExtReloc += n
|
||||
@@ -580,17 +582,17 @@ func (st *relocSymState) relocsym(s loader.Sym, P []by
|
||||
case 1:
|
||||
P[off] = byte(int8(o))
|
||||
case 2:
|
||||
- if o != int64(int16(o)) {
|
||||
+ if !archReloc && o != int64(int16(o)) {
|
||||
st.err.Errorf(s, "relocation address for %s is too big: %#x", ldr.SymName(rs), o)
|
||||
+ if rs := r.Sym(); rs != 0 && ldr.SymType(rs) == sym.SDYNIMPORT {
|
||||
+ sdn++
|
||||
+ }
|
||||
}
|
||||
target.Arch.ByteOrder.PutUint16(P[off:], uint16(o))
|
||||
case 4:
|
||||
if rt == objabi.R_PCREL || rt == objabi.R_CALL {
|
||||
- if o != int64(int32(o)) {
|
||||
+ if !archReloc && o != int64(int32(o)) {
|
||||
st.err.Errorf(s, "pc-relative relocation address for %s is too big: %#x", ldr.SymName(rs), o)
|
||||
}
|
||||
} else {
|
||||
- if o != int64(int32(o)) && o != int64(uint32(o)) {
|
||||
+ if !archReloc && o != int64(int32(o)) && o != int64(uint32(o)) {
|
||||
st.err.Errorf(s, "non-pc-relative relocation address for %s is too big: %#x", ldr.SymName(rs), uint64(o))
|
||||
|
||||
switch {
|
||||
@@ -94,6 +97,9 @@ func maxSizeTrampolines(ctxt *Link, ldr *loader.Loader
|
||||
return n * 16 // Trampolines in PPC64 are 4 instructions.
|
||||
case ctxt.IsRISCV64():
|
||||
return n * 8 // Trampolines in RISCV64 are 2 instructions.
|
||||
+ }
|
||||
+ if ctxt.IsMIPS64() {
|
||||
+ return sdn * 28 // Trampolines (SDYNIMPORT) for MIPS64 are 7 instructions.
|
||||
}
|
||||
panic("unreachable")
|
||||
}
|
||||
|
|
|
@ -1,25 +1,7 @@
|
|||
Index: src/cmd/link/internal/ld/elf.go
|
||||
--- src/cmd/link/internal/ld/elf.go.orig
|
||||
+++ src/cmd/link/internal/ld/elf.go
|
||||
@@ -208,7 +208,7 @@ type ELFArch struct {
|
||||
|
||||
Reloc1 func(*Link, *OutBuf, *loader.Loader, loader.Sym, loader.ExtReloc, int, int64) bool
|
||||
RelocSize uint32 // size of an ELF relocation record, must match Reloc1.
|
||||
- SetupPLT func(ctxt *Link, plt, gotplt *loader.SymbolBuilder, dynamic loader.Sym)
|
||||
+ SetupPLT func(ctxt *Link, ldr *loader.Loader, plt, gotplt *loader.SymbolBuilder, dynamic loader.Sym)
|
||||
|
||||
// DynamicReadOnly can be set to true to make the .dynamic
|
||||
// section read-only. By default it is writable.
|
||||
@@ -1583,7 +1583,7 @@ func (ctxt *Link) doelf() {
|
||||
// S390X uses .got instead of .got.plt
|
||||
gotplt = got
|
||||
}
|
||||
- thearch.ELF.SetupPLT(ctxt, plt, gotplt, dynamic.Sym())
|
||||
+ thearch.ELF.SetupPLT(ctxt, ctxt.loader, plt, gotplt, dynamic.Sym())
|
||||
|
||||
/*
|
||||
* .dynamic table
|
||||
@@ -2145,6 +2145,10 @@ func asmbElf(ctxt *Link) {
|
||||
@@ -2167,6 +2167,10 @@ func asmbElf(ctxt *Link) {
|
||||
ph.Type = elf.PT_GNU_STACK
|
||||
ph.Flags = elf.PF_W + elf.PF_R
|
||||
ph.Align = uint64(ctxt.Arch.RegSize)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
Index: src/cmd/link/internal/ld/lib.go
|
||||
--- src/cmd/link/internal/ld/lib.go.orig
|
||||
+++ src/cmd/link/internal/ld/lib.go
|
||||
@@ -1424,6 +1424,7 @@ func (ctxt *Link) hostlink() {
|
||||
@@ -1441,6 +1441,7 @@ func (ctxt *Link) hostlink() {
|
||||
}
|
||||
case objabi.Hopenbsd:
|
||||
argv = append(argv, "-Wl,-nopie")
|
||||
|
|
|
@ -1,25 +0,0 @@
|
|||
Index: src/cmd/link/internal/ld/pcln.go
|
||||
--- src/cmd/link/internal/ld/pcln.go.orig
|
||||
+++ src/cmd/link/internal/ld/pcln.go
|
||||
@@ -15,6 +15,7 @@ import (
|
||||
"internal/buildcfg"
|
||||
"os"
|
||||
"path/filepath"
|
||||
+ "strings"
|
||||
)
|
||||
|
||||
const funcSize = 11 * 4 // funcSize is the size of the _func object in runtime/runtime2.go
|
||||
@@ -99,6 +100,13 @@ func makePclntab(ctxt *Link, container loader.Bitmap)
|
||||
}
|
||||
|
||||
func emitPcln(ctxt *Link, s loader.Sym, container loader.Bitmap) bool {
|
||||
+ if ctxt.Target.IsRISCV64() {
|
||||
+ symName := ctxt.loader.SymName(s)
|
||||
+ if symName == "" || strings.HasPrefix(symName, ".L") {
|
||||
+ return false
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
// We want to generate func table entries only for the "lowest
|
||||
// level" symbols, not containers of subsymbols.
|
||||
return !container.Has(s)
|
|
@ -1,68 +0,0 @@
|
|||
Index: src/cmd/link/internal/loadelf/ldelf.go
|
||||
--- src/cmd/link/internal/loadelf/ldelf.go.orig
|
||||
+++ src/cmd/link/internal/loadelf/ldelf.go
|
||||
@@ -584,27 +584,41 @@ func Load(l *loader.Loader, arch *sys.Arch, localSymVe
|
||||
}
|
||||
sect = &elfobj.sect[elfsym.shndx]
|
||||
if sect.sym == 0 {
|
||||
- if strings.HasPrefix(elfsym.name, ".Linfo_string") { // clang does this
|
||||
- continue
|
||||
- }
|
||||
+ if elfsym.type_ == 0 {
|
||||
+ if strings.HasPrefix(sect.name, ".debug_") && elfsym.name == "" {
|
||||
+ // clang on arm and riscv64.
|
||||
+ // This reportedly happens with clang 3.7 on ARM.
|
||||
+ // See issue 13139.
|
||||
+ continue
|
||||
+ }
|
||||
+ if strings.HasPrefix(elfsym.name, ".Ldebug_") || elfsym.name == ".L0 " {
|
||||
+ // gcc on riscv64.
|
||||
+ continue
|
||||
+ }
|
||||
+ if elfsym.name == ".Lline_table_start0" {
|
||||
+ // clang on riscv64.
|
||||
+ continue
|
||||
+ }
|
||||
|
||||
- if elfsym.name == "" && elfsym.type_ == 0 && sect.name == ".debug_str" {
|
||||
- // This reportedly happens with clang 3.7 on ARM.
|
||||
- // See issue 13139.
|
||||
- continue
|
||||
+ if strings.HasPrefix(elfsym.name, "$d") && sect.name == ".debug_frame" {
|
||||
+ // "$d" is a marker, not a real symbol.
|
||||
+ // This happens with gcc on ARM64.
|
||||
+ // See https://sourceware.org/bugzilla/show_bug.cgi?id=21809
|
||||
+ continue
|
||||
+ }
|
||||
}
|
||||
|
||||
- if strings.HasPrefix(elfsym.name, "$d") && elfsym.type_ == 0 && sect.name == ".debug_frame" {
|
||||
- // "$d" is a marker, not a real symbol.
|
||||
- // This happens with gcc on ARM64.
|
||||
- // See https://sourceware.org/bugzilla/show_bug.cgi?id=21809
|
||||
+ if strings.HasPrefix(elfsym.name, ".Linfo_string") {
|
||||
+ // clang does this
|
||||
continue
|
||||
}
|
||||
|
||||
- if strings.HasPrefix(elfsym.name, ".LASF") { // gcc on s390x does this
|
||||
+ if strings.HasPrefix(elfsym.name, ".LASF") || strings.HasPrefix(elfsym.name, ".LLST") {
|
||||
+ // gcc on s390x and riscv64 does this.
|
||||
continue
|
||||
}
|
||||
- return errorf("%v: sym#%d (%s): ignoring symbol in section %d (type %d)", elfsym.sym, i, elfsym.name, elfsym.shndx, elfsym.type_)
|
||||
+
|
||||
+ return errorf("%v: sym#%d (%q): ignoring symbol in section %d (%q) (type %d)", elfsym.sym, i, elfsym.name, elfsym.shndx, sect.name, elfsym.type_)
|
||||
}
|
||||
|
||||
s := elfsym.sym
|
||||
@@ -1004,7 +1018,8 @@ func relSize(arch *sys.Arch, pn string, elftype uint32
|
||||
MIPS64 | uint32(elf.R_MIPS_CALL16)<<16,
|
||||
MIPS64 | uint32(elf.R_MIPS_GPREL32)<<16,
|
||||
MIPS64 | uint32(elf.R_MIPS_64)<<16,
|
||||
- MIPS64 | uint32(elf.R_MIPS_GOT_DISP)<<16:
|
||||
+ MIPS64 | uint32(elf.R_MIPS_GOT_DISP)<<16,
|
||||
+ MIPS64 | uint32(elf.R_MIPS_PC32)<<16:
|
||||
return 4, 4, nil
|
||||
|
||||
case LOONG64 | uint32(elf.R_LARCH_SOP_PUSH_PCREL)<<16,
|
|
@ -1,12 +0,0 @@
|
|||
Index: src/cmd/link/internal/loong64/asm.go
|
||||
--- src/cmd/link/internal/loong64/asm.go.orig
|
||||
+++ src/cmd/link/internal/loong64/asm.go
|
||||
@@ -83,7 +83,7 @@ func elfreloc1(ctxt *ld.Link, out *ld.OutBuf, ldr *loa
|
||||
return true
|
||||
}
|
||||
|
||||
-func elfsetupplt(ctxt *ld.Link, plt, gotplt *loader.SymbolBuilder, dynamic loader.Sym) {
|
||||
+func elfsetupplt(ctxt *ld.Link, ldr *loader.Loader, plt, gotplt *loader.SymbolBuilder, dynamic loader.Sym) {
|
||||
return
|
||||
}
|
||||
|
|
@ -9,7 +9,7 @@ Index: src/cmd/link/internal/mips64/asm.go
|
|||
)
|
||||
|
||||
var (
|
||||
@@ -135,56 +136,71 @@ func elfreloc1(ctxt *ld.Link, out *ld.OutBuf, ldr *loa
|
||||
@@ -135,50 +136,65 @@ func elfreloc1(ctxt *ld.Link, out *ld.OutBuf, ldr *loa
|
||||
|
||||
// mips64 ELF relocation (endian neutral)
|
||||
// offset uint64
|
||||
|
@ -89,14 +89,7 @@ Index: src/cmd/link/internal/mips64/asm.go
|
|||
out.Write64(uint64(addend))
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
-func elfsetupplt(ctxt *ld.Link, plt, gotplt *loader.SymbolBuilder, dynamic loader.Sym) {
|
||||
+func elfsetupplt(ctxt *ld.Link, ldr *loader.Loader, plt, gotplt *loader.SymbolBuilder, dynamic loader.Sym) {
|
||||
if plt.Size() != 0 {
|
||||
return
|
||||
}
|
||||
@@ -275,6 +291,97 @@ func machoreloc1(*sys.Arch, *ld.OutBuf, *loader.Loader
|
||||
@@ -275,6 +291,88 @@ func machoreloc1(*sys.Arch, *ld.OutBuf, *loader.Loader
|
||||
return false
|
||||
}
|
||||
|
||||
|
@ -159,42 +152,33 @@ Index: src/cmd/link/internal/mips64/asm.go
|
|||
+}
|
||||
+
|
||||
+func genCallTramp(arch *sys.Arch, linkmode ld.LinkMode, ldr *loader.Loader, tramp *loader.SymbolBuilder, target loader.Sym, offset int64) {
|
||||
+ // Generate a trampoline that loads register 25 (t9) and jumps to that address.
|
||||
+ // The JALR is needed for the relocation and PIC code requires that t9 contain
|
||||
+ // Generate a trampoline that loads register $25 and jumps to that address.
|
||||
+ // The JALR is needed for the relocation and PIC code requires that $25 contain
|
||||
+ // the function address when called. The offset is based off the value that gp
|
||||
+ // was initialised to via the dynamic linker. This is loaded into register 23
|
||||
+ // (s7) via a pair of GP relative relocations.
|
||||
+ // was initialised to via the dynamic linker. This is loaded into register $23
|
||||
+ // via a pair of GP relative relocations. The address of the trampoline is
|
||||
+ // expected to already be in $25 from the call to the trampoline.
|
||||
+
|
||||
+ // Determine address of trampoline (our t9), preserving RA.
|
||||
+ // The bal instruction gives us the address three instructions
|
||||
+ // or 12 bytes into the trampoline.
|
||||
+ tramp.AddUint32(arch, 0x03e0b825) // move s7,ra
|
||||
+ tramp.AddUint32(arch, 0x04110001) // bal 1(pc)
|
||||
+ tramp.AddUint32(arch, 0x00000000) // nop
|
||||
+ tramp.AddUint32(arch, 0x03e0c825) // move t9,ra
|
||||
+ tramp.AddUint32(arch, 0x02e0f825) // move ra,s7
|
||||
+ tramp.AddUint32(arch, 0x6339fff4) // daddi t9,t9,-12
|
||||
+
|
||||
+ // Load R23 (aka REGTMP aka s7) with gp address.
|
||||
+ // Load R23 (aka REGTMP) with gp address.
|
||||
+ tramp.AddSymRef(arch, tramp.Sym(), 0, objabi.R_MIPS_GPREL_HI16, 4)
|
||||
+ tramp.SetUint32(arch, tramp.Size()-4, 0x3c170000) // lui s7,0x0
|
||||
+ tramp.AddUint32(arch, 0x02f9b82d) // daddu s7,s7,t9
|
||||
+ tramp.SetUint32(arch, tramp.Size()-4, 0x3c170000) // lui $23, 0
|
||||
+ tramp.AddUint32(arch, 0x02f9b82d) // daddu $23, $23, $25
|
||||
+ tramp.AddSymRef(arch, tramp.Sym(), 0, objabi.R_MIPS_GPREL_LO16, 4)
|
||||
+ tramp.SetUint32(arch, tramp.Size()-4, 0x66f70000) // daddiu s7,s7,0
|
||||
+ tramp.AddUint32(arch, 0x02e0e025) // move gp,s7
|
||||
+ tramp.SetUint32(arch, tramp.Size()-4, 0x66f70000) // daddiu $23, $23, 0
|
||||
+ tramp.AddUint32(arch, 0x02e0e025) // move $gp, $23
|
||||
+
|
||||
+ // Load R25 (aka t9) with function address and indirect call.
|
||||
+ // Load R25 with function address and indirect call.
|
||||
+ tramp.AddSymRef(arch, target, offset, objabi.R_MIPS_CALL16, 4)
|
||||
+ tramp.SetUint32(arch, tramp.Size()-4, 0xdef90000) // ld t9,0(s7)
|
||||
+ tramp.SetUint32(arch, tramp.Size()-4, 0xdef90000) // ld $25, 0($23)
|
||||
+ tramp.AddSymRef(arch, target, offset, objabi.R_MIPS_JALR, 4)
|
||||
+ tramp.SetUint32(arch, tramp.Size()-4, 0x03200009) // jalr zero,t9
|
||||
+ tramp.SetUint32(arch, tramp.Size()-4, 0x03200009) // jalr $0, $25
|
||||
+ tramp.AddUint32(arch, 0x00000000) // nop
|
||||
+}
|
||||
+
|
||||
func archreloc(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, r loader.Reloc, s loader.Sym, val int64) (o int64, nExtReloc int, ok bool) {
|
||||
if target.IsExternal() {
|
||||
switch r.Type() {
|
||||
@@ -285,7 +392,11 @@ func archreloc(target *ld.Target, ldr *loader.Loader,
|
||||
@@ -285,7 +383,11 @@ func archreloc(target *ld.Target, ldr *loader.Loader,
|
||||
objabi.R_ADDRMIPSU,
|
||||
objabi.R_ADDRMIPSTLS,
|
||||
objabi.R_CALLMIPS,
|
||||
|
@ -207,7 +191,7 @@ Index: src/cmd/link/internal/mips64/asm.go
|
|||
return val, 1, true
|
||||
}
|
||||
}
|
||||
@@ -335,7 +446,11 @@ func extreloc(target *ld.Target, ldr *loader.Loader, r
|
||||
@@ -335,7 +437,11 @@ func extreloc(target *ld.Target, ldr *loader.Loader, r
|
||||
|
||||
case objabi.R_ADDRMIPSTLS,
|
||||
objabi.R_CALLMIPS,
|
||||
|
|
|
@ -1,12 +0,0 @@
|
|||
Index: src/cmd/link/internal/mips/asm.go
|
||||
--- src/cmd/link/internal/mips/asm.go.orig
|
||||
+++ src/cmd/link/internal/mips/asm.go
|
||||
@@ -68,7 +68,7 @@ func elfreloc1(ctxt *ld.Link, out *ld.OutBuf, ldr *loa
|
||||
return true
|
||||
}
|
||||
|
||||
-func elfsetupplt(ctxt *ld.Link, plt, gotplt *loader.SymbolBuilder, dynamic loader.Sym) {
|
||||
+func elfsetupplt(ctxt *ld.Link, ldr *loader.Loader, plt, gotplt *loader.SymbolBuilder, dynamic loader.Sym) {
|
||||
return
|
||||
}
|
||||
|
|
@ -1,12 +0,0 @@
|
|||
Index: src/cmd/link/internal/ppc64/asm.go
|
||||
--- src/cmd/link/internal/ppc64/asm.go.orig
|
||||
+++ src/cmd/link/internal/ppc64/asm.go
|
||||
@@ -1015,7 +1015,7 @@ func elfreloc1(ctxt *ld.Link, out *ld.OutBuf, ldr *loa
|
||||
return true
|
||||
}
|
||||
|
||||
-func elfsetupplt(ctxt *ld.Link, plt, got *loader.SymbolBuilder, dynamic loader.Sym) {
|
||||
+func elfsetupplt(ctxt *ld.Link, ldr *loader.Loader, plt, got *loader.SymbolBuilder, dynamic loader.Sym) {
|
||||
if plt.Size() == 0 {
|
||||
// The dynamic linker stores the address of the
|
||||
// dynamic resolver and the DSO identifier in the two
|
|
@ -1,500 +0,0 @@
|
|||
Index: src/cmd/link/internal/riscv64/asm.go
|
||||
--- src/cmd/link/internal/riscv64/asm.go.orig
|
||||
+++ src/cmd/link/internal/riscv64/asm.go
|
||||
@@ -20,9 +20,146 @@ import (
|
||||
// fakeLabelName matches the RISCV_FAKE_LABEL_NAME from binutils.
|
||||
const fakeLabelName = ".L0 "
|
||||
|
||||
-func gentext(ctxt *ld.Link, ldr *loader.Loader) {
|
||||
+func gentext(ctxt *ld.Link, ldr *loader.Loader) {}
|
||||
+
|
||||
+func findHI20Reloc(ldr *loader.Loader, s loader.Sym, val int64) *loader.Reloc {
|
||||
+ outer := ldr.OuterSym(s)
|
||||
+ if outer == 0 {
|
||||
+ return nil
|
||||
+ }
|
||||
+ relocs := ldr.Relocs(outer)
|
||||
+ start := sort.Search(relocs.Count(), func(i int) bool { return ldr.SymValue(outer)+int64(relocs.At(i).Off()) >= val })
|
||||
+ for idx := start; idx < relocs.Count(); idx++ {
|
||||
+ r := relocs.At(idx)
|
||||
+ if ldr.SymValue(outer)+int64(r.Off()) != val {
|
||||
+ break
|
||||
+ }
|
||||
+ if r.Type() == objabi.R_RISCV_GOT_HI20 || r.Type() == objabi.R_RISCV_PCREL_HI20 {
|
||||
+ return &r
|
||||
+ }
|
||||
+ }
|
||||
+ return nil
|
||||
}
|
||||
|
||||
+func adddynrel(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, s loader.Sym, r loader.Reloc, rIdx int) bool {
|
||||
+ targ := r.Sym()
|
||||
+
|
||||
+ var targType sym.SymKind
|
||||
+ if targ != 0 {
|
||||
+ targType = ldr.SymType(targ)
|
||||
+ }
|
||||
+
|
||||
+ switch r.Type() {
|
||||
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_RISCV_CALL),
|
||||
+ objabi.ElfRelocOffset + objabi.RelocType(elf.R_RISCV_CALL_PLT):
|
||||
+
|
||||
+ if targType == sym.SDYNIMPORT {
|
||||
+ addpltsym(target, ldr, syms, targ)
|
||||
+ su := ldr.MakeSymbolUpdater(s)
|
||||
+ su.SetRelocSym(rIdx, syms.PLT)
|
||||
+ su.SetRelocAdd(rIdx, r.Add()+int64(ldr.SymPlt(targ)))
|
||||
+ }
|
||||
+ if (targType == 0 || targType == sym.SXREF) && !ldr.AttrVisibilityHidden(targ) {
|
||||
+ ldr.Errorf(s, "unknown symbol %s in RISCV call", ldr.SymName(targ))
|
||||
+ }
|
||||
+ su := ldr.MakeSymbolUpdater(s)
|
||||
+ su.SetRelocType(rIdx, objabi.R_RISCV_PCREL_ITYPE)
|
||||
+ return true
|
||||
+
|
||||
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_RISCV_GOT_HI20):
|
||||
+ if targType != sym.SDYNIMPORT {
|
||||
+ // TODO(jsing): Could convert to non-GOT reference.
|
||||
+ }
|
||||
+
|
||||
+ ld.AddGotSym(target, ldr, syms, targ, uint32(elf.R_RISCV_64))
|
||||
+ su := ldr.MakeSymbolUpdater(s)
|
||||
+ su.SetRelocType(rIdx, objabi.R_RISCV_GOT_HI20)
|
||||
+ su.SetRelocSym(rIdx, syms.GOT)
|
||||
+ su.SetRelocAdd(rIdx, r.Add()+int64(ldr.SymGot(targ)))
|
||||
+ return true
|
||||
+
|
||||
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_RISCV_PCREL_HI20):
|
||||
+ su := ldr.MakeSymbolUpdater(s)
|
||||
+ su.SetRelocType(rIdx, objabi.R_RISCV_PCREL_HI20)
|
||||
+ return true
|
||||
+
|
||||
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_RISCV_PCREL_LO12_I):
|
||||
+ if r.Add() != 0 {
|
||||
+ ldr.Errorf(s, "R_RISCV_PCREL_LO12_I with non-zero addend")
|
||||
+ }
|
||||
+ su := ldr.MakeSymbolUpdater(s)
|
||||
+ su.SetRelocType(rIdx, objabi.R_RISCV_PCREL_LO12_I)
|
||||
+ return true
|
||||
+
|
||||
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_RISCV_PCREL_LO12_S):
|
||||
+ if r.Add() != 0 {
|
||||
+ ldr.Errorf(s, "R_RISCV_PCREL_LO12_S with non-zero addend")
|
||||
+ }
|
||||
+ su := ldr.MakeSymbolUpdater(s)
|
||||
+ su.SetRelocType(rIdx, objabi.R_RISCV_PCREL_LO12_S)
|
||||
+ return true
|
||||
+
|
||||
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_RISCV_32_PCREL):
|
||||
+ su := ldr.MakeSymbolUpdater(s)
|
||||
+ su.SetRelocType(rIdx, objabi.R_RISCV_PCREL_32)
|
||||
+ return true
|
||||
+
|
||||
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_RISCV_RVC_BRANCH):
|
||||
+ su := ldr.MakeSymbolUpdater(s)
|
||||
+ su.SetRelocType(rIdx, objabi.R_RISCV_RVC_BRANCH)
|
||||
+ return true
|
||||
+
|
||||
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_RISCV_RVC_JUMP):
|
||||
+ su := ldr.MakeSymbolUpdater(s)
|
||||
+ su.SetRelocType(rIdx, objabi.R_RISCV_RVC_JUMP)
|
||||
+ return true
|
||||
+
|
||||
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_RISCV_BRANCH):
|
||||
+ su := ldr.MakeSymbolUpdater(s)
|
||||
+ su.SetRelocType(rIdx, objabi.R_RISCV_BRANCH)
|
||||
+ return true
|
||||
+
|
||||
+ case objabi.ElfRelocOffset + objabi.RelocType(elf.R_RISCV_RELAX):
|
||||
+ // Ignore relaxations, at least for now.
|
||||
+ return true
|
||||
+
|
||||
+ default:
|
||||
+ if r.Type() >= objabi.ElfRelocOffset {
|
||||
+ ldr.Errorf(s, "unexpected relocation type %d (%s)", r.Type(), sym.RelocName(target.Arch, r.Type()))
|
||||
+ return false
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ // Reread the reloc to incorporate any changes in type above.
|
||||
+ relocs := ldr.Relocs(s)
|
||||
+ r = relocs.At(rIdx)
|
||||
+
|
||||
+ switch r.Type() {
|
||||
+ case objabi.R_RISCV_PCREL_ITYPE:
|
||||
+ if targType != sym.SDYNIMPORT {
|
||||
+ // nothing to do, the relocation will be laid out in reloc
|
||||
+ return true
|
||||
+ }
|
||||
+ if target.IsExternal() {
|
||||
+ // External linker will do this relocation.
|
||||
+ return true
|
||||
+ }
|
||||
+ // Internal linking.
|
||||
+ if r.Add() != 0 {
|
||||
+ ldr.Errorf(s, "PLT reference with non-zero addend (%v)", r.Add())
|
||||
+ }
|
||||
+ // Build a PLT entry and change the relocation target to that entry.
|
||||
+ addpltsym(target, ldr, syms, targ)
|
||||
+ su := ldr.MakeSymbolUpdater(s)
|
||||
+ su.SetRelocSym(rIdx, syms.PLT)
|
||||
+ su.SetRelocAdd(rIdx, int64(ldr.SymPlt(targ)))
|
||||
+
|
||||
+ return true
|
||||
+ }
|
||||
+
|
||||
+ return false
|
||||
+}
|
||||
+
|
||||
func genSymsLate(ctxt *ld.Link, ldr *loader.Loader) {
|
||||
if ctxt.LinkMode != ld.LinkExternal {
|
||||
return
|
||||
@@ -39,7 +176,7 @@ func genSymsLate(ctxt *ld.Link, ldr *loader.Loader) {
|
||||
for ri := 0; ri < relocs.Count(); ri++ {
|
||||
r := relocs.At(ri)
|
||||
if r.Type() != objabi.R_RISCV_PCREL_ITYPE && r.Type() != objabi.R_RISCV_PCREL_STYPE &&
|
||||
- r.Type() != objabi.R_RISCV_TLS_IE_ITYPE && r.Type() != objabi.R_RISCV_TLS_IE_STYPE {
|
||||
+ r.Type() != objabi.R_RISCV_TLS_IE {
|
||||
continue
|
||||
}
|
||||
if r.Off() == 0 && ldr.SymType(s) == sym.STEXT {
|
||||
@@ -101,7 +238,7 @@ func elfreloc1(ctxt *ld.Link, out *ld.OutBuf, ldr *loa
|
||||
out.Write64(uint64(elf.R_RISCV_JAL) | uint64(elfsym)<<32)
|
||||
out.Write64(uint64(r.Xadd))
|
||||
|
||||
- case objabi.R_RISCV_PCREL_ITYPE, objabi.R_RISCV_PCREL_STYPE, objabi.R_RISCV_TLS_IE_ITYPE, objabi.R_RISCV_TLS_IE_STYPE:
|
||||
+ case objabi.R_RISCV_PCREL_ITYPE, objabi.R_RISCV_PCREL_STYPE, objabi.R_RISCV_TLS_IE:
|
||||
// Find the text symbol for the AUIPC instruction targeted
|
||||
// by this relocation.
|
||||
relocs := ldr.Relocs(s)
|
||||
@@ -127,10 +264,8 @@ func elfreloc1(ctxt *ld.Link, out *ld.OutBuf, ldr *loa
|
||||
hiRel, loRel = elf.R_RISCV_PCREL_HI20, elf.R_RISCV_PCREL_LO12_I
|
||||
case objabi.R_RISCV_PCREL_STYPE:
|
||||
hiRel, loRel = elf.R_RISCV_PCREL_HI20, elf.R_RISCV_PCREL_LO12_S
|
||||
- case objabi.R_RISCV_TLS_IE_ITYPE:
|
||||
+ case objabi.R_RISCV_TLS_IE:
|
||||
hiRel, loRel = elf.R_RISCV_TLS_GOT_HI20, elf.R_RISCV_PCREL_LO12_I
|
||||
- case objabi.R_RISCV_TLS_IE_STYPE:
|
||||
- hiRel, loRel = elf.R_RISCV_TLS_GOT_HI20, elf.R_RISCV_PCREL_LO12_S
|
||||
}
|
||||
out.Write64(uint64(sectoff))
|
||||
out.Write64(uint64(hiRel) | uint64(elfsym)<<32)
|
||||
@@ -139,6 +274,17 @@ func elfreloc1(ctxt *ld.Link, out *ld.OutBuf, ldr *loa
|
||||
out.Write64(uint64(loRel) | uint64(hi20ElfSym)<<32)
|
||||
out.Write64(uint64(0))
|
||||
|
||||
+ case objabi.R_RISCV_TLS_LE:
|
||||
+ out.Write64(uint64(sectoff))
|
||||
+ out.Write64(uint64(elf.R_RISCV_TPREL_HI20) | uint64(elfsym)<<32)
|
||||
+ out.Write64(uint64(r.Xadd))
|
||||
+ out.Write64(uint64(sectoff + 4))
|
||||
+ out.Write64(uint64(elf.R_RISCV_TPREL_LO12_I) | uint64(elfsym)<<32)
|
||||
+ out.Write64(uint64(r.Xadd))
|
||||
+ out.Write64(uint64(sectoff + 8))
|
||||
+ out.Write64(uint64(elf.R_RISCV_TPREL_ADD) | uint64(elfsym)<<32)
|
||||
+ out.Write64(uint64(0))
|
||||
+
|
||||
default:
|
||||
return false
|
||||
}
|
||||
@@ -146,10 +292,104 @@ func elfreloc1(ctxt *ld.Link, out *ld.OutBuf, ldr *loa
|
||||
return true
|
||||
}
|
||||
|
||||
-func elfsetupplt(ctxt *ld.Link, plt, gotplt *loader.SymbolBuilder, dynamic loader.Sym) {
|
||||
- log.Fatalf("elfsetupplt")
|
||||
+func elfsetupplt(ctxt *ld.Link, ldr *loader.Loader, plt, gotplt *loader.SymbolBuilder, dynamic loader.Sym) {
|
||||
+ if plt.Size() != 0 {
|
||||
+ return
|
||||
+ }
|
||||
+ if gotplt.Size() != 0 {
|
||||
+ ctxt.Errorf(gotplt.Sym(), "got.plt is not empty")
|
||||
+ }
|
||||
+
|
||||
+ // https://github.com/riscv/riscv-elf-psabi-doc/blob/master/riscv-elf.md#program-linkage-table
|
||||
+ //
|
||||
+ // 1: auipc t2, %pcrel_hi(.got.plt)
|
||||
+ // sub t1, t1, t3 # shifted .got.plt offset + hdr size + 12
|
||||
+ // l[w|d] t3, %pcrel_lo(1b)(t2) # _dl_runtime_resolve
|
||||
+ // addi t1, t1, -(hdr size + 12) # shifted .got.plt offset
|
||||
+ // addi t0, t2, %pcrel_lo(1b) # &.got.plt
|
||||
+ // srli t1, t1, log2(16/PTRSIZE) # .got.plt offset
|
||||
+ // l[w|d] t0, PTRSIZE(t0) # link map
|
||||
+ // jr t3
|
||||
+
|
||||
+ plt.AddSymRef(ctxt.Arch, gotplt.Sym(), 0, objabi.R_RISCV_PCREL_HI20, 4)
|
||||
+ plt.SetUint32(ctxt.Arch, plt.Size()-4, 0x00000397) // auipc t2,0x0
|
||||
+
|
||||
+ sb := ldr.MakeSymbolBuilder(fakeLabelName)
|
||||
+ sb.SetType(sym.STEXT)
|
||||
+ sb.SetValue(ldr.SymValue(plt.Sym()) + plt.Size() - 4)
|
||||
+ sb.SetLocal(true)
|
||||
+ sb.SetReachable(true)
|
||||
+ sb.SetVisibilityHidden(true)
|
||||
+ plt.AddInteriorSym(sb.Sym())
|
||||
+
|
||||
+ plt.AddUint32(ctxt.Arch, 0x41c30333) // sub t1,t1,t3
|
||||
+
|
||||
+ plt.AddSymRef(ctxt.Arch, sb.Sym(), 0, objabi.R_RISCV_PCREL_LO12_I, 4)
|
||||
+ plt.SetUint32(ctxt.Arch, plt.Size()-4, 0x0003be03) // ld t3,0(t2)
|
||||
+
|
||||
+ plt.AddUint32(ctxt.Arch, 0xfd430313) // addi t1,t1,-44
|
||||
+
|
||||
+ plt.AddSymRef(ctxt.Arch, sb.Sym(), 0, objabi.R_RISCV_PCREL_LO12_I, 4)
|
||||
+ plt.SetUint32(ctxt.Arch, plt.Size()-4, 0x00038293) // addi t0,t2,0
|
||||
+
|
||||
+ plt.AddUint32(ctxt.Arch, 0x00135313) // srli t1,t1,0x1
|
||||
+ plt.AddUint32(ctxt.Arch, 0x0082b283) // ld t0,8(t0)
|
||||
+ plt.AddUint32(ctxt.Arch, 0x00008e02) // jr t3
|
||||
+
|
||||
+ gotplt.AddAddrPlus(ctxt.Arch, dynamic, 0) // got.plt[0] = _dl_runtime_resolve
|
||||
+ gotplt.AddUint64(ctxt.Arch, 0) // got.plt[1] = link map
|
||||
}
|
||||
|
||||
+func addpltsym(target *ld.Target, ldr *loader.Loader, syms *ld.ArchSyms, s loader.Sym) {
|
||||
+ if ldr.SymPlt(s) >= 0 {
|
||||
+ return
|
||||
+ }
|
||||
+
|
||||
+ ld.Adddynsym(ldr, target, syms, s)
|
||||
+
|
||||
+ plt := ldr.MakeSymbolUpdater(syms.PLT)
|
||||
+ gotplt := ldr.MakeSymbolUpdater(syms.GOTPLT)
|
||||
+ rela := ldr.MakeSymbolUpdater(syms.RelaPLT)
|
||||
+ if plt.Size() == 0 {
|
||||
+ panic("plt is not set up")
|
||||
+ }
|
||||
+
|
||||
+ // https://github.com/riscv/riscv-elf-psabi-doc/blob/master/riscv-elf.md#program-linkage-table
|
||||
+ //
|
||||
+ // 1: auipc t3, %pcrel_hi(function@.got.plt)
|
||||
+ // l[w|d] t3, %pcrel_lo(1b)(t3)
|
||||
+ // jalr t1, t3
|
||||
+ // nop
|
||||
+
|
||||
+ plt.AddSymRef(target.Arch, gotplt.Sym(), gotplt.Size(), objabi.R_RISCV_PCREL_HI20, 4)
|
||||
+ plt.SetUint32(target.Arch, plt.Size()-4, 0x00000e17) // auipc t3,0x0
|
||||
+
|
||||
+ sb := ldr.MakeSymbolBuilder(fakeLabelName)
|
||||
+ sb.SetType(sym.STEXT)
|
||||
+ sb.SetValue(ldr.SymValue(plt.Sym()) + plt.Size() - 4)
|
||||
+ sb.SetLocal(true)
|
||||
+ sb.SetReachable(true)
|
||||
+ sb.SetVisibilityHidden(true)
|
||||
+ plt.AddInteriorSym(sb.Sym())
|
||||
+
|
||||
+ plt.AddSymRef(target.Arch, sb.Sym(), 0, objabi.R_RISCV_PCREL_LO12_I, 4)
|
||||
+ plt.SetUint32(target.Arch, plt.Size()-4, 0x000e3e03) // ld t3,0(t3)
|
||||
+ plt.AddUint32(target.Arch, 0x000e0367) // jalr t1,t3
|
||||
+ plt.AddUint32(target.Arch, 0x00000001) // nop
|
||||
+
|
||||
+ ldr.SetPlt(s, int32(plt.Size()-16))
|
||||
+
|
||||
+ // add to got.plt: pointer to plt[0]
|
||||
+ gotplt.AddAddrPlus(target.Arch, plt.Sym(), 0)
|
||||
+
|
||||
+ // rela
|
||||
+ rela.AddAddrPlus(target.Arch, gotplt.Sym(), gotplt.Size()-8)
|
||||
+ sDynid := ldr.SymDynid(s)
|
||||
+
|
||||
+ rela.AddUint64(target.Arch, elf.R_INFO(uint32(sDynid), uint32(elf.R_RISCV_JUMP_SLOT)))
|
||||
+ rela.AddUint64(target.Arch, 0)
|
||||
+}
|
||||
+
|
||||
func machoreloc1(*sys.Arch, *ld.OutBuf, *loader.Loader, loader.Sym, loader.ExtReloc, int64) bool {
|
||||
log.Fatalf("machoreloc1 not implemented")
|
||||
return false
|
||||
@@ -189,8 +429,11 @@ func archreloc(target *ld.Target, ldr *loader.Loader,
|
||||
case objabi.R_RISCV_CALL, objabi.R_RISCV_CALL_TRAMP:
|
||||
return val, 1, true
|
||||
|
||||
- case objabi.R_RISCV_PCREL_ITYPE, objabi.R_RISCV_PCREL_STYPE, objabi.R_RISCV_TLS_IE_ITYPE, objabi.R_RISCV_TLS_IE_STYPE:
|
||||
+ case objabi.R_RISCV_PCREL_ITYPE, objabi.R_RISCV_PCREL_STYPE, objabi.R_RISCV_TLS_IE:
|
||||
return val, 2, true
|
||||
+
|
||||
+ case objabi.R_RISCV_TLS_LE:
|
||||
+ return val, 3, true
|
||||
}
|
||||
|
||||
return val, 0, false
|
||||
@@ -211,16 +454,132 @@ func archreloc(target *ld.Target, ldr *loader.Loader,
|
||||
|
||||
return val, 0, true
|
||||
|
||||
- case objabi.R_RISCV_TLS_IE_ITYPE, objabi.R_RISCV_TLS_IE_STYPE:
|
||||
- // TLS relocations are not currently handled for internal linking.
|
||||
- // For now, TLS is only used when cgo is in use and cgo currently
|
||||
- // requires external linking. However, we need to accept these
|
||||
- // relocations so that code containing TLS variables will link,
|
||||
- // even when they're not being used. For now, replace these
|
||||
- // instructions with EBREAK to detect accidental use.
|
||||
- const ebreakIns = 0x00100073
|
||||
- return ebreakIns<<32 | ebreakIns, 0, true
|
||||
+ case objabi.R_RISCV_TLS_IE:
|
||||
+ log.Fatalf("cannot handle R_RISCV_TLS_IE (sym %s) when linking internally", ldr.SymName(s))
|
||||
+ return val, 0, false
|
||||
|
||||
+ case objabi.R_RISCV_TLS_LE:
|
||||
+ // Generate LUI and ADDIW instruction immediates.
|
||||
+ off := r.Add()
|
||||
+
|
||||
+ low, high, err := riscv.Split32BitImmediate(off)
|
||||
+ if err != nil {
|
||||
+ ldr.Errorf(s, "relocation does not fit in 32-bits: %d", off)
|
||||
+ }
|
||||
+
|
||||
+ luiImm, err := riscv.EncodeUImmediate(high)
|
||||
+ if err != nil {
|
||||
+ ldr.Errorf(s, "cannot encode R_RISCV_TLS_LE LUI relocation offset for %s: %v", ldr.SymName(rs), err)
|
||||
+ }
|
||||
+
|
||||
+ addiwImm, err := riscv.EncodeIImmediate(low)
|
||||
+ if err != nil {
|
||||
+ ldr.Errorf(s, "cannot encode R_RISCV_TLS_LE I-type instruction relocation offset for %s: %v", ldr.SymName(rs), err)
|
||||
+ }
|
||||
+
|
||||
+ lui := int64(uint32(val))
|
||||
+ addiw := int64(uint32(val >> 32))
|
||||
+
|
||||
+ lui = (lui &^ riscv.UTypeImmMask) | int64(uint32(luiImm))
|
||||
+ addiw = (addiw &^ riscv.ITypeImmMask) | int64(uint32(addiwImm))
|
||||
+
|
||||
+ return addiw<<32 | lui, 0, true
|
||||
+
|
||||
+ case objabi.R_RISCV_BRANCH:
|
||||
+ pc := ldr.SymValue(s) + int64(r.Off())
|
||||
+ off := ldr.SymValue(rs) + r.Add() - pc
|
||||
+
|
||||
+ imm, err := riscv.EncodeBImmediate(off)
|
||||
+ if err != nil {
|
||||
+ ldr.Errorf(s, "cannot encode B-type instruction relocation offset for %s: %v", ldr.SymName(rs), err)
|
||||
+ }
|
||||
+ ins := (int64(uint32(val)) &^ riscv.BTypeImmMask) | int64(uint32(imm))
|
||||
+
|
||||
+ return ins, 0, true
|
||||
+
|
||||
+ case objabi.R_RISCV_RVC_BRANCH, objabi.R_RISCV_RVC_JUMP:
|
||||
+ pc := ldr.SymValue(s) + int64(r.Off())
|
||||
+ off := ldr.SymValue(rs) + r.Add() - pc
|
||||
+
|
||||
+ var err error
|
||||
+ var imm, immMask int64
|
||||
+ switch r.Type() {
|
||||
+ case objabi.R_RISCV_RVC_BRANCH:
|
||||
+ immMask = riscv.CBTypeImmMask
|
||||
+ imm, err = riscv.EncodeCBImmediate(off)
|
||||
+ if err != nil {
|
||||
+ ldr.Errorf(s, "cannot encode CB-type instruction relocation offset for %s: %v", ldr.SymName(rs), err)
|
||||
+ }
|
||||
+ case objabi.R_RISCV_RVC_JUMP:
|
||||
+ immMask = riscv.CJTypeImmMask
|
||||
+ imm, err = riscv.EncodeCJImmediate(off)
|
||||
+ if err != nil {
|
||||
+ ldr.Errorf(s, "cannot encode CJ-type instruction relocation offset for %s: %v", ldr.SymName(rs), err)
|
||||
+ }
|
||||
+ default:
|
||||
+ panic(fmt.Sprintf("unknown relocation type: %v", r.Type()))
|
||||
+ }
|
||||
+
|
||||
+ ins := (int64(uint16(val)) &^ immMask) | int64(uint16(imm))
|
||||
+
|
||||
+ return ins, 0, true
|
||||
+
|
||||
+ case objabi.R_RISCV_GOT_HI20, objabi.R_RISCV_PCREL_HI20:
|
||||
+ pc := ldr.SymValue(s) + int64(r.Off())
|
||||
+ off := ldr.SymValue(rs) + r.Add() - pc
|
||||
+
|
||||
+ // Generate AUIPC immediates.
|
||||
+ _, high, err := riscv.Split32BitImmediate(off)
|
||||
+ if err != nil {
|
||||
+ ldr.Errorf(s, "relocation does not fit in 32-bits: %d", off)
|
||||
+ }
|
||||
+
|
||||
+ auipcImm, err := riscv.EncodeUImmediate(high)
|
||||
+ if err != nil {
|
||||
+ ldr.Errorf(s, "cannot encode R_RISCV_PCREL_ AUIPC relocation offset for %s: %v", ldr.SymName(rs), err)
|
||||
+ }
|
||||
+
|
||||
+ auipc := int64(uint32(val))
|
||||
+ auipc = (auipc &^ riscv.UTypeImmMask) | int64(uint32(auipcImm))
|
||||
+
|
||||
+ return auipc, 0, true
|
||||
+
|
||||
+ case objabi.R_RISCV_PCREL_LO12_I, objabi.R_RISCV_PCREL_LO12_S:
|
||||
+ hi20Reloc := findHI20Reloc(ldr, rs, ldr.SymValue(rs))
|
||||
+ if hi20Reloc == nil {
|
||||
+ ldr.Errorf(s, "missing HI20 relocation for LO12 relocation with %s (%d)", ldr.SymName(rs), rs)
|
||||
+ }
|
||||
+
|
||||
+ pc := ldr.SymValue(s) + int64(hi20Reloc.Off())
|
||||
+ off := ldr.SymValue(hi20Reloc.Sym()) + hi20Reloc.Add() - pc
|
||||
+
|
||||
+ low, _, err := riscv.Split32BitImmediate(off)
|
||||
+ if err != nil {
|
||||
+ ldr.Errorf(s, "relocation does not fit in 32-bits: %d", off)
|
||||
+ }
|
||||
+
|
||||
+ var imm, immMask int64
|
||||
+ switch r.Type() {
|
||||
+ case objabi.R_RISCV_PCREL_LO12_I:
|
||||
+ immMask = riscv.ITypeImmMask
|
||||
+ imm, err = riscv.EncodeIImmediate(low)
|
||||
+ if err != nil {
|
||||
+ ldr.Errorf(s, "cannot encode objabi.R_RISCV_PCREL_LO12_I I-type instruction relocation offset for %s: %v", ldr.SymName(rs), err)
|
||||
+ }
|
||||
+ case objabi.R_RISCV_PCREL_LO12_S:
|
||||
+ immMask = riscv.STypeImmMask
|
||||
+ imm, err = riscv.EncodeSImmediate(low)
|
||||
+ if err != nil {
|
||||
+ ldr.Errorf(s, "cannot encode R_RISCV_PCREL_LO12_S S-type instruction relocation offset for %s: %v", ldr.SymName(rs), err)
|
||||
+ }
|
||||
+ default:
|
||||
+ panic(fmt.Sprintf("unknown relocation type: %v", r.Type()))
|
||||
+ }
|
||||
+
|
||||
+ second := int64(uint32(val))
|
||||
+ second = (second &^ immMask) | int64(uint32(imm))
|
||||
+ return second, 0, true
|
||||
+
|
||||
case objabi.R_RISCV_PCREL_ITYPE, objabi.R_RISCV_PCREL_STYPE:
|
||||
// Generate AUIPC and second instruction immediates.
|
||||
low, high, err := riscv.Split32BitImmediate(off)
|
||||
@@ -248,7 +607,7 @@ func archreloc(target *ld.Target, ldr *loader.Loader,
|
||||
ldr.Errorf(s, "cannot encode R_RISCV_PCREL_STYPE S-type instruction relocation offset for %s: %v", ldr.SymName(rs), err)
|
||||
}
|
||||
default:
|
||||
- panic(fmt.Sprintf("Unknown relocation type: %v", r.Type()))
|
||||
+ panic(fmt.Sprintf("unknown relocation type: %v", r.Type()))
|
||||
}
|
||||
|
||||
auipc := int64(uint32(val))
|
||||
@@ -258,6 +617,11 @@ func archreloc(target *ld.Target, ldr *loader.Loader,
|
||||
second = (second &^ secondImmMask) | int64(uint32(secondImm))
|
||||
|
||||
return second<<32 | auipc, 0, true
|
||||
+
|
||||
+ case objabi.R_RISCV_PCREL_32:
|
||||
+ pc := ldr.SymValue(s) + int64(r.Off())
|
||||
+ off := ldr.SymValue(rs) + r.Add() - pc
|
||||
+ return off, 0, true
|
||||
}
|
||||
|
||||
return val, 0, false
|
||||
@@ -273,7 +637,7 @@ func extreloc(target *ld.Target, ldr *loader.Loader, r
|
||||
case objabi.R_RISCV_CALL, objabi.R_RISCV_CALL_TRAMP:
|
||||
return ld.ExtrelocSimple(ldr, r), true
|
||||
|
||||
- case objabi.R_RISCV_PCREL_ITYPE, objabi.R_RISCV_PCREL_STYPE, objabi.R_RISCV_TLS_IE_ITYPE, objabi.R_RISCV_TLS_IE_STYPE:
|
||||
+ case objabi.R_RISCV_PCREL_ITYPE, objabi.R_RISCV_PCREL_STYPE, objabi.R_RISCV_TLS_IE, objabi.R_RISCV_TLS_LE:
|
||||
return ld.ExtrelocViaOuterSym(ldr, r, s), true
|
||||
}
|
||||
return loader.ExtReloc{}, false
|
||||
@@ -352,7 +716,7 @@ func trampoline(ctxt *ld.Link, ldr *loader.Loader, ri
|
||||
|
||||
func genCallTramp(arch *sys.Arch, linkmode ld.LinkMode, ldr *loader.Loader, tramp *loader.SymbolBuilder, target loader.Sym, offset int64) {
|
||||
tramp.AddUint32(arch, 0x00000f97) // AUIPC $0, X31
|
||||
- tramp.AddUint32(arch, 0x000f8067) // JALR X0, (X31)
|
||||
+ tramp.AddUint32(arch, 0x000f8067) // JALR X0, (X31)
|
||||
|
||||
r, _ := tramp.AddRel(objabi.R_RISCV_PCREL_ITYPE)
|
||||
r.SetSiz(8)
|
|
@ -1,29 +0,0 @@
|
|||
Index: src/cmd/link/internal/riscv64/obj.go
|
||||
--- src/cmd/link/internal/riscv64/obj.go.orig
|
||||
+++ src/cmd/link/internal/riscv64/obj.go
|
||||
@@ -20,6 +20,7 @@ func Init() (*sys.Arch, ld.Arch) {
|
||||
Dwarfregsp: dwarfRegSP,
|
||||
Dwarfreglr: dwarfRegLR,
|
||||
|
||||
+ Adddynrel: adddynrel,
|
||||
Archinit: archinit,
|
||||
Archreloc: archreloc,
|
||||
Archrelocvariant: archrelocvariant,
|
||||
@@ -41,7 +42,7 @@ func Init() (*sys.Arch, ld.Arch) {
|
||||
|
||||
Freebsddynld: "/usr/libexec/ld-elf.so.1",
|
||||
Netbsddynld: "XXX",
|
||||
- Openbsddynld: "XXX",
|
||||
+ Openbsddynld: "/usr/libexec/ld.so",
|
||||
Dragonflydynld: "XXX",
|
||||
Solarisdynld: "XXX",
|
||||
|
||||
@@ -56,7 +57,7 @@ func Init() (*sys.Arch, ld.Arch) {
|
||||
|
||||
func archinit(ctxt *ld.Link) {
|
||||
switch ctxt.HeadType {
|
||||
- case objabi.Hlinux, objabi.Hfreebsd:
|
||||
+ case objabi.Hlinux, objabi.Hfreebsd, objabi.Hopenbsd:
|
||||
ld.Elfinit(ctxt)
|
||||
ld.HEADR = ld.ELFRESERVE
|
||||
if *ld.FlagTextAddr == -1 {
|
|
@ -1,12 +0,0 @@
|
|||
Index: src/cmd/link/internal/s390x/asm.go
|
||||
--- src/cmd/link/internal/s390x/asm.go.orig
|
||||
+++ src/cmd/link/internal/s390x/asm.go
|
||||
@@ -309,7 +309,7 @@ func elfreloc1(ctxt *ld.Link, out *ld.OutBuf, ldr *loa
|
||||
return true
|
||||
}
|
||||
|
||||
-func elfsetupplt(ctxt *ld.Link, plt, got *loader.SymbolBuilder, dynamic loader.Sym) {
|
||||
+func elfsetupplt(ctxt *ld.Link, ldr *loader.Loader, plt, got *loader.SymbolBuilder, dynamic loader.Sym) {
|
||||
if plt.Size() == 0 {
|
||||
// stg %r1,56(%r15)
|
||||
plt.AddUint8(0xe3)
|
|
@ -1,12 +0,0 @@
|
|||
Index: src/cmd/link/internal/sym/reloc.go
|
||||
--- src/cmd/link/internal/sym/reloc.go.orig
|
||||
+++ src/cmd/link/internal/sym/reloc.go
|
||||
@@ -67,6 +67,8 @@ func RelocName(arch *sys.Arch, r objabi.RelocType) str
|
||||
return elf.R_PPC64(nr).String()
|
||||
case sys.S390X:
|
||||
return elf.R_390(nr).String()
|
||||
+ case sys.RISCV64:
|
||||
+ return elf.R_RISCV(nr).String()
|
||||
default:
|
||||
panic("unreachable")
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
Index: src/cmd/link/internal/x86/asm.go
|
||||
--- src/cmd/link/internal/x86/asm.go.orig
|
||||
+++ src/cmd/link/internal/x86/asm.go
|
||||
@@ -421,7 +421,7 @@ func archrelocvariant(*ld.Target, *loader.Loader, load
|
||||
return -1
|
||||
}
|
||||
|
||||
-func elfsetupplt(ctxt *ld.Link, plt, got *loader.SymbolBuilder, dynamic loader.Sym) {
|
||||
+func elfsetupplt(ctxt *ld.Link, ldr *loader.Loader, plt, got *loader.SymbolBuilder, dynamic loader.Sym) {
|
||||
if plt.Size() == 0 {
|
||||
// pushl got+4
|
||||
plt.AddUint8(0xff)
|
|
@ -9,20 +9,3 @@ Index: src/debug/elf/elf.go
|
|||
PT_OPENBSD_BOOTDATA ProgType = 0x65a41be6 /* Boot arguments */
|
||||
|
||||
PT_SUNW_EH_FRAME ProgType = 0x6474e550 /* Frame unwind information */
|
||||
@@ -2216,6 +2217,8 @@ const (
|
||||
R_MIPS_TLS_TPREL64 R_MIPS = 48 /* TP-relative offset, 64 bit */
|
||||
R_MIPS_TLS_TPREL_HI16 R_MIPS = 49 /* TP-relative offset, high 16 bits */
|
||||
R_MIPS_TLS_TPREL_LO16 R_MIPS = 50 /* TP-relative offset, low 16 bits */
|
||||
+
|
||||
+ R_MIPS_PC32 R_MIPS = 248 /* 32 bit PC relative reference */
|
||||
)
|
||||
|
||||
var rmipsStrings = []intName{
|
||||
@@ -2267,6 +2270,7 @@ var rmipsStrings = []intName{
|
||||
{48, "R_MIPS_TLS_TPREL64"},
|
||||
{49, "R_MIPS_TLS_TPREL_HI16"},
|
||||
{50, "R_MIPS_TLS_TPREL_LO16"},
|
||||
+ {248, "R_MIPS_PC32"},
|
||||
}
|
||||
|
||||
func (i R_MIPS) String() string { return stringName(uint32(i), rmipsStrings, false) }
|
||||
|
|
|
@ -1,13 +1,12 @@
|
|||
Index: src/internal/platform/supported.go
|
||||
--- src/internal/platform/supported.go.orig
|
||||
+++ src/internal/platform/supported.go
|
||||
@@ -86,8 +86,7 @@ func MustLinkExternal(goos, goarch string, withCgo boo
|
||||
if withCgo {
|
||||
switch goarch {
|
||||
case "loong64",
|
||||
- "mips", "mipsle", "mips64", "mips64le",
|
||||
- "riscv64":
|
||||
+ "mips", "mipsle", "mips64", "mips64le":
|
||||
// Internally linking cgo is incomplete on some architectures.
|
||||
// https://go.dev/issue/14449
|
||||
return true
|
||||
@@ -26,7 +26,7 @@ func RaceDetectorSupported(goos, goarch string) bool {
|
||||
return goarch == "amd64" || goarch == "ppc64le" || goarch == "arm64" || goarch == "s390x"
|
||||
case "darwin":
|
||||
return goarch == "amd64" || goarch == "arm64"
|
||||
- case "freebsd", "netbsd", "openbsd", "windows":
|
||||
+ case "freebsd", "netbsd", "windows":
|
||||
return goarch == "amd64"
|
||||
default:
|
||||
return false
|
||||
|
|
|
@ -1,21 +1,14 @@
|
|||
Index: src/internal/platform/zosarch.go
|
||||
--- src/internal/platform/zosarch.go.orig
|
||||
+++ src/internal/platform/zosarch.go
|
||||
@@ -49,6 +49,7 @@ var List = []OSArch{
|
||||
{"openbsd", "arm64"},
|
||||
{"openbsd", "mips64"},
|
||||
{"openbsd", "ppc64"},
|
||||
+ {"openbsd", "riscv64"},
|
||||
{"plan9", "386"},
|
||||
{"plan9", "amd64"},
|
||||
{"plan9", "arm"},
|
||||
@@ -100,8 +101,9 @@ var distInfo = map[OSArch]osArchInfo{
|
||||
@@ -101,9 +101,9 @@ var distInfo = map[OSArch]osArchInfo{
|
||||
{"openbsd", "amd64"}: {CgoSupported: true},
|
||||
{"openbsd", "arm"}: {CgoSupported: true},
|
||||
{"openbsd", "arm64"}: {CgoSupported: true},
|
||||
- {"openbsd", "mips64"}: {CgoSupported: true, Broken: true},
|
||||
+ {"openbsd", "mips64"}: {CgoSupported: true},
|
||||
{"openbsd", "ppc64"}: {Broken: true},
|
||||
{"openbsd", "ppc64"}: {},
|
||||
- {"openbsd", "riscv64"}: {Broken: true},
|
||||
+ {"openbsd", "riscv64"}: {CgoSupported: true},
|
||||
{"plan9", "386"}: {},
|
||||
{"plan9", "amd64"}: {},
|
||||
|
|
23
lang/go/patches/patch-src_internal_syscall_unix_ioctl_bsd_go
Normal file
23
lang/go/patches/patch-src_internal_syscall_unix_ioctl_bsd_go
Normal file
|
@ -0,0 +1,23 @@
|
|||
Index: src/internal/syscall/unix/ioctl_bsd.go
|
||||
--- src/internal/syscall/unix/ioctl_bsd.go.orig
|
||||
+++ src/internal/syscall/unix/ioctl_bsd.go
|
||||
@@ -0,0 +1,19 @@
|
||||
+// Copyright 2023 The Go Authors. All rights reserved.
|
||||
+// Use of this source code is governed by a BSD-style
|
||||
+// license that can be found in the LICENSE file.
|
||||
+
|
||||
+//go:build darwin || dragonfly || freebsd || netbsd || openbsd
|
||||
+
|
||||
+package unix
|
||||
+
|
||||
+import (
|
||||
+ "unsafe"
|
||||
+)
|
||||
+
|
||||
+func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error)
|
||||
+
|
||||
+//go:linkname ioctlPtr syscall.ioctlPtr
|
||||
+
|
||||
+func Ioctl(fd int, cmd int, args unsafe.Pointer) (err error) {
|
||||
+ return ioctlPtr(fd, uint(cmd), args)
|
||||
+}
|
|
@ -0,0 +1,22 @@
|
|||
Index: src/internal/syscall/unix/ioctl_linux.go
|
||||
--- src/internal/syscall/unix/ioctl_linux.go.orig
|
||||
+++ src/internal/syscall/unix/ioctl_linux.go
|
||||
@@ -0,0 +1,18 @@
|
||||
+// Copyright 2023 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"
|
||||
+ "unsafe"
|
||||
+)
|
||||
+
|
||||
+func Ioctl(fd int, cmd int, args unsafe.Pointer) (err error) {
|
||||
+ _, _, errno := syscall.Syscall6(syscall.SYS_IOCTL, uintptr(fd), uintptr(cmd), uintptr(args), 0, 0, 0)
|
||||
+ if errno != 0 {
|
||||
+ err = errno
|
||||
+ }
|
||||
+ return
|
||||
+}
|
35
lang/go/patches/patch-src_os_signal_signal_cgo_test_go
Normal file
35
lang/go/patches/patch-src_os_signal_signal_cgo_test_go
Normal file
|
@ -0,0 +1,35 @@
|
|||
Index: src/os/signal/signal_cgo_test.go
|
||||
--- src/os/signal/signal_cgo_test.go.orig
|
||||
+++ src/os/signal/signal_cgo_test.go
|
||||
@@ -14,6 +14,7 @@ import (
|
||||
"context"
|
||||
"encoding/binary"
|
||||
"fmt"
|
||||
+ "internal/syscall/unix"
|
||||
"internal/testenv"
|
||||
"internal/testpty"
|
||||
"os"
|
||||
@@ -304,9 +305,8 @@ func runSessionLeader(t *testing.T, pause time.Duratio
|
||||
|
||||
// Take TTY.
|
||||
pgrp := int32(syscall.Getpgrp()) // assume that pid_t is int32
|
||||
- _, _, errno := syscall.Syscall(syscall.SYS_IOCTL, ptyFD, syscall.TIOCSPGRP, uintptr(unsafe.Pointer(&pgrp)))
|
||||
- if errno != 0 {
|
||||
- return fmt.Errorf("error setting tty process group: %w", errno)
|
||||
+ if err := unix.Ioctl(ptyFD, syscall.TIOCSPGRP, unsafe.Pointer(&pgrp)); err != nil {
|
||||
+ return fmt.Errorf("error setting tty process group: %w", err)
|
||||
}
|
||||
|
||||
// Give the kernel time to potentially wake readers and have
|
||||
@@ -315,9 +315,8 @@ func runSessionLeader(t *testing.T, pause time.Duratio
|
||||
|
||||
// Give TTY back.
|
||||
pid := int32(cmd.Process.Pid) // assume that pid_t is int32
|
||||
- _, _, errno = syscall.Syscall(syscall.SYS_IOCTL, ptyFD, syscall.TIOCSPGRP, uintptr(unsafe.Pointer(&pid)))
|
||||
- if errno != 0 {
|
||||
- return fmt.Errorf("error setting tty process group back: %w", errno)
|
||||
+ if err := unix.Ioctl(ptyFD, syscall.TIOCSPGRP, unsafe.Pointer(&pid)); err != nil {
|
||||
+ return fmt.Errorf("error setting tty process group back: %w", err)
|
||||
}
|
||||
|
||||
// Report that we are done and SIGCONT can be sent. Note that
|
|
@ -1,7 +1,7 @@
|
|||
Index: src/runtime/asm_mips64x.s
|
||||
--- src/runtime/asm_mips64x.s.orig
|
||||
+++ src/runtime/asm_mips64x.s
|
||||
@@ -479,9 +479,12 @@ TEXT ·cgocallback(SB),NOSPLIT,$24-24
|
||||
@@ -502,9 +502,12 @@ TEXT ·cgocallback(SB),NOSPLIT,$24-24
|
||||
|
||||
loadg:
|
||||
// Load m and g from thread-local storage.
|
||||
|
|
|
@ -1,19 +0,0 @@
|
|||
Index: src/runtime/asm_riscv64.s
|
||||
--- src/runtime/asm_riscv64.s.orig
|
||||
+++ src/runtime/asm_riscv64.s
|
||||
@@ -309,6 +309,15 @@ TEXT gosave_systemstack_switch<>(SB),NOSPLIT|NOFRAME,$
|
||||
CALL runtime·abort(SB)
|
||||
RET
|
||||
|
||||
+// func asmcgocall_no_g(fn, arg unsafe.Pointer)
|
||||
+// Call fn(arg) aligned appropriately for the gcc ABI.
|
||||
+// Called on a system stack, and there may be no g yet (during needm).
|
||||
+TEXT ·asmcgocall_no_g(SB),NOSPLIT,$0-16
|
||||
+ MOV fn+0(FP), X5
|
||||
+ MOV arg+8(FP), X10
|
||||
+ JALR RA, (X5)
|
||||
+ RET
|
||||
+
|
||||
// func asmcgocall(fn, arg unsafe.Pointer) int32
|
||||
// Call fn(arg) on the scheduler stack,
|
||||
// aligned appropriately for the gcc ABI.
|
12
lang/go/patches/patch-src_runtime_cgo_gcc_openbsd_c
Normal file
12
lang/go/patches/patch-src_runtime_cgo_gcc_openbsd_c
Normal file
|
@ -0,0 +1,12 @@
|
|||
Index: src/runtime/cgo/gcc_openbsd.c
|
||||
--- src/runtime/cgo/gcc_openbsd.c.orig
|
||||
+++ src/runtime/cgo/gcc_openbsd.c
|
||||
@@ -2,7 +2,7 @@
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
-//go:build openbsd && (386 || arm || amd64 || arm64 || riscv64)
|
||||
+//go:build openbsd && (386 || arm || amd64 || arm64 || mips64 || riscv64)
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <pthread.h>
|
|
@ -1,71 +0,0 @@
|
|||
Index: src/runtime/cgo/gcc_openbsd_riscv64.c
|
||||
--- src/runtime/cgo/gcc_openbsd_riscv64.c.orig
|
||||
+++ src/runtime/cgo/gcc_openbsd_riscv64.c
|
||||
@@ -0,0 +1,67 @@
|
||||
+// Copyright 2019 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 <sys/types.h>
|
||||
+#include <pthread.h>
|
||||
+#include <signal.h>
|
||||
+#include <string.h>
|
||||
+#include "libcgo.h"
|
||||
+#include "libcgo_unix.h"
|
||||
+
|
||||
+static void* threadentry(void*);
|
||||
+static void (*setg_gcc)(void*);
|
||||
+
|
||||
+void
|
||||
+x_cgo_init(G *g, void (*setg)(void*))
|
||||
+{
|
||||
+ pthread_attr_t attr;
|
||||
+ size_t size;
|
||||
+
|
||||
+ setg_gcc = setg;
|
||||
+ pthread_attr_init(&attr);
|
||||
+ pthread_attr_getstacksize(&attr, &size);
|
||||
+ g->stacklo = (uintptr)&attr - size + 4096;
|
||||
+ pthread_attr_destroy(&attr);
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+_cgo_sys_thread_start(ThreadStart *ts)
|
||||
+{
|
||||
+ pthread_attr_t attr;
|
||||
+ sigset_t ign, oset;
|
||||
+ pthread_t p;
|
||||
+ size_t size;
|
||||
+ int err;
|
||||
+
|
||||
+ sigfillset(&ign);
|
||||
+ pthread_sigmask(SIG_SETMASK, &ign, &oset);
|
||||
+
|
||||
+ pthread_attr_init(&attr);
|
||||
+ pthread_attr_getstacksize(&attr, &size);
|
||||
+
|
||||
+ // Leave stacklo=0 and set stackhi=size; mstart will do the rest.
|
||||
+ ts->g->stackhi = size;
|
||||
+ err = _cgo_try_pthread_create(&p, &attr, threadentry, ts);
|
||||
+
|
||||
+ pthread_sigmask(SIG_SETMASK, &oset, nil);
|
||||
+
|
||||
+ if (err != 0) {
|
||||
+ fprintf(stderr, "runtime/cgo: pthread_create failed: %s\n", strerror(err));
|
||||
+ abort();
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+extern void crosscall1(void (*fn)(void), void (*setg_gcc)(void*), void *g);
|
||||
+
|
||||
+static void*
|
||||
+threadentry(void *v)
|
||||
+{
|
||||
+ ThreadStart ts;
|
||||
+
|
||||
+ ts = *(ThreadStart*)v;
|
||||
+ free(v);
|
||||
+
|
||||
+ crosscall1(ts.fn, setg_gcc, (void*)ts.g);
|
||||
+ return nil;
|
||||
+}
|
|
@ -1,7 +1,7 @@
|
|||
Index: src/runtime/defs_openbsd_mips64.go
|
||||
--- src/runtime/defs_openbsd_mips64.go.orig
|
||||
+++ src/runtime/defs_openbsd_mips64.go
|
||||
@@ -40,6 +40,8 @@ const (
|
||||
@@ -41,6 +41,8 @@ const (
|
||||
_SA_RESTART = 0x2
|
||||
_SA_ONSTACK = 0x1
|
||||
|
||||
|
@ -10,7 +10,7 @@ Index: src/runtime/defs_openbsd_mips64.go
|
|||
_SIGHUP = 0x1
|
||||
_SIGINT = 0x2
|
||||
_SIGQUIT = 0x3
|
||||
@@ -168,3 +170,10 @@ type keventt struct {
|
||||
@@ -169,3 +171,10 @@ type keventt struct {
|
||||
data int64
|
||||
udata *byte
|
||||
}
|
||||
|
|
|
@ -1,180 +0,0 @@
|
|||
Index: src/runtime/defs_openbsd_riscv64.go
|
||||
--- src/runtime/defs_openbsd_riscv64.go.orig
|
||||
+++ src/runtime/defs_openbsd_riscv64.go
|
||||
@@ -0,0 +1,176 @@
|
||||
+// Copyright 2022 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 runtime
|
||||
+
|
||||
+import "unsafe"
|
||||
+
|
||||
+const (
|
||||
+ _EINTR = 0x4
|
||||
+ _EFAULT = 0xe
|
||||
+ _EAGAIN = 0x23
|
||||
+
|
||||
+ _O_WRONLY = 0x1
|
||||
+ _O_NONBLOCK = 0x4
|
||||
+ _O_CREAT = 0x200
|
||||
+ _O_TRUNC = 0x400
|
||||
+ _O_CLOEXEC = 0x10000
|
||||
+
|
||||
+ _PROT_NONE = 0x0
|
||||
+ _PROT_READ = 0x1
|
||||
+ _PROT_WRITE = 0x2
|
||||
+ _PROT_EXEC = 0x4
|
||||
+
|
||||
+ _MAP_ANON = 0x1000
|
||||
+ _MAP_PRIVATE = 0x2
|
||||
+ _MAP_FIXED = 0x10
|
||||
+ _MAP_STACK = 0x4000
|
||||
+
|
||||
+ _MADV_DONTNEED = 0x4
|
||||
+ _MADV_FREE = 0x6
|
||||
+
|
||||
+ _SA_SIGINFO = 0x40
|
||||
+ _SA_RESTART = 0x2
|
||||
+ _SA_ONSTACK = 0x1
|
||||
+
|
||||
+ _PTHREAD_CREATE_DETACHED = 0x1
|
||||
+
|
||||
+ _SIGHUP = 0x1
|
||||
+ _SIGINT = 0x2
|
||||
+ _SIGQUIT = 0x3
|
||||
+ _SIGILL = 0x4
|
||||
+ _SIGTRAP = 0x5
|
||||
+ _SIGABRT = 0x6
|
||||
+ _SIGEMT = 0x7
|
||||
+ _SIGFPE = 0x8
|
||||
+ _SIGKILL = 0x9
|
||||
+ _SIGBUS = 0xa
|
||||
+ _SIGSEGV = 0xb
|
||||
+ _SIGSYS = 0xc
|
||||
+ _SIGPIPE = 0xd
|
||||
+ _SIGALRM = 0xe
|
||||
+ _SIGTERM = 0xf
|
||||
+ _SIGURG = 0x10
|
||||
+ _SIGSTOP = 0x11
|
||||
+ _SIGTSTP = 0x12
|
||||
+ _SIGCONT = 0x13
|
||||
+ _SIGCHLD = 0x14
|
||||
+ _SIGTTIN = 0x15
|
||||
+ _SIGTTOU = 0x16
|
||||
+ _SIGIO = 0x17
|
||||
+ _SIGXCPU = 0x18
|
||||
+ _SIGXFSZ = 0x19
|
||||
+ _SIGVTALRM = 0x1a
|
||||
+ _SIGPROF = 0x1b
|
||||
+ _SIGWINCH = 0x1c
|
||||
+ _SIGINFO = 0x1d
|
||||
+ _SIGUSR1 = 0x1e
|
||||
+ _SIGUSR2 = 0x1f
|
||||
+
|
||||
+ _FPE_INTDIV = 0x1
|
||||
+ _FPE_INTOVF = 0x2
|
||||
+ _FPE_FLTDIV = 0x3
|
||||
+ _FPE_FLTOVF = 0x4
|
||||
+ _FPE_FLTUND = 0x5
|
||||
+ _FPE_FLTRES = 0x6
|
||||
+ _FPE_FLTINV = 0x7
|
||||
+ _FPE_FLTSUB = 0x8
|
||||
+
|
||||
+ _BUS_ADRALN = 0x1
|
||||
+ _BUS_ADRERR = 0x2
|
||||
+ _BUS_OBJERR = 0x3
|
||||
+
|
||||
+ _SEGV_MAPERR = 0x1
|
||||
+ _SEGV_ACCERR = 0x2
|
||||
+
|
||||
+ _ITIMER_REAL = 0x0
|
||||
+ _ITIMER_VIRTUAL = 0x1
|
||||
+ _ITIMER_PROF = 0x2
|
||||
+
|
||||
+ _EV_ADD = 0x1
|
||||
+ _EV_DELETE = 0x2
|
||||
+ _EV_CLEAR = 0x20
|
||||
+ _EV_ERROR = 0x4000
|
||||
+ _EV_EOF = 0x8000
|
||||
+ _EVFILT_READ = -0x1
|
||||
+ _EVFILT_WRITE = -0x2
|
||||
+)
|
||||
+
|
||||
+type tforkt struct {
|
||||
+ tf_tcb unsafe.Pointer
|
||||
+ tf_tid *int32
|
||||
+ tf_stack uintptr
|
||||
+}
|
||||
+
|
||||
+type sigcontext struct {
|
||||
+ __sc_unused int32
|
||||
+ sc_mask int32
|
||||
+ sc_ra uintptr
|
||||
+ sc_sp uintptr
|
||||
+ sc_gp uintptr
|
||||
+ sc_tp uintptr
|
||||
+ sc_t [7]uintptr
|
||||
+ sc_s [12]uintptr
|
||||
+ sc_a [8]uintptr
|
||||
+ sc_sepc uintptr
|
||||
+ sc_f [32]uintptr
|
||||
+ sc_fcsr uintptr
|
||||
+ sc_cookie int64
|
||||
+}
|
||||
+
|
||||
+type siginfo struct {
|
||||
+ si_signo int32
|
||||
+ si_code int32
|
||||
+ si_errno int32
|
||||
+ pad_cgo_0 [4]byte
|
||||
+ _data [120]byte
|
||||
+}
|
||||
+
|
||||
+type stackt struct {
|
||||
+ ss_sp uintptr
|
||||
+ ss_size uintptr
|
||||
+ ss_flags int32
|
||||
+ pad_cgo_0 [4]byte
|
||||
+}
|
||||
+
|
||||
+type timespec struct {
|
||||
+ tv_sec int64
|
||||
+ tv_nsec int64
|
||||
+}
|
||||
+
|
||||
+//go:nosplit
|
||||
+func (ts *timespec) setNsec(ns int64) {
|
||||
+ ts.tv_sec = ns / 1e9
|
||||
+ ts.tv_nsec = ns % 1e9
|
||||
+}
|
||||
+
|
||||
+type timeval struct {
|
||||
+ tv_sec int64
|
||||
+ tv_usec int64
|
||||
+}
|
||||
+
|
||||
+func (tv *timeval) set_usec(x int32) {
|
||||
+ tv.tv_usec = int64(x)
|
||||
+}
|
||||
+
|
||||
+type itimerval struct {
|
||||
+ it_interval timeval
|
||||
+ it_value timeval
|
||||
+}
|
||||
+
|
||||
+type keventt struct {
|
||||
+ ident uint64
|
||||
+ filter int16
|
||||
+ flags uint16
|
||||
+ fflags uint32
|
||||
+ data int64
|
||||
+ udata *byte
|
||||
+}
|
||||
+
|
||||
+type pthread uintptr
|
||||
+type pthreadattr uintptr
|
||||
+type pthreadcond uintptr
|
||||
+type pthreadcondattr uintptr
|
||||
+type pthreadmutex uintptr
|
||||
+type pthreadmutexattr uintptr
|
|
@ -1,7 +1,7 @@
|
|||
Index: src/runtime/proc.go
|
||||
--- src/runtime/proc.go.orig
|
||||
+++ src/runtime/proc.go
|
||||
@@ -1492,10 +1492,8 @@ func startTheWorldWithSema() int64 {
|
||||
@@ -1624,10 +1624,8 @@ func startTheWorldWithSema(now int64, w worldStop) int
|
||||
// via libcall.
|
||||
func usesLibcall() bool {
|
||||
switch GOOS {
|
||||
|
@ -9,11 +9,11 @@ Index: src/runtime/proc.go
|
|||
+ case "aix", "darwin", "illumos", "ios", "openbsd", "solaris", "windows":
|
||||
return true
|
||||
- case "openbsd":
|
||||
- return GOARCH == "386" || GOARCH == "amd64" || GOARCH == "arm" || GOARCH == "arm64"
|
||||
- return GOARCH != "mips64"
|
||||
}
|
||||
return false
|
||||
}
|
||||
@@ -1504,13 +1502,8 @@ func usesLibcall() bool {
|
||||
@@ -1636,10 +1634,8 @@ func usesLibcall() bool {
|
||||
// system-allocated stack.
|
||||
func mStackIsSystemAllocated() bool {
|
||||
switch GOOS {
|
||||
|
@ -21,10 +21,7 @@ Index: src/runtime/proc.go
|
|||
+ case "aix", "darwin", "illumos", "ios", "openbsd", "plan9", "solaris", "windows":
|
||||
return true
|
||||
- case "openbsd":
|
||||
- switch GOARCH {
|
||||
- case "386", "amd64", "arm", "arm64":
|
||||
- return true
|
||||
- }
|
||||
- return GOARCH != "mips64"
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
Index: src/runtime/rt0_openbsd_riscv64.s
|
||||
--- src/runtime/rt0_openbsd_riscv64.s.orig
|
||||
+++ src/runtime/rt0_openbsd_riscv64.s
|
||||
@@ -0,0 +1,14 @@
|
||||
+// Copyright 2022 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"
|
||||
+
|
||||
+TEXT _rt0_riscv64_openbsd(SB),NOSPLIT|NOFRAME,$0
|
||||
+ MOV 0(X2), A0 // argc
|
||||
+ ADD $8, X2, A1 // argv
|
||||
+ JMP main(SB)
|
||||
+
|
||||
+TEXT main(SB),NOSPLIT|NOFRAME,$0
|
||||
+ MOV $runtime·rt0_go(SB), T0
|
||||
+ JALR ZERO, T0
|
|
@ -1,76 +0,0 @@
|
|||
Index: src/runtime/signal_openbsd_riscv64.go
|
||||
--- src/runtime/signal_openbsd_riscv64.go.orig
|
||||
+++ src/runtime/signal_openbsd_riscv64.go
|
||||
@@ -0,0 +1,72 @@
|
||||
+// Copyright 2022 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 runtime
|
||||
+
|
||||
+import (
|
||||
+ "internal/goarch"
|
||||
+ "unsafe"
|
||||
+)
|
||||
+
|
||||
+type sigctxt struct {
|
||||
+ info *siginfo
|
||||
+ ctxt unsafe.Pointer
|
||||
+}
|
||||
+
|
||||
+//go:nosplit
|
||||
+//go:nowritebarrierrec
|
||||
+func (c *sigctxt) regs() *sigcontext {
|
||||
+ return (*sigcontext)(c.ctxt)
|
||||
+}
|
||||
+
|
||||
+func (c *sigctxt) ra() uint64 { return uint64(c.regs().sc_ra) }
|
||||
+func (c *sigctxt) sp() uint64 { return uint64(c.regs().sc_sp) }
|
||||
+func (c *sigctxt) gp() uint64 { return uint64(c.regs().sc_gp) }
|
||||
+func (c *sigctxt) tp() uint64 { return uint64(c.regs().sc_tp) }
|
||||
+func (c *sigctxt) t0() uint64 { return uint64(c.regs().sc_t[0]) }
|
||||
+func (c *sigctxt) t1() uint64 { return uint64(c.regs().sc_t[1]) }
|
||||
+func (c *sigctxt) t2() uint64 { return uint64(c.regs().sc_t[2]) }
|
||||
+func (c *sigctxt) s0() uint64 { return uint64(c.regs().sc_s[0]) }
|
||||
+func (c *sigctxt) s1() uint64 { return uint64(c.regs().sc_s[1]) }
|
||||
+func (c *sigctxt) a0() uint64 { return uint64(c.regs().sc_a[0]) }
|
||||
+func (c *sigctxt) a1() uint64 { return uint64(c.regs().sc_a[1]) }
|
||||
+func (c *sigctxt) a2() uint64 { return uint64(c.regs().sc_a[2]) }
|
||||
+func (c *sigctxt) a3() uint64 { return uint64(c.regs().sc_a[3]) }
|
||||
+func (c *sigctxt) a4() uint64 { return uint64(c.regs().sc_a[4]) }
|
||||
+func (c *sigctxt) a5() uint64 { return uint64(c.regs().sc_a[5]) }
|
||||
+func (c *sigctxt) a6() uint64 { return uint64(c.regs().sc_a[6]) }
|
||||
+func (c *sigctxt) a7() uint64 { return uint64(c.regs().sc_a[7]) }
|
||||
+func (c *sigctxt) s2() uint64 { return uint64(c.regs().sc_s[2]) }
|
||||
+func (c *sigctxt) s3() uint64 { return uint64(c.regs().sc_s[3]) }
|
||||
+func (c *sigctxt) s4() uint64 { return uint64(c.regs().sc_s[4]) }
|
||||
+func (c *sigctxt) s5() uint64 { return uint64(c.regs().sc_s[5]) }
|
||||
+func (c *sigctxt) s6() uint64 { return uint64(c.regs().sc_s[6]) }
|
||||
+func (c *sigctxt) s7() uint64 { return uint64(c.regs().sc_s[7]) }
|
||||
+func (c *sigctxt) s8() uint64 { return uint64(c.regs().sc_s[8]) }
|
||||
+func (c *sigctxt) s9() uint64 { return uint64(c.regs().sc_s[9]) }
|
||||
+func (c *sigctxt) s10() uint64 { return uint64(c.regs().sc_s[10]) }
|
||||
+func (c *sigctxt) s11() uint64 { return uint64(c.regs().sc_s[11]) }
|
||||
+func (c *sigctxt) t3() uint64 { return uint64(c.regs().sc_t[3]) }
|
||||
+func (c *sigctxt) t4() uint64 { return uint64(c.regs().sc_t[4]) }
|
||||
+func (c *sigctxt) t5() uint64 { return uint64(c.regs().sc_t[5]) }
|
||||
+func (c *sigctxt) t6() uint64 { return uint64(c.regs().sc_t[6]) }
|
||||
+
|
||||
+//go:nosplit
|
||||
+//go:nowritebarrierrec
|
||||
+func (c *sigctxt) pc() uint64 { return uint64(c.regs().sc_sepc) }
|
||||
+
|
||||
+func (c *sigctxt) sigcode() uint64 { return uint64(c.info.si_code) }
|
||||
+func (c *sigctxt) sigaddr() uint64 {
|
||||
+ return *(*uint64)(add(unsafe.Pointer(c.info), 2*goarch.PtrSize))
|
||||
+}
|
||||
+
|
||||
+func (c *sigctxt) set_pc(x uint64) { c.regs().sc_sepc = uintptr(x) }
|
||||
+func (c *sigctxt) set_ra(x uint64) { c.regs().sc_ra = uintptr(x) }
|
||||
+func (c *sigctxt) set_sp(x uint64) { c.regs().sc_sp = uintptr(x) }
|
||||
+func (c *sigctxt) set_gp(x uint64) { c.regs().sc_gp = uintptr(x) }
|
||||
+
|
||||
+func (c *sigctxt) set_sigcode(x uint32) { c.info.si_code = int32(x) }
|
||||
+func (c *sigctxt) set_sigaddr(x uint64) {
|
||||
+ *(*uintptr)(add(unsafe.Pointer(c.info), 2*goarch.PtrSize)) = uintptr(x)
|
||||
+}
|
|
@ -1,12 +0,0 @@
|
|||
Index: src/runtime/signal_riscv64.go
|
||||
--- src/runtime/signal_riscv64.go.orig
|
||||
+++ src/runtime/signal_riscv64.go
|
||||
@@ -2,7 +2,7 @@
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
-//go:build (linux || freebsd) && riscv64
|
||||
+//go:build (linux || freebsd || openbsd) && riscv64
|
||||
|
||||
package runtime
|
||||
|
|
@ -1,18 +0,0 @@
|
|||
Index: src/runtime/stubs_riscv64.go
|
||||
--- src/runtime/stubs_riscv64.go.orig
|
||||
+++ src/runtime/stubs_riscv64.go
|
||||
@@ -4,9 +4,14 @@
|
||||
|
||||
package runtime
|
||||
|
||||
+import "unsafe"
|
||||
+
|
||||
// Called from assembly only; declared for go vet.
|
||||
func load_g()
|
||||
func save_g()
|
||||
+
|
||||
+//go:noescape
|
||||
+func asmcgocall_no_g(fn, arg unsafe.Pointer)
|
||||
|
||||
// Used by reflectcall and the reflect package.
|
||||
//
|
|
@ -1,746 +0,0 @@
|
|||
Index: src/runtime/sys_openbsd_riscv64.s
|
||||
--- src/runtime/sys_openbsd_riscv64.s.orig
|
||||
+++ src/runtime/sys_openbsd_riscv64.s
|
||||
@@ -0,0 +1,742 @@
|
||||
+// Copyright 2023 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.
|
||||
+//
|
||||
+// System calls and other sys.stuff for riscv64, OpenBSD
|
||||
+// System calls are implemented in libc/libpthread, this file
|
||||
+// contains trampolines that convert from Go to C calling convention.
|
||||
+//
|
||||
+
|
||||
+#include "go_asm.h"
|
||||
+#include "go_tls.h"
|
||||
+#include "textflag.h"
|
||||
+
|
||||
+#define CLOCK_REALTIME $0
|
||||
+#define CLOCK_MONOTONIC $3
|
||||
+
|
||||
+// mstart_stub is the first function executed on a new thread started by pthread_create.
|
||||
+// It just does some low-level setup and then calls mstart.
|
||||
+// Note: called with the C calling convention.
|
||||
+TEXT runtime·mstart_stub(SB),NOSPLIT,$200
|
||||
+ // X10 points to the m.
|
||||
+ // We are already on m's g0 stack.
|
||||
+
|
||||
+ // Save callee-save registers (X8, X9, X18..X27, F8, F9, F18..F27)
|
||||
+ MOV X8, (1*8)(X2)
|
||||
+ MOV X9, (2*8)(X2)
|
||||
+ MOV X18, (3*8)(X2)
|
||||
+ MOV X19, (4*8)(X2)
|
||||
+ MOV X20, (5*8)(X2)
|
||||
+ MOV X21, (6*8)(X2)
|
||||
+ MOV X22, (7*8)(X2)
|
||||
+ MOV X23, (8*8)(X2)
|
||||
+ MOV X24, (9*8)(X2)
|
||||
+ MOV X25, (10*8)(X2)
|
||||
+ MOV X26, (11*8)(X2)
|
||||
+ MOV g, (12*8)(X2)
|
||||
+ MOVF F8, (13*8)(X2)
|
||||
+ MOVF F9, (14*8)(X2)
|
||||
+ MOVF F18, (15*8)(X2)
|
||||
+ MOVF F19, (16*8)(X2)
|
||||
+ MOVF F20, (17*8)(X2)
|
||||
+ MOVF F21, (18*8)(X2)
|
||||
+ MOVF F22, (19*8)(X2)
|
||||
+ MOVF F23, (20*8)(X2)
|
||||
+ MOVF F24, (21*8)(X2)
|
||||
+ MOVF F25, (22*8)(X2)
|
||||
+ MOVF F26, (23*8)(X2)
|
||||
+ MOVF F27, (24*8)(X2)
|
||||
+
|
||||
+ MOV m_g0(X10), g
|
||||
+ CALL runtime·save_g(SB)
|
||||
+
|
||||
+ CALL runtime·mstart(SB)
|
||||
+
|
||||
+ // Restore callee-save registers.
|
||||
+ MOV (1*8)(X2), X8
|
||||
+ MOV (2*8)(X2), X9
|
||||
+ MOV (3*8)(X2), X18
|
||||
+ MOV (4*8)(X2), X19
|
||||
+ MOV (5*8)(X2), X20
|
||||
+ MOV (6*8)(X2), X21
|
||||
+ MOV (7*8)(X2), X22
|
||||
+ MOV (8*8)(X2), X23
|
||||
+ MOV (9*8)(X2), X24
|
||||
+ MOV (10*8)(X2), X25
|
||||
+ MOV (11*8)(X2), X26
|
||||
+ MOV (12*8)(X2), g
|
||||
+ MOVF (13*8)(X2), F8
|
||||
+ MOVF (14*8)(X2), F9
|
||||
+ MOVF (15*8)(X2), F18
|
||||
+ MOVF (16*8)(X2), F19
|
||||
+ MOVF (17*8)(X2), F20
|
||||
+ MOVF (18*8)(X2), F21
|
||||
+ MOVF (19*8)(X2), F22
|
||||
+ MOVF (20*8)(X2), F23
|
||||
+ MOVF (21*8)(X2), F24
|
||||
+ MOVF (22*8)(X2), F25
|
||||
+ MOVF (23*8)(X2), F26
|
||||
+ MOVF (24*8)(X2), F27
|
||||
+
|
||||
+ // Go is all done with this OS thread.
|
||||
+ // Tell pthread everything is ok (we never join with this thread, so
|
||||
+ // the value here doesn't really matter).
|
||||
+ MOV $0, X10
|
||||
+
|
||||
+ RET
|
||||
+
|
||||
+TEXT runtime·sigfwd(SB),NOSPLIT,$0-32
|
||||
+ MOVW sig+8(FP), X10
|
||||
+ MOV info+16(FP), X11
|
||||
+ MOV ctx+24(FP), X12
|
||||
+ MOV fn+0(FP), X5
|
||||
+ JALR X1, X5
|
||||
+ RET
|
||||
+
|
||||
+TEXT runtime·sigtramp(SB),NOSPLIT|TOPFRAME,$224
|
||||
+ // Save callee-save registers (X8, X9, X18..X27, F8, F9, F18..F27)
|
||||
+ MOV X8, (4*8)(X2)
|
||||
+ MOV X9, (5*8)(X2)
|
||||
+ MOV X18, (6*8)(X2)
|
||||
+ MOV X19, (7*8)(X2)
|
||||
+ MOV X20, (8*8)(X2)
|
||||
+ MOV X21, (9*8)(X2)
|
||||
+ MOV X22, (10*8)(X2)
|
||||
+ MOV X23, (11*8)(X2)
|
||||
+ MOV X24, (12*8)(X2)
|
||||
+ MOV X25, (13*8)(X2)
|
||||
+ MOV X26, (14*8)(X2)
|
||||
+ MOV g, (15*8)(X2)
|
||||
+ MOVF F8, (16*8)(X2)
|
||||
+ MOVF F9, (17*8)(X2)
|
||||
+ MOVF F18, (18*8)(X2)
|
||||
+ MOVF F19, (19*8)(X2)
|
||||
+ MOVF F20, (20*8)(X2)
|
||||
+ MOVF F21, (21*8)(X2)
|
||||
+ MOVF F22, (22*8)(X2)
|
||||
+ MOVF F23, (23*8)(X2)
|
||||
+ MOVF F24, (24*8)(X2)
|
||||
+ MOVF F25, (25*8)(X2)
|
||||
+ MOVF F26, (26*8)(X2)
|
||||
+ MOVF F27, (27*8)(X2)
|
||||
+
|
||||
+ // this might be called in external code context,
|
||||
+ // where g is not set.
|
||||
+ CALL runtime·load_g(SB)
|
||||
+
|
||||
+ MOVW X10, 8(X2)
|
||||
+ MOV X11, 16(X2)
|
||||
+ MOV X12, 24(X2)
|
||||
+ MOV $runtime·sigtrampgo(SB), X5
|
||||
+ JALR X1, X5
|
||||
+
|
||||
+ // Restore callee-save registers.
|
||||
+ MOV (4*8)(X2), X8
|
||||
+ MOV (5*8)(X2), X9
|
||||
+ MOV (6*8)(X2), X18
|
||||
+ MOV (7*8)(X2), X19
|
||||
+ MOV (8*8)(X2), X20
|
||||
+ MOV (9*8)(X2), X21
|
||||
+ MOV (10*8)(X2), X22
|
||||
+ MOV (11*8)(X2), X23
|
||||
+ MOV (12*8)(X2), X24
|
||||
+ MOV (13*8)(X2), X25
|
||||
+ MOV (14*8)(X2), X26
|
||||
+ MOV (15*8)(X2), g
|
||||
+ MOVF (16*8)(X2), F8
|
||||
+ MOVF (17*8)(X2), F9
|
||||
+ MOVF (18*8)(X2), F18
|
||||
+ MOVF (19*8)(X2), F19
|
||||
+ MOVF (20*8)(X2), F20
|
||||
+ MOVF (21*8)(X2), F21
|
||||
+ MOVF (22*8)(X2), F22
|
||||
+ MOVF (23*8)(X2), F23
|
||||
+ MOVF (24*8)(X2), F24
|
||||
+ MOVF (25*8)(X2), F25
|
||||
+ MOVF (26*8)(X2), F26
|
||||
+ MOVF (27*8)(X2), F27
|
||||
+
|
||||
+ RET
|
||||
+
|
||||
+//
|
||||
+// These trampolines help convert from Go calling convention to C calling convention.
|
||||
+// They should be called with asmcgocall.
|
||||
+// A pointer to the arguments is passed in R0.
|
||||
+// A single int32 result is returned in R0.
|
||||
+// (For more results, make an args/results structure.)
|
||||
+TEXT runtime·pthread_attr_init_trampoline(SB),NOSPLIT,$8
|
||||
+ MOV 0(X10), X10 // arg 1 - attr
|
||||
+ CALL libc_pthread_attr_init(SB)
|
||||
+ RET
|
||||
+
|
||||
+TEXT runtime·pthread_attr_destroy_trampoline(SB),NOSPLIT,$8
|
||||
+ MOV 0(X10), X10 // arg 1 - attr
|
||||
+ CALL libc_pthread_attr_destroy(SB)
|
||||
+ RET
|
||||
+
|
||||
+TEXT runtime·pthread_attr_getstacksize_trampoline(SB),NOSPLIT,$8
|
||||
+ MOV 8(X10), X11 // arg 2 - size
|
||||
+ MOV 0(X10), X10 // arg 1 - attr
|
||||
+ CALL libc_pthread_attr_getstacksize(SB)
|
||||
+ RET
|
||||
+
|
||||
+TEXT runtime·pthread_attr_setdetachstate_trampoline(SB),NOSPLIT,$8
|
||||
+ MOV 8(X10), X11 // arg 2 - state
|
||||
+ MOV 0(X10), X10 // arg 1 - attr
|
||||
+ CALL libc_pthread_attr_setdetachstate(SB)
|
||||
+ RET
|
||||
+
|
||||
+TEXT runtime·pthread_create_trampoline(SB),NOSPLIT,$8
|
||||
+ MOV 0(X10), X11 // arg 2 - attr
|
||||
+ MOV 8(X10), X12 // arg 3 - start
|
||||
+ MOV 16(X10), X13 // arg 4 - arg
|
||||
+ ADD $-16, X2
|
||||
+ MOV X2, X10 // arg 1 - &threadid (discard)
|
||||
+ CALL libc_pthread_create(SB)
|
||||
+ ADD $16, X2
|
||||
+ RET
|
||||
+
|
||||
+TEXT runtime·thrkill_trampoline(SB),NOSPLIT,$8
|
||||
+ MOV 8(X10), X11 // arg 2 - signal
|
||||
+ MOV $0, X12 // arg 3 - tcb
|
||||
+ MOVW 0(X10), X10 // arg 1 - tid
|
||||
+ CALL libc_thrkill(SB)
|
||||
+ RET
|
||||
+
|
||||
+TEXT runtime·thrsleep_trampoline(SB),NOSPLIT,$8
|
||||
+ MOVW 8(X10), X11 // arg 2 - clock_id
|
||||
+ MOV 16(X10), X12 // arg 3 - abstime
|
||||
+ MOV 24(X10), X13 // arg 4 - lock
|
||||
+ MOV 32(X10), X14 // arg 5 - abort
|
||||
+ MOV 0(X10), X10 // arg 1 - id
|
||||
+ CALL libc_thrsleep(SB)
|
||||
+ RET
|
||||
+
|
||||
+TEXT runtime·thrwakeup_trampoline(SB),NOSPLIT,$8
|
||||
+ MOVW 8(X10), X11 // arg 2 - count
|
||||
+ MOV 0(X10), X10 // arg 1 - id
|
||||
+ CALL libc_thrwakeup(SB)
|
||||
+ RET
|
||||
+
|
||||
+TEXT runtime·exit_trampoline(SB),NOSPLIT,$8
|
||||
+ MOVW 0(X10), X10 // arg 1 - status
|
||||
+ CALL libc_exit(SB)
|
||||
+ MOV $0, X5 // crash on failure
|
||||
+ MOV X5, (X5)
|
||||
+ RET
|
||||
+
|
||||
+TEXT runtime·getthrid_trampoline(SB),NOSPLIT,$8
|
||||
+ MOV X10, X9 // pointer to args
|
||||
+ CALL libc_getthrid(SB)
|
||||
+ MOVW X10, 0(X9) // return value
|
||||
+ RET
|
||||
+
|
||||
+TEXT runtime·raiseproc_trampoline(SB),NOSPLIT,$8
|
||||
+ MOV X10, X9 // pointer to args
|
||||
+ CALL libc_getpid(SB) // arg 1 - pid (result in X10)
|
||||
+ MOVW 0(X9), X11 // arg 2 - signal
|
||||
+ CALL libc_kill(SB)
|
||||
+ RET
|
||||
+
|
||||
+TEXT runtime·sched_yield_trampoline(SB),NOSPLIT,$8
|
||||
+ CALL libc_sched_yield(SB)
|
||||
+ RET
|
||||
+
|
||||
+TEXT runtime·mmap_trampoline(SB),NOSPLIT,$8
|
||||
+ MOV X10, X9 // pointer to args
|
||||
+ MOV 0(X9), X10 // arg 1 - addr
|
||||
+ MOV 8(X9), X11 // arg 2 - len
|
||||
+ MOVW 16(X9), X12 // arg 3 - prot
|
||||
+ MOVW 20(X9), X13 // arg 4 - flags
|
||||
+ MOVW 24(X9), X14 // arg 5 - fid
|
||||
+ MOVW 28(X9), X15 // arg 6 - offset
|
||||
+ CALL libc_mmap(SB)
|
||||
+ MOV $0, X5
|
||||
+ MOV $-1, X6
|
||||
+ BNE X6, X10, noerr
|
||||
+ CALL libc_errno(SB)
|
||||
+ MOVW (X10), X5 // errno
|
||||
+ MOV $0, X10
|
||||
+noerr:
|
||||
+ MOV X10, 32(X9)
|
||||
+ MOV X5, 40(X9)
|
||||
+ RET
|
||||
+
|
||||
+TEXT runtime·munmap_trampoline(SB),NOSPLIT,$8
|
||||
+ MOV 8(X10), X11 // arg 2 - len
|
||||
+ MOV 0(X10), X10 // arg 1 - addr
|
||||
+ CALL libc_munmap(SB)
|
||||
+ MOV $-1, X5
|
||||
+ BNE X5, X10, 3(PC)
|
||||
+ MOV $0, X5 // crash on failure
|
||||
+ MOV X5, (X5)
|
||||
+ RET
|
||||
+
|
||||
+TEXT runtime·madvise_trampoline(SB),NOSPLIT,$8
|
||||
+ MOV 8(X10), X11 // arg 2 - len
|
||||
+ MOVW 16(X10), X12 // arg 3 - advice
|
||||
+ MOV 0(X10), X10 // arg 1 - addr
|
||||
+ CALL libc_madvise(SB)
|
||||
+ // ignore failure - maybe pages are locked
|
||||
+ RET
|
||||
+
|
||||
+TEXT runtime·open_trampoline(SB),NOSPLIT,$8
|
||||
+ MOVW 8(X10), X11 // arg 2 - flags
|
||||
+ MOVW 12(X10), X12 // arg 3 - mode
|
||||
+ MOV 0(X10), X10 // arg 1 - path
|
||||
+ MOV $0, X13 // varargs
|
||||
+ CALL libc_open(SB)
|
||||
+ RET
|
||||
+
|
||||
+TEXT runtime·close_trampoline(SB),NOSPLIT,$8
|
||||
+ MOVW 0(X10), X10 // arg 1 - fd
|
||||
+ CALL libc_close(SB)
|
||||
+ RET
|
||||
+
|
||||
+TEXT runtime·read_trampoline(SB),NOSPLIT,$8
|
||||
+ MOV 8(X10), X11 // arg 2 - buf
|
||||
+ MOVW 16(X10), X12 // arg 3 - count
|
||||
+ MOVW 0(X10), X10 // arg 1 - fd (int32 from read)
|
||||
+ CALL libc_read(SB)
|
||||
+ MOV $-1, X5
|
||||
+ BNE X5, X10, noerr
|
||||
+ CALL libc_errno(SB)
|
||||
+ MOVW (X10), X10 // errno
|
||||
+ NEG X10 // caller expects negative errno
|
||||
+noerr:
|
||||
+ RET
|
||||
+
|
||||
+TEXT runtime·write_trampoline(SB),NOSPLIT,$8
|
||||
+ MOV 8(X10), X11 // arg 2 - buf
|
||||
+ MOVW 16(X10), X12 // arg 3 - count
|
||||
+ MOV 0(X10), X10 // arg 1 - fd (uintptr from write1)
|
||||
+ CALL libc_write(SB)
|
||||
+ MOV $-1, X5
|
||||
+ BNE X5, X10, noerr
|
||||
+ CALL libc_errno(SB)
|
||||
+ MOVW (X10), X10 // errno
|
||||
+ NEG X10 // caller expects negative errno
|
||||
+noerr:
|
||||
+ RET
|
||||
+
|
||||
+TEXT runtime·pipe2_trampoline(SB),NOSPLIT,$8
|
||||
+ MOVW 8(X10), X11 // arg 2 - flags
|
||||
+ MOV 0(X10), X10 // arg 1 - filedes
|
||||
+ CALL libc_pipe2(SB)
|
||||
+ MOV $-1, X5
|
||||
+ BNE X5, X10, noerr
|
||||
+ CALL libc_errno(SB)
|
||||
+ MOVW (X10), X10 // errno
|
||||
+ NEG X10 // caller expects negative errno
|
||||
+noerr:
|
||||
+ RET
|
||||
+
|
||||
+TEXT runtime·setitimer_trampoline(SB),NOSPLIT,$8
|
||||
+ MOV 8(X10), X11 // arg 2 - new
|
||||
+ MOV 16(X10), X12 // arg 3 - old
|
||||
+ MOVW 0(X10), X10 // arg 1 - which
|
||||
+ CALL libc_setitimer(SB)
|
||||
+ RET
|
||||
+
|
||||
+TEXT runtime·usleep_trampoline(SB),NOSPLIT,$8
|
||||
+ MOVW 0(X10), X10 // arg 1 - usec
|
||||
+ CALL libc_usleep(SB)
|
||||
+ RET
|
||||
+
|
||||
+TEXT runtime·sysctl_trampoline(SB),NOSPLIT,$8
|
||||
+ MOVW 8(X10), X11 // arg 2 - miblen
|
||||
+ MOV 16(X10), X12 // arg 3 - out
|
||||
+ MOV 24(X10), X13 // arg 4 - size
|
||||
+ MOV 32(X10), X14 // arg 5 - dst
|
||||
+ MOV 40(X10), X15 // arg 6 - ndst
|
||||
+ MOV 0(X10), X10 // arg 1 - mib
|
||||
+ CALL libc_sysctl(SB)
|
||||
+ RET
|
||||
+
|
||||
+TEXT runtime·kqueue_trampoline(SB),NOSPLIT,$8
|
||||
+ CALL libc_kqueue(SB)
|
||||
+ RET
|
||||
+
|
||||
+TEXT runtime·kevent_trampoline(SB),NOSPLIT,$8
|
||||
+ MOV 8(X10), X11 // arg 2 - keventt
|
||||
+ MOVW 16(X10), X12 // arg 3 - nch
|
||||
+ MOV 24(X10), X13 // arg 4 - ev
|
||||
+ MOVW 32(X10), X14 // arg 5 - nev
|
||||
+ MOV 40(X10), X15 // arg 6 - ts
|
||||
+ MOVW 0(X10), X10 // arg 1 - kq
|
||||
+ CALL libc_kevent(SB)
|
||||
+ MOV $-1, X5
|
||||
+ BNE X5, X10, noerr
|
||||
+ CALL libc_errno(SB)
|
||||
+ MOVW (X10), X10 // errno
|
||||
+ NEG X10 // caller expects negative errno
|
||||
+noerr:
|
||||
+ RET
|
||||
+
|
||||
+TEXT runtime·clock_gettime_trampoline(SB),NOSPLIT,$8
|
||||
+ MOV 8(X10), X11 // arg 2 - tp
|
||||
+ MOVW 0(X10), X10 // arg 1 - clock_id
|
||||
+ CALL libc_clock_gettime(SB)
|
||||
+ MOV $-1, X5
|
||||
+ BNE X5, X10, 3(PC)
|
||||
+ MOV $0, X5 // crash on failure
|
||||
+ MOV X5, (X5)
|
||||
+ RET
|
||||
+
|
||||
+TEXT runtime·fcntl_trampoline(SB),NOSPLIT,$8
|
||||
+ MOV X10, X9 // pointer to args
|
||||
+ MOVW 0(X9), X10 // arg 1 - fd
|
||||
+ MOVW 4(X9), X11 // arg 2 - cmd
|
||||
+ MOVW 8(X9), X12 // arg 3 - arg
|
||||
+ MOV $0, X13 // vararg
|
||||
+ CALL libc_fcntl(SB)
|
||||
+ MOV $-1, X5
|
||||
+ MOV $0, X11
|
||||
+ BNE X5, X10, noerr
|
||||
+ CALL libc_errno(SB)
|
||||
+ MOVW (X10), X11 // errno
|
||||
+ MOV $-1, X10
|
||||
+noerr:
|
||||
+ MOVW X10, 12(X9)
|
||||
+ MOVW X11, 16(X9)
|
||||
+ RET
|
||||
+
|
||||
+TEXT runtime·sigaction_trampoline(SB),NOSPLIT,$8
|
||||
+ MOV 8(X10), X11 // arg 2 - new
|
||||
+ MOV 16(X10), X12 // arg 3 - old
|
||||
+ MOVW 0(X10), X10 // arg 1 - sig
|
||||
+ CALL libc_sigaction(SB)
|
||||
+ MOV $-1, X5
|
||||
+ BNE X5, X10, 3(PC)
|
||||
+ MOV $0, X5 // crash on failure
|
||||
+ MOV X5, (X5)
|
||||
+ RET
|
||||
+
|
||||
+TEXT runtime·sigprocmask_trampoline(SB),NOSPLIT,$8
|
||||
+ MOV 8(X10), X11 // arg 2 - new
|
||||
+ MOV 16(X10), X12 // arg 3 - old
|
||||
+ MOVW 0(X10), X10 // arg 1 - how
|
||||
+ CALL libc_pthread_sigmask(SB)
|
||||
+ MOV $-1, X5
|
||||
+ BNE X5, X10, 3(PC)
|
||||
+ MOV $0, X5 // crash on failure
|
||||
+ MOV X5, (X5)
|
||||
+ RET
|
||||
+
|
||||
+TEXT runtime·sigaltstack_trampoline(SB),NOSPLIT,$8
|
||||
+ MOV 8(X10), X11 // arg 2 - old
|
||||
+ MOV 0(X10), X10 // arg 1 - new
|
||||
+ CALL libc_sigaltstack(SB)
|
||||
+ MOV $-1, X5
|
||||
+ BNE X5, X10, 3(PC)
|
||||
+ MOV $0, X5 // crash on failure
|
||||
+ MOV X5, (X5)
|
||||
+ RET
|
||||
+
|
||||
+TEXT runtime·issetugid_trampoline(SB),NOSPLIT,$0
|
||||
+ MOV X10, X9 // pointer to args
|
||||
+ CALL libc_issetugid(SB)
|
||||
+ MOVW X10, 0(X9) // return value
|
||||
+ 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,$8
|
||||
+ MOV X10, X9 // pointer to args
|
||||
+
|
||||
+ MOV (0*8)(X9), X5 // fn
|
||||
+ MOV (1*8)(X9), X10 // a1
|
||||
+ MOV (2*8)(X9), X11 // a2
|
||||
+ MOV (3*8)(X9), X12 // a3
|
||||
+ MOV $0, X13 // vararg
|
||||
+
|
||||
+ JALR X1, X5
|
||||
+
|
||||
+ MOV X10, (4*8)(X9) // r1
|
||||
+ MOV X11, (5*8)(X9) // r2
|
||||
+
|
||||
+ // Standard libc functions return -1 on error
|
||||
+ // and set errno.
|
||||
+ MOV $-1, X5
|
||||
+ MOVW X10, X11
|
||||
+ BNE X5, X11, ok
|
||||
+
|
||||
+ // Get error code from libc.
|
||||
+ CALL libc_errno(SB)
|
||||
+ MOVW (X10), X10
|
||||
+ MOV X10, (6*8)(X9) // err
|
||||
+
|
||||
+ok:
|
||||
+ 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,$8
|
||||
+ MOV X10, X9 // pointer to args
|
||||
+
|
||||
+ MOV (0*8)(X9), X5 // fn
|
||||
+ MOV (1*8)(X9), X10 // a1
|
||||
+ MOV (2*8)(X9), X11 // a2
|
||||
+ MOV (3*8)(X9), X12 // a3
|
||||
+ MOV $0, X13 // vararg
|
||||
+
|
||||
+ JALR X1, X5
|
||||
+
|
||||
+ MOV X10, (4*8)(X9) // r1
|
||||
+ MOV X11, (5*8)(X9) // r2
|
||||
+
|
||||
+ // Standard libc functions return -1 on error
|
||||
+ // and set errno.
|
||||
+ MOV $-1, X5
|
||||
+ BNE X5, X10, ok
|
||||
+
|
||||
+ // Get error code from libc.
|
||||
+ CALL libc_errno(SB)
|
||||
+ MOVW (X10), X10
|
||||
+ MOV X10, (6*8)(X9) // err
|
||||
+
|
||||
+ok:
|
||||
+ 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,$8
|
||||
+ MOV X10, X9 // pointer to args
|
||||
+
|
||||
+ MOV (0*8)(X9), X5 // fn
|
||||
+ MOV (1*8)(X9), X10 // a1
|
||||
+ MOV (2*8)(X9), X11 // a2
|
||||
+ MOV (3*8)(X9), X12 // a3
|
||||
+ MOV (4*8)(X9), X13 // a4
|
||||
+ MOV (5*8)(X9), X14 // a5
|
||||
+ MOV (6*8)(X9), X15 // a6
|
||||
+ MOV $0, X16 // vararg
|
||||
+
|
||||
+ JALR X1, X5
|
||||
+
|
||||
+ MOV X10, (7*8)(X9) // r1
|
||||
+ MOV X11, (8*8)(X9) // r2
|
||||
+
|
||||
+ // Standard libc functions return -1 on error
|
||||
+ // and set errno.
|
||||
+ MOV $-1, X5
|
||||
+ MOVW X10, X11
|
||||
+ BNE X5, X11, ok
|
||||
+
|
||||
+ // Get error code from libc.
|
||||
+ CALL libc_errno(SB)
|
||||
+ MOVW (X10), X10
|
||||
+ MOV X10, (9*8)(X9) // err
|
||||
+
|
||||
+ok:
|
||||
+ 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,$8
|
||||
+ MOV X10, X9 // pointer to args
|
||||
+
|
||||
+ MOV (0*8)(X9), X5 // fn
|
||||
+ MOV (1*8)(X9), X10 // a1
|
||||
+ MOV (2*8)(X9), X11 // a2
|
||||
+ MOV (3*8)(X9), X12 // a3
|
||||
+ MOV (4*8)(X9), X13 // a4
|
||||
+ MOV (5*8)(X9), X14 // a5
|
||||
+ MOV (6*8)(X9), X15 // a6
|
||||
+ MOV $0, X16 // vararg
|
||||
+
|
||||
+ JALR X1, X5
|
||||
+
|
||||
+ MOV X10, (7*8)(X9) // r1
|
||||
+ MOV X11, (8*8)(X9) // r2
|
||||
+
|
||||
+ // Standard libc functions return -1 on error
|
||||
+ // and set errno.
|
||||
+ MOV $-1, X5
|
||||
+ BNE X5, X10, ok
|
||||
+
|
||||
+ // Get error code from libc.
|
||||
+ CALL libc_errno(SB)
|
||||
+ MOVW (X10), X10
|
||||
+ MOV X10, (9*8)(X9) // err
|
||||
+
|
||||
+ok:
|
||||
+ 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).
|
||||
+//
|
||||
+// The openbsd/riscv64 kernel only accepts eight syscall arguments.
|
||||
+TEXT runtime·syscall10(SB),NOSPLIT,$0
|
||||
+ MOV X10, X9 // pointer to args
|
||||
+
|
||||
+ ADD $-16, X2
|
||||
+
|
||||
+ MOV (0*8)(X9), X5 // fn
|
||||
+ MOV (1*8)(X9), X10 // a1
|
||||
+ MOV (2*8)(X9), X11 // a2
|
||||
+ MOV (3*8)(X9), X12 // a3
|
||||
+ MOV (4*8)(X9), X13 // a4
|
||||
+ MOV (5*8)(X9), X14 // a5
|
||||
+ MOV (6*8)(X9), X15 // a6
|
||||
+ MOV (7*8)(X9), X16 // a7
|
||||
+ MOV (8*8)(X9), X17 // a8
|
||||
+
|
||||
+ JALR X1, X5
|
||||
+
|
||||
+ MOV X10, (11*8)(X9) // r1
|
||||
+ MOV X11, (12*8)(X9) // r2
|
||||
+
|
||||
+ // Standard libc functions return -1 on error
|
||||
+ // and set errno.
|
||||
+ MOV $-1, X5
|
||||
+ MOVW X10, X11
|
||||
+ BNE X5, X11, ok
|
||||
+
|
||||
+ // Get error code from libc.
|
||||
+ CALL libc_errno(SB)
|
||||
+ MOVW (X10), X10
|
||||
+ MOV X10, (13*8)(X9) // err
|
||||
+
|
||||
+ok:
|
||||
+ ADD $16, X2
|
||||
+ 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.
|
||||
+//
|
||||
+// The openbsd/riscv64 kernel only accepts eight syscall arguments.
|
||||
+TEXT runtime·syscall10X(SB),NOSPLIT,$0
|
||||
+ MOV X10, X9 // pointer to args
|
||||
+
|
||||
+ ADD $-16, X2
|
||||
+
|
||||
+ MOV (0*8)(X9), X5 // fn
|
||||
+ MOV (1*8)(X9), X10 // a1
|
||||
+ MOV (2*8)(X9), X11 // a2
|
||||
+ MOV (3*8)(X9), X12 // a3
|
||||
+ MOV (4*8)(X9), X13 // a4
|
||||
+ MOV (5*8)(X9), X14 // a5
|
||||
+ MOV (6*8)(X9), X15 // a6
|
||||
+ MOV (7*8)(X9), X16 // a7
|
||||
+ MOV (8*8)(X9), X17 // a8
|
||||
+
|
||||
+ JALR X1, X5
|
||||
+
|
||||
+ MOV X10, (11*8)(X9) // r1
|
||||
+ MOV X11, (12*8)(X9) // r2
|
||||
+
|
||||
+ // Standard libc functions return -1 on error
|
||||
+ // and set errno.
|
||||
+ MOV $-1, X5
|
||||
+ BNE X5, X10, ok
|
||||
+
|
||||
+ // Get error code from libc.
|
||||
+ CALL libc_errno(SB)
|
||||
+ MOVW (X10), X10
|
||||
+ MOV X10, (13*8)(X9) // err
|
||||
+
|
||||
+ok:
|
||||
+ ADD $16, X2
|
||||
+ RET
|
|
@ -1,29 +0,0 @@
|
|||
Index: src/runtime/tls_riscv64.s
|
||||
--- src/runtime/tls_riscv64.s.orig
|
||||
+++ src/runtime/tls_riscv64.s
|
||||
@@ -11,20 +11,16 @@
|
||||
//
|
||||
// NOTE: mcall() assumes this clobbers only X31 (REG_TMP).
|
||||
TEXT runtime·save_g(SB),NOSPLIT|NOFRAME,$0-0
|
||||
+#ifndef GOOS_openbsd
|
||||
MOVB runtime·iscgo(SB), X31
|
||||
- BEQ X0, X31, nocgo
|
||||
-
|
||||
- MOV runtime·tls_g(SB), X31
|
||||
- ADD TP, X31 // add offset to thread pointer (X4)
|
||||
- MOV g, (X31)
|
||||
-
|
||||
+ BEQZ X31, nocgo
|
||||
+#endif
|
||||
+ MOV g, runtime·tls_g(SB)
|
||||
nocgo:
|
||||
RET
|
||||
|
||||
TEXT runtime·load_g(SB),NOSPLIT|NOFRAME,$0-0
|
||||
- MOV runtime·tls_g(SB), X31
|
||||
- ADD TP, X31 // add offset to thread pointer (X4)
|
||||
- MOV (X31), g
|
||||
+ MOV runtime·tls_g(SB), g
|
||||
RET
|
||||
|
||||
GLOBL runtime·tls_g(SB), TLSBSS, $8
|
|
@ -1,36 +0,0 @@
|
|||
Index: src/syscall/asm_openbsd_riscv64.s
|
||||
--- src/syscall/asm_openbsd_riscv64.s.orig
|
||||
+++ src/syscall/asm_openbsd_riscv64.s
|
||||
@@ -0,0 +1,32 @@
|
||||
+// Copyright 2019 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 RISCV64, 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,11 +1,11 @@
|
|||
Index: src/syscall/exec_unix.go
|
||||
--- src/syscall/exec_unix.go.orig
|
||||
+++ src/syscall/exec_unix.go
|
||||
@@ -293,7 +293,7 @@ func Exec(argv0 string, argv []string, envv []string)
|
||||
@@ -296,7 +296,7 @@ func Exec(argv0 string, argv []string, envv []string)
|
||||
} else if runtime.GOOS == "darwin" || runtime.GOOS == "ios" {
|
||||
// Similarly on Darwin.
|
||||
err1 = execveDarwin(argv0p, &argvp[0], &envvp[0])
|
||||
- } else if runtime.GOOS == "openbsd" && (runtime.GOARCH == "386" || runtime.GOARCH == "amd64" || runtime.GOARCH == "arm" || runtime.GOARCH == "arm64") {
|
||||
- } else if runtime.GOOS == "openbsd" && runtime.GOARCH != "mips64" {
|
||||
+ } else if runtime.GOOS == "openbsd" {
|
||||
// Similarly on OpenBSD.
|
||||
err1 = execveOpenBSD(argv0p, &argvp[0], &envvp[0])
|
||||
|
|
21
lang/go/patches/patch-src_syscall_export_bsd_test_go
Normal file
21
lang/go/patches/patch-src_syscall_export_bsd_test_go
Normal file
|
@ -0,0 +1,21 @@
|
|||
Index: src/syscall/export_bsd_test.go
|
||||
--- src/syscall/export_bsd_test.go.orig
|
||||
+++ src/syscall/export_bsd_test.go
|
||||
@@ -0,0 +1,17 @@
|
||||
+// 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.
|
||||
+
|
||||
+//go:build darwin || dragonfly || freebsd || netbsd || openbsd
|
||||
+
|
||||
+package syscall
|
||||
+
|
||||
+import "unsafe"
|
||||
+
|
||||
+func IoctlPtr(fd, req uintptr, arg unsafe.Pointer) Errno {
|
||||
+ err := ioctlPtr(int(fd), uint(req), arg)
|
||||
+ if err != nil {
|
||||
+ return err.(Errno)
|
||||
+ }
|
||||
+ return 0
|
||||
+}
|
19
lang/go/patches/patch-src_syscall_export_darwin_test_go
Normal file
19
lang/go/patches/patch-src_syscall_export_darwin_test_go
Normal file
|
@ -0,0 +1,19 @@
|
|||
Index: src/syscall/export_darwin_test.go
|
||||
--- src/syscall/export_darwin_test.go.orig
|
||||
+++ src/syscall/export_darwin_test.go
|
||||
@@ -1,15 +0,0 @@
|
||||
-// 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.
|
||||
-
|
||||
-package syscall
|
||||
-
|
||||
-import "unsafe"
|
||||
-
|
||||
-func IoctlPtr(fd, req uintptr, arg unsafe.Pointer) Errno {
|
||||
- err := ioctlPtr(int(fd), uint(req), arg)
|
||||
- if err != nil {
|
||||
- return err.(Errno)
|
||||
- }
|
||||
- return 0
|
||||
-}
|
12
lang/go/patches/patch-src_syscall_export_linux_test_go
Normal file
12
lang/go/patches/patch-src_syscall_export_linux_test_go
Normal file
|
@ -0,0 +1,12 @@
|
|||
Index: src/syscall/export_linux_test.go
|
||||
--- src/syscall/export_linux_test.go.orig
|
||||
+++ src/syscall/export_linux_test.go
|
||||
@@ -12,3 +12,8 @@ var (
|
||||
const (
|
||||
Sys_GETEUID = sys_GETEUID
|
||||
)
|
||||
+
|
||||
+func IoctlPtr(fd, req uintptr, arg unsafe.Pointer) (err Errno) {
|
||||
+ _, _, err = Syscall(SYS_IOCTL, fd, req, uintptr(arg))
|
||||
+ return err
|
||||
+}
|
18
lang/go/patches/patch-src_syscall_export_unix_test_go
Normal file
18
lang/go/patches/patch-src_syscall_export_unix_test_go
Normal file
|
@ -0,0 +1,18 @@
|
|||
Index: src/syscall/export_unix_test.go
|
||||
--- src/syscall/export_unix_test.go.orig
|
||||
+++ src/syscall/export_unix_test.go
|
||||
@@ -1,14 +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.
|
||||
-
|
||||
-//go:build dragonfly || freebsd || linux || netbsd || openbsd
|
||||
-
|
||||
-package syscall
|
||||
-
|
||||
-import "unsafe"
|
||||
-
|
||||
-func IoctlPtr(fd, req uintptr, arg unsafe.Pointer) (err Errno) {
|
||||
- _, _, err = Syscall(SYS_IOCTL, fd, req, uintptr(arg))
|
||||
- return err
|
||||
-}
|
|
@ -1,7 +1,7 @@
|
|||
Index: src/syscall/mkall.sh
|
||||
--- src/syscall/mkall.sh.orig
|
||||
+++ src/syscall/mkall.sh
|
||||
@@ -345,15 +345,28 @@ openbsd_arm64)
|
||||
@@ -346,15 +346,16 @@ openbsd_arm64)
|
||||
mkasm="go run mkasm.go"
|
||||
;;
|
||||
openbsd_mips64)
|
||||
|
@ -16,19 +16,7 @@ Index: src/syscall/mkall.sh
|
|||
# Let the type of C char be signed to make the bare syscall
|
||||
# API consistent between platforms.
|
||||
mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
||||
+ mkasm="go run mkasm.go"
|
||||
+ ;;
|
||||
+openbsd_riscv64)
|
||||
+ GOOSARCH_in="syscall_openbsd_libc.go syscall_openbsd_$GOARCH.go"
|
||||
+ mkerrors="$mkerrors -m64"
|
||||
+ mksyscall="./mksyscall.pl -openbsd -libc"
|
||||
+ mksysctl="./mksysctl_openbsd.pl"
|
||||
+ zsysctl="zsysctl_openbsd.go"
|
||||
+ mksysnum="curl -s 'http://cvsweb.openbsd.org/cgi-bin/cvsweb/~checkout~/src/sys/kern/syscalls.master' | ./mksysnum_openbsd.pl"
|
||||
+ # Let the type of C char be signed to make the bare syscall
|
||||
+ # API consistent between platforms.
|
||||
+ mktypes="GOARCH=$GOARCH go tool cgo -godefs -- -fsigned-char"
|
||||
+ mkasm="go run mkasm.go"
|
||||
;;
|
||||
plan9_386)
|
||||
mkerrors=
|
||||
openbsd_ppc64)
|
||||
GOOSARCH_in="syscall_openbsd_libc.go syscall_openbsd_$GOARCH.go"
|
||||
|
|
|
@ -1,17 +0,0 @@
|
|||
Index: src/syscall/syscall_openbsd1.go
|
||||
--- src/syscall/syscall_openbsd1.go.orig
|
||||
+++ src/syscall/syscall_openbsd1.go
|
||||
@@ -1,13 +0,0 @@
|
||||
-// 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.
|
||||
-
|
||||
-//go:build openbsd && mips64
|
||||
-
|
||||
-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
|
|
@ -10,3 +10,41 @@ Index: src/syscall/syscall_openbsd_libc.go
|
|||
|
||||
package syscall
|
||||
|
||||
@@ -16,26 +16,30 @@ func init() {
|
||||
execveOpenBSD = execve
|
||||
}
|
||||
|
||||
-//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(abi.FuncPCABI0(libc_syscall_trampoline), trap, a1, a2, a3, 0, 0)
|
||||
+ if trap == SYS_IOCTL {
|
||||
+ return syscallX(abi.FuncPCABI0(libc_ioctl_trampoline), a1, a2, a3)
|
||||
+ }
|
||||
+ return 0, 0, ENOSYS
|
||||
}
|
||||
|
||||
func syscall6Internal(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) {
|
||||
- return syscall10X(abi.FuncPCABI0(libc_syscall_trampoline), trap, a1, a2, a3, a4, a5, a6, 0, 0, 0)
|
||||
+ if trap == SYS___SYSCTL {
|
||||
+ return syscall6X(abi.FuncPCABI0(libc_sysctl_trampoline), a1, a2, a3, a4, a5, a6)
|
||||
+ }
|
||||
+ return 0, 0, ENOSYS
|
||||
}
|
||||
|
||||
func rawSyscallInternal(trap, a1, a2, a3 uintptr) (r1, r2 uintptr, err Errno) {
|
||||
- return rawSyscall6X(abi.FuncPCABI0(libc_syscall_trampoline), trap, a1, a2, a3, 0, 0)
|
||||
+ return 0, 0, ENOSYS
|
||||
}
|
||||
|
||||
func rawSyscall6Internal(trap, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) {
|
||||
- return rawSyscall10X(abi.FuncPCABI0(libc_syscall_trampoline), trap, a1, a2, a3, a4, a5, a6, 0, 0, 0)
|
||||
+ return 0, 0, ENOSYS
|
||||
}
|
||||
|
||||
func syscall9Internal(trap, a1, a2, a3, a4, a5, a6, a7, a8, a9 uintptr) (r1, r2 uintptr, err Errno) {
|
||||
- return rawSyscall10X(abi.FuncPCABI0(libc_syscall_trampoline), trap, a1, a2, a3, a4, a5, a6, a7, a8, a9)
|
||||
+ return 0, 0, ENOSYS
|
||||
}
|
||||
|
||||
// Implemented in the runtime package (runtime/sys_openbsd3.go)
|
||||
|
|
|
@ -1,42 +0,0 @@
|
|||
Index: src/syscall/syscall_openbsd_riscv64.go
|
||||
--- src/syscall/syscall_openbsd_riscv64.go.orig
|
||||
+++ src/syscall/syscall_openbsd_riscv64.go
|
||||
@@ -0,0 +1,38 @@
|
||||
+// Copyright 2019 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 syscall
|
||||
+
|
||||
+func setTimespec(sec, nsec int64) Timespec {
|
||||
+ return Timespec{Sec: sec, Nsec: nsec}
|
||||
+}
|
||||
+
|
||||
+func setTimeval(sec, usec int64) Timeval {
|
||||
+ return Timeval{Sec: sec, Usec: usec}
|
||||
+}
|
||||
+
|
||||
+func SetKevent(k *Kevent_t, fd, mode, flags int) {
|
||||
+ k.Ident = uint64(fd)
|
||||
+ k.Filter = int16(mode)
|
||||
+ k.Flags = uint16(flags)
|
||||
+}
|
||||
+
|
||||
+func (iov *Iovec) SetLen(length int) {
|
||||
+ iov.Len = uint64(length)
|
||||
+}
|
||||
+
|
||||
+func (msghdr *Msghdr) SetControllen(length int) {
|
||||
+ msghdr.Controllen = uint32(length)
|
||||
+}
|
||||
+
|
||||
+func (cmsg *Cmsghdr) SetLen(length int) {
|
||||
+ cmsg.Len = uint32(length)
|
||||
+}
|
||||
+
|
||||
+// RTM_LOCK only exists in OpenBSD 6.3 and earlier.
|
||||
+const RTM_LOCK = 0x8
|
||||
+
|
||||
+// SYS___SYSCTL only exists in OpenBSD 5.8 and earlier, when it was
|
||||
+// was renamed to SYS_SYSCTL.
|
||||
+const SYS___SYSCTL = SYS_SYSCTL
|
File diff suppressed because it is too large
Load diff
25
lang/go/patches/patch-src_syscall_zsyscall_openbsd_386_go
Normal file
25
lang/go/patches/patch-src_syscall_zsyscall_openbsd_386_go
Normal file
|
@ -0,0 +1,25 @@
|
|||
Index: src/syscall/zsyscall_openbsd_386.go
|
||||
--- src/syscall/zsyscall_openbsd_386.go.orig
|
||||
+++ src/syscall/zsyscall_openbsd_386.go
|
||||
@@ -1729,21 +1729,6 @@ func libc_utimensat_trampoline()
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
-func directSyscall(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr, a4 uintptr, a5 uintptr) (ret uintptr, err error) {
|
||||
- r0, _, e1 := syscall6(abi.FuncPCABI0(libc_syscall_trampoline), uintptr(trap), uintptr(a1), uintptr(a2), uintptr(a3), uintptr(a4), uintptr(a5))
|
||||
- ret = uintptr(r0)
|
||||
- if e1 != 0 {
|
||||
- err = errnoErr(e1)
|
||||
- }
|
||||
- return
|
||||
-}
|
||||
-
|
||||
-func libc_syscall_trampoline()
|
||||
-
|
||||
-//go:cgo_import_dynamic libc_syscall syscall "libc.so"
|
||||
-
|
||||
-// 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(abi.FuncPCABI0(libc_read_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
|
||||
n = int(r0)
|
12
lang/go/patches/patch-src_syscall_zsyscall_openbsd_386_s
Normal file
12
lang/go/patches/patch-src_syscall_zsyscall_openbsd_386_s
Normal file
|
@ -0,0 +1,12 @@
|
|||
Index: src/syscall/zsyscall_openbsd_386.s
|
||||
--- src/syscall/zsyscall_openbsd_386.s.orig
|
||||
+++ src/syscall/zsyscall_openbsd_386.s
|
||||
@@ -213,8 +213,6 @@ TEXT ·libc_getfsstat_trampoline(SB),NOSPLIT,$0-0
|
||||
JMP libc_getfsstat(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
|
25
lang/go/patches/patch-src_syscall_zsyscall_openbsd_amd64_go
Normal file
25
lang/go/patches/patch-src_syscall_zsyscall_openbsd_amd64_go
Normal file
|
@ -0,0 +1,25 @@
|
|||
Index: src/syscall/zsyscall_openbsd_amd64.go
|
||||
--- src/syscall/zsyscall_openbsd_amd64.go.orig
|
||||
+++ src/syscall/zsyscall_openbsd_amd64.go
|
||||
@@ -1729,21 +1729,6 @@ func libc_utimensat_trampoline()
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
-func directSyscall(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr, a4 uintptr, a5 uintptr) (ret uintptr, err error) {
|
||||
- r0, _, e1 := syscall6X(abi.FuncPCABI0(libc_syscall_trampoline), uintptr(trap), uintptr(a1), uintptr(a2), uintptr(a3), uintptr(a4), uintptr(a5))
|
||||
- ret = uintptr(r0)
|
||||
- if e1 != 0 {
|
||||
- err = errnoErr(e1)
|
||||
- }
|
||||
- return
|
||||
-}
|
||||
-
|
||||
-func libc_syscall_trampoline()
|
||||
-
|
||||
-//go:cgo_import_dynamic libc_syscall syscall "libc.so"
|
||||
-
|
||||
-// 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(abi.FuncPCABI0(libc_read_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
|
||||
n = int(r0)
|
12
lang/go/patches/patch-src_syscall_zsyscall_openbsd_amd64_s
Normal file
12
lang/go/patches/patch-src_syscall_zsyscall_openbsd_amd64_s
Normal file
|
@ -0,0 +1,12 @@
|
|||
Index: src/syscall/zsyscall_openbsd_amd64.s
|
||||
--- src/syscall/zsyscall_openbsd_amd64.s.orig
|
||||
+++ src/syscall/zsyscall_openbsd_amd64.s
|
||||
@@ -213,8 +213,6 @@ TEXT ·libc_getfsstat_trampoline(SB),NOSPLIT,$0-0
|
||||
JMP libc_getfsstat(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
|
25
lang/go/patches/patch-src_syscall_zsyscall_openbsd_arm64_go
Normal file
25
lang/go/patches/patch-src_syscall_zsyscall_openbsd_arm64_go
Normal file
|
@ -0,0 +1,25 @@
|
|||
Index: src/syscall/zsyscall_openbsd_arm64.go
|
||||
--- src/syscall/zsyscall_openbsd_arm64.go.orig
|
||||
+++ src/syscall/zsyscall_openbsd_arm64.go
|
||||
@@ -1729,21 +1729,6 @@ func libc_utimensat_trampoline()
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
-func directSyscall(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr, a4 uintptr, a5 uintptr) (ret uintptr, err error) {
|
||||
- r0, _, e1 := syscall6X(abi.FuncPCABI0(libc_syscall_trampoline), uintptr(trap), uintptr(a1), uintptr(a2), uintptr(a3), uintptr(a4), uintptr(a5))
|
||||
- ret = uintptr(r0)
|
||||
- if e1 != 0 {
|
||||
- err = errnoErr(e1)
|
||||
- }
|
||||
- return
|
||||
-}
|
||||
-
|
||||
-func libc_syscall_trampoline()
|
||||
-
|
||||
-//go:cgo_import_dynamic libc_syscall syscall "libc.so"
|
||||
-
|
||||
-// 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(abi.FuncPCABI0(libc_read_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
|
||||
n = int(r0)
|
12
lang/go/patches/patch-src_syscall_zsyscall_openbsd_arm64_s
Normal file
12
lang/go/patches/patch-src_syscall_zsyscall_openbsd_arm64_s
Normal file
|
@ -0,0 +1,12 @@
|
|||
Index: src/syscall/zsyscall_openbsd_arm64.s
|
||||
--- src/syscall/zsyscall_openbsd_arm64.s.orig
|
||||
+++ src/syscall/zsyscall_openbsd_arm64.s
|
||||
@@ -213,8 +213,6 @@ TEXT ·libc_getfsstat_trampoline(SB),NOSPLIT,$0-0
|
||||
JMP libc_getfsstat(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
|
25
lang/go/patches/patch-src_syscall_zsyscall_openbsd_arm_go
Normal file
25
lang/go/patches/patch-src_syscall_zsyscall_openbsd_arm_go
Normal file
|
@ -0,0 +1,25 @@
|
|||
Index: src/syscall/zsyscall_openbsd_arm.go
|
||||
--- src/syscall/zsyscall_openbsd_arm.go.orig
|
||||
+++ src/syscall/zsyscall_openbsd_arm.go
|
||||
@@ -1729,21 +1729,6 @@ func libc_utimensat_trampoline()
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
-func directSyscall(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr, a4 uintptr, a5 uintptr) (ret uintptr, err error) {
|
||||
- r0, _, e1 := syscall6(abi.FuncPCABI0(libc_syscall_trampoline), uintptr(trap), uintptr(a1), uintptr(a2), uintptr(a3), uintptr(a4), uintptr(a5))
|
||||
- ret = uintptr(r0)
|
||||
- if e1 != 0 {
|
||||
- err = errnoErr(e1)
|
||||
- }
|
||||
- return
|
||||
-}
|
||||
-
|
||||
-func libc_syscall_trampoline()
|
||||
-
|
||||
-//go:cgo_import_dynamic libc_syscall syscall "libc.so"
|
||||
-
|
||||
-// 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(abi.FuncPCABI0(libc_read_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
|
||||
n = int(r0)
|
12
lang/go/patches/patch-src_syscall_zsyscall_openbsd_arm_s
Normal file
12
lang/go/patches/patch-src_syscall_zsyscall_openbsd_arm_s
Normal file
|
@ -0,0 +1,12 @@
|
|||
Index: src/syscall/zsyscall_openbsd_arm.s
|
||||
--- src/syscall/zsyscall_openbsd_arm.s.orig
|
||||
+++ src/syscall/zsyscall_openbsd_arm.s
|
||||
@@ -213,8 +213,6 @@ TEXT ·libc_getfsstat_trampoline(SB),NOSPLIT,$0-0
|
||||
JMP libc_getfsstat(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
|
|
@ -1652,7 +1652,7 @@ Index: src/syscall/zsyscall_openbsd_mips64.go
|
|||
n = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
@@ -1208,10 +1604,14 @@ func write(fd int, p []byte) (n int, err error) {
|
||||
@@ -1208,38 +1604,60 @@ func write(fd int, p []byte) (n int, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -1662,13 +1662,38 @@ Index: src/syscall/zsyscall_openbsd_mips64.go
|
|||
+
|
||||
// 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) {
|
||||
-func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
|
||||
- r0, _, e1 := Syscall9(SYS_MMAP, uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), 0, uintptr(pos), 0, 0)
|
||||
+ r0, _, e1 := syscall6X(abi.FuncPCABI0(libc_mmap_trampoline), uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))
|
||||
ret = uintptr(r0)
|
||||
- ret = uintptr(r0)
|
||||
+func writev(fd int, iovecs []Iovec) (n uintptr, err error) {
|
||||
+ var _p0 unsafe.Pointer
|
||||
+ if len(iovecs) > 0 {
|
||||
+ _p0 = unsafe.Pointer(&iovecs[0])
|
||||
+ } else {
|
||||
+ _p0 = unsafe.Pointer(&_zero)
|
||||
+ }
|
||||
+ r0, _, e1 := syscallX(abi.FuncPCABI0(libc_writev_trampoline), uintptr(fd), uintptr(_p0), uintptr(len(iovecs)))
|
||||
+ n = uintptr(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
@@ -1219,20 +1619,62 @@ func mmap(addr uintptr, length uintptr, prot int, flag
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
+func libc_writev_trampoline()
|
||||
+
|
||||
+//go:cgo_import_dynamic libc_writev writev "libc.so"
|
||||
+
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
-func munmap(addr uintptr, length uintptr) (err error) {
|
||||
- _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
|
||||
+func mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) {
|
||||
+ r0, _, e1 := syscall6X(abi.FuncPCABI0(libc_mmap_trampoline), uintptr(addr), uintptr(length), uintptr(prot), uintptr(flag), uintptr(fd), uintptr(pos))
|
||||
+ ret = uintptr(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -1678,8 +1703,10 @@ Index: src/syscall/zsyscall_openbsd_mips64.go
|
|||
+
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
func munmap(addr uintptr, length uintptr) (err error) {
|
||||
- _, _, e1 := Syscall(SYS_MUNMAP, uintptr(addr), uintptr(length), 0)
|
||||
-func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
|
||||
- r0, _, e1 := Syscall(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
|
||||
- n = int(r0)
|
||||
+func munmap(addr uintptr, length uintptr) (err error) {
|
||||
+ _, _, e1 := syscall(abi.FuncPCABI0(libc_munmap_trampoline), uintptr(addr), uintptr(length), 0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
|
@ -1693,25 +1720,25 @@ Index: src/syscall/zsyscall_openbsd_mips64.go
|
|||
+
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
+func utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error) {
|
||||
+ var _p0 *byte
|
||||
+ _p0, err = BytePtrFromString(path)
|
||||
+ if err != nil {
|
||||
+ return
|
||||
+ }
|
||||
func utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error) {
|
||||
@@ -1248,15 +1666,60 @@ func utimensat(dirfd int, path string, times *[2]Times
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
- _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flag), 0, 0)
|
||||
+ _, _, e1 := syscall6(abi.FuncPCABI0(libc_utimensat_trampoline), uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flag), 0, 0)
|
||||
+ if e1 != 0 {
|
||||
+ err = errnoErr(e1)
|
||||
+ }
|
||||
+ return
|
||||
+}
|
||||
+
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
+func libc_utimensat_trampoline()
|
||||
+
|
||||
+//go:cgo_import_dynamic libc_utimensat utimensat "libc.so"
|
||||
+
|
||||
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
+
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
+func directSyscall(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr, a4 uintptr, a5 uintptr) (ret uintptr, err error) {
|
||||
+ r0, _, e1 := syscall6X(abi.FuncPCABI0(libc_syscall_trampoline), uintptr(trap), uintptr(a1), uintptr(a2), uintptr(a3), uintptr(a4), uintptr(a5))
|
||||
+ ret = uintptr(r0)
|
||||
|
@ -1727,49 +1754,36 @@ Index: src/syscall/zsyscall_openbsd_mips64.go
|
|||
+
|
||||
+// 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(SYS_READ, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
|
||||
+func readlen(fd int, buf *byte, nbuf int) (n int, err error) {
|
||||
+ r0, _, e1 := syscall(abi.FuncPCABI0(libc_read_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
|
||||
n = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
@@ -1243,7 +1685,7 @@ func readlen(fd int, buf *byte, nbuf int) (n int, err
|
||||
// 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(SYS_WRITE, uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
|
||||
+ r0, _, e1 := syscall(abi.FuncPCABI0(libc_write_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
|
||||
n = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
@@ -1253,19 +1695,19 @@ func writelen(fd int, buf *byte, nbuf int) (n int, err
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
-func utimensat(dirfd int, path string, times *[2]Timespec, flag int) (err error) {
|
||||
- var _p0 *byte
|
||||
- _p0, err = BytePtrFromString(path)
|
||||
- if err != nil {
|
||||
- return
|
||||
- }
|
||||
- _, _, e1 := Syscall6(SYS_UTIMENSAT, uintptr(dirfd), uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(times)), uintptr(flag), 0, 0)
|
||||
+ n = int(r0)
|
||||
+ if e1 != 0 {
|
||||
+ err = errnoErr(e1)
|
||||
+ }
|
||||
+ return
|
||||
+}
|
||||
+
|
||||
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
+
|
||||
+func Seek(fd int, offset int64, whence int) (newoffset int64, err error) {
|
||||
+ r0, _, e1 := syscallX(abi.FuncPCABI0(libc_lseek_trampoline), uintptr(fd), uintptr(offset), uintptr(whence))
|
||||
+ newoffset = int64(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
+ if e1 != 0 {
|
||||
+ err = errnoErr(e1)
|
||||
+ }
|
||||
+ return
|
||||
+}
|
||||
+
|
||||
+func libc_lseek_trampoline()
|
||||
+
|
||||
+//go:cgo_import_dynamic libc_lseek lseek "libc.so"
|
||||
+
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
+
|
||||
func getcwd(buf []byte) (n int, err error) {
|
||||
@@ -1275,7 +1717,7 @@ func getcwd(buf []byte) (n int, err error) {
|
||||
var _p0 unsafe.Pointer
|
||||
if len(buf) > 0 {
|
||||
@@ -1264,7 +1727,7 @@ func getcwd(buf []byte) (n int, err error) {
|
||||
} else {
|
||||
_p0 = unsafe.Pointer(&_zero)
|
||||
}
|
||||
|
@ -1778,7 +1792,7 @@ Index: src/syscall/zsyscall_openbsd_mips64.go
|
|||
n = int(r0)
|
||||
if e1 != 0 {
|
||||
err = errnoErr(e1)
|
||||
@@ -1283,6 +1725,10 @@ func getcwd(buf []byte) (n int, err error) {
|
||||
@@ -1272,6 +1735,10 @@ func getcwd(buf []byte) (n int, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -1789,7 +1803,7 @@ Index: src/syscall/zsyscall_openbsd_mips64.go
|
|||
// 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) {
|
||||
@@ -1292,9 +1738,174 @@ func sysctl(mib []_C_int, old *byte, oldlen *uintptr,
|
||||
@@ -1281,9 +1748,174 @@ func sysctl(mib []_C_int, old *byte, oldlen *uintptr,
|
||||
} else {
|
||||
_p0 = unsafe.Pointer(&_zero)
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
Index: src/syscall/zsyscall_openbsd_mips64.s
|
||||
--- src/syscall/zsyscall_openbsd_mips64.s.orig
|
||||
+++ src/syscall/zsyscall_openbsd_mips64.s
|
||||
@@ -0,0 +1,235 @@
|
||||
@@ -0,0 +1,237 @@
|
||||
+// go run mkasm.go openbsd mips64
|
||||
+// Code generated by the command above; DO NOT EDIT.
|
||||
+#include "textflag.h"
|
||||
|
@ -205,6 +205,8 @@ Index: src/syscall/zsyscall_openbsd_mips64.s
|
|||
+ JMP libc_unmount(SB)
|
||||
+TEXT ·libc_write_trampoline(SB),NOSPLIT,$0-0
|
||||
+ JMP libc_write(SB)
|
||||
+TEXT ·libc_writev_trampoline(SB),NOSPLIT,$0-0
|
||||
+ JMP libc_writev(SB)
|
||||
+TEXT ·libc_mmap_trampoline(SB),NOSPLIT,$0-0
|
||||
+ JMP libc_mmap(SB)
|
||||
+TEXT ·libc_munmap_trampoline(SB),NOSPLIT,$0-0
|
||||
|
|
25
lang/go/patches/patch-src_syscall_zsyscall_openbsd_ppc64_go
Normal file
25
lang/go/patches/patch-src_syscall_zsyscall_openbsd_ppc64_go
Normal file
|
@ -0,0 +1,25 @@
|
|||
Index: src/syscall/zsyscall_openbsd_ppc64.go
|
||||
--- src/syscall/zsyscall_openbsd_ppc64.go.orig
|
||||
+++ src/syscall/zsyscall_openbsd_ppc64.go
|
||||
@@ -1729,21 +1729,6 @@ func libc_utimensat_trampoline()
|
||||
|
||||
// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT
|
||||
|
||||
-func directSyscall(trap uintptr, a1 uintptr, a2 uintptr, a3 uintptr, a4 uintptr, a5 uintptr) (ret uintptr, err error) {
|
||||
- r0, _, e1 := syscall6X(abi.FuncPCABI0(libc_syscall_trampoline), uintptr(trap), uintptr(a1), uintptr(a2), uintptr(a3), uintptr(a4), uintptr(a5))
|
||||
- ret = uintptr(r0)
|
||||
- if e1 != 0 {
|
||||
- err = errnoErr(e1)
|
||||
- }
|
||||
- return
|
||||
-}
|
||||
-
|
||||
-func libc_syscall_trampoline()
|
||||
-
|
||||
-//go:cgo_import_dynamic libc_syscall syscall "libc.so"
|
||||
-
|
||||
-// 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(abi.FuncPCABI0(libc_read_trampoline), uintptr(fd), uintptr(unsafe.Pointer(buf)), uintptr(nbuf))
|
||||
n = int(r0)
|
13
lang/go/patches/patch-src_syscall_zsyscall_openbsd_ppc64_s
Normal file
13
lang/go/patches/patch-src_syscall_zsyscall_openbsd_ppc64_s
Normal file
|
@ -0,0 +1,13 @@
|
|||
Index: src/syscall/zsyscall_openbsd_ppc64.s
|
||||
--- src/syscall/zsyscall_openbsd_ppc64.s.orig
|
||||
+++ src/syscall/zsyscall_openbsd_ppc64.s
|
||||
@@ -319,9 +319,6 @@ TEXT ·libc_getfsstat_trampoline(SB),NOSPLIT,$0-0
|
||||
TEXT ·libc_utimensat_trampoline(SB),NOSPLIT,$0-0
|
||||
CALL libc_utimensat(SB)
|
||||
RET
|
||||
-TEXT ·libc_syscall_trampoline(SB),NOSPLIT,$0-0
|
||||
- CALL libc_syscall(SB)
|
||||
- RET
|
||||
TEXT ·libc_lseek_trampoline(SB),NOSPLIT,$0-0
|
||||
CALL libc_lseek(SB)
|
||||
RET
|
File diff suppressed because it is too large
Load diff
|
@ -1,241 +1,12 @@
|
|||
Index: src/syscall/zsyscall_openbsd_riscv64.s
|
||||
--- src/syscall/zsyscall_openbsd_riscv64.s.orig
|
||||
+++ src/syscall/zsyscall_openbsd_riscv64.s
|
||||
@@ -0,0 +1,237 @@
|
||||
+// go run mkasm.go openbsd riscv64
|
||||
+// 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_dup3_trampoline(SB),NOSPLIT,$0-0
|
||||
+ JMP libc_dup3(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_writev_trampoline(SB),NOSPLIT,$0-0
|
||||
+ JMP libc_writev(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)
|
||||
@@ -213,8 +213,6 @@ TEXT ·libc_getfsstat_trampoline(SB),NOSPLIT,$0-0
|
||||
JMP libc_getfsstat(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
|
||||
|
|
|
@ -1,204 +0,0 @@
|
|||
Index: src/syscall/zsysctl_openbsd.go
|
||||
--- src/syscall/zsysctl_openbsd.go.orig
|
||||
+++ src/syscall/zsysctl_openbsd.go
|
||||
@@ -14,6 +14,7 @@ var sysctlMib = []mibentry{
|
||||
{"ddb.max_line", []_C_int{9, 3}},
|
||||
{"ddb.max_width", []_C_int{9, 2}},
|
||||
{"ddb.panic", []_C_int{9, 5}},
|
||||
+ {"ddb.profile", []_C_int{9, 9}},
|
||||
{"ddb.radix", []_C_int{9, 1}},
|
||||
{"ddb.tab_stop_width", []_C_int{9, 4}},
|
||||
{"ddb.trigger", []_C_int{9, 8}},
|
||||
@@ -28,30 +29,39 @@ var sysctlMib = []mibentry{
|
||||
{"hw.model", []_C_int{6, 2}},
|
||||
{"hw.ncpu", []_C_int{6, 3}},
|
||||
{"hw.ncpufound", []_C_int{6, 21}},
|
||||
+ {"hw.ncpuonline", []_C_int{6, 25}},
|
||||
{"hw.pagesize", []_C_int{6, 7}},
|
||||
+ {"hw.perfpolicy", []_C_int{6, 23}},
|
||||
{"hw.physmem", []_C_int{6, 19}},
|
||||
+ {"hw.power", []_C_int{6, 26}},
|
||||
{"hw.product", []_C_int{6, 15}},
|
||||
{"hw.serialno", []_C_int{6, 17}},
|
||||
{"hw.setperf", []_C_int{6, 13}},
|
||||
+ {"hw.smt", []_C_int{6, 24}},
|
||||
{"hw.usermem", []_C_int{6, 20}},
|
||||
{"hw.uuid", []_C_int{6, 18}},
|
||||
{"hw.vendor", []_C_int{6, 14}},
|
||||
{"hw.version", []_C_int{6, 16}},
|
||||
- {"kern.arandom", []_C_int{1, 37}},
|
||||
+ {"kern.allowdt", []_C_int{1, 65}},
|
||||
+ {"kern.allowkmem", []_C_int{1, 52}},
|
||||
{"kern.argmax", []_C_int{1, 8}},
|
||||
+ {"kern.audio", []_C_int{1, 84}},
|
||||
{"kern.boottime", []_C_int{1, 21}},
|
||||
{"kern.bufcachepercent", []_C_int{1, 72}},
|
||||
{"kern.ccpu", []_C_int{1, 45}},
|
||||
{"kern.clockrate", []_C_int{1, 12}},
|
||||
+ {"kern.consbuf", []_C_int{1, 83}},
|
||||
+ {"kern.consbufsize", []_C_int{1, 82}},
|
||||
{"kern.consdev", []_C_int{1, 75}},
|
||||
{"kern.cp_time", []_C_int{1, 40}},
|
||||
{"kern.cp_time2", []_C_int{1, 71}},
|
||||
- {"kern.cryptodevallowsoft", []_C_int{1, 53}},
|
||||
+ {"kern.cpustats", []_C_int{1, 85}},
|
||||
{"kern.domainname", []_C_int{1, 22}},
|
||||
{"kern.file", []_C_int{1, 73}},
|
||||
{"kern.forkstat", []_C_int{1, 42}},
|
||||
{"kern.fscale", []_C_int{1, 46}},
|
||||
{"kern.fsync", []_C_int{1, 33}},
|
||||
+ {"kern.global_ptrace", []_C_int{1, 81}},
|
||||
{"kern.hostid", []_C_int{1, 11}},
|
||||
{"kern.hostname", []_C_int{1, 10}},
|
||||
{"kern.intrcnt.nintrcnt", []_C_int{1, 63, 1}},
|
||||
@@ -81,10 +91,10 @@ var sysctlMib = []mibentry{
|
||||
{"kern.osrevision", []_C_int{1, 3}},
|
||||
{"kern.ostype", []_C_int{1, 1}},
|
||||
{"kern.osversion", []_C_int{1, 27}},
|
||||
+ {"kern.pfstatus", []_C_int{1, 86}},
|
||||
{"kern.pool_debug", []_C_int{1, 77}},
|
||||
{"kern.posix1version", []_C_int{1, 17}},
|
||||
{"kern.proc", []_C_int{1, 66}},
|
||||
- {"kern.random", []_C_int{1, 31}},
|
||||
{"kern.rawpartition", []_C_int{1, 24}},
|
||||
{"kern.saved_ids", []_C_int{1, 20}},
|
||||
{"kern.securelevel", []_C_int{1, 9}},
|
||||
@@ -102,21 +112,20 @@ var sysctlMib = []mibentry{
|
||||
{"kern.timecounter.hardware", []_C_int{1, 69, 3}},
|
||||
{"kern.timecounter.tick", []_C_int{1, 69, 1}},
|
||||
{"kern.timecounter.timestepwarnings", []_C_int{1, 69, 2}},
|
||||
- {"kern.tty.maxptys", []_C_int{1, 44, 6}},
|
||||
- {"kern.tty.nptys", []_C_int{1, 44, 7}},
|
||||
+ {"kern.timeout_stats", []_C_int{1, 87}},
|
||||
{"kern.tty.tk_cancc", []_C_int{1, 44, 4}},
|
||||
{"kern.tty.tk_nin", []_C_int{1, 44, 1}},
|
||||
{"kern.tty.tk_nout", []_C_int{1, 44, 2}},
|
||||
{"kern.tty.tk_rawcc", []_C_int{1, 44, 3}},
|
||||
{"kern.tty.ttyinfo", []_C_int{1, 44, 5}},
|
||||
{"kern.ttycount", []_C_int{1, 57}},
|
||||
- {"kern.userasymcrypto", []_C_int{1, 60}},
|
||||
- {"kern.usercrypto", []_C_int{1, 52}},
|
||||
- {"kern.usermount", []_C_int{1, 30}},
|
||||
+ {"kern.utc_offset", []_C_int{1, 88}},
|
||||
{"kern.version", []_C_int{1, 4}},
|
||||
- {"kern.vnode", []_C_int{1, 13}},
|
||||
+ {"kern.video", []_C_int{1, 89}},
|
||||
{"kern.watchdog.auto", []_C_int{1, 64, 2}},
|
||||
{"kern.watchdog.period", []_C_int{1, 64, 1}},
|
||||
+ {"kern.witnesswatch", []_C_int{1, 53}},
|
||||
+ {"kern.wxabort", []_C_int{1, 74}},
|
||||
{"net.bpf.bufsize", []_C_int{4, 31, 1}},
|
||||
{"net.bpf.maxbufsize", []_C_int{4, 31, 2}},
|
||||
{"net.inet.ah.enable", []_C_int{4, 2, 51, 1}},
|
||||
@@ -144,7 +153,9 @@ var sysctlMib = []mibentry{
|
||||
{"net.inet.icmp.stats", []_C_int{4, 2, 1, 7}},
|
||||
{"net.inet.icmp.tstamprepl", []_C_int{4, 2, 1, 6}},
|
||||
{"net.inet.igmp.stats", []_C_int{4, 2, 2, 1}},
|
||||
+ {"net.inet.ip.arpdown", []_C_int{4, 2, 0, 40}},
|
||||
{"net.inet.ip.arpqueued", []_C_int{4, 2, 0, 36}},
|
||||
+ {"net.inet.ip.arptimeout", []_C_int{4, 2, 0, 39}},
|
||||
{"net.inet.ip.encdebug", []_C_int{4, 2, 0, 12}},
|
||||
{"net.inet.ip.forwarding", []_C_int{4, 2, 0, 1}},
|
||||
{"net.inet.ip.ifq.congestion", []_C_int{4, 2, 0, 30, 4}},
|
||||
@@ -153,8 +164,10 @@ var sysctlMib = []mibentry{
|
||||
{"net.inet.ip.ifq.maxlen", []_C_int{4, 2, 0, 30, 2}},
|
||||
{"net.inet.ip.maxqueue", []_C_int{4, 2, 0, 11}},
|
||||
{"net.inet.ip.mforwarding", []_C_int{4, 2, 0, 31}},
|
||||
+ {"net.inet.ip.mrtmfc", []_C_int{4, 2, 0, 37}},
|
||||
{"net.inet.ip.mrtproto", []_C_int{4, 2, 0, 34}},
|
||||
{"net.inet.ip.mrtstats", []_C_int{4, 2, 0, 35}},
|
||||
+ {"net.inet.ip.mrtvif", []_C_int{4, 2, 0, 38}},
|
||||
{"net.inet.ip.mtu", []_C_int{4, 2, 0, 4}},
|
||||
{"net.inet.ip.mtudisc", []_C_int{4, 2, 0, 27}},
|
||||
{"net.inet.ip.mtudisctimeout", []_C_int{4, 2, 0, 28}},
|
||||
@@ -171,9 +184,7 @@ var sysctlMib = []mibentry{
|
||||
{"net.inet.ipcomp.stats", []_C_int{4, 2, 108, 2}},
|
||||
{"net.inet.ipip.allow", []_C_int{4, 2, 4, 1}},
|
||||
{"net.inet.ipip.stats", []_C_int{4, 2, 4, 2}},
|
||||
- {"net.inet.mobileip.allow", []_C_int{4, 2, 55, 1}},
|
||||
{"net.inet.pfsync.stats", []_C_int{4, 2, 240, 1}},
|
||||
- {"net.inet.pim.stats", []_C_int{4, 2, 103, 1}},
|
||||
{"net.inet.tcp.ackonpush", []_C_int{4, 2, 6, 13}},
|
||||
{"net.inet.tcp.always_keepalive", []_C_int{4, 2, 6, 22}},
|
||||
{"net.inet.tcp.baddynamic", []_C_int{4, 2, 6, 6}},
|
||||
@@ -187,6 +198,7 @@ var sysctlMib = []mibentry{
|
||||
{"net.inet.tcp.reasslimit", []_C_int{4, 2, 6, 18}},
|
||||
{"net.inet.tcp.rfc1323", []_C_int{4, 2, 6, 1}},
|
||||
{"net.inet.tcp.rfc3390", []_C_int{4, 2, 6, 17}},
|
||||
+ {"net.inet.tcp.rootonly", []_C_int{4, 2, 6, 24}},
|
||||
{"net.inet.tcp.rstppslimit", []_C_int{4, 2, 6, 12}},
|
||||
{"net.inet.tcp.sack", []_C_int{4, 2, 6, 10}},
|
||||
{"net.inet.tcp.sackholelimit", []_C_int{4, 2, 6, 20}},
|
||||
@@ -194,9 +206,12 @@ var sysctlMib = []mibentry{
|
||||
{"net.inet.tcp.stats", []_C_int{4, 2, 6, 21}},
|
||||
{"net.inet.tcp.synbucketlimit", []_C_int{4, 2, 6, 16}},
|
||||
{"net.inet.tcp.syncachelimit", []_C_int{4, 2, 6, 15}},
|
||||
+ {"net.inet.tcp.synhashsize", []_C_int{4, 2, 6, 25}},
|
||||
+ {"net.inet.tcp.synuselimit", []_C_int{4, 2, 6, 23}},
|
||||
{"net.inet.udp.baddynamic", []_C_int{4, 2, 17, 2}},
|
||||
{"net.inet.udp.checksum", []_C_int{4, 2, 17, 1}},
|
||||
{"net.inet.udp.recvspace", []_C_int{4, 2, 17, 3}},
|
||||
+ {"net.inet.udp.rootonly", []_C_int{4, 2, 17, 6}},
|
||||
{"net.inet.udp.sendspace", []_C_int{4, 2, 17, 4}},
|
||||
{"net.inet.udp.stats", []_C_int{4, 2, 17, 5}},
|
||||
{"net.inet6.divert.recvspace", []_C_int{4, 24, 86, 1}},
|
||||
@@ -209,13 +224,8 @@ var sysctlMib = []mibentry{
|
||||
{"net.inet6.icmp6.nd6_delay", []_C_int{4, 24, 30, 8}},
|
||||
{"net.inet6.icmp6.nd6_maxnudhint", []_C_int{4, 24, 30, 15}},
|
||||
{"net.inet6.icmp6.nd6_mmaxtries", []_C_int{4, 24, 30, 10}},
|
||||
- {"net.inet6.icmp6.nd6_prune", []_C_int{4, 24, 30, 6}},
|
||||
{"net.inet6.icmp6.nd6_umaxtries", []_C_int{4, 24, 30, 9}},
|
||||
- {"net.inet6.icmp6.nd6_useloopback", []_C_int{4, 24, 30, 11}},
|
||||
- {"net.inet6.icmp6.nodeinfo", []_C_int{4, 24, 30, 13}},
|
||||
- {"net.inet6.icmp6.rediraccept", []_C_int{4, 24, 30, 2}},
|
||||
{"net.inet6.icmp6.redirtimeout", []_C_int{4, 24, 30, 3}},
|
||||
- {"net.inet6.ip6.accept_rtadv", []_C_int{4, 24, 17, 12}},
|
||||
{"net.inet6.ip6.auto_flowlabel", []_C_int{4, 24, 17, 17}},
|
||||
{"net.inet6.ip6.dad_count", []_C_int{4, 24, 17, 16}},
|
||||
{"net.inet6.ip6.dad_pending", []_C_int{4, 24, 17, 49}},
|
||||
@@ -228,20 +238,19 @@ var sysctlMib = []mibentry{
|
||||
{"net.inet6.ip6.maxdynroutes", []_C_int{4, 24, 17, 48}},
|
||||
{"net.inet6.ip6.maxfragpackets", []_C_int{4, 24, 17, 9}},
|
||||
{"net.inet6.ip6.maxfrags", []_C_int{4, 24, 17, 41}},
|
||||
- {"net.inet6.ip6.maxifdefrouters", []_C_int{4, 24, 17, 47}},
|
||||
- {"net.inet6.ip6.maxifprefixes", []_C_int{4, 24, 17, 46}},
|
||||
{"net.inet6.ip6.mforwarding", []_C_int{4, 24, 17, 42}},
|
||||
+ {"net.inet6.ip6.mrtmfc", []_C_int{4, 24, 17, 53}},
|
||||
+ {"net.inet6.ip6.mrtmif", []_C_int{4, 24, 17, 52}},
|
||||
{"net.inet6.ip6.mrtproto", []_C_int{4, 24, 17, 8}},
|
||||
{"net.inet6.ip6.mtudisctimeout", []_C_int{4, 24, 17, 50}},
|
||||
{"net.inet6.ip6.multicast_mtudisc", []_C_int{4, 24, 17, 44}},
|
||||
{"net.inet6.ip6.multipath", []_C_int{4, 24, 17, 43}},
|
||||
{"net.inet6.ip6.neighborgcthresh", []_C_int{4, 24, 17, 45}},
|
||||
{"net.inet6.ip6.redirect", []_C_int{4, 24, 17, 2}},
|
||||
- {"net.inet6.ip6.rr_prune", []_C_int{4, 24, 17, 22}},
|
||||
+ {"net.inet6.ip6.soiikey", []_C_int{4, 24, 17, 54}},
|
||||
{"net.inet6.ip6.sourcecheck", []_C_int{4, 24, 17, 10}},
|
||||
{"net.inet6.ip6.sourcecheck_logint", []_C_int{4, 24, 17, 11}},
|
||||
{"net.inet6.ip6.use_deprecated", []_C_int{4, 24, 17, 21}},
|
||||
- {"net.inet6.ip6.v6only", []_C_int{4, 24, 17, 24}},
|
||||
{"net.key.sadb_dump", []_C_int{4, 30, 1}},
|
||||
{"net.key.spd_dump", []_C_int{4, 30, 2}},
|
||||
{"net.mpls.ifq.congestion", []_C_int{4, 33, 3, 4}},
|
||||
@@ -250,21 +259,7 @@ var sysctlMib = []mibentry{
|
||||
{"net.mpls.ifq.maxlen", []_C_int{4, 33, 3, 2}},
|
||||
{"net.mpls.mapttl_ip", []_C_int{4, 33, 5}},
|
||||
{"net.mpls.mapttl_ip6", []_C_int{4, 33, 6}},
|
||||
- {"net.mpls.maxloop_inkernel", []_C_int{4, 33, 4}},
|
||||
{"net.mpls.ttl", []_C_int{4, 33, 2}},
|
||||
{"net.pflow.stats", []_C_int{4, 34, 1}},
|
||||
{"net.pipex.enable", []_C_int{4, 35, 1}},
|
||||
- {"vm.anonmin", []_C_int{2, 7}},
|
||||
- {"vm.loadavg", []_C_int{2, 2}},
|
||||
- {"vm.maxslp", []_C_int{2, 10}},
|
||||
- {"vm.nkmempages", []_C_int{2, 6}},
|
||||
- {"vm.psstrings", []_C_int{2, 3}},
|
||||
- {"vm.swapencrypt.enable", []_C_int{2, 5, 0}},
|
||||
- {"vm.swapencrypt.keyscreated", []_C_int{2, 5, 1}},
|
||||
- {"vm.swapencrypt.keysdeleted", []_C_int{2, 5, 2}},
|
||||
- {"vm.uspace", []_C_int{2, 11}},
|
||||
- {"vm.uvmexp", []_C_int{2, 4}},
|
||||
- {"vm.vmmeter", []_C_int{2, 1}},
|
||||
- {"vm.vnodemin", []_C_int{2, 9}},
|
||||
- {"vm.vtextmin", []_C_int{2, 8}},
|
||||
}
|
|
@ -1,232 +0,0 @@
|
|||
Index: src/syscall/zsysnum_openbsd_riscv64.go
|
||||
--- src/syscall/zsysnum_openbsd_riscv64.go.orig
|
||||
+++ src/syscall/zsysnum_openbsd_riscv64.go
|
||||
@@ -0,0 +1,228 @@
|
||||
+// mksysnum_openbsd.pl
|
||||
+// Code generated by the command above; DO NOT EDIT.
|
||||
+
|
||||
+package syscall
|
||||
+
|
||||
+const (
|
||||
+ SYS_EXIT = 1 // { void sys_exit(int rval); }
|
||||
+ SYS_FORK = 2 // { int sys_fork(void); }
|
||||
+ SYS_READ = 3 // { ssize_t sys_read(int fd, void *buf, size_t nbyte); }
|
||||
+ SYS_WRITE = 4 // { ssize_t sys_write(int fd, const void *buf, \
|
||||
+ SYS_OPEN = 5 // { int sys_open(const char *path, \
|
||||
+ SYS_CLOSE = 6 // { int sys_close(int fd); }
|
||||
+ SYS_GETENTROPY = 7 // { int sys_getentropy(void *buf, size_t nbyte); }
|
||||
+ SYS___TFORK = 8 // { int sys___tfork(const struct __tfork *param, \
|
||||
+ SYS_LINK = 9 // { int sys_link(const char *path, const char *link); }
|
||||
+ SYS_UNLINK = 10 // { int sys_unlink(const char *path); }
|
||||
+ SYS_WAIT4 = 11 // { pid_t sys_wait4(pid_t pid, int *status, \
|
||||
+ SYS_CHDIR = 12 // { int sys_chdir(const char *path); }
|
||||
+ SYS_FCHDIR = 13 // { int sys_fchdir(int fd); }
|
||||
+ SYS_MKNOD = 14 // { int sys_mknod(const char *path, mode_t mode, \
|
||||
+ SYS_CHMOD = 15 // { int sys_chmod(const char *path, mode_t mode); }
|
||||
+ SYS_CHOWN = 16 // { int sys_chown(const char *path, uid_t uid, \
|
||||
+ SYS_OBREAK = 17 // { int sys_obreak(char *nsize); } break
|
||||
+ SYS_GETDTABLECOUNT = 18 // { int sys_getdtablecount(void); }
|
||||
+ SYS_GETRUSAGE = 19 // { int sys_getrusage(int who, \
|
||||
+ SYS_GETPID = 20 // { pid_t sys_getpid(void); }
|
||||
+ SYS_MOUNT = 21 // { int sys_mount(const char *type, const char *path, \
|
||||
+ SYS_UNMOUNT = 22 // { int sys_unmount(const char *path, int flags); }
|
||||
+ SYS_SETUID = 23 // { int sys_setuid(uid_t uid); }
|
||||
+ SYS_GETUID = 24 // { uid_t sys_getuid(void); }
|
||||
+ SYS_GETEUID = 25 // { uid_t sys_geteuid(void); }
|
||||
+ SYS_PTRACE = 26 // { int sys_ptrace(int req, pid_t pid, caddr_t addr, \
|
||||
+ SYS_RECVMSG = 27 // { ssize_t sys_recvmsg(int s, struct msghdr *msg, \
|
||||
+ SYS_SENDMSG = 28 // { ssize_t sys_sendmsg(int s, \
|
||||
+ SYS_RECVFROM = 29 // { ssize_t sys_recvfrom(int s, void *buf, size_t len, \
|
||||
+ SYS_ACCEPT = 30 // { int sys_accept(int s, struct sockaddr *name, \
|
||||
+ SYS_GETPEERNAME = 31 // { int sys_getpeername(int fdes, struct sockaddr *asa, \
|
||||
+ SYS_GETSOCKNAME = 32 // { int sys_getsockname(int fdes, struct sockaddr *asa, \
|
||||
+ SYS_ACCESS = 33 // { int sys_access(const char *path, int amode); }
|
||||
+ SYS_CHFLAGS = 34 // { int sys_chflags(const char *path, u_int flags); }
|
||||
+ SYS_FCHFLAGS = 35 // { int sys_fchflags(int fd, u_int flags); }
|
||||
+ SYS_SYNC = 36 // { void sys_sync(void); }
|
||||
+ SYS_MSYSCALL = 37 // { int sys_msyscall(void *addr, size_t len); }
|
||||
+ SYS_STAT = 38 // { int sys_stat(const char *path, struct stat *ub); }
|
||||
+ SYS_GETPPID = 39 // { pid_t sys_getppid(void); }
|
||||
+ SYS_LSTAT = 40 // { int sys_lstat(const char *path, struct stat *ub); }
|
||||
+ SYS_DUP = 41 // { int sys_dup(int fd); }
|
||||
+ SYS_FSTATAT = 42 // { int sys_fstatat(int fd, const char *path, \
|
||||
+ SYS_GETEGID = 43 // { gid_t sys_getegid(void); }
|
||||
+ SYS_PROFIL = 44 // { int sys_profil(caddr_t samples, size_t size, \
|
||||
+ SYS_KTRACE = 45 // { int sys_ktrace(const char *fname, int ops, \
|
||||
+ SYS_SIGACTION = 46 // { int sys_sigaction(int signum, \
|
||||
+ SYS_GETGID = 47 // { gid_t sys_getgid(void); }
|
||||
+ SYS_SIGPROCMASK = 48 // { int sys_sigprocmask(int how, sigset_t mask); }
|
||||
+ SYS_MMAP = 49 // { void *sys_mmap(void *addr, size_t len, int prot, \
|
||||
+ SYS_SETLOGIN = 50 // { int sys_setlogin(const char *namebuf); }
|
||||
+ SYS_ACCT = 51 // { int sys_acct(const char *path); }
|
||||
+ SYS_SIGPENDING = 52 // { int sys_sigpending(void); }
|
||||
+ SYS_FSTAT = 53 // { int sys_fstat(int fd, struct stat *sb); }
|
||||
+ SYS_IOCTL = 54 // { int sys_ioctl(int fd, \
|
||||
+ SYS_REBOOT = 55 // { int sys_reboot(int opt); }
|
||||
+ SYS_REVOKE = 56 // { int sys_revoke(const char *path); }
|
||||
+ SYS_SYMLINK = 57 // { int sys_symlink(const char *path, \
|
||||
+ SYS_READLINK = 58 // { ssize_t sys_readlink(const char *path, \
|
||||
+ SYS_EXECVE = 59 // { int sys_execve(const char *path, \
|
||||
+ SYS_UMASK = 60 // { mode_t sys_umask(mode_t newmask); }
|
||||
+ SYS_CHROOT = 61 // { int sys_chroot(const char *path); }
|
||||
+ SYS_GETFSSTAT = 62 // { int sys_getfsstat(struct statfs *buf, size_t bufsize, \
|
||||
+ SYS_STATFS = 63 // { int sys_statfs(const char *path, \
|
||||
+ SYS_FSTATFS = 64 // { int sys_fstatfs(int fd, struct statfs *buf); }
|
||||
+ SYS_FHSTATFS = 65 // { int sys_fhstatfs(const fhandle_t *fhp, \
|
||||
+ SYS_VFORK = 66 // { int sys_vfork(void); }
|
||||
+ SYS_GETTIMEOFDAY = 67 // { int sys_gettimeofday(struct timeval *tp, \
|
||||
+ SYS_SETTIMEOFDAY = 68 // { int sys_settimeofday(const struct timeval *tv, \
|
||||
+ SYS_SETITIMER = 69 // { int sys_setitimer(int which, \
|
||||
+ SYS_GETITIMER = 70 // { int sys_getitimer(int which, \
|
||||
+ SYS_SELECT = 71 // { int sys_select(int nd, fd_set *in, fd_set *ou, \
|
||||
+ SYS_KEVENT = 72 // { int sys_kevent(int fd, \
|
||||
+ SYS_MUNMAP = 73 // { int sys_munmap(void *addr, size_t len); }
|
||||
+ SYS_MPROTECT = 74 // { int sys_mprotect(void *addr, size_t len, \
|
||||
+ SYS_MADVISE = 75 // { int sys_madvise(void *addr, size_t len, \
|
||||
+ SYS_UTIMES = 76 // { int sys_utimes(const char *path, \
|
||||
+ SYS_FUTIMES = 77 // { int sys_futimes(int fd, \
|
||||
+ SYS_MQUERY = 78 // { void *sys_mquery(void *addr, size_t len, int prot, \
|
||||
+ SYS_GETGROUPS = 79 // { int sys_getgroups(int gidsetsize, \
|
||||
+ SYS_SETGROUPS = 80 // { int sys_setgroups(int gidsetsize, \
|
||||
+ SYS_GETPGRP = 81 // { int sys_getpgrp(void); }
|
||||
+ SYS_SETPGID = 82 // { int sys_setpgid(pid_t pid, pid_t pgid); }
|
||||
+ SYS_FUTEX = 83 // { int sys_futex(uint32_t *f, int op, int val, \
|
||||
+ SYS_UTIMENSAT = 84 // { int sys_utimensat(int fd, const char *path, \
|
||||
+ SYS_FUTIMENS = 85 // { int sys_futimens(int fd, \
|
||||
+ SYS_KBIND = 86 // { int sys_kbind(const struct __kbind *param, \
|
||||
+ SYS_CLOCK_GETTIME = 87 // { int sys_clock_gettime(clockid_t clock_id, \
|
||||
+ SYS_CLOCK_SETTIME = 88 // { int sys_clock_settime(clockid_t clock_id, \
|
||||
+ SYS_CLOCK_GETRES = 89 // { int sys_clock_getres(clockid_t clock_id, \
|
||||
+ SYS_DUP2 = 90 // { int sys_dup2(int from, int to); }
|
||||
+ SYS_NANOSLEEP = 91 // { int sys_nanosleep(const struct timespec *rqtp, \
|
||||
+ SYS_FCNTL = 92 // { int sys_fcntl(int fd, int cmd, ... void *arg); }
|
||||
+ SYS_ACCEPT4 = 93 // { int sys_accept4(int s, struct sockaddr *name, \
|
||||
+ SYS___THRSLEEP = 94 // { int sys___thrsleep(const volatile void *ident, \
|
||||
+ SYS_FSYNC = 95 // { int sys_fsync(int fd); }
|
||||
+ SYS_SETPRIORITY = 96 // { int sys_setpriority(int which, id_t who, int prio); }
|
||||
+ SYS_SOCKET = 97 // { int sys_socket(int domain, int type, int protocol); }
|
||||
+ SYS_CONNECT = 98 // { int sys_connect(int s, const struct sockaddr *name, \
|
||||
+ SYS_GETDENTS = 99 // { int sys_getdents(int fd, void *buf, size_t buflen); }
|
||||
+ SYS_GETPRIORITY = 100 // { int sys_getpriority(int which, id_t who); }
|
||||
+ SYS_PIPE2 = 101 // { int sys_pipe2(int *fdp, int flags); }
|
||||
+ SYS_DUP3 = 102 // { int sys_dup3(int from, int to, int flags); }
|
||||
+ SYS_SIGRETURN = 103 // { int sys_sigreturn(struct sigcontext *sigcntxp); }
|
||||
+ SYS_BIND = 104 // { int sys_bind(int s, const struct sockaddr *name, \
|
||||
+ SYS_SETSOCKOPT = 105 // { int sys_setsockopt(int s, int level, int name, \
|
||||
+ SYS_LISTEN = 106 // { int sys_listen(int s, int backlog); }
|
||||
+ SYS_CHFLAGSAT = 107 // { int sys_chflagsat(int fd, const char *path, \
|
||||
+ SYS_PLEDGE = 108 // { int sys_pledge(const char *promises, \
|
||||
+ SYS_PPOLL = 109 // { int sys_ppoll(struct pollfd *fds, \
|
||||
+ SYS_PSELECT = 110 // { int sys_pselect(int nd, fd_set *in, fd_set *ou, \
|
||||
+ SYS_SIGSUSPEND = 111 // { int sys_sigsuspend(int mask); }
|
||||
+ SYS_SENDSYSLOG = 112 // { int sys_sendsyslog(const char *buf, size_t nbyte, \
|
||||
+ SYS_UNVEIL = 114 // { int sys_unveil(const char *path, \
|
||||
+ SYS___REALPATH = 115 // { int sys___realpath(const char *pathname, \
|
||||
+ SYS_GETSOCKOPT = 118 // { int sys_getsockopt(int s, int level, int name, \
|
||||
+ SYS_THRKILL = 119 // { int sys_thrkill(pid_t tid, int signum, void *tcb); }
|
||||
+ SYS_READV = 120 // { ssize_t sys_readv(int fd, \
|
||||
+ SYS_WRITEV = 121 // { ssize_t sys_writev(int fd, \
|
||||
+ SYS_KILL = 122 // { int sys_kill(int pid, int signum); }
|
||||
+ SYS_FCHOWN = 123 // { int sys_fchown(int fd, uid_t uid, gid_t gid); }
|
||||
+ SYS_FCHMOD = 124 // { int sys_fchmod(int fd, mode_t mode); }
|
||||
+ SYS_SETREUID = 126 // { int sys_setreuid(uid_t ruid, uid_t euid); }
|
||||
+ SYS_SETREGID = 127 // { int sys_setregid(gid_t rgid, gid_t egid); }
|
||||
+ SYS_RENAME = 128 // { int sys_rename(const char *from, const char *to); }
|
||||
+ SYS_FLOCK = 131 // { int sys_flock(int fd, int how); }
|
||||
+ SYS_MKFIFO = 132 // { int sys_mkfifo(const char *path, mode_t mode); }
|
||||
+ SYS_SENDTO = 133 // { ssize_t sys_sendto(int s, const void *buf, \
|
||||
+ SYS_SHUTDOWN = 134 // { int sys_shutdown(int s, int how); }
|
||||
+ SYS_SOCKETPAIR = 135 // { int sys_socketpair(int domain, int type, \
|
||||
+ SYS_MKDIR = 136 // { int sys_mkdir(const char *path, mode_t mode); }
|
||||
+ SYS_RMDIR = 137 // { int sys_rmdir(const char *path); }
|
||||
+ SYS_ADJTIME = 140 // { int sys_adjtime(const struct timeval *delta, \
|
||||
+ SYS_GETLOGIN_R = 141 // { int sys_getlogin_r(char *namebuf, u_int namelen); }
|
||||
+ SYS_SETSID = 147 // { int sys_setsid(void); }
|
||||
+ SYS_QUOTACTL = 148 // { int sys_quotactl(const char *path, int cmd, \
|
||||
+ SYS_YPCONNECT = 150 // { int sys_ypconnect(int type); }
|
||||
+ SYS_NFSSVC = 155 // { int sys_nfssvc(int flag, void *argp); }
|
||||
+ SYS_GETFH = 161 // { int sys_getfh(const char *fname, fhandle_t *fhp); }
|
||||
+ SYS___TMPFD = 164 // { int sys___tmpfd(int flags); }
|
||||
+ SYS_SYSARCH = 165 // { int sys_sysarch(int op, void *parms); }
|
||||
+ SYS_LSEEK = 166 // { off_t sys_lseek(int fd, off_t offset, int whence); }
|
||||
+ SYS_TRUNCATE = 167 // { int sys_truncate(const char *path, off_t length); }
|
||||
+ SYS_FTRUNCATE = 168 // { int sys_ftruncate(int fd, off_t length); }
|
||||
+ SYS_PREAD = 169 // { ssize_t sys_pread(int fd, void *buf, \
|
||||
+ SYS_PWRITE = 170 // { ssize_t sys_pwrite(int fd, const void *buf, \
|
||||
+ SYS_PREADV = 171 // { ssize_t sys_preadv(int fd, \
|
||||
+ SYS_PWRITEV = 172 // { ssize_t sys_pwritev(int fd, \
|
||||
+ SYS_PAD_PREAD = 173 // { ssize_t sys_pad_pread(int fd, void *buf, \
|
||||
+ SYS_PAD_PWRITE = 174 // { ssize_t sys_pad_pwrite(int fd, const void *buf, \
|
||||
+ SYS_SETGID = 181 // { int sys_setgid(gid_t gid); }
|
||||
+ SYS_SETEGID = 182 // { int sys_setegid(gid_t egid); }
|
||||
+ SYS_SETEUID = 183 // { int sys_seteuid(uid_t euid); }
|
||||
+ SYS_PATHCONF = 191 // { long sys_pathconf(const char *path, int name); }
|
||||
+ SYS_FPATHCONF = 192 // { long sys_fpathconf(int fd, int name); }
|
||||
+ SYS_SWAPCTL = 193 // { int sys_swapctl(int cmd, const void *arg, int misc); }
|
||||
+ SYS_GETRLIMIT = 194 // { int sys_getrlimit(int which, \
|
||||
+ SYS_SETRLIMIT = 195 // { int sys_setrlimit(int which, \
|
||||
+ SYS_PAD_MMAP = 197 // { void *sys_pad_mmap(void *addr, size_t len, int prot, \
|
||||
+ SYS_PAD_LSEEK = 199 // { off_t sys_pad_lseek(int fd, int pad, off_t offset, \
|
||||
+ SYS_PAD_TRUNCATE = 200 // { int sys_pad_truncate(const char *path, int pad, \
|
||||
+ SYS_PAD_FTRUNCATE = 201 // { int sys_pad_ftruncate(int fd, int pad, off_t length); }
|
||||
+ SYS_SYSCTL = 202 // { int sys_sysctl(const int *name, u_int namelen, \
|
||||
+ SYS_MLOCK = 203 // { int sys_mlock(const void *addr, size_t len); }
|
||||
+ SYS_MUNLOCK = 204 // { int sys_munlock(const void *addr, size_t len); }
|
||||
+ SYS_GETPGID = 207 // { pid_t sys_getpgid(pid_t pid); }
|
||||
+ SYS_UTRACE = 209 // { int sys_utrace(const char *label, const void *addr, \
|
||||
+ SYS_SEMGET = 221 // { int sys_semget(key_t key, int nsems, int semflg); }
|
||||
+ SYS_MSGGET = 225 // { int sys_msgget(key_t key, int msgflg); }
|
||||
+ SYS_MSGSND = 226 // { int sys_msgsnd(int msqid, const void *msgp, size_t msgsz, \
|
||||
+ SYS_MSGRCV = 227 // { int sys_msgrcv(int msqid, void *msgp, size_t msgsz, \
|
||||
+ SYS_SHMAT = 228 // { void *sys_shmat(int shmid, const void *shmaddr, \
|
||||
+ SYS_SHMDT = 230 // { int sys_shmdt(const void *shmaddr); }
|
||||
+ SYS_MINHERIT = 250 // { int sys_minherit(void *addr, size_t len, \
|
||||
+ SYS_POLL = 252 // { int sys_poll(struct pollfd *fds, \
|
||||
+ SYS_ISSETUGID = 253 // { int sys_issetugid(void); }
|
||||
+ SYS_LCHOWN = 254 // { int sys_lchown(const char *path, uid_t uid, gid_t gid); }
|
||||
+ SYS_GETSID = 255 // { pid_t sys_getsid(pid_t pid); }
|
||||
+ SYS_MSYNC = 256 // { int sys_msync(void *addr, size_t len, int flags); }
|
||||
+ SYS_PIPE = 263 // { int sys_pipe(int *fdp); }
|
||||
+ SYS_FHOPEN = 264 // { int sys_fhopen(const fhandle_t *fhp, int flags); }
|
||||
+ SYS_PAD_PREADV = 267 // { ssize_t sys_pad_preadv(int fd, \
|
||||
+ SYS_PAD_PWRITEV = 268 // { ssize_t sys_pad_pwritev(int fd, \
|
||||
+ SYS_KQUEUE = 269 // { int sys_kqueue(void); }
|
||||
+ SYS_MLOCKALL = 271 // { int sys_mlockall(int flags); }
|
||||
+ SYS_MUNLOCKALL = 272 // { int sys_munlockall(void); }
|
||||
+ SYS_GETRESUID = 281 // { int sys_getresuid(uid_t *ruid, uid_t *euid, \
|
||||
+ SYS_SETRESUID = 282 // { int sys_setresuid(uid_t ruid, uid_t euid, \
|
||||
+ SYS_GETRESGID = 283 // { int sys_getresgid(gid_t *rgid, gid_t *egid, \
|
||||
+ SYS_SETRESGID = 284 // { int sys_setresgid(gid_t rgid, gid_t egid, \
|
||||
+ SYS_PAD_MQUERY = 286 // { void *sys_pad_mquery(void *addr, size_t len, \
|
||||
+ SYS_CLOSEFROM = 287 // { int sys_closefrom(int fd); }
|
||||
+ SYS_SIGALTSTACK = 288 // { int sys_sigaltstack(const struct sigaltstack *nss, \
|
||||
+ SYS_SHMGET = 289 // { int sys_shmget(key_t key, size_t size, int shmflg); }
|
||||
+ SYS_SEMOP = 290 // { int sys_semop(int semid, struct sembuf *sops, \
|
||||
+ SYS_FHSTAT = 294 // { int sys_fhstat(const fhandle_t *fhp, \
|
||||
+ SYS___SEMCTL = 295 // { int sys___semctl(int semid, int semnum, int cmd, \
|
||||
+ SYS_SHMCTL = 296 // { int sys_shmctl(int shmid, int cmd, \
|
||||
+ SYS_MSGCTL = 297 // { int sys_msgctl(int msqid, int cmd, \
|
||||
+ SYS_SCHED_YIELD = 298 // { int sys_sched_yield(void); }
|
||||
+ SYS_GETTHRID = 299 // { pid_t sys_getthrid(void); }
|
||||
+ SYS___THRWAKEUP = 301 // { int sys___thrwakeup(const volatile void *ident, \
|
||||
+ SYS___THREXIT = 302 // { void sys___threxit(pid_t *notdead); }
|
||||
+ SYS___THRSIGDIVERT = 303 // { int sys___thrsigdivert(sigset_t sigmask, \
|
||||
+ SYS___GETCWD = 304 // { int sys___getcwd(char *buf, size_t len); }
|
||||
+ SYS_ADJFREQ = 305 // { int sys_adjfreq(const int64_t *freq, \
|
||||
+ SYS_SETRTABLE = 310 // { int sys_setrtable(int rtableid); }
|
||||
+ SYS_GETRTABLE = 311 // { int sys_getrtable(void); }
|
||||
+ SYS_FACCESSAT = 313 // { int sys_faccessat(int fd, const char *path, \
|
||||
+ SYS_FCHMODAT = 314 // { int sys_fchmodat(int fd, const char *path, \
|
||||
+ SYS_FCHOWNAT = 315 // { int sys_fchownat(int fd, const char *path, \
|
||||
+ SYS_LINKAT = 317 // { int sys_linkat(int fd1, const char *path1, int fd2, \
|
||||
+ SYS_MKDIRAT = 318 // { int sys_mkdirat(int fd, const char *path, \
|
||||
+ SYS_MKFIFOAT = 319 // { int sys_mkfifoat(int fd, const char *path, \
|
||||
+ SYS_MKNODAT = 320 // { int sys_mknodat(int fd, const char *path, \
|
||||
+ SYS_OPENAT = 321 // { int sys_openat(int fd, const char *path, int flags, \
|
||||
+ SYS_READLINKAT = 322 // { ssize_t sys_readlinkat(int fd, const char *path, \
|
||||
+ SYS_RENAMEAT = 323 // { int sys_renameat(int fromfd, const char *from, \
|
||||
+ SYS_SYMLINKAT = 324 // { int sys_symlinkat(const char *path, int fd, \
|
||||
+ SYS_UNLINKAT = 325 // { int sys_unlinkat(int fd, const char *path, \
|
||||
+ SYS___SET_TCB = 329 // { void sys___set_tcb(void *tcb); }
|
||||
+ SYS___GET_TCB = 330 // { void *sys___get_tcb(void); }
|
||||
+)
|
|
@ -1,450 +0,0 @@
|
|||
Index: src/syscall/ztypes_openbsd_riscv64.go
|
||||
--- src/syscall/ztypes_openbsd_riscv64.go.orig
|
||||
+++ src/syscall/ztypes_openbsd_riscv64.go
|
||||
@@ -0,0 +1,446 @@
|
||||
+// Code generated by cmd/cgo -godefs; DO NOT EDIT.
|
||||
+// cgo -godefs -- -fsigned-char types_openbsd.go
|
||||
+
|
||||
+package syscall
|
||||
+
|
||||
+const (
|
||||
+ sizeofPtr = 0x8
|
||||
+ sizeofShort = 0x2
|
||||
+ sizeofInt = 0x4
|
||||
+ sizeofLong = 0x8
|
||||
+ sizeofLongLong = 0x8
|
||||
+)
|
||||
+
|
||||
+type (
|
||||
+ _C_short int16
|
||||
+ _C_int int32
|
||||
+ _C_long int64
|
||||
+ _C_long_long int64
|
||||
+)
|
||||
+
|
||||
+type Timespec struct {
|
||||
+ Sec int64
|
||||
+ Nsec int64
|
||||
+}
|
||||
+
|
||||
+type Timeval struct {
|
||||
+ Sec int64
|
||||
+ Usec int64
|
||||
+}
|
||||
+
|
||||
+type Rusage struct {
|
||||
+ Utime Timeval
|
||||
+ Stime Timeval
|
||||
+ Maxrss int64
|
||||
+ Ixrss int64
|
||||
+ Idrss int64
|
||||
+ Isrss int64
|
||||
+ Minflt int64
|
||||
+ Majflt int64
|
||||
+ Nswap int64
|
||||
+ Inblock int64
|
||||
+ Oublock int64
|
||||
+ Msgsnd int64
|
||||
+ Msgrcv int64
|
||||
+ Nsignals int64
|
||||
+ Nvcsw int64
|
||||
+ Nivcsw int64
|
||||
+}
|
||||
+
|
||||
+type Rlimit struct {
|
||||
+ Cur uint64
|
||||
+ Max uint64
|
||||
+}
|
||||
+
|
||||
+type _Gid_t uint32
|
||||
+
|
||||
+const (
|
||||
+ S_IFMT = 0xf000
|
||||
+ S_IFIFO = 0x1000
|
||||
+ S_IFCHR = 0x2000
|
||||
+ S_IFDIR = 0x4000
|
||||
+ S_IFBLK = 0x6000
|
||||
+ S_IFREG = 0x8000
|
||||
+ S_IFLNK = 0xa000
|
||||
+ S_IFSOCK = 0xc000
|
||||
+ S_ISUID = 0x800
|
||||
+ S_ISGID = 0x400
|
||||
+ S_ISVTX = 0x200
|
||||
+ S_IRUSR = 0x100
|
||||
+ S_IWUSR = 0x80
|
||||
+ S_IXUSR = 0x40
|
||||
+ S_IRWXG = 0x38
|
||||
+ S_IRWXO = 0x7
|
||||
+)
|
||||
+
|
||||
+type Stat_t struct {
|
||||
+ Mode uint32
|
||||
+ Dev int32
|
||||
+ Ino uint64
|
||||
+ Nlink uint32
|
||||
+ Uid uint32
|
||||
+ Gid uint32
|
||||
+ Rdev int32
|
||||
+ Atim Timespec
|
||||
+ Mtim Timespec
|
||||
+ Ctim Timespec
|
||||
+ Size int64
|
||||
+ Blocks int64
|
||||
+ Blksize int32
|
||||
+ Flags uint32
|
||||
+ Gen uint32
|
||||
+ X__st_birthtim Timespec
|
||||
+}
|
||||
+
|
||||
+type Statfs_t struct {
|
||||
+ F_flags uint32
|
||||
+ F_bsize uint32
|
||||
+ F_iosize uint32
|
||||
+ F_blocks uint64
|
||||
+ F_bfree uint64
|
||||
+ F_bavail int64
|
||||
+ F_files uint64
|
||||
+ F_ffree uint64
|
||||
+ F_favail int64
|
||||
+ F_syncwrites uint64
|
||||
+ F_syncreads uint64
|
||||
+ F_asyncwrites uint64
|
||||
+ F_asyncreads uint64
|
||||
+ F_fsid Fsid
|
||||
+ F_namemax uint32
|
||||
+ F_owner uint32
|
||||
+ F_ctime uint64
|
||||
+ F_fstypename [16]int8
|
||||
+ F_mntonname [90]int8
|
||||
+ F_mntfromname [90]int8
|
||||
+ F_mntfromspec [90]int8
|
||||
+ Pad_cgo_0 [2]byte
|
||||
+ Mount_info [160]byte
|
||||
+}
|
||||
+
|
||||
+type Flock_t struct {
|
||||
+ Start int64
|
||||
+ Len int64
|
||||
+ Pid int32
|
||||
+ Type int16
|
||||
+ Whence int16
|
||||
+}
|
||||
+
|
||||
+type Dirent struct {
|
||||
+ Fileno uint64
|
||||
+ Off int64
|
||||
+ Reclen uint16
|
||||
+ Type uint8
|
||||
+ Namlen uint8
|
||||
+ X__d_padding [4]uint8
|
||||
+ Name [256]int8
|
||||
+}
|
||||
+
|
||||
+type Fsid struct {
|
||||
+ Val [2]int32
|
||||
+}
|
||||
+
|
||||
+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 [24]int8
|
||||
+}
|
||||
+
|
||||
+type RawSockaddr struct {
|
||||
+ Len uint8
|
||||
+ Family uint8
|
||||
+ Data [14]int8
|
||||
+}
|
||||
+
|
||||
+type RawSockaddrAny struct {
|
||||
+ Addr RawSockaddr
|
||||
+ Pad [92]int8
|
||||
+}
|
||||
+
|
||||
+type _Socklen uint32
|
||||
+
|
||||
+type Linger struct {
|
||||
+ Onoff int32
|
||||
+ Linger int32
|
||||
+}
|
||||
+
|
||||
+type Iovec struct {
|
||||
+ Base *byte
|
||||
+ Len uint64
|
||||
+}
|
||||
+
|
||||
+type IPMreq struct {
|
||||
+ Multiaddr [4]byte /* in_addr */
|
||||
+ Interface [4]byte /* in_addr */
|
||||
+}
|
||||
+
|
||||
+type IPv6Mreq struct {
|
||||
+ Multiaddr [16]byte /* in6_addr */
|
||||
+ Interface uint32
|
||||
+}
|
||||
+
|
||||
+type Msghdr struct {
|
||||
+ Name *byte
|
||||
+ Namelen uint32
|
||||
+ Iov *Iovec
|
||||
+ Iovlen uint32
|
||||
+ Control *byte
|
||||
+ Controllen uint32
|
||||
+ Flags int32
|
||||
+}
|
||||
+
|
||||
+type Cmsghdr struct {
|
||||
+ Len uint32
|
||||
+ Level int32
|
||||
+ Type int32
|
||||
+}
|
||||
+
|
||||
+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 = 0x20
|
||||
+ SizeofLinger = 0x8
|
||||
+ SizeofIPMreq = 0x8
|
||||
+ SizeofIPv6Mreq = 0x14
|
||||
+ SizeofMsghdr = 0x30
|
||||
+ SizeofCmsghdr = 0xc
|
||||
+ SizeofInet6Pktinfo = 0x14
|
||||
+ SizeofIPv6MTUInfo = 0x20
|
||||
+ SizeofICMPv6Filter = 0x20
|
||||
+)
|
||||
+
|
||||
+const (
|
||||
+ PTRACE_TRACEME = 0x0
|
||||
+ PTRACE_CONT = 0x7
|
||||
+ PTRACE_KILL = 0x8
|
||||
+)
|
||||
+
|
||||
+type Kevent_t struct {
|
||||
+ Ident uint64
|
||||
+ Filter int16
|
||||
+ Flags uint16
|
||||
+ Fflags uint32
|
||||
+ Data int64
|
||||
+ Udata *byte
|
||||
+}
|
||||
+
|
||||
+type FdSet struct {
|
||||
+ Bits [32]uint32
|
||||
+}
|
||||
+
|
||||
+const (
|
||||
+ SizeofIfMsghdr = 0xa8
|
||||
+ SizeofIfData = 0x90
|
||||
+ SizeofIfaMsghdr = 0x18
|
||||
+ SizeofIfAnnounceMsghdr = 0x1a
|
||||
+ SizeofRtMsghdr = 0x60
|
||||
+ SizeofRtMetrics = 0x38
|
||||
+)
|
||||
+
|
||||
+type IfMsghdr struct {
|
||||
+ Msglen uint16
|
||||
+ Version uint8
|
||||
+ Type uint8
|
||||
+ Hdrlen uint16
|
||||
+ Index uint16
|
||||
+ Tableid uint16
|
||||
+ Pad1 uint8
|
||||
+ Pad2 uint8
|
||||
+ Addrs int32
|
||||
+ Flags int32
|
||||
+ Xflags int32
|
||||
+ Data IfData
|
||||
+}
|
||||
+
|
||||
+type IfData struct {
|
||||
+ Type uint8
|
||||
+ Addrlen uint8
|
||||
+ Hdrlen uint8
|
||||
+ Link_state uint8
|
||||
+ Mtu uint32
|
||||
+ Metric uint32
|
||||
+ Rdomain uint32
|
||||
+ Baudrate uint64
|
||||
+ Ipackets uint64
|
||||
+ Ierrors uint64
|
||||
+ Opackets uint64
|
||||
+ Oerrors uint64
|
||||
+ Collisions uint64
|
||||
+ Ibytes uint64
|
||||
+ Obytes uint64
|
||||
+ Imcasts uint64
|
||||
+ Omcasts uint64
|
||||
+ Iqdrops uint64
|
||||
+ Oqdrops uint64
|
||||
+ Noproto uint64
|
||||
+ Capabilities uint32
|
||||
+ Lastchange Timeval
|
||||
+}
|
||||
+
|
||||
+type IfaMsghdr struct {
|
||||
+ Msglen uint16
|
||||
+ Version uint8
|
||||
+ Type uint8
|
||||
+ Hdrlen uint16
|
||||
+ Index uint16
|
||||
+ Tableid uint16
|
||||
+ Pad1 uint8
|
||||
+ Pad2 uint8
|
||||
+ Addrs int32
|
||||
+ Flags int32
|
||||
+ Metric int32
|
||||
+}
|
||||
+
|
||||
+type IfAnnounceMsghdr struct {
|
||||
+ Msglen uint16
|
||||
+ Version uint8
|
||||
+ Type uint8
|
||||
+ Hdrlen uint16
|
||||
+ Index uint16
|
||||
+ What uint16
|
||||
+ Name [16]int8
|
||||
+}
|
||||
+
|
||||
+type RtMsghdr struct {
|
||||
+ Msglen uint16
|
||||
+ Version uint8
|
||||
+ Type uint8
|
||||
+ Hdrlen uint16
|
||||
+ Index uint16
|
||||
+ Tableid uint16
|
||||
+ Priority uint8
|
||||
+ Mpls uint8
|
||||
+ Addrs int32
|
||||
+ Flags int32
|
||||
+ Fmask int32
|
||||
+ Pid int32
|
||||
+ Seq int32
|
||||
+ Errno int32
|
||||
+ Inits uint32
|
||||
+ Rmx RtMetrics
|
||||
+}
|
||||
+
|
||||
+type RtMetrics struct {
|
||||
+ Pksent uint64
|
||||
+ Expire int64
|
||||
+ Locks uint32
|
||||
+ Mtu uint32
|
||||
+ Refcnt uint32
|
||||
+ Hopcount uint32
|
||||
+ Recvpipe uint32
|
||||
+ Sendpipe uint32
|
||||
+ Ssthresh uint32
|
||||
+ Rtt uint32
|
||||
+ Rttvar uint32
|
||||
+ Pad uint32
|
||||
+}
|
||||
+
|
||||
+type Mclpool struct{}
|
||||
+
|
||||
+const (
|
||||
+ SizeofBpfVersion = 0x4
|
||||
+ SizeofBpfStat = 0x8
|
||||
+ SizeofBpfProgram = 0x10
|
||||
+ SizeofBpfInsn = 0x8
|
||||
+ SizeofBpfHdr = 0x18
|
||||
+)
|
||||
+
|
||||
+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 BpfTimeval
|
||||
+ Caplen uint32
|
||||
+ Datalen uint32
|
||||
+ Hdrlen uint16
|
||||
+ Ifidx uint16
|
||||
+ Flowid uint16
|
||||
+ Flags uint8
|
||||
+ Drops uint8
|
||||
+}
|
||||
+
|
||||
+type BpfTimeval struct {
|
||||
+ Sec uint32
|
||||
+ Usec uint32
|
||||
+}
|
||||
+
|
||||
+const (
|
||||
+ _AT_FDCWD = -0x64
|
||||
+)
|
||||
+
|
||||
+type Termios struct {
|
||||
+ Iflag uint32
|
||||
+ Oflag uint32
|
||||
+ Cflag uint32
|
||||
+ Lflag uint32
|
||||
+ Cc [20]uint8
|
||||
+ Ispeed int32
|
||||
+ Ospeed int32
|
||||
+}
|
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue