[Openmp-commits] [PATCH] D69816: [OpenMP] DragonflyBSD support
David CARLIER via Phabricator via Openmp-commits
openmp-commits at lists.llvm.org
Mon Nov 4 12:22:41 PST 2019
devnexen created this revision.
devnexen added reviewers: AndreyChurbanov, Hahnfeld.
devnexen created this object with visibility "All Users".
Herald added subscribers: openmp-commits, guansong.
Herald added a reviewer: jdoerfert.
Herald added a project: OpenMP.
Repository:
rOMP OpenMP
https://reviews.llvm.org/D69816
Files:
openmp/runtime/src/kmp_wrapper_getpid.h
openmp/runtime/src/z_Linux_util.cpp
Index: openmp/runtime/src/z_Linux_util.cpp
===================================================================
--- openmp/runtime/src/z_Linux_util.cpp
+++ openmp/runtime/src/z_Linux_util.cpp
@@ -31,6 +31,10 @@
#include <sys/times.h>
#include <unistd.h>
+#if KMP_OS_DRAGONFLY
+#include <kvm.h>
+#endif
+
#if KMP_OS_LINUX && !KMP_OS_CNK
#include <sys/sysinfo.h>
#if KMP_USE_FUTEX
@@ -2159,8 +2163,36 @@
}
#elif KMP_OS_DRAGONFLY
- // FIXME(DragonFly): Implement this
- found = 1;
+ struct kinfo_proc *proc;
+ struct vmspace vm;
+ struct vm_map m;
+ struct vm_map_entry entry, *st;
+ struct proc p;
+ int nm;
+ char err[_POSIX2_LINE_MAX];
+
+ kvm_t *k = kvm_openfiles (NULL, NULL, NULL, O_RDONLY, err);
+ KMP_ASSERT(k);
+
+ proc = kvm_getprocs (k, KERN_PROC_PID, getpid(), &nm);
+ rc = 0;
+
+ kvm_read (k, (uintptr_t)proc->kp_paddr, &p, sizeof (p));
+ kvm_read (k, (uintptr_t)p.p_vmspace, &vm, sizeof (vm));
+
+ m = vm.vm_map;
+
+ for (st = kvm_vm_map_entry_first(k, &m, &entry);
+ st; st = kvm_vm_map_entry_next(k, st, &entry)) {
+ if (entry.maptype == VM_MAPTYPE_SUBMAP || entry.ba.object)
+ continue;
+ if (entry.ba.start >= (uint64_t)addr && entry.ba.end <= (uint64_t)addr) {
+ found = 1;
+ break;
+ }
+ }
+
+ kvm_close (k);
#else
Index: openmp/runtime/src/kmp_wrapper_getpid.h
===================================================================
--- openmp/runtime/src/kmp_wrapper_getpid.h
+++ openmp/runtime/src/kmp_wrapper_getpid.h
@@ -23,7 +23,7 @@
#if KMP_OS_DARWIN
// OS X
#define __kmp_gettid() syscall(SYS_thread_selfid)
-#elif KMP_OS_FREEBSD
+#elif KMP_OS_FREEBSD || KMP_OS_DRAGONFLY
#include <pthread_np.h>
#define __kmp_gettid() pthread_getthreadid_np()
#elif KMP_OS_NETBSD
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D69816.227757.patch
Type: text/x-patch
Size: 1748 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/openmp-commits/attachments/20191104/36d2f822/attachment.bin>
More information about the Openmp-commits
mailing list