From c55ee7a1919161acb53854812a11763dc74643ff Mon Sep 17 00:00:00 2001 From: Eugene Kabanov Date: Thu, 5 Jun 2025 15:30:07 +0300 Subject: [PATCH] Fix FreeBSD getThreadId() should use different syscall definition for 64bit platforms. (#24977) (cherry picked from commit 7a53db6874d4827d7e8ac4ed9525807cb7c04e69) --- lib/system/threadids.nim | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/lib/system/threadids.nim b/lib/system/threadids.nim index 3a6eadcbbb..535a716771 100644 --- a/lib/system/threadids.nim +++ b/lib/system/threadids.nim @@ -61,15 +61,25 @@ elif defined(netbsd): result = threadId elif defined(freebsd): - proc syscall(arg: cint, arg0: ptr cint): cint {.varargs, importc: "syscall", header: "".} - var SYS_thr_self {.importc:"SYS_thr_self", header:"".}: cint + when defined(amd64) or defined(i386): + const SYS_thr_self = 432 + else: + var SYS_thr_self {.importc:"SYS_thr_self", header:"".}: cint + + when defined(cpu64): + type + Off {.importc: "off_t", header: "".} = int64 + Quad {.importc: "quad_t", header: "".} = int64 + proc syscall(arg: Quad): Off {.varargs, importc: "__syscall", header: "".} + else: + proc syscall(arg: cint): cint {.varargs, importc: "syscall", header: "".} proc getThreadId*(): int = ## Gets the ID of the currently running thread. - var tid = 0.cint + var tid = when defined(cpu64): Off(0) else: cint(0) if threadId == 0: discard syscall(SYS_thr_self, addr tid) - threadId = tid + threadId = int(tid) result = threadId elif defined(macosx):