diff options
Diffstat (limited to 'openmp/runtime/src/z_Linux_util.cpp')
-rw-r--r-- | openmp/runtime/src/z_Linux_util.cpp | 30 |
1 files changed, 10 insertions, 20 deletions
diff --git a/openmp/runtime/src/z_Linux_util.cpp b/openmp/runtime/src/z_Linux_util.cpp index 3b82b45..368c0b6 100644 --- a/openmp/runtime/src/z_Linux_util.cpp +++ b/openmp/runtime/src/z_Linux_util.cpp @@ -75,7 +75,6 @@ #include <pthread_np.h> #endif #elif KMP_OS_SOLARIS -#include <libproc.h> #include <procfs.h> #include <thread.h> #include <sys/loadavg.h> @@ -2232,43 +2231,34 @@ int __kmp_is_address_mapped(void *addr) { kvm_close(fd); #elif KMP_OS_SOLARIS - prmap_t *cur, *map; + prxmap_t *cur, *map; void *buf; uintptr_t uaddr; ssize_t rd; - int err; - int file; - + int fd; pid_t pid = getpid(); - struct ps_prochandle *fd = Pgrab(pid, PGRAB_RDONLY, &err); - ; - - if (!fd) { - return 0; - } - - char *name = __kmp_str_format("/proc/%d/map", pid); - size_t sz = (1 << 20); - file = open(name, O_RDONLY); - if (file == -1) { + char *name = __kmp_str_format("/proc/%d/xmap", pid); + fd = open(name, O_RDONLY); + if (fd == -1) { KMP_INTERNAL_FREE(name); return 0; } + size_t sz = (1 << 20); buf = KMP_INTERNAL_MALLOC(sz); - while (sz > 0 && (rd = pread(file, buf, sz, 0)) == sz) { + while (sz > 0 && (rd = pread(fd, buf, sz, 0)) == sz) { void *newbuf; sz <<= 1; newbuf = KMP_INTERNAL_REALLOC(buf, sz); buf = newbuf; } - map = reinterpret_cast<prmap_t *>(buf); + map = reinterpret_cast<prxmap_t *>(buf); uaddr = reinterpret_cast<uintptr_t>(addr); for (cur = map; rd > 0; cur++, rd = -sizeof(*map)) { - if ((uaddr >= cur->pr_vaddr) && (uaddr < cur->pr_vaddr)) { + if (uaddr >= cur->pr_vaddr && uaddr < cur->pr_vaddr) { if ((cur->pr_mflags & MA_READ) != 0 && (cur->pr_mflags & MA_WRITE) != 0) { found = 1; break; @@ -2277,7 +2267,7 @@ int __kmp_is_address_mapped(void *addr) { } KMP_INTERNAL_FREE(map); - close(file); + close(fd); KMP_INTERNAL_FREE(name); #elif KMP_OS_DARWIN |