summaryrefslogtreecommitdiffstats
path: root/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc
diff options
context:
space:
mode:
authorEvgeniy Stepanov <eugeni.stepanov@gmail.com>2013-12-13 13:13:46 +0000
committerEvgeniy Stepanov <eugeni.stepanov@gmail.com>2013-12-13 13:13:46 +0000
commit879c552dd951faaad42c68723fcbbf32f1409f20 (patch)
treefbb0d7f9fbdb50c06ed6bc3d6dfbf19c22521576 /compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc
parent002a14765eba600b555dba39f7650c55146ae698 (diff)
downloadbcm5719-llvm-879c552dd951faaad42c68723fcbbf32f1409f20.tar.gz
bcm5719-llvm-879c552dd951faaad42c68723fcbbf32f1409f20.zip
[msan] Wrap indirect calls from sanitizer rtl when running under DR.
llvm-svn: 197226
Diffstat (limited to 'compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc')
-rw-r--r--compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc11
1 files changed, 9 insertions, 2 deletions
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc b/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc
index a755f2adf22..89e801358ab 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux_libcdep.cc
@@ -98,7 +98,7 @@ bool SetEnv(const char *name, const char *value) {
setenv_ft setenv_f;
CHECK_EQ(sizeof(setenv_f), sizeof(f));
internal_memcpy(&setenv_f, &f, sizeof(f));
- return setenv_f(name, value, 1) == 0;
+ return IndirectExternCall(setenv_f)(name, value, 1) == 0;
}
#endif
@@ -196,7 +196,7 @@ void InitTlsSize() {
CHECK_NE(get_tls, 0);
size_t tls_size = 0;
size_t tls_align = 0;
- get_tls(&tls_size, &tls_align);
+ IndirectExternCall(get_tls)(&tls_size, &tls_align);
g_tls_size = tls_size;
#endif
}
@@ -353,6 +353,13 @@ uptr GetListOfModules(LoadedModule *modules, uptr max_modules,
}
#endif // SANITIZER_ANDROID
+uptr indirect_call_wrapper;
+
+void InitializeIndirectCallWrapping(const char *wrapper_name) {
+ CHECK(wrapper_name && *wrapper_name);
+ indirect_call_wrapper = (uptr)dlsym(RTLD_DEFAULT, wrapper_name);
+}
+
} // namespace __sanitizer
#endif // SANITIZER_LINUX
OpenPOWER on IntegriCloud