From 4d4308af780bbb79af79e2a6429c49114634db2a Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Wed, 24 Dec 2025 21:43:36 +0100 Subject: [PATCH] fix: resolve coverage profile symbol at runtime --- .../Tests/ClawdisIPCTests/CoverageDumpTests.swift | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/apps/macos/Tests/ClawdisIPCTests/CoverageDumpTests.swift b/apps/macos/Tests/ClawdisIPCTests/CoverageDumpTests.swift index 917a786d3d..278477448b 100644 --- a/apps/macos/Tests/ClawdisIPCTests/CoverageDumpTests.swift +++ b/apps/macos/Tests/ClawdisIPCTests/CoverageDumpTests.swift @@ -6,13 +6,19 @@ import Testing struct CoverageDumpTests { @Test func periodicallyFlushCoverage() async { guard ProcessInfo.processInfo.environment["LLVM_PROFILE_FILE"] != nil else { return } + guard let writeProfile = resolveProfileWriteFile() else { return } let deadline = Date().addingTimeInterval(4) while Date() < deadline { - _ = llvmProfileWriteFile() + _ = writeProfile() try? await Task.sleep(nanoseconds: 250_000_000) } } } -@_silgen_name("__llvm_profile_write_file") -private func llvmProfileWriteFile() -> Int32 +private typealias ProfileWriteFn = @convention(c) () -> Int32 + +private func resolveProfileWriteFile() -> ProfileWriteFn? { + let symbol = dlsym(UnsafeMutableRawPointer(bitPattern: -2), "__llvm_profile_write_file") + guard let symbol else { return nil } + return unsafeBitCast(symbol, to: ProfileWriteFn.self) +}