summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEtienne Bergeron <etienneb@google.com>2016-07-11 20:37:12 +0000
committerEtienne Bergeron <etienneb@google.com>2016-07-11 20:37:12 +0000
commit81c0f32cf247b7c67d883bfd19508a7029ff6ed1 (patch)
treeaa293e33a7b3c3e25f2bf5e2c838a45abd7174ee
parentf1996e567aa06ca3a5931baa697c1364ceb69420 (diff)
downloadbcm5719-llvm-81c0f32cf247b7c67d883bfd19508a7029ff6ed1.tar.gz
bcm5719-llvm-81c0f32cf247b7c67d883bfd19508a7029ff6ed1.zip
[compiler-rt] Refactor the interception code on windows.
[asan] Fix unittest Asan-x86_64-inline-Test crashing on Windows64 REAL(memcpy) was used in several places in Asan, while REAL(memmove) was not used. This CL chooses to patch memcpy() first, solving the crash for unittest. The crash looks like this: projects\compiler-rt\lib\asan\tests\default\Asan-x86_64-inline-Test.exe ================================================================= ==22680==ERROR: AddressSanitizer: access-violation on unknown address 0x000000000000 (pc 0x000000000000 bp 0x0029d555f590 sp 0x0029d555f438 T0) ==22680==Hint: pc points to the zero page. AddressSanitizer can not provide additional info. SUMMARY: AddressSanitizer: access-violation (<unknown module>) ==22680==ABORTING Patch by: Wei Wang Differential Revision: http://reviews.llvm.org/D22232 llvm-svn: 275098
-rw-r--r--compiler-rt/lib/asan/asan_interceptors.cc6
1 files changed, 4 insertions, 2 deletions
diff --git a/compiler-rt/lib/asan/asan_interceptors.cc b/compiler-rt/lib/asan/asan_interceptors.cc
index 7f9a8844b81..3b3b0f38099 100644
--- a/compiler-rt/lib/asan/asan_interceptors.cc
+++ b/compiler-rt/lib/asan/asan_interceptors.cc
@@ -725,11 +725,13 @@ void InitializeAsanInterceptors() {
InitializeCommonInterceptors();
// Intercept mem* functions.
- ASAN_INTERCEPT_FUNC(memmove);
+ ASAN_INTERCEPT_FUNC(memcpy);
ASAN_INTERCEPT_FUNC(memset);
if (PLATFORM_HAS_DIFFERENT_MEMCPY_AND_MEMMOVE) {
- ASAN_INTERCEPT_FUNC(memcpy);
+ // In asan, REAL(memmove) is not used, but it is used in msan.
+ ASAN_INTERCEPT_FUNC(memmove);
}
+ CHECK(REAL(memcpy));
// Intercept str* functions.
ASAN_INTERCEPT_FUNC(strcat); // NOLINT
OpenPOWER on IntegriCloud