forked from OSchip/llvm-project
parent
f9c22916d5
commit
b820599a3a
|
@ -14,7 +14,7 @@
|
|||
|
||||
|
||||
#include "sanitizer_common/sanitizer_platform.h"
|
||||
#if SANITIZER_LINUX
|
||||
#if SANITIZER_LINUX || SANITIZER_FREEBSD
|
||||
|
||||
#include "sanitizer_common/sanitizer_common.h"
|
||||
#include "sanitizer_common/sanitizer_libc.h"
|
||||
|
@ -42,8 +42,10 @@
|
|||
#include <errno.h>
|
||||
#include <sched.h>
|
||||
#include <dlfcn.h>
|
||||
#if SANITIZER_LINUX
|
||||
#define __need_res_state
|
||||
#include <resolv.h>
|
||||
#endif
|
||||
|
||||
#ifdef sa_handler
|
||||
# undef sa_handler
|
||||
|
@ -53,6 +55,11 @@
|
|||
# undef sa_sigaction
|
||||
#endif
|
||||
|
||||
#if SANITIZER_FREEBSD
|
||||
extern "C" void *__libc_stack_end;
|
||||
void *__libc_stack_end = 0;
|
||||
#endif
|
||||
|
||||
namespace __tsan {
|
||||
|
||||
const uptr kPageSize = 4096;
|
||||
|
@ -107,15 +114,18 @@ uptr GetRSS() {
|
|||
return mem[6];
|
||||
}
|
||||
|
||||
|
||||
#if SANITIZER_LINUX
|
||||
void FlushShadowMemoryCallback(
|
||||
const SuspendedThreadsList &suspended_threads_list,
|
||||
void *argument) {
|
||||
FlushUnneededShadowMemory(kLinuxShadowBeg, kLinuxShadowEnd - kLinuxShadowBeg);
|
||||
}
|
||||
#endif
|
||||
|
||||
void FlushShadowMemory() {
|
||||
#if SANITIZER_LINUX
|
||||
StopTheWorld(FlushShadowMemoryCallback, 0);
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifndef TSAN_GO
|
||||
|
@ -360,6 +370,7 @@ bool IsGlobalVar(uptr addr) {
|
|||
// This is required to properly "close" the fds, because we do not see internal
|
||||
// closes within glibc. The code is a pure hack.
|
||||
int ExtractResolvFDs(void *state, int *fds, int nfd) {
|
||||
#if SANITIZER_LINUX
|
||||
int cnt = 0;
|
||||
__res_state *statp = (__res_state*)state;
|
||||
for (int i = 0; i < MAXNS && cnt < nfd; i++) {
|
||||
|
@ -367,6 +378,9 @@ int ExtractResolvFDs(void *state, int *fds, int nfd) {
|
|||
fds[cnt++] = statp->_u._ext.nssocks[i];
|
||||
}
|
||||
return cnt;
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
// Extract file descriptors passed via UNIX domain sockets.
|
||||
|
|
Loading…
Reference in New Issue