From 1e36bd8516f23e2eaf9c3c6c2005a8cf66070896 Mon Sep 17 00:00:00 2001 From: Emily Shi Date: Mon, 10 Jan 2022 19:28:08 -0800 Subject: [PATCH] [compiler-rt][darwin] check for strcmp to test interceptors instead of pthread_create If `pthread_create` is not available on a platform, we won't be able to check if interceptors work. Use `strcmp` instead. Reviewed By: yln Differential Revision: https://reviews.llvm.org/D116989 --- compiler-rt/lib/sanitizer_common/sanitizer_mac.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_mac.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_mac.cpp index a2fc310..b15bad7 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_mac.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_mac.cpp @@ -1050,13 +1050,13 @@ void MaybeReexec() { RAW_CHECK("execv failed" && 0); } - // Verify that interceptors really work. We'll use dlsym to locate - // "pthread_create", if interceptors are working, it should really point to - // "wrap_pthread_create" within our own dylib. - Dl_info info_pthread_create; - void *dlopen_addr = dlsym(RTLD_DEFAULT, "pthread_create"); - RAW_CHECK(dladdr(dlopen_addr, &info_pthread_create)); - if (internal_strcmp(info.dli_fname, info_pthread_create.dli_fname) != 0) { + // Verify that interceptors really work. We'll use dlsym to locate + // "strcmp", if interceptors are working, it should really point to + // "wrap_strcmp" within our own dylib. + Dl_info info_strcmp; + void *dlopen_addr = dlsym(RTLD_DEFAULT, "strcmp"); + RAW_CHECK(dladdr(dlopen_addr, &info_strcmp)); + if (internal_strcmp(info.dli_fname, info_strcmp.dli_fname) != 0) { Report( "ERROR: Interceptors are not working. This may be because %s is " "loaded too late (e.g. via dlopen). Please launch the executable " -- 2.7.4