Path: blob/main/benchmarks/libcpucycles/files/patch-cpucycles_wrapper.c
16462 views
--- cpucycles/wrapper.c.orig 2024-03-18 00:15:33 UTC1+++ cpucycles/wrapper.c2@@ -16,6 +16,12 @@3#include <inttypes.h>4#include <signal.h>5#include <setjmp.h>6+7+#ifdef __FreeBSD__8+#include <sched.h>9+#include <sys/sysctl.h>10+#endif11+12#include "cpucycles.h"13#include "cpucycles_internal.h"1415@@ -26,7 +32,7 @@ void cpucycles_tracesetup(void)16tracesetup = 1;17}1819-static jmp_buf crash_jmp;20+static sigjmp_buf crash_jmp;2122static void crash(int s)23{24@@ -81,6 +87,21 @@ static double osfreq(void)25if (s > 0) return result;26}2728+#ifdef __FreeBSD__29+ {30+ int freq;31+ size_t len = sizeof freq;32+ char *freqctl;33+34+ if (asprintf(&freqctl, "dev.cpu.%d.freq", sched_getcpu())) {35+ if (sysctlbyname(freqctl, &freq, &len, NULL, 0) == 0) {36+ free(freqctl);37+ return 1e6 * freq;38+ } else39+ free(freqctl);40+ }41+ }42+#else43f = fopen("/sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed", "r");44if (f) {45s = fscanf(f,"%lf",&result);46@@ -163,6 +184,7 @@ static double osfreq(void)47pclose(f);48if (result) return 1000000.0 * result;49}50+#endif /* defined(__FreeBSD__) */5152x = getenv("cpucyclespersecond");53if (x) {545556