[llvm-commits] Cleanup in ASan interceptors (issue 5437128)
samsonov at google.com
samsonov at google.com
Mon Dec 5 03:11:45 PST 2011
Reviewers: kcc, ramosian.glider,
http://codereview.appspot.com/5437128/diff/1/Makefile.old
File Makefile.old (right):
http://codereview.appspot.com/5437128/diff/1/Makefile.old#newcode162
Makefile.old:162: ASAN_LD_TAIL=$(LIBASAN_A)
On 2011/12/04 01:20:31, kcc wrote:
> We should not need it.
> If we still need it (what's the case?), the fix should go to clang
driver. (This
> might work as a temporary fix though since the makefile should die
anyway)
Hm-m, let it be a temporary fix then. Without this change, changes in
asan rtl are not reflected when we rebuild the tests (or I'm doing smth
completely wrong).
http://codereview.appspot.com/5437128/diff/1/asan_interceptors.cc
File asan_interceptors.cc (right):
http://codereview.appspot.com/5437128/diff/1/asan_interceptors.cc#newcode96
asan_interceptors.cc:96: #define ENSURE_ASAN_INITED do { \
On 2011/12/04 01:20:31, kcc wrote:
> make it ENSURE_ASAN_INITED() (here and below)
Done.
http://codereview.appspot.com/5437128/diff/1/asan_interceptors.cc#newcode101
asan_interceptors.cc:101: } while (0);
On 2011/12/04 01:20:31, kcc wrote:
> remove ';'
Done (for all macro in this file).
Please review this at http://codereview.appspot.com/5437128/
Affected files:
M Makefile.old
M asan_interceptors.cc
Index: Makefile.old
===================================================================
--- Makefile.old (revision 145805)
+++ Makefile.old (working copy)
@@ -159,7 +159,7 @@
ifeq ($(ASAN_COMPILER), clang)
ASAN_CXX=$(CLANG_ASAN_CXX)
ASAN_LD=$(CLANG_ASAN_LD)
- ASAN_LD_TAIL=
+ ASAN_LD_TAIL=$(LIBASAN_A)
endif
ifeq ($(ASAN_COMPILER), gcc)
Index: asan_interceptors.cc
===================================================================
--- asan_interceptors.cc (revision 145805)
+++ asan_interceptors.cc (working copy)
@@ -62,15 +62,15 @@
AccessAddress(ptr, isWrite); \
AccessAddress(ptr + (size) - 1, isWrite); \
} \
-} while (0);
+} while (0)
#define ASAN_READ_RANGE(offset, size) do { \
ACCESS_MEMORY_RANGE(offset, size, false); \
-} while (0);
+} while (0)
#define ASAN_WRITE_RANGE(offset, size) do { \
ACCESS_MEMORY_RANGE(offset, size, true); \
-} while (0);
+} while (0)
// Behavior of functions like "memcpy" or "strcpy" is undefined
// if memory intervals overlap. We report error in this case.
@@ -90,16 +90,15 @@
PRINT_CURRENT_STACK(); \
ShowStatsAndAbort(); \
} \
-} while (0);
+} while (0)
-static inline void ensure_asan_inited() {
- CHECK(!asan_init_is_running);
- if (!asan_inited) {
- __asan_init();
- }
-}
+#define ENSURE_ASAN_INITED() do { \
+ CHECK(!asan_init_is_running); \
+ if (!asan_inited) { \
+ __asan_init(); \
+ } \
+} while (0)
-
size_t internal_strlen(const char *s) {
size_t i = 0;
while (s[i]) i++;
@@ -121,15 +120,9 @@
#else
OVERRIDE_FUNCTION(index, WRAP(strchr));
#endif
-#ifndef __APPLE__
INTERCEPT_FUNCTION(memcpy);
INTERCEPT_FUNCTION(memmove);
INTERCEPT_FUNCTION(memset);
-#else
- real_memcpy = memcpy;
- real_memmove = memmove;
- real_memset = memset;
-#endif
INTERCEPT_FUNCTION(strchr);
INTERCEPT_FUNCTION(strcmp);
INTERCEPT_FUNCTION(strcpy); // NOLINT
@@ -156,7 +149,7 @@
if (asan_init_is_running) {
return real_memcpy(to, from, size);
}
- ensure_asan_inited();
+ ENSURE_ASAN_INITED();
if (FLAG_replace_intrin) {
CHECK_RANGES_OVERLAP(to, from, size);
ASAN_WRITE_RANGE(from, size);
@@ -166,7 +159,7 @@
}
void *WRAP(memmove)(void *to, const void *from, size_t size) {
- ensure_asan_inited();
+ ENSURE_ASAN_INITED();
if (FLAG_replace_intrin) {
ASAN_WRITE_RANGE(from, size);
ASAN_READ_RANGE(to, size);
@@ -175,7 +168,11 @@
}
void *WRAP(memset)(void *block, int c, size_t size) {
- ensure_asan_inited();
+ // memset is called inside INTERCEPT_FUNCTION on Mac.
+ if (asan_init_is_running) {
+ return real_memset(block, c, size);
+ }
+ ENSURE_ASAN_INITED();
if (FLAG_replace_intrin) {
ASAN_WRITE_RANGE(block, size);
}
@@ -192,7 +189,7 @@
#endif
char *WRAP(strchr)(const char *str, int c) {
- ensure_asan_inited();
+ ENSURE_ASAN_INITED();
char *result = real_strchr(str, c);
if (FLAG_replace_str) {
size_t bytes_read = (result ? result - str : real_strlen(str)) + 1;
@@ -229,7 +226,7 @@
if (asan_init_is_running) {
return real_strcpy(to, from);
}
- ensure_asan_inited();
+ ENSURE_ASAN_INITED();
if (FLAG_replace_str) {
size_t from_size = real_strlen(from) + 1;
CHECK_RANGES_OVERLAP(to, from, from_size);
@@ -240,7 +237,7 @@
}
char *WRAP(strdup)(const char *s) {
- ensure_asan_inited();
+ ENSURE_ASAN_INITED();
if (FLAG_replace_str) {
size_t length = real_strlen(s);
ASAN_READ_RANGE(s, length + 1);
@@ -254,7 +251,7 @@
if (asan_init_is_running) {
return real_strlen(s);
}
- ensure_asan_inited();
+ ENSURE_ASAN_INITED();
size_t length = real_strlen(s);
if (FLAG_replace_str) {
ASAN_READ_RANGE(s, length + 1);
@@ -281,7 +278,7 @@
}
char *WRAP(strncpy)(char *to, const char *from, size_t size) {
- ensure_asan_inited();
+ ENSURE_ASAN_INITED();
if (FLAG_replace_str) {
size_t from_size = Min(size, internal_strnlen(from, size) + 1);
CHECK_RANGES_OVERLAP(to, from, from_size);
@@ -293,7 +290,7 @@
#ifndef __APPLE__
size_t WRAP(strnlen)(const char *s, size_t maxlen) {
- ensure_asan_inited();
+ ENSURE_ASAN_INITED();
size_t length = real_strnlen(s, maxlen);
if (FLAG_replace_str) {
ASAN_READ_RANGE(s, Min(length + 1, maxlen));
More information about the llvm-commits
mailing list