diff --git a/unix/syscall_bsd_test.go b/unix/syscall_bsd_test.go index 50b5f80b..8946647f 100644 --- a/unix/syscall_bsd_test.go +++ b/unix/syscall_bsd_test.go @@ -70,6 +70,14 @@ func TestSysctlUint32(t *testing.T) { func TestSysctlClockinfo(t *testing.T) { ci, err := unix.SysctlClockinfo("kern.clockrate") if err != nil { + if runtime.GOOS == "openbsd" && (err == unix.ENOMEM || err == unix.EIO) { + if osrev, _ := unix.SysctlUint32("kern.osrevision"); osrev <= 202010 { + // SysctlClockinfo should fail gracefully due to a struct size + // mismatch on OpenBSD 6.8 and earlier, see + // https://golang.org/issue/47629 + return + } + } t.Fatal(err) } t.Logf("tick = %v, hz = %v, profhz = %v, stathz = %v", diff --git a/unix/ztypes_openbsd_386.go b/unix/ztypes_openbsd_386.go index 2a8b1e6f..baf5fe65 100644 --- a/unix/ztypes_openbsd_386.go +++ b/unix/ztypes_openbsd_386.go @@ -564,12 +564,11 @@ type Uvmexp struct { Kmapent int32 } -const SizeofClockinfo = 0x14 +const SizeofClockinfo = 0x10 type Clockinfo struct { - Hz int32 - Tick int32 - Tickadj int32 - Stathz int32 - Profhz int32 + Hz int32 + Tick int32 + Stathz int32 + Profhz int32 } diff --git a/unix/ztypes_openbsd_amd64.go b/unix/ztypes_openbsd_amd64.go index b1759cf7..e21ae8ec 100644 --- a/unix/ztypes_openbsd_amd64.go +++ b/unix/ztypes_openbsd_amd64.go @@ -564,12 +564,11 @@ type Uvmexp struct { Kmapent int32 } -const SizeofClockinfo = 0x14 +const SizeofClockinfo = 0x10 type Clockinfo struct { - Hz int32 - Tick int32 - Tickadj int32 - Stathz int32 - Profhz int32 + Hz int32 + Tick int32 + Stathz int32 + Profhz int32 } diff --git a/unix/ztypes_openbsd_arm.go b/unix/ztypes_openbsd_arm.go index e807de20..f190651c 100644 --- a/unix/ztypes_openbsd_arm.go +++ b/unix/ztypes_openbsd_arm.go @@ -565,12 +565,11 @@ type Uvmexp struct { Kmapent int32 } -const SizeofClockinfo = 0x14 +const SizeofClockinfo = 0x10 type Clockinfo struct { - Hz int32 - Tick int32 - Tickadj int32 - Stathz int32 - Profhz int32 + Hz int32 + Tick int32 + Stathz int32 + Profhz int32 } diff --git a/unix/ztypes_openbsd_arm64.go b/unix/ztypes_openbsd_arm64.go index ff3aecae..84747c58 100644 --- a/unix/ztypes_openbsd_arm64.go +++ b/unix/ztypes_openbsd_arm64.go @@ -558,12 +558,11 @@ type Uvmexp struct { Kmapent int32 } -const SizeofClockinfo = 0x14 +const SizeofClockinfo = 0x10 type Clockinfo struct { - Hz int32 - Tick int32 - Tickadj int32 - Stathz int32 - Profhz int32 + Hz int32 + Tick int32 + Stathz int32 + Profhz int32 } diff --git a/unix/ztypes_openbsd_mips64.go b/unix/ztypes_openbsd_mips64.go index 9ecda691..ac5c8b63 100644 --- a/unix/ztypes_openbsd_mips64.go +++ b/unix/ztypes_openbsd_mips64.go @@ -558,12 +558,11 @@ type Uvmexp struct { Kmapent int32 } -const SizeofClockinfo = 0x14 +const SizeofClockinfo = 0x10 type Clockinfo struct { - Hz int32 - Tick int32 - Tickadj int32 - Stathz int32 - Profhz int32 + Hz int32 + Tick int32 + Stathz int32 + Profhz int32 }