--- third_party/perfetto/src/base/utils.cc.orig 2026-09-25 15:26:43 UTC +++ third_party/perfetto/src/base/utils.cc @@ -47,7 +47,12 @@ #include #endif -#if PERFETTO_BUILDFLAG(PERFETTO_OS_LINUX_BUT_NOT_QNX) || \ +#if PERFETTO_BUILDFLAG(PERFETTO_OS_OPENBSD) +#include +#endif + +#if (PERFETTO_BUILDFLAG(PERFETTO_OS_LINUX_BUT_NOT_QNX) && \ + !PERFETTO_BUILDFLAG(PERFETTO_OS_BSD)) || \ PERFETTO_BUILDFLAG(PERFETTO_OS_ANDROID) #include @@ -244,14 +249,29 @@ void Daemonize(std::function parent_cb) { std::string GetCurExecutablePath() { std::string self_path; -#if PERFETTO_BUILDFLAG(PERFETTO_OS_LINUX) || \ +#if (PERFETTO_BUILDFLAG(PERFETTO_OS_LINUX) || \ PERFETTO_BUILDFLAG(PERFETTO_OS_ANDROID) || \ - PERFETTO_BUILDFLAG(PERFETTO_OS_FUCHSIA) + PERFETTO_BUILDFLAG(PERFETTO_OS_FUCHSIA)) && \ + !PERFETTO_BUILDFLAG(PERFETTO_OS_BSD) char buf[PATH_MAX]; ssize_t size = readlink("/proc/self/exe", buf, sizeof(buf)); PERFETTO_CHECK(size != -1); // readlink does not null terminate. self_path = std::string(buf, static_cast(size)); +#elif PERFETTO_BUILDFLAG(PERFETTO_OS_OPENBSD) +#if (OpenBSD >= 202610) + char execpath[PATH_MAX]; + int ret = getexecpath(execpath, sizeof(execpath)); + PERFETTO_CHECK(ret != 0); + self_path = std::string(execpath); +#else + char *buf; + const char *cpath = "/usr/local/chrome/chrome"; + if ((buf = getenv("CHROME_EXE_PATH")) != NULL) + self_path = std::string(buf); + else + self_path = std::string(cpath); +#endif #elif PERFETTO_BUILDFLAG(PERFETTO_OS_APPLE) uint32_t size = 0; PERFETTO_CHECK(_NSGetExecutablePath(nullptr, &size)); @@ -315,7 +335,8 @@ void AlignedFree(void* ptr) { } bool IsSyncMemoryTaggingEnabled() { -#if PERFETTO_BUILDFLAG(PERFETTO_OS_LINUX_BUT_NOT_QNX) || \ +#if (PERFETTO_BUILDFLAG(PERFETTO_OS_LINUX_BUT_NOT_QNX) && \ + !PERFETTO_BUILDFLAG(PERFETTO_OS_BSD)) || \ PERFETTO_BUILDFLAG(PERFETTO_OS_ANDROID) // Compute only once per lifetime of the process. static bool cached_value = [] {