summaryrefslogtreecommitdiff
path: root/lib/asan/asan_linux.cc
diff options
context:
space:
mode:
authorKostya Serebryany <kcc@google.com>2011-12-28 23:28:54 +0000
committerKostya Serebryany <kcc@google.com>2011-12-28 23:28:54 +0000
commita874fe5b5d67152e4e737498d532eec80940bdcd (patch)
treeee1630f3d1725d71fe8f8bb3be52350d3b2d9af6 /lib/asan/asan_linux.cc
parentde496f451bce322b6cde100456591f1f50ab3477 (diff)
downloadcompiler-rt-a874fe5b5d67152e4e737498d532eec80940bdcd.tar.gz
[asan] refactoring: don't #include <sys/mman.h> in non-os-specific files
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@147328 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/asan/asan_linux.cc')
-rw-r--r--lib/asan/asan_linux.cc23
1 files changed, 22 insertions, 1 deletions
diff --git a/lib/asan/asan_linux.cc b/lib/asan/asan_linux.cc
index 45f94e9e0..26a08ae8f 100644
--- a/lib/asan/asan_linux.cc
+++ b/lib/asan/asan_linux.cc
@@ -30,7 +30,7 @@ void *AsanDoesNotSupportStaticLinkage() {
return &_DYNAMIC;
}
-void *asan_mmap(void *addr, size_t length, int prot, int flags,
+static void *asan_mmap(void *addr, size_t length, int prot, int flags,
int fd, uint64_t offset) {
# if __WORDSIZE == 64
return (void *)syscall(__NR_mmap, addr, length, prot, flags, fd, offset);
@@ -50,6 +50,27 @@ void *AsanMmapSomewhereOrDie(size_t size, const char *mem_type) {
return res;
}
+void *AsanMmapFixedNoReserve(uintptr_t fixed_addr, size_t size) {
+ return asan_mmap((void*)fixed_addr, size,
+ PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_ANON | MAP_FIXED | MAP_NORESERVE,
+ 0, 0);
+}
+
+void *AsanMmapFixedReserve(uintptr_t fixed_addr, size_t size) {
+ return asan_mmap((void*)fixed_addr, size,
+ PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_ANON | MAP_FIXED,
+ 0, 0);
+}
+
+void *AsanMprotect(uintptr_t fixed_addr, size_t size) {
+ return asan_mmap((void*)fixed_addr, size,
+ PROT_NONE,
+ MAP_PRIVATE | MAP_ANON | MAP_FIXED | MAP_NORESERVE,
+ 0, 0);
+}
+
void AsanUnmapOrDie(void *addr, size_t size) {
if (!addr || !size) return;
int res = syscall(__NR_munmap, addr, size);