[Sanitizer] move internal_strdup and internal_memcpy to common runtime. Make internal allocations from TSan runtime call InternalAlloc from common runtime

llvm-svn: 158148
This commit is contained in:
Alexey Samsonov
2012-06-07 11:54:08 +00:00
parent 8b9aea522f
commit 91e1a7eb17
5 changed files with 23 additions and 17 deletions

View File

@@ -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;

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);
}

View File

@@ -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