[llvm-commits] [compiler-rt] r159294 - in /compiler-rt/trunk/lib: sanitizer_common/sanitizer_internal_defs.h tsan/rtl/tsan_defs.h tsan/rtl/tsan_flags.cc tsan/rtl/tsan_interceptors.cc tsan/rtl/tsan_md5.cc tsan/rtl/tsan_rtl_report.cc tsan/rtl/tsan_
Dmitry Vyukov
dvyukov at google.com
Wed Jun 27 14:16:06 PDT 2012
On Thu, Jun 28, 2012 at 1:07 AM, Chandler Carruth <chandlerc at google.com>wrote:
> I suspect you'll need to work still harder than this... =[
I know :)
Now I need to understand how exactly it is broken.
You'll need to compile with -fno-builtins in order to prevent LLVM's
> optimizer from recognizing your code as equivalent to 'memset' or 'memcpy',
> and replacing it with a call to those functions. =/
>
I believe we are compiling with -fno-builtin.
You mentioned that I also need -ffreestanding:
"Yes, there are attributes which can be attached to the non-instrumented
memcpy function, provided by the runtime and selected due to
-ffreestanding, which will force inlining. __attribute__((always_inline)),
__attribute__((flatten))"
Why do I need it?
On Wed, Jun 27, 2012 at 2:00 PM, Dmitry Vyukov <dvyukov at google.com> wrote:
>
>> Author: dvyukov
>> Date: Wed Jun 27 16:00:23 2012
>> New Revision: 159294
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=159294&view=rev
>> Log:
>> tsan: prevent insertion of unwanted memset/memcpy/memcmp into runtime
>>
>> Modified:
>> compiler-rt/trunk/lib/sanitizer_common/sanitizer_internal_defs.h
>> compiler-rt/trunk/lib/tsan/rtl/tsan_defs.h
>> compiler-rt/trunk/lib/tsan/rtl/tsan_flags.cc
>> compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc
>> compiler-rt/trunk/lib/tsan/rtl/tsan_md5.cc
>> compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_report.cc
>> compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_thread.cc
>> compiler-rt/trunk/lib/tsan/rtl/tsan_suppressions.cc
>> compiler-rt/trunk/lib/tsan/rtl/tsan_symbolize_addr2line_linux.cc
>> compiler-rt/trunk/lib/tsan/rtl/tsan_vector.h
>> compiler-rt/trunk/lib/tsan/rtl_tests/tsan_test_util_linux.cc
>> compiler-rt/trunk/lib/tsan/unit_tests/tsan_platform_test.cc
>>
>> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_internal_defs.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_internal_defs.h?rev=159294&r1=159293&r2=159294&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_internal_defs.h
>> (original)
>> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_internal_defs.h Wed
>> Jun 27 16:00:23 2012
>> @@ -26,6 +26,7 @@
>> // Platform-specific defs.
>> #if defined(_WIN32)
>> typedef unsigned long DWORD; // NOLINT
>> +# define ALWAYS_INLINE __declspec(forceinline)
>> // FIXME(timurrrr): do we need this on Windows?
>> # define ALIAS(x)
>> # define ALIGNED(x) __declspec(align(x))
>> @@ -33,18 +34,24 @@
>> # define NOINLINE __declspec(noinline)
>> # define NORETURN __declspec(noreturn)
>> # define THREADLOCAL __declspec(thread)
>> +# define NOTHROW
>> #else // _WIN32
>> +# define ALWAYS_INLINE __attribute__((always_inline))
>> # define ALIAS(x) __attribute__((alias(x)))
>> # define ALIGNED(x) __attribute__((aligned(x)))
>> # define FORMAT(f, a) __attribute__((format(printf, f, a)))
>> # define NOINLINE __attribute__((noinline))
>> # define NORETURN __attribute__((noreturn))
>> # define THREADLOCAL __thread
>> +# ifdef __cplusplus
>> +# define NOTHROW throw()
>> +# else
>> +# define NOTHROW __attribute__((__nothrow__))
>> +#endif
>> #endif // _WIN32
>>
>> // We have no equivalent of these on Windows.
>> #ifndef _WIN32
>> -# define ALWAYS_INLINE __attribute__((always_inline))
>> # define LIKELY(x) __builtin_expect(!!(x), 1)
>> # define UNLIKELY(x) __builtin_expect(!!(x), 0)
>> # define UNUSED __attribute__((unused))
>>
>> Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_defs.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_defs.h?rev=159294&r1=159293&r2=159294&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/tsan/rtl/tsan_defs.h (original)
>> +++ compiler-rt/trunk/lib/tsan/rtl/tsan_defs.h Wed Jun 27 16:00:23 2012
>> @@ -14,7 +14,6 @@
>> #ifndef TSAN_DEFS_H
>> #define TSAN_DEFS_H
>>
>> -#include "interception/interception.h"
>> #include "sanitizer_common/sanitizer_internal_defs.h"
>> #include "sanitizer_common/sanitizer_libc.h"
>> #include "tsan_stat.h"
>> @@ -155,9 +154,29 @@
>>
>> } // namespace __tsan
>>
>> -DECLARE_REAL(void*, memset, void *ptr, int v, uptr size);
>> -DECLARE_REAL(void*, memcpy, void *dst, const void *src, uptr size);
>> -DECLARE_REAL(int, strncmp, const char *s1, const char *s2, uptr n);
>> -DECLARE_REAL(const char*, strstr, const char *s1, const char *s2);
>> +extern "C" inline void *ALWAYS_INLINE
>> +memset(void *ptr, int v, uptr size) NOTHROW {
>> + for (uptr i = 0; i < size; i++)
>> + ((char*)ptr)[i] = (char)v;
>> + return ptr;
>> +}
>> +
>> +extern "C" inline void *ALWAYS_INLINE
>> +memcpy(void *dst, const void *src, uptr size) NOTHROW {
>> + for (uptr i = 0; i < size; i++)
>> + ((char*)dst)[i] = ((char*)src)[i];
>> + return dst;
>> +}
>> +
>> +extern "C" inline int ALWAYS_INLINE
>> +memcmp(const void *p1, const void *p2, uptr size) NOTHROW {
>> + for (uptr i = 0; i < size; i++) {
>> + if (((unsigned char*)p1)[i] < ((unsigned char*)p2)[i])
>> + return -1;
>> + if (((unsigned char*)p1)[i] > ((unsigned char*)p2)[i])
>> + return 1;
>> + }
>> + return 0;
>> +}
>>
>> #endif // TSAN_DEFS_H
>>
>> Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_flags.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_flags.cc?rev=159294&r1=159293&r2=159294&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/tsan/rtl/tsan_flags.cc (original)
>> +++ compiler-rt/trunk/lib/tsan/rtl/tsan_flags.cc Wed Jun 27 16:00:23 2012
>> @@ -32,7 +32,7 @@
>> }
>>
>> void InitializeFlags(Flags *f, const char *env) {
>> - REAL(memset)(f, 0, sizeof(*f));
>> + internal_memset(f, 0, sizeof(*f));
>>
>> // Default values.
>> f->enable_annotations = true;
>> @@ -78,7 +78,7 @@
>> const char **end) {
>> if (env == 0)
>> return *end = 0;
>> - const char *pos = REAL(strstr)(env, name);
>> + const char *pos = internal_strstr(env, name);
>> if (pos == 0)
>> return *end = 0;
>> pos += internal_strlen(name);
>> @@ -139,7 +139,7 @@
>> return;
>> int len = end - val;
>> char *f = (char*)internal_alloc(MBlockFlag, len + 1);
>> - REAL(memcpy)(f, val, len);
>> + internal_memcpy(f, val, len);
>> f[len] = 0;
>> *flag = f;
>> }
>>
>> Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc?rev=159294&r1=159293&r2=159294&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc (original)
>> +++ compiler-rt/trunk/lib/tsan/rtl/tsan_interceptors.cc Wed Jun 27
>> 16:00:23 2012
>> @@ -172,6 +172,17 @@
>> return REAL(func)(__VA_ARGS__); \
>> /**/
>>
>> +#define SCOPED_INTERCEPTOR_LIBC(func, ...) \
>> + ThreadState *thr = cur_thread(); \
>> + StatInc(thr, StatInterceptor); \
>> + StatInc(thr, StatInt_##func); \
>> + ScopedInterceptor si(thr, #func, callpc); \
>> + const uptr pc = (uptr)&func; \
>> + (void)pc; \
>> + if (thr->in_rtl > 1) \
>> + return REAL(func)(__VA_ARGS__); \
>> +/**/
>> +
>> #define TSAN_INTERCEPTOR(ret, func, ...) INTERCEPTOR(ret, func,
>> __VA_ARGS__)
>> #define TSAN_INTERCEPT(func) INTERCEPT_FUNCTION(func)
>>
>> @@ -321,7 +332,7 @@
>> {
>> SCOPED_INTERCEPTOR_RAW(calloc, size, n);
>> p = user_alloc(thr, pc, n * size);
>> - REAL(memset)(p, 0, n * size);
>> + internal_memset(p, 0, n * size);
>> }
>> invoke_malloc_hook(p, n * size);
>> return p;
>> @@ -354,26 +365,48 @@
>> user_free(thr, pc, p);
>> }
>>
>> -TSAN_INTERCEPTOR(uptr, strlen, const void *s) {
>> +TSAN_INTERCEPTOR(uptr, strlen, const char *s) {
>> SCOPED_TSAN_INTERCEPTOR(strlen, s);
>> - uptr len = REAL(strlen)(s);
>> + uptr len = internal_strlen(s);
>> MemoryAccessRange(thr, pc, (uptr)s, len + 1, false);
>> return len;
>> }
>>
>> -TSAN_INTERCEPTOR(void*, memset, void *dst, int v, uptr size) {
>> - SCOPED_TSAN_INTERCEPTOR(memset, dst, v, size);
>> +DECLARE_REAL(void*, memset, void *dst, int v, uptr size);
>> +DECLARE_REAL(void*, memcpy, void *dst, const void *src, uptr size);
>> +DECLARE_REAL(int, memcmp, const void *s1, const void *s2, uptr n);
>> +extern "C" void *__interceptor_memset(void *dst, int v, uptr size);
>> +extern "C" void *__interceptor_memcpy(void *dst, const void *src, uptr
>> size);
>> +extern "C" int __interceptor_memcmp(const void *s1, const void *s2, uptr
>> n);
>> +
>> +namespace __tsan {
>> +void *intercept_memset(uptr callpc, void *dst, int v, uptr size) {
>> + SCOPED_INTERCEPTOR_LIBC(memset, dst, v, size);
>> MemoryAccessRange(thr, pc, (uptr)dst, size, true);
>> return REAL(memset)(dst, v, size);
>> }
>>
>> -TSAN_INTERCEPTOR(void*, memcpy, void *dst, const void *src, uptr size) {
>> - SCOPED_TSAN_INTERCEPTOR(memcpy, dst, src, size);
>> +void *intercept_memcpy(uptr callpc, void *dst, const void *src, uptr
>> size) {
>> + SCOPED_INTERCEPTOR_LIBC(memcpy, dst, src, size);
>> MemoryAccessRange(thr, pc, (uptr)dst, size, true);
>> MemoryAccessRange(thr, pc, (uptr)src, size, false);
>> return REAL(memcpy)(dst, src, size);
>> }
>>
>> +int intercept_memcmp(uptr callpc, const void *s1, const void *s2, uptr
>> n) {
>> + SCOPED_INTERCEPTOR_LIBC(memcmp, s1, s2, n);
>> + int res = 0;
>> + uptr len = 0;
>> + for (; len < n; len++) {
>> + if ((res = ((unsigned char*)s1)[len] - ((unsigned char*)s2)[len]))
>> + break;
>> + }
>> + MemoryAccessRange(thr, pc, (uptr)s1, len < n ? len + 1 : n, false);
>> + MemoryAccessRange(thr, pc, (uptr)s2, len < n ? len + 1 : n, false);
>> + return res;
>> +}
>> +}
>> +
>> TSAN_INTERCEPTOR(int, strcmp, const char *s1, const char *s2) {
>> SCOPED_TSAN_INTERCEPTOR(strcmp, s1, s2);
>> uptr len = 0;
>> @@ -419,52 +452,39 @@
>> return REAL(memmove)(dst, src, n);
>> }
>>
>> -TSAN_INTERCEPTOR(int, memcmp, const void *s1, const void *s2, uptr n) {
>> - SCOPED_TSAN_INTERCEPTOR(memcmp, s1, s2, n);
>> - int res = 0;
>> - uptr len = 0;
>> - for (; len < n; len++) {
>> - if ((res = ((unsigned char*)s1)[len] - ((unsigned char*)s2)[len]))
>> - break;
>> - }
>> - MemoryAccessRange(thr, pc, (uptr)s1, len < n ? len + 1 : n, false);
>> - MemoryAccessRange(thr, pc, (uptr)s2, len < n ? len + 1 : n, false);
>> - return res;
>> -}
>> -
>> -TSAN_INTERCEPTOR(void*, strchr, void *s, int c) {
>> +TSAN_INTERCEPTOR(char*, strchr, char *s, int c) {
>> SCOPED_TSAN_INTERCEPTOR(strchr, s, c);
>> - void *res = REAL(strchr)(s, c);
>> - uptr len = res ? (char*)res - (char*)s + 1 : REAL(strlen)(s) + 1;
>> + char *res = REAL(strchr)(s, c);
>> + uptr len = res ? (char*)res - (char*)s + 1 : internal_strlen(s) + 1;
>> MemoryAccessRange(thr, pc, (uptr)s, len, false);
>> return res;
>> }
>>
>> -TSAN_INTERCEPTOR(void*, strchrnul, void *s, int c) {
>> +TSAN_INTERCEPTOR(char*, strchrnul, char *s, int c) {
>> SCOPED_TSAN_INTERCEPTOR(strchrnul, s, c);
>> - void *res = REAL(strchrnul)(s, c);
>> + char *res = REAL(strchrnul)(s, c);
>> uptr len = (char*)res - (char*)s + 1;
>> MemoryAccessRange(thr, pc, (uptr)s, len, false);
>> return res;
>> }
>>
>> -TSAN_INTERCEPTOR(void*, strrchr, void *s, int c) {
>> +TSAN_INTERCEPTOR(char*, strrchr, char *s, int c) {
>> SCOPED_TSAN_INTERCEPTOR(strrchr, s, c);
>> - MemoryAccessRange(thr, pc, (uptr)s, REAL(strlen)(s) + 1, false);
>> + MemoryAccessRange(thr, pc, (uptr)s, internal_strlen(s) + 1, false);
>> return REAL(strrchr)(s, c);
>> }
>>
>> -TSAN_INTERCEPTOR(void*, strcpy, void *dst, const void *src) { // NOLINT
>> +TSAN_INTERCEPTOR(char*, strcpy, char *dst, const char *src) { // NOLINT
>> SCOPED_TSAN_INTERCEPTOR(strcpy, dst, src); // NOLINT
>> - uptr srclen = REAL(strlen)(src);
>> + uptr srclen = internal_strlen(src);
>> MemoryAccessRange(thr, pc, (uptr)dst, srclen + 1, true);
>> MemoryAccessRange(thr, pc, (uptr)src, srclen + 1, false);
>> return REAL(strcpy)(dst, src); // NOLINT
>> }
>>
>> -TSAN_INTERCEPTOR(void*, strncpy, void *dst, void *src, uptr n) {
>> +TSAN_INTERCEPTOR(char*, strncpy, char *dst, char *src, uptr n) {
>> SCOPED_TSAN_INTERCEPTOR(strncpy, dst, src, n);
>> - uptr srclen = REAL(strlen)(src);
>> + uptr srclen = internal_strlen(src);
>> MemoryAccessRange(thr, pc, (uptr)dst, n, true);
>> MemoryAccessRange(thr, pc, (uptr)src, min(srclen + 1, n), false);
>> return REAL(strncpy)(dst, src, n);
>> @@ -473,8 +493,8 @@
>> TSAN_INTERCEPTOR(const char*, strstr, const char *s1, const char *s2) {
>> SCOPED_TSAN_INTERCEPTOR(strstr, s1, s2);
>> const char *res = REAL(strstr)(s1, s2);
>> - uptr len1 = REAL(strlen)(s1);
>> - uptr len2 = REAL(strlen)(s2);
>> + uptr len1 = internal_strlen(s1);
>> + uptr len2 = internal_strlen(s2);
>> MemoryAccessRange(thr, pc, (uptr)s1, len1 + 1, false);
>> MemoryAccessRange(thr, pc, (uptr)s2, len2 + 1, false);
>> return res;
>> @@ -1224,7 +1244,7 @@
>>
>> TSAN_INTERCEPTOR(int, puts, const char *s) {
>> SCOPED_TSAN_INTERCEPTOR(puts, s);
>> - MemoryAccessRange(thr, pc, (uptr)s, REAL(strlen)(s), false);
>> + MemoryAccessRange(thr, pc, (uptr)s, internal_strlen(s), false);
>> return REAL(puts)(s);
>> }
>>
>>
>> Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_md5.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_md5.cc?rev=159294&r1=159293&r2=159294&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/tsan/rtl/tsan_md5.cc (original)
>> +++ compiler-rt/trunk/lib/tsan/rtl/tsan_md5.cc Wed Jun 27 16:00:23 2012
>> @@ -166,11 +166,11 @@
>> free = 64 - used;
>>
>> if (size < free) {
>> - REAL(memcpy)(&ctx->buffer[used], data, size);
>> + internal_memcpy(&ctx->buffer[used], data, size);
>> return;
>> }
>>
>> - REAL(memcpy)(&ctx->buffer[used], data, free);
>> + internal_memcpy(&ctx->buffer[used], data, free);
>> data = (unsigned char *)data + free;
>> size -= free;
>> body(ctx, ctx->buffer, 64);
>> @@ -181,7 +181,7 @@
>> size &= 0x3f;
>> }
>>
>> - REAL(memcpy)(ctx->buffer, data, size);
>> + internal_memcpy(ctx->buffer, data, size);
>> }
>>
>> void MD5_Final(unsigned char *result, MD5_CTX *ctx) {
>> @@ -194,13 +194,13 @@
>> free = 64 - used;
>>
>> if (free < 8) {
>> - REAL(memset)(&ctx->buffer[used], 0, free);
>> + internal_memset(&ctx->buffer[used], 0, free);
>> body(ctx, ctx->buffer, 64);
>> used = 0;
>> free = 64;
>> }
>>
>> - REAL(memset)(&ctx->buffer[used], 0, free - 8);
>> + internal_memset(&ctx->buffer[used], 0, free - 8);
>>
>> ctx->lo <<= 3;
>> ctx->buffer[56] = ctx->lo;
>> @@ -231,7 +231,7 @@
>> result[14] = ctx->d >> 16;
>> result[15] = ctx->d >> 24;
>>
>> - REAL(memset)(ctx, 0, sizeof(*ctx));
>> + internal_memset(ctx, 0, sizeof(*ctx));
>> }
>>
>> MD5Hash md5_hash(const void *data, uptr size) {
>>
>> Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_report.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_report.cc?rev=159294&r1=159293&r2=159294&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_report.cc (original)
>> +++ compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_report.cc Wed Jun 27 16:00:23
>> 2012
>> @@ -50,9 +50,9 @@
>> const char *path_prefix = flags()->strip_path_prefix;
>> uptr path_prefix_len = internal_strlen(path_prefix);
>> for (ReportStack *ent = stack; ent; ent = ent->next) {
>> - if (ent->func && 0 == REAL(strncmp)(ent->func, prefix, prefix_len))
>> + if (ent->func && 0 == internal_strncmp(ent->func, prefix,
>> prefix_len))
>> ent->func += prefix_len;
>> - if (ent->file && 0 == REAL(strncmp)(ent->file, path_prefix,
>> + if (ent->file && 0 == internal_strncmp(ent->file, path_prefix,
>> path_prefix_len))
>> ent->file += path_prefix_len;
>> if (ent->file && ent->file[0] == '.' && ent->file[1] == '/')
>>
>> Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_thread.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_thread.cc?rev=159294&r1=159293&r2=159294&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_thread.cc (original)
>> +++ compiler-rt/trunk/lib/tsan/rtl/tsan_rtl_thread.cc Wed Jun 27 16:00:23
>> 2012
>> @@ -212,7 +212,7 @@
>> // Save from info about the thread.
>> tctx->dead_info = new(internal_alloc(MBlockDeadInfo,
>> sizeof(ThreadDeadInfo)))
>> ThreadDeadInfo();
>> - REAL(memcpy)(&tctx->dead_info->trace.events[0],
>> + internal_memcpy(&tctx->dead_info->trace.events[0],
>> &thr->trace.events[0], sizeof(thr->trace.events));
>> for (int i = 0; i < kTraceParts; i++) {
>> tctx->dead_info->trace.headers[i].stack0.CopyFrom(
>>
>> Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_suppressions.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_suppressions.cc?rev=159294&r1=159293&r2=159294&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/tsan/rtl/tsan_suppressions.cc (original)
>> +++ compiler-rt/trunk/lib/tsan/rtl/tsan_suppressions.cc Wed Jun 27
>> 16:00:23 2012
>> @@ -69,7 +69,7 @@
>> tpos = (char*)internal_strchr(templ, '*');
>> if (tpos != 0)
>> tpos[0] = 0;
>> - spos = REAL(strstr)(str, templ);
>> + spos = internal_strstr(str, templ);
>> str = spos + internal_strlen(templ);
>> templ = tpos;
>> if (tpos)
>> @@ -94,18 +94,18 @@
>> while (line != end2 && (end2[-1] == ' ' || end2[-1] == '\t'))
>> end2--;
>> SuppressionType stype;
>> - if (0 == REAL(strncmp)(line, "race:", sizeof("race:") - 1)) {
>> + if (0 == internal_strncmp(line, "race:", sizeof("race:") - 1)) {
>> stype = SuppressionRace;
>> line += sizeof("race:") - 1;
>> - } else if (0 == REAL(strncmp)(line, "thread:",
>> + } else if (0 == internal_strncmp(line, "thread:",
>> sizeof("thread:") - 1)) {
>> stype = SuppressionThread;
>> line += sizeof("thread:") - 1;
>> - } else if (0 == REAL(strncmp)(line, "mutex:",
>> + } else if (0 == internal_strncmp(line, "mutex:",
>> sizeof("mutex:") - 1)) {
>> stype = SuppressionMutex;
>> line += sizeof("mutex:") - 1;
>> - } else if (0 == REAL(strncmp)(line, "signal:",
>> + } else if (0 == internal_strncmp(line, "signal:",
>> sizeof("signal:") - 1)) {
>> stype = SuppressionSignal;
>> line += sizeof("signal:") - 1;
>> @@ -119,7 +119,7 @@
>> head = s;
>> s->type = stype;
>> s->templ = (char*)internal_alloc(MBlockSuppression, end2 - line +
>> 1);
>> - REAL(memcpy)(s->templ, line, end2 - line);
>> + internal_memcpy(s->templ, line, end2 - line);
>> s->templ[end2 - line] = 0;
>> }
>> if (end[0] == 0)
>>
>> Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_symbolize_addr2line_linux.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_symbolize_addr2line_linux.cc?rev=159294&r1=159293&r2=159294&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/tsan/rtl/tsan_symbolize_addr2line_linux.cc
>> (original)
>> +++ compiler-rt/trunk/lib/tsan/rtl/tsan_symbolize_addr2line_linux.cc Wed
>> Jun 27 16:00:23 2012
>> @@ -149,7 +149,7 @@
>> static ReportStack *NewFrame(uptr addr) {
>> ReportStack *ent = (ReportStack*)internal_alloc(MBlockReportStack,
>> sizeof(ReportStack));
>> - REAL(memset)(ent, 0, sizeof(*ent));
>> + internal_memset(ent, 0, sizeof(*ent));
>> ent->pc = addr;
>> return ent;
>> }
>> @@ -181,12 +181,12 @@
>> char *pos = (char*)internal_strchr(func, '\n');
>> if (pos && func[0] != '?') {
>> res->func = (char*)internal_alloc(MBlockReportStack, pos - func + 1);
>> - REAL(memcpy)(res->func, func, pos - func);
>> + internal_memcpy(res->func, func, pos - func);
>> res->func[pos - func] = 0;
>> char *pos2 = (char*)internal_strchr(pos, ':');
>> if (pos2) {
>> res->file = (char*)internal_alloc(MBlockReportStack, pos2 - pos - 1
>> + 1);
>> - REAL(memcpy)(res->file, pos + 1, pos2 - pos - 1);
>> + internal_memcpy(res->file, pos + 1, pos2 - pos - 1);
>> res->file[pos2 - pos - 1] = 0;
>> res->line = atoi(pos2 + 1);
>> }
>> @@ -196,43 +196,6 @@
>>
>> ReportStack *SymbolizeData(uptr addr) {
>> return 0;
>> - /*
>> - if (base == 0)
>> - base = GetImageBase();
>> - int res = 0;
>> - InternalScopedBuf<char> cmd(1024);
>> - internal_snprintf(cmd, cmd.Size(),
>> - "nm -alC %s|grep \"%zx\"|awk '{printf(\"%%s\\n%%s\", $3, $4)}' >
>> tsan.tmp2",
>> - exe, (addr - base));
>> - if (system(cmd))
>> - return 0;
>> - FILE* f3 = fopen("tsan.tmp2", "rb");
>> - if (f3) {
>> - InternalScopedBuf<char> tmp(1024);
>> - if (fread(tmp, 1, tmp.Size(), f3) <= 0)
>> - return 0;
>> - char *pos = strchr(tmp, '\n');
>> - if (pos && tmp[0] != '?') {
>> - res = 1;
>> - symb[0].module = 0;
>> - symb[0].offset = addr;
>> - symb[0].name = alloc->Alloc<char>(pos - tmp + 1);
>> - REAL(memcpy)(symb[0].name, tmp, pos - tmp);
>> - symb[0].name[pos - tmp] = 0;
>> - symb[0].file = 0;
>> - symb[0].line = 0;
>> - char *pos2 = strchr(pos, ':');
>> - if (pos2) {
>> - symb[0].file = alloc->Alloc<char>(pos2 - pos - 1 + 1);
>> - REAL(memcpy)(symb[0].file, pos + 1, pos2 - pos - 1);
>> - symb[0].file[pos2 - pos - 1] = 0;
>> - symb[0].line = atoi(pos2 + 1);
>> - }
>> - }
>> - fclose(f3);
>> - }
>> - return res;
>> - */
>> }
>>
>> } // namespace __tsan
>>
>> Modified: compiler-rt/trunk/lib/tsan/rtl/tsan_vector.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl/tsan_vector.h?rev=159294&r1=159293&r2=159294&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/tsan/rtl/tsan_vector.h (original)
>> +++ compiler-rt/trunk/lib/tsan/rtl/tsan_vector.h Wed Jun 27 16:00:23 2012
>> @@ -94,7 +94,7 @@
>> cap = size;
>> T *p = (T*)internal_alloc(typ_, cap * sizeof(T));
>> if (cap0) {
>> - REAL(memcpy)(p, begin_, cap0 * sizeof(T));
>> + internal_memcpy(p, begin_, cap0 * sizeof(T));
>> internal_free(begin_);
>> }
>> begin_ = p;
>>
>> Modified: compiler-rt/trunk/lib/tsan/rtl_tests/tsan_test_util_linux.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/rtl_tests/tsan_test_util_linux.cc?rev=159294&r1=159293&r2=159294&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/tsan/rtl_tests/tsan_test_util_linux.cc
>> (original)
>> +++ compiler-rt/trunk/lib/tsan/rtl_tests/tsan_test_util_linux.cc Wed Jun
>> 27 16:00:23 2012
>> @@ -33,6 +33,9 @@
>> static __thread bool expect_report_reported;
>> static __thread ReportType expect_report_type;
>>
>> +extern "C" void *__interceptor_memcpy(void*, const void*, uptr);
>> +extern "C" void *__interceptor_memset(void*, int, uptr);
>> +
>> static void *BeforeInitThread(void *param) {
>> (void)param;
>> return 0;
>> @@ -298,10 +301,10 @@
>> static_cast<Mutex*>(ev->ptr)->ReadUnlock();
>> break;
>> case Event::MEMCPY:
>> - memcpy(ev->ptr, (void*)ev->arg, ev->arg2);
>> + __interceptor_memcpy(ev->ptr, (void*)ev->arg, ev->arg2);
>> break;
>> case Event::MEMSET:
>> - memset(ev->ptr, ev->arg, ev->arg2);
>> + __interceptor_memset(ev->ptr, ev->arg, ev->arg2);
>> break;
>> default: CHECK(0);
>> }
>>
>> Modified: compiler-rt/trunk/lib/tsan/unit_tests/tsan_platform_test.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/tsan/unit_tests/tsan_platform_test.cc?rev=159294&r1=159293&r2=159294&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/tsan/unit_tests/tsan_platform_test.cc (original)
>> +++ compiler-rt/trunk/lib/tsan/unit_tests/tsan_platform_test.cc Wed Jun
>> 27 16:00:23 2012
>> @@ -79,7 +79,7 @@
>> EXPECT_EQ(len1, internal_read(fd, buf, len1));
>> EXPECT_EQ(0, internal_memcmp(buf, str1, len1));
>> EXPECT_EQ((char)0, buf[len1 + 1]);
>> - REAL(memset)(buf, 0, len1);
>> + internal_memset(buf, 0, len1);
>> EXPECT_EQ(len2, internal_read(fd, buf, len2));
>> EXPECT_EQ(0, internal_memcmp(buf, str2, len2));
>> internal_close(fd);
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20120628/85ba361e/attachment.html>
More information about the llvm-commits
mailing list