diff options
| author | Dean Michael Berris <dberris@google.com> | 2018-08-16 12:19:03 +0000 |
|---|---|---|
| committer | Dean Michael Berris <dberris@google.com> | 2018-08-16 12:19:03 +0000 |
| commit | 560c7338159a8b78ef2e58b73389714c5b859347 (patch) | |
| tree | b227e3a85d62e3b2f41c58ee4590e365bc5bce4c | |
| parent | 0e2f0bd48ec94268397892bb5688cd8534f9e538 (diff) | |
| download | bcm5719-llvm-560c7338159a8b78ef2e58b73389714c5b859347.tar.gz bcm5719-llvm-560c7338159a8b78ef2e58b73389714c5b859347.zip | |
[XRay][compiler-rt] Remove MAP_NORESERVE from XRay allocations
Summary:
This reverses an earlier decision to allow seg-faulting from the
XRay-allocated memory if it turns out that the system cannot provide
physical memory backing that cannot be swapped in/out on Linux.
This addresses http://llvm.org/PR38588.
Reviewers: eizan
Reviewed By: eizan
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D50831
llvm-svn: 339869
| -rw-r--r-- | compiler-rt/lib/xray/xray_allocator.h | 9 | ||||
| -rw-r--r-- | compiler-rt/lib/xray/xray_buffer_queue.cc | 21 |
2 files changed, 3 insertions, 27 deletions
diff --git a/compiler-rt/lib/xray/xray_allocator.h b/compiler-rt/lib/xray/xray_allocator.h index 8244815284a..27026211895 100644 --- a/compiler-rt/lib/xray/xray_allocator.h +++ b/compiler-rt/lib/xray/xray_allocator.h @@ -21,14 +21,9 @@ #include "sanitizer_common/sanitizer_mutex.h" #include "sanitizer_common/sanitizer_posix.h" #include "xray_utils.h" -#include <sys/mman.h> #include <cstddef> #include <cstdint> - -#ifndef MAP_NORESERVE -// no-op on NetBSD (at least), unsupported flag on FreeBSD basically because unneeded -#define MAP_NORESERVE 0 -#endif +#include <sys/mman.h> namespace __xray { @@ -69,7 +64,7 @@ private: if (UNLIKELY(BackingStore == nullptr)) { BackingStore = reinterpret_cast<void *>( internal_mmap(NULL, MaxMemory, PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE, 0, 0)); + MAP_PRIVATE | MAP_ANONYMOUS, 0, 0)); if (BackingStore == MAP_FAILED) { BackingStore = nullptr; if (Verbosity()) diff --git a/compiler-rt/lib/xray/xray_buffer_queue.cc b/compiler-rt/lib/xray/xray_buffer_queue.cc index 3ce72890078..5bdd9148d54 100644 --- a/compiler-rt/lib/xray/xray_buffer_queue.cc +++ b/compiler-rt/lib/xray/xray_buffer_queue.cc @@ -19,33 +19,14 @@ #include <memory> #include <sys/mman.h> -#ifndef MAP_NORESERVE -// no-op on NetBSD (at least), unsupported flag on FreeBSD -#define MAP_NORESERVE 0 -#endif - using namespace __xray; using namespace __sanitizer; template <class T> static T *allocRaw(size_t N) { // TODO: Report errors? - // We use MAP_NORESERVE on platforms where it's supported to ensure that the - // pages we're allocating for XRay never end up in pages that can be swapped - // in/out. We're doing this because for FDR mode, we want to ensure that - // writes to the buffers stay resident in memory to prevent XRay itself from - // causing swapping/thrashing. - // - // In the case when XRay pages cannot be swapped in/out or there's not enough - // RAM to back these pages, we're willing to cause a segmentation fault - // instead of introducing latency in the measurement. We assume here that - // there are enough pages that are swappable in/out outside of the buffers - // being used by FDR mode (which are bounded and configurable anyway) to allow - // us to keep using always-resident memory. - // - // TODO: Make this configurable? void *A = reinterpret_cast<void *>( internal_mmap(NULL, N * sizeof(T), PROT_WRITE | PROT_READ, - MAP_ANONYMOUS | MAP_PRIVATE | MAP_NORESERVE, -1, 0)); + MAP_ANONYMOUS | MAP_PRIVATE, -1, 0)); return (A == MAP_FAILED) ? nullptr : reinterpret_cast<T *>(A); } |

