diff --git a/libcpuid/rdtsc.c b/libcpuid/rdtsc.c index ce672a8..bb65587 100644 --- a/libcpuid/rdtsc.c +++ b/libcpuid/rdtsc.c @@ -109,8 +109,7 @@ int cpu_clock_by_os(void) return (int)result; } -#else -#ifdef __APPLE__ +#elif defined(__APPLE__) #include #include /* Assuming Mac OS X with hw.cpufrequency sysctl */ @@ -122,6 +121,19 @@ int cpu_clock_by_os(void) return -1; return (int) (result / (long long) 1000000); } +#elif defined(__OpenBSD__) +/* Assuming OpenBSD with hw.cpuspeed sysctl */ +#include +#include +int cpu_clock_by_os(void) +{ + int result = -1; + size_t size = sizeof(result); + int mib[2] = { CTL_HW, HW_CPUSPEED }; + if (sysctl(mib, 2, &result, &size, NULL, 0)) + return -1; + return result; +} #else /* Assuming Linux with /proc/cpuinfo */ int cpu_clock_by_os(void) @@ -145,7 +157,6 @@ int cpu_clock_by_os(void) fclose(f); return -1; } -#endif /* __APPLE__ */ #endif /* _WIN32 */ /* Emulate doing useful CPU intensive work */