UPDATE: lang/go > 1.22.1

This commit is contained in:
purplerain 2024-03-24 02:13:10 +00:00
parent fe0c7238a7
commit 3b2a1bcc45
Signed by: purplerain
GPG key ID: F42C07F07E2E35B7
76 changed files with 1152 additions and 7534 deletions

View file

@ -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}"

View file

@ -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

View file

@ -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

View file

@ -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]

View file

@ -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

View file

@ -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.

View 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

View file

@ -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.

View file

@ -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
}
}

View file

@ -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

View file

@ -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

View file

@ -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)

View file

@ -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

View file

@ -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)

View file

@ -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")
}

View file

@ -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)

View file

@ -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")

View file

@ -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)

View file

@ -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,

View file

@ -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
}

View file

@ -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,

View file

@ -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
}

View file

@ -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

View file

@ -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)

View file

@ -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 {

View file

@ -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)

View file

@ -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")
}

View file

@ -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)

View file

@ -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) }

View file

@ -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

View file

@ -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"}: {},

View 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)
+}

View file

@ -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
+}

View 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

View file

@ -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.

View file

@ -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.

View 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>

View file

@ -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;
+}

View file

@ -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
}

View file

@ -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

View file

@ -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
}

View file

@ -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

View file

@ -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)
+}

View file

@ -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

View file

@ -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.
//

View file

@ -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

View file

@ -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

View file

@ -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)

View file

@ -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])

View 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
+}

View 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
-}

View 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
+}

View 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
-}

View file

@ -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"

View file

@ -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

View file

@ -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)

View file

@ -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

View 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)

View 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

View 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)

View 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

View 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)

View 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

View 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)

View 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

View file

@ -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)
}

View file

@ -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

View 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)

View 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

View file

@ -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

View file

@ -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}},
}

View file

@ -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); }
+)

View file

@ -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