From ae416a5f93c7892a9dce2d607fc2479eabbacd70 Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Wed, 3 Nov 2021 09:56:41 +0100 Subject: [PATCH] unix: regenerate type Clockinfo on OpenBSD 6.9 OpenBSD 6.9 changed the definition of Clockinfo, leading TestSysctlClockinfo to fail on OpenBSD 6.9 onwards. Since OpenBSD 6.8 is no longer supported upstream, regenerate Clockinfo on that release and test that SysctlClockInfo fails gracefully on OpenBSD 6.8 and earlier. Fixes golang/go#47629 For golang/go#48977 Change-Id: Ia511b8601af11f70ffcce0f96764c69a67d626b8 Reviewed-on: https://go-review.googlesource.com/c/sys/+/360694 Trust: Tobias Klauser Run-TryBot: Tobias Klauser TryBot-Result: Go Bot Reviewed-by: Bryan C. Mills Reviewed-by: Joel Sing --- unix/syscall_bsd_test.go | 8 ++++++++ unix/ztypes_openbsd_386.go | 11 +++++------ unix/ztypes_openbsd_amd64.go | 11 +++++------ unix/ztypes_openbsd_arm.go | 11 +++++------ unix/ztypes_openbsd_arm64.go | 11 +++++------ unix/ztypes_openbsd_mips64.go | 11 +++++------ 6 files changed, 33 insertions(+), 30 deletions(-) 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 }