summaryrefslogtreecommitdiffstats
path: root/compiler-rt
diff options
context:
space:
mode:
authorAlexander Potapenko <glider@google.com>2012-10-04 13:41:28 +0000
committerAlexander Potapenko <glider@google.com>2012-10-04 13:41:28 +0000
commitd2f6b974175fefbb6df8cd9f1ee26525c0f9e607 (patch)
treee482e0971de53e564356eed9b85f650fc4b8b05a /compiler-rt
parent271ea6cdc5a6df9530032ea2430e709674bc5686 (diff)
downloadbcm5719-llvm-d2f6b974175fefbb6df8cd9f1ee26525c0f9e607.tar.gz
bcm5719-llvm-d2f6b974175fefbb6df8cd9f1ee26525c0f9e607.zip
Avoid calling __asan_init from memcpy(), memmove(), memset() during libSystem initialization.
Fixes http://code.google.com/p/address-sanitizer/issues/detail?id=117. llvm-svn: 165227
Diffstat (limited to 'compiler-rt')
-rw-r--r--compiler-rt/lib/asan/asan_interceptors.cc9
1 files changed, 9 insertions, 0 deletions
diff --git a/compiler-rt/lib/asan/asan_interceptors.cc b/compiler-rt/lib/asan/asan_interceptors.cc
index cbc35abf734..5797a0b0fc9 100644
--- a/compiler-rt/lib/asan/asan_interceptors.cc
+++ b/compiler-rt/lib/asan/asan_interceptors.cc
@@ -225,6 +225,9 @@ INTERCEPTOR(int, memcmp, const void *a1, const void *a2, uptr size) {
}
INTERCEPTOR(void*, memcpy, void *to, const void *from, uptr size) {
+#if MAC_INTERPOSE_FUNCTIONS
+ if (!asan_inited) return REAL(memcpy)(to, from, size);
+#endif
// memcpy is called during __asan_init() from the internals
// of printf(...).
if (asan_init_is_running) {
@@ -244,6 +247,9 @@ INTERCEPTOR(void*, memcpy, void *to, const void *from, uptr size) {
}
INTERCEPTOR(void*, memmove, void *to, const void *from, uptr size) {
+#if MAC_INTERPOSE_FUNCTIONS
+ if (!asan_inited) return REAL(memmove)(to, from, size);
+#endif
if (asan_init_is_running) {
return REAL(memmove)(to, from, size);
}
@@ -256,6 +262,9 @@ INTERCEPTOR(void*, memmove, void *to, const void *from, uptr size) {
}
INTERCEPTOR(void*, memset, void *block, int c, uptr size) {
+#if MAC_INTERPOSE_FUNCTIONS
+ if (!asan_inited) return REAL(memset)(block, c, size);
+#endif
// memset is called inside Printf.
if (asan_init_is_running) {
return REAL(memset)(block, c, size);
OpenPOWER on IntegriCloud