summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAlexey Samsonov <samsonov@google.com>2012-06-07 11:54:08 +0000
committerAlexey Samsonov <samsonov@google.com>2012-06-07 11:54:08 +0000
commitf7667cc84cdd8923c0b6c7cfc92b7bd5692ce18c (patch)
treec1b2a094e43e75312828df7d892d5cef7c106310 /lib
parent9fe7b96f92606057dacb9130c08d32430d8be86f (diff)
downloadcompiler-rt-f7667cc84cdd8923c0b6c7cfc92b7bd5692ce18c.tar.gz
[Sanitizer] move internal_strdup and internal_memcpy to common runtime. Make internal allocations from TSan runtime call InternalAlloc from common runtime
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@158148 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/sanitizer_common/sanitizer_libc.cc18
-rw-r--r--lib/sanitizer_common/sanitizer_libc.h2
-rw-r--r--lib/tsan/rtl/tsan_defs.h3
-rw-r--r--lib/tsan/rtl/tsan_interceptors.cc12
-rw-r--r--lib/tsan/rtl/tsan_mman.cc5
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