Skip to content

Commit 27f6eed

Browse files
Enable OpenBSD support.
Patch by devnexen (David CARLIER) Differential Revision: https://reviews.llvm.org/D69220
1 parent 2dad717 commit 27f6eed

File tree

3 files changed

+33
-4
lines changed

3 files changed

+33
-4
lines changed

openmp/runtime/src/kmp_ftn_entry.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -531,7 +531,7 @@ int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_THREAD_NUM)(void) {
531531
int gtid;
532532

533533
#if KMP_OS_DARWIN || KMP_OS_DRAGONFLY || KMP_OS_FREEBSD || KMP_OS_NETBSD || \
534-
KMP_OS_HURD
534+
KMP_OS_HURD|| KMP_OS_OPENBSD
535535
gtid = __kmp_entry_gtid();
536536
#elif KMP_OS_WINDOWS
537537
if (!__kmp_init_parallel ||

openmp/runtime/src/kmp_wrapper_getpid.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
#elif KMP_OS_NETBSD
3030
#include <lwp.h>
3131
#define __kmp_gettid() _lwp_self()
32+
#elif KMP_OS_OPENBSD
33+
#define __kmp_gettid() syscall(SYS_getthrid)
3234
#elif defined(SYS_gettid)
3335
// Hopefully other Unix systems define SYS_gettid syscall for getting os thread
3436
// id

openmp/runtime/src/z_Linux_util.cpp

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
#include <sys/sysctl.h>
5555
#include <sys/user.h>
5656
#include <pthread_np.h>
57-
#elif KMP_OS_NETBSD
57+
#elif KMP_OS_NETBSD || KMP_OS_OPENBSD
5858
#include <sys/types.h>
5959
#include <sys/sysctl.h>
6060
#endif
@@ -2130,9 +2130,36 @@ int __kmp_is_address_mapped(void *addr) {
21302130
}
21312131
}
21322132
KMP_INTERNAL_FREE(kiv);
2133-
#elif KMP_OS_DRAGONFLY || KMP_OS_OPENBSD
2133+
#elif KMP_OS_OPENBSD
2134+
2135+
int mib[3];
2136+
mib[0] = CTL_KERN;
2137+
mib[1] = KERN_PROC_VMMAP;
2138+
mib[2] = getpid();
2139+
2140+
size_t size;
2141+
uint64_t end;
2142+
rc = sysctl(mib, 3, NULL, &size, NULL, 0);
2143+
KMP_ASSERT(!rc);
2144+
KMP_ASSERT(size);
2145+
end = size;
2146+
2147+
struct kinfo_vmentry kiv = {.kve_start = 0};
2148+
2149+
while ((rc = sysctl(mib, 3, &kiv, &size, NULL, 0)) == 0) {
2150+
KMP_ASSERT(size);
2151+
if (kiv.kve_end == end)
2152+
break;
2153+
2154+
if (kiv.kve_start >= (uint64_t)addr && kiv.kve_end <= (uint64_t)addr) {
2155+
found = 1;
2156+
break;
2157+
}
2158+
kiv.kve_start += 1;
2159+
}
2160+
#elif KMP_OS_DRAGONFLY
21342161

2135-
// FIXME(DragonFly, OpenBSD): Implement this
2162+
// FIXME(DragonFly): Implement this
21362163
found = 1;
21372164

21382165
#else

0 commit comments

Comments
 (0)