fix CFRelease NULL crash on M5 Pro/Max (#29) PR #27 added NULL checks in getFrequency() to handle missing IOKit voltage-states properties on M5 chips (which lack E-cores). However, the CFRelease calls added in PR #26 were not similarly guarded. CFRelease(NULL) is undefined behavior per Apple docs and crashes the process. This adds NULL guards to the CFRelease calls so they are skipped when the IOKit properties don't exist. Fixes the remaining segfault from #25 that v0.2.0 did not resolve.
The go-m1cpu module is a library for inspecting Apple Silicon CPUs in Go.
Use the m1cpu Go package for looking up the CPU frequency for Apple M1 and M2 CPUs.
go get github.com/shoenig/go-m1cpu@latest
This package requires the use of CGO.
Extracting the CPU properties is done via Apple's IOKit framework, which is accessible only through system C libraries.
Simple Go program to print Apple Silicon M1/M2 CPU speeds.
package main
import (
"fmt"
"github.com/shoenig/go-m1cpu"
)
func main() {
fmt.Println("Apple Silicon", m1cpu.IsAppleSilicon())
fmt.Println("pCore GHz", m1cpu.PCoreGHz())
fmt.Println("eCore GHz", m1cpu.ECoreGHz())
fmt.Println("pCore Hz", m1cpu.PCoreHz())
fmt.Println("eCore Hz", m1cpu.ECoreHz())
}
Using go test to print out available information.
➜ go test -v -run Show
=== RUN Test_Show
cpu_test.go:42: pCore Hz 3504000000
cpu_test.go:43: eCore Hz 2424000000
cpu_test.go:44: pCore GHz 3.504
cpu_test.go:45: eCore GHz 2.424
cpu_test.go:46: pCore count 8
cpu_test.go:47: eCoreCount 4
cpu_test.go:50: pCore Caches 196608 131072 16777216
cpu_test.go:53: eCore Caches 131072 65536 4194304
--- PASS: Test_Show (0.00s)
Open source under the MPL