Index: compiler-rt/trunk/lib/xray/xray_allocator.h =================================================================== --- compiler-rt/trunk/lib/xray/xray_allocator.h +++ compiler-rt/trunk/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 #include #include - -#ifndef MAP_NORESERVE -// no-op on NetBSD (at least), unsupported flag on FreeBSD basically because unneeded -#define MAP_NORESERVE 0 -#endif +#include namespace __xray { @@ -69,7 +64,7 @@ if (UNLIKELY(BackingStore == nullptr)) { BackingStore = reinterpret_cast( 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()) Index: compiler-rt/trunk/lib/xray/xray_buffer_queue.cc =================================================================== --- compiler-rt/trunk/lib/xray/xray_buffer_queue.cc +++ compiler-rt/trunk/lib/xray/xray_buffer_queue.cc @@ -19,33 +19,14 @@ #include #include -#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 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( 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(A); }