[Msan] Fix some interceptors to pass initialization on FreeBSD

Differential Revision: http://reviews.llvm.org/D6417

llvm-svn: 222885
This commit is contained in:
Viktor Kutuzov 2014-11-27 14:28:57 +00:00
parent 671001cc66
commit d977985e43
1 changed files with 6 additions and 0 deletions

View File

@ -266,6 +266,8 @@ INTERCEPTOR(void, malloc_stats, void) {
#endif #endif
INTERCEPTOR(SIZE_T, strlen, const char *s) { INTERCEPTOR(SIZE_T, strlen, const char *s) {
if (msan_init_is_running)
return REAL(strlen)(s);
ENSURE_MSAN_INITED(); ENSURE_MSAN_INITED();
SIZE_T res = REAL(strlen)(s); SIZE_T res = REAL(strlen)(s);
CHECK_UNPOISONED(s, res + 1); CHECK_UNPOISONED(s, res + 1);
@ -636,6 +638,8 @@ INTERCEPTOR(char *, fcvt, double x, int a, int *b, int *c) {
} }
INTERCEPTOR(char *, getenv, char *name) { INTERCEPTOR(char *, getenv, char *name) {
if (msan_init_is_running)
return REAL(getenv)(name);
ENSURE_MSAN_INITED(); ENSURE_MSAN_INITED();
char *res = REAL(getenv)(name); char *res = REAL(getenv)(name);
if (res) __msan_unpoison(res, REAL(strlen)(res) + 1); if (res) __msan_unpoison(res, REAL(strlen)(res) + 1);
@ -961,6 +965,8 @@ void __msan_allocated_memory(const void* data, uptr size) {
INTERCEPTOR(void *, mmap, void *addr, SIZE_T length, int prot, int flags, INTERCEPTOR(void *, mmap, void *addr, SIZE_T length, int prot, int flags,
int fd, OFF_T offset) { int fd, OFF_T offset) {
if (msan_init_is_running)
return REAL(mmap)(addr, length, prot, flags, fd, offset);
ENSURE_MSAN_INITED(); ENSURE_MSAN_INITED();
if (addr && !MEM_IS_APP(addr)) { if (addr && !MEM_IS_APP(addr)) {
if (flags & map_fixed) { if (flags & map_fixed) {