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 <tobias.klauser@gmail.com>
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
Reviewed-by: Joel Sing <joel@sing.id.au>
diff --git a/unix/syscall_bsd_test.go b/unix/syscall_bsd_test.go
index 50b5f80..8946647 100644
--- a/unix/syscall_bsd_test.go
+++ b/unix/syscall_bsd_test.go
@@ -70,6 +70,14 @@
 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 2a8b1e6..baf5fe6 100644
--- a/unix/ztypes_openbsd_386.go
+++ b/unix/ztypes_openbsd_386.go
@@ -564,12 +564,11 @@
 	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 b1759cf..e21ae8e 100644
--- a/unix/ztypes_openbsd_amd64.go
+++ b/unix/ztypes_openbsd_amd64.go
@@ -564,12 +564,11 @@
 	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 e807de2..f190651 100644
--- a/unix/ztypes_openbsd_arm.go
+++ b/unix/ztypes_openbsd_arm.go
@@ -565,12 +565,11 @@
 	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 ff3aeca..84747c5 100644
--- a/unix/ztypes_openbsd_arm64.go
+++ b/unix/ztypes_openbsd_arm64.go
@@ -558,12 +558,11 @@
 	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 9ecda69..ac5c8b6 100644
--- a/unix/ztypes_openbsd_mips64.go
+++ b/unix/ztypes_openbsd_mips64.go
@@ -558,12 +558,11 @@
 	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
 }