mirror of
https://github.com/intel/llvm.git
synced 2026-02-07 16:11:27 +08:00
[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:
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user