summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDean Michael Berris <dberris@google.com>2018-08-16 12:19:03 +0000
committerDean Michael Berris <dberris@google.com>2018-08-16 12:19:03 +0000
commit560c7338159a8b78ef2e58b73389714c5b859347 (patch)
treeb227e3a85d62e3b2f41c58ee4590e365bc5bce4c
parent0e2f0bd48ec94268397892bb5688cd8534f9e538 (diff)
downloadbcm5719-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.h9
-rw-r--r--compiler-rt/lib/xray/xray_buffer_queue.cc21
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);
}
OpenPOWER on IntegriCloud