diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/sanitizer_common/sanitizer_libc.cc | 18 | ||||
-rw-r--r-- | lib/sanitizer_common/sanitizer_libc.h | 2 | ||||
-rw-r--r-- | lib/tsan/rtl/tsan_defs.h | 3 | ||||
-rw-r--r-- | lib/tsan/rtl/tsan_interceptors.cc | 12 | ||||
-rw-r--r-- | lib/tsan/rtl/tsan_mman.cc | 5 |
5 files changed, 23 insertions, 17 deletions
diff --git a/lib/sanitizer_common/sanitizer_libc.cc b/lib/sanitizer_common/sanitizer_libc.cc index 4191cda42..6de28c62d 100644 --- a/lib/sanitizer_common/sanitizer_libc.cc +++ b/lib/sanitizer_common/sanitizer_libc.cc @@ -10,7 +10,7 @@ // This file is shared between AddressSanitizer and ThreadSanitizer // run-time libraries. See sanitizer_libc.h for details. //===----------------------------------------------------------------------===// -#include "sanitizer_internal_defs.h" +#include "sanitizer_common.h" #include "sanitizer_libc.h" namespace __sanitizer { @@ -26,6 +26,22 @@ void *internal_memchr(const void *s, int c, uptr n) { return 0; } +void *internal_memcpy(void *dest, const void *src, uptr n) { + char *d = (char*)dest; + char *s = (char*)src; + for (uptr i = 0; i < n; ++i) + d[i] = s[i]; + return dest; +} + +char* internal_strdup(const char *s) { + uptr len = internal_strlen(s); + char *s2 = (char*)InternalAlloc(len + 1); + internal_memcpy(s2, s, len); + s2[len] = 0; + return s2; +} + int internal_strcmp(const char *s1, const char *s2) { while (true) { unsigned c1 = *s1; diff --git a/lib/sanitizer_common/sanitizer_libc.h b/lib/sanitizer_common/sanitizer_libc.h index e3813ccca..cf956f8e2 100644 --- a/lib/sanitizer_common/sanitizer_libc.h +++ b/lib/sanitizer_common/sanitizer_libc.h @@ -25,7 +25,9 @@ void MiniLibcStub(); // String functions void *internal_memchr(const void *s, int c, uptr n); +void *internal_memcpy(void *dest, const void *src, uptr n); int internal_strcmp(const char *s1, const char *s2); +char *internal_strdup(const char *s); uptr internal_strlen(const char *s); char *internal_strncpy(char *dst, const char *src, uptr n); diff --git a/lib/tsan/rtl/tsan_defs.h b/lib/tsan/rtl/tsan_defs.h index 64e18f117..a344af29a 100644 --- a/lib/tsan/rtl/tsan_defs.h +++ b/lib/tsan/rtl/tsan_defs.h @@ -15,6 +15,7 @@ #define TSAN_DEFS_H #include "sanitizer_common/sanitizer_internal_defs.h" +#include "sanitizer_common/sanitizer_libc.h" #include "tsan_stat.h" #ifndef TSAN_DEBUG @@ -134,11 +135,9 @@ T RoundUp(T p, int align) { } void internal_memset(void *ptr, int c, uptr size); -void internal_memcpy(void *dst, const void *src, uptr size); int internal_memcmp(const void *s1, const void *s2, uptr size); int internal_strncmp(const char *s1, const char *s2, uptr size); void internal_strcpy(char *s1, const char *s2); -char* internal_strdup(const char *s); const char *internal_strstr(const char *where, const char *what); const char *internal_strchr(const char *where, char what); const char *internal_strrchr(const char *where, char what); diff --git a/lib/tsan/rtl/tsan_interceptors.cc b/lib/tsan/rtl/tsan_interceptors.cc index 723d369a4..0c50c25c5 100644 --- a/lib/tsan/rtl/tsan_interceptors.cc +++ b/lib/tsan/rtl/tsan_interceptors.cc @@ -1525,10 +1525,6 @@ void internal_memset(void *ptr, int c, uptr size) { REAL(memset)(ptr, c, size); } -void internal_memcpy(void *dst, const void *src, uptr size) { - REAL(memcpy)(dst, src, size); -} - int internal_memcmp(const void *s1, const void *s2, uptr size) { return REAL(memcmp)(s1, s2, size); } @@ -1541,14 +1537,6 @@ void internal_strcpy(char *s1, const char *s2) { REAL(strcpy)(s1, s2); // NOLINT } -char* internal_strdup(const char *s) { - uptr len = internal_strlen(s); - char *s2 = (char*)internal_alloc(MBlockString, len + 1); - internal_memcpy(s2, s, len); - s2[len] = 0; - return s2; -} - const char *internal_strstr(const char *where, const char *what) { return REAL(strstr)(where, what); } diff --git a/lib/tsan/rtl/tsan_mman.cc b/lib/tsan/rtl/tsan_mman.cc index 3318cb456..8fc597ff5 100644 --- a/lib/tsan/rtl/tsan_mman.cc +++ b/lib/tsan/rtl/tsan_mman.cc @@ -10,6 +10,7 @@ // This file is a part of ThreadSanitizer (TSan), a race detector. // //===----------------------------------------------------------------------===// +#include "sanitizer_common/sanitizer_common.h" #include "tsan_mman.h" #include "tsan_allocator.h" #include "tsan_rtl.h" @@ -103,13 +104,13 @@ MBlock *user_mblock(ThreadState *thr, void *p) { void *internal_alloc(MBlockType typ, uptr sz) { ThreadState *thr = cur_thread(); CHECK_GT(thr->in_rtl, 0); - return Alloc(sz); + return InternalAlloc(sz); } void internal_free(void *p) { ThreadState *thr = cur_thread(); CHECK_GT(thr->in_rtl, 0); - Free(p); + InternalFree(p); } } // namespace __tsan |