[TSan] use __sanitizer::internal_mmap in TSan run-time

llvm-svn: 157984
This commit is contained in:
Alexey Samsonov 2012-06-05 06:19:00 +00:00
parent 65485d7694
commit 11fff6df33
1 changed files with 6 additions and 13 deletions

View File

@ -12,6 +12,7 @@
// Linux-specific code.
//===----------------------------------------------------------------------===//
#include "sanitizer_common/sanitizer_libc.h"
#include "tsan_platform.h"
#include "tsan_rtl.h"
#include "tsan_flags.h"
@ -36,6 +37,8 @@
#include <sched.h>
#include <dlfcn.h>
using namespace __sanitizer; // NOLINT
extern "C" int arch_prctl(int code, __tsan::uptr *addr);
namespace __tsan {
@ -69,16 +72,6 @@ void FlushShadowMemory() {
MADV_DONTNEED);
}
static void *my_mmap(void *addr, size_t length, int prot, int flags,
int fd, u64 offset) {
ScopedInRtl in_rtl;
# if __WORDSIZE == 64
return (void *)syscall(__NR_mmap, addr, length, prot, flags, fd, offset);
# else
return (void *)syscall(__NR_mmap2, addr, length, prot, flags, fd, offset);
# endif
}
static void my_munmap(void *addr, size_t length) {
ScopedInRtl in_rtl;
syscall(__NR_munmap, addr, length);
@ -135,7 +128,7 @@ static void ProtectRange(uptr beg, uptr end) {
CHECK_LE(beg, end);
if (beg == end)
return;
if (beg != (uptr)my_mmap((void*)(beg), end - beg,
if (beg != (uptr)internal_mmap((void*)(beg), end - beg,
PROT_NONE,
MAP_PRIVATE | MAP_ANON | MAP_FIXED | MAP_NORESERVE,
-1, 0)) {
@ -150,7 +143,7 @@ void InitializeShadowMemory() {
const uptr kClosedLowEnd = kLinuxShadowBeg - 1;
const uptr kClosedMidBeg = kLinuxShadowEnd + 1;
const uptr kClosedMidEnd = kLinuxAppMemBeg - 1;
uptr shadow = (uptr)my_mmap((void*)kLinuxShadowBeg,
uptr shadow = (uptr)internal_mmap((void*)kLinuxShadowBeg,
kLinuxShadowEnd - kLinuxShadowBeg,
PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANON | MAP_FIXED | MAP_NORESERVE,
@ -248,7 +241,7 @@ void GetThreadStackAndTls(bool main, uptr *stk_addr, uptr *stk_size,
if (main) {
uptr kBufSize = 1 << 26;
char *buf = (char*)my_mmap(0, kBufSize, PROT_READ | PROT_WRITE,
char *buf = (char*)internal_mmap(0, kBufSize, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANON, -1, 0);
fd_t maps = internal_open("/proc/self/maps", false);
if (maps == kInvalidFd) {