forked from OSchip/llvm-project
[Sanitizer] move rest of mmap routines to common sanitizer runtime
llvm-svn: 158452
This commit is contained in:
parent
0c53a38abb
commit
c70d1086f6
|
@ -124,10 +124,6 @@ void *AsanDoesNotSupportStaticLinkage();
|
|||
bool AsanShadowRangeIsAvailable();
|
||||
void AsanDumpProcessMap();
|
||||
|
||||
void *AsanMmapFixedNoReserve(uptr fixed_addr, uptr size);
|
||||
void *AsanMmapFixedReserve(uptr fixed_addr, uptr size);
|
||||
void *AsanMprotect(uptr fixed_addr, uptr size);
|
||||
|
||||
void AsanDisableCoreDumper();
|
||||
void GetPcSpBp(void *context, uptr *pc, uptr *sp, uptr *bp);
|
||||
|
||||
|
|
|
@ -72,20 +72,6 @@ bool AsanInterceptsSignal(int signum) {
|
|||
return signum == SIGSEGV && FLAG_handle_segv;
|
||||
}
|
||||
|
||||
void *AsanMmapFixedNoReserve(uptr fixed_addr, uptr size) {
|
||||
return internal_mmap((void*)fixed_addr, size,
|
||||
PROT_READ | PROT_WRITE,
|
||||
MAP_PRIVATE | MAP_ANON | MAP_FIXED | MAP_NORESERVE,
|
||||
0, 0);
|
||||
}
|
||||
|
||||
void *AsanMprotect(uptr fixed_addr, uptr size) {
|
||||
return internal_mmap((void*)fixed_addr, size,
|
||||
PROT_NONE,
|
||||
MAP_PRIVATE | MAP_ANON | MAP_FIXED | MAP_NORESERVE,
|
||||
0, 0);
|
||||
}
|
||||
|
||||
AsanLock::AsanLock(LinkerInitialized) {
|
||||
// We assume that pthread_mutex_t initialized to all zeroes is a valid
|
||||
// unlocked mutex. We can not use PTHREAD_MUTEX_INITIALIZER as it triggers
|
||||
|
|
|
@ -97,20 +97,6 @@ bool AsanInterceptsSignal(int signum) {
|
|||
return (signum == SIGSEGV || signum == SIGBUS) && FLAG_handle_segv;
|
||||
}
|
||||
|
||||
void *AsanMmapFixedNoReserve(uptr fixed_addr, uptr size) {
|
||||
return internal_mmap((void*)fixed_addr, size,
|
||||
PROT_READ | PROT_WRITE,
|
||||
MAP_PRIVATE | MAP_ANON | MAP_FIXED | MAP_NORESERVE,
|
||||
0, 0);
|
||||
}
|
||||
|
||||
void *AsanMprotect(uptr fixed_addr, uptr size) {
|
||||
return internal_mmap((void*)fixed_addr, size,
|
||||
PROT_NONE,
|
||||
MAP_PRIVATE | MAP_ANON | MAP_FIXED | MAP_NORESERVE,
|
||||
0, 0);
|
||||
}
|
||||
|
||||
AsanLock::AsanLock(LinkerInitialized) {
|
||||
// We assume that OS_SPINLOCK_INIT is zero
|
||||
}
|
||||
|
|
|
@ -127,7 +127,7 @@ static void ReserveShadowMemoryRange(uptr beg, uptr end) {
|
|||
CHECK((beg % kPageSize) == 0);
|
||||
CHECK(((end + 1) % kPageSize) == 0);
|
||||
uptr size = end - beg + 1;
|
||||
void *res = AsanMmapFixedNoReserve(beg, size);
|
||||
void *res = MmapFixedNoReserve(beg, size);
|
||||
CHECK(res == (void*)beg && "ReserveShadowMemoryRange failed");
|
||||
}
|
||||
|
||||
|
@ -547,7 +547,7 @@ void __asan_init() {
|
|||
// mmap the high shadow.
|
||||
ReserveShadowMemoryRange(kHighShadowBeg, kHighShadowEnd);
|
||||
// protect the gap
|
||||
void *prot = AsanMprotect(kShadowGapBeg, kShadowGapEnd - kShadowGapBeg + 1);
|
||||
void *prot = Mprotect(kShadowGapBeg, kShadowGapEnd - kShadowGapBeg + 1);
|
||||
CHECK(prot == (void*)kShadowGapBeg);
|
||||
} else {
|
||||
Report("Shadow memory range interleaves with an existing memory mapping. "
|
||||
|
|
|
@ -30,17 +30,6 @@
|
|||
|
||||
namespace __asan {
|
||||
|
||||
// ---------------------- Memory management ---------------- {{{1
|
||||
void *AsanMmapFixedNoReserve(uptr fixed_addr, uptr size) {
|
||||
return VirtualAlloc((LPVOID)fixed_addr, size,
|
||||
MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
|
||||
}
|
||||
|
||||
void *AsanMprotect(uptr fixed_addr, uptr size) {
|
||||
return VirtualAlloc((LPVOID)fixed_addr, size,
|
||||
MEM_RESERVE | MEM_COMMIT, PAGE_NOACCESS);
|
||||
}
|
||||
|
||||
// ---------------------- Stacktraces, symbols, etc. ---------------- {{{1
|
||||
static AsanLock dbghelp_lock(LINKER_INITIALIZED);
|
||||
static bool dbghelp_initialized = false;
|
||||
|
|
|
@ -34,9 +34,14 @@ void GetThreadStackTopAndBottom(bool at_initialization, uptr *stack_top,
|
|||
// Memory management
|
||||
void *MmapOrDie(uptr size, const char *mem_type);
|
||||
void UnmapOrDie(void *addr, uptr size);
|
||||
void *MmapFixedNoReserve(uptr fixed_addr, uptr size);
|
||||
void *Mprotect(uptr fixed_addr, uptr size);
|
||||
|
||||
// Internal allocator
|
||||
void *InternalAlloc(uptr size);
|
||||
void InternalFree(void *addr);
|
||||
|
||||
// IO
|
||||
void RawWrite(const char *buffer);
|
||||
void Printf(const char *format, ...);
|
||||
int SNPrintf(char *buffer, uptr length, const char *format, ...);
|
||||
|
|
|
@ -51,6 +51,20 @@ void UnmapOrDie(void *addr, uptr size) {
|
|||
}
|
||||
}
|
||||
|
||||
void *MmapFixedNoReserve(uptr fixed_addr, uptr size) {
|
||||
return internal_mmap((void*)fixed_addr, size,
|
||||
PROT_READ | PROT_WRITE,
|
||||
MAP_PRIVATE | MAP_ANON | MAP_FIXED | MAP_NORESERVE,
|
||||
0, 0);
|
||||
}
|
||||
|
||||
void *Mprotect(uptr fixed_addr, uptr size) {
|
||||
return internal_mmap((void*)fixed_addr, size,
|
||||
PROT_NONE,
|
||||
MAP_PRIVATE | MAP_ANON | MAP_FIXED | MAP_NORESERVE,
|
||||
0, 0);
|
||||
}
|
||||
|
||||
int internal_sscanf(const char *str, const char *format, ...) {
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
|
|
|
@ -56,6 +56,16 @@ void UnmapOrDie(void *addr, uptr size) {
|
|||
}
|
||||
}
|
||||
|
||||
void *MmapFixedNoReserve(uptr fixed_addr, uptr size) {
|
||||
return VirtualAlloc((LPVOID)fixed_addr, size,
|
||||
MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
|
||||
}
|
||||
|
||||
void *Mprotect(uptr fixed_addr, uptr size) {
|
||||
return VirtualAlloc((LPVOID)fixed_addr, size,
|
||||
MEM_RESERVE | MEM_COMMIT, PAGE_NOACCESS);
|
||||
}
|
||||
|
||||
const char *GetEnv(const char *name) {
|
||||
static char env_buffer[32767] = {};
|
||||
|
||||
|
|
Loading…
Reference in New Issue