diff --git a/compiler-rt/lib/asan/asan_rtl.cpp b/compiler-rt/lib/asan/asan_rtl.cpp index b3f6677a99cfb..22bffcf6cf6b0 100644 --- a/compiler-rt/lib/asan/asan_rtl.cpp +++ b/compiler-rt/lib/asan/asan_rtl.cpp @@ -494,7 +494,6 @@ static bool AsanInitInternal() { AsanThread *main_thread = CreateMainThread(); CHECK_EQ(0, main_thread->tid()); force_interface_symbols(); // no-op. - SanitizerInitializeUnwinder(); if (CAN_SANITIZE_LEAKS) { __lsan::InitCommonLsan(); diff --git a/compiler-rt/lib/memprof/memprof_rtl.cpp b/compiler-rt/lib/memprof/memprof_rtl.cpp index ef8884a7e56f4..4fd4b5210a7ec 100644 --- a/compiler-rt/lib/memprof/memprof_rtl.cpp +++ b/compiler-rt/lib/memprof/memprof_rtl.cpp @@ -219,7 +219,6 @@ static void MemprofInitInternal() { MemprofThread *main_thread = CreateMainThread(); CHECK_EQ(0, main_thread->tid()); force_interface_symbols(); // no-op. - SanitizerInitializeUnwinder(); Symbolizer::LateInitialize(); diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common.h b/compiler-rt/lib/sanitizer_common/sanitizer_common.h index 3f52cfcaeecaa..16140f077aac1 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_common.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_common.h @@ -925,12 +925,6 @@ class ListOfModules { // Callback type for iterating over a set of memory ranges. typedef void (*RangeIteratorCallback)(uptr begin, uptr end, void *arg); -enum AndroidApiLevel { - ANDROID_NOT_ANDROID = 0, - ANDROID_LOLLIPOP_MR1 = 22, - ANDROID_POST_LOLLIPOP = 23 -}; - void WriteToSyslog(const char *buffer); #if defined(SANITIZER_WINDOWS) && defined(_MSC_VER) && !defined(__clang__) @@ -963,19 +957,8 @@ inline void AndroidLogInit() {} inline void SetAbortMessage(const char *) {} #endif -#if SANITIZER_ANDROID -void SanitizerInitializeUnwinder(); -AndroidApiLevel AndroidGetApiLevel(); -#else -inline void AndroidLogWrite(const char *buffer_unused) {} -inline void SanitizerInitializeUnwinder() {} -inline AndroidApiLevel AndroidGetApiLevel() { return ANDROID_NOT_ANDROID; } -#endif - inline uptr GetPthreadDestructorIterations() { -#if SANITIZER_ANDROID - return (AndroidGetApiLevel() == ANDROID_LOLLIPOP_MR1) ? 8 : 4; -#elif SANITIZER_POSIX +#if SANITIZER_ANDROID || SANITIZER_POSIX return 4; #else // Unused on Windows. diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp index 4446823c47d22..16caf699a4c24 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp @@ -1901,54 +1901,6 @@ int internal_uname(struct utsname *buf) { } # endif -# if SANITIZER_ANDROID -static int dl_iterate_phdr_test_cb(struct dl_phdr_info *info, size_t size, - void *data) { - // Any name starting with "lib" indicates a bug in L where library base names - // are returned instead of paths. - if (info->dlpi_name && info->dlpi_name[0] == 'l' && - info->dlpi_name[1] == 'i' && info->dlpi_name[2] == 'b') { - *(bool *)data = true; - return 1; - } - return 0; -} - -static atomic_uint32_t android_api_level; - -static AndroidApiLevel AndroidDetectApiLevelStatic() { -# if __ANDROID_API__ <= 22 - return ANDROID_LOLLIPOP_MR1; -# else - return ANDROID_POST_LOLLIPOP; -# endif -} - -static AndroidApiLevel AndroidDetectApiLevel() { - bool base_name_seen = false; - dl_iterate_phdr(dl_iterate_phdr_test_cb, &base_name_seen); - if (base_name_seen) - return ANDROID_LOLLIPOP_MR1; // L MR1 - return ANDROID_POST_LOLLIPOP; // post-L - // Plain L (API level 21) is completely broken wrt ASan and not very - // interesting to detect. -} - -extern "C" __attribute__((weak)) void *_DYNAMIC; - -AndroidApiLevel AndroidGetApiLevel() { - AndroidApiLevel level = - (AndroidApiLevel)atomic_load(&android_api_level, memory_order_relaxed); - if (level) - return level; - level = &_DYNAMIC == nullptr ? AndroidDetectApiLevelStatic() - : AndroidDetectApiLevel(); - atomic_store(&android_api_level, level, memory_order_relaxed); - return level; -} - -# endif - static HandleSignalMode GetHandleSignalModeImpl(int signum) { switch (signum) { case SIGABRT: diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_unwind_linux_libcdep.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_unwind_linux_libcdep.cpp index 3f6901a2e7f1b..4f1538eeb9c55 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_unwind_linux_libcdep.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_unwind_linux_libcdep.cpp @@ -91,38 +91,6 @@ _Unwind_Reason_Code Unwind_Trace(struct _Unwind_Context *ctx, void *param) { } // namespace -#if SANITIZER_ANDROID -void SanitizerInitializeUnwinder() { - if (AndroidGetApiLevel() >= ANDROID_LOLLIPOP_MR1) return; - - // Pre-lollipop Android can not unwind through signal handler frames with - // libgcc unwinder, but it has a libcorkscrew.so library with the necessary - // workarounds. - void *p = dlopen("libcorkscrew.so", RTLD_LAZY); - if (!p) { - VReport(1, - "Failed to open libcorkscrew.so. You may see broken stack traces " - "in SEGV reports."); - return; - } - acquire_my_map_info_list = - (acquire_my_map_info_list_func)(uptr)dlsym(p, "acquire_my_map_info_list"); - release_my_map_info_list = - (release_my_map_info_list_func)(uptr)dlsym(p, "release_my_map_info_list"); - unwind_backtrace_signal_arch = (unwind_backtrace_signal_arch_func)(uptr)dlsym( - p, "unwind_backtrace_signal_arch"); - if (!acquire_my_map_info_list || !release_my_map_info_list || - !unwind_backtrace_signal_arch) { - VReport(1, - "Failed to find one of the required symbols in libcorkscrew.so. " - "You may see broken stack traces in SEGV reports."); - acquire_my_map_info_list = 0; - unwind_backtrace_signal_arch = 0; - release_my_map_info_list = 0; - } -} -#endif - void BufferedStackTrace::UnwindSlow(uptr pc, u32 max_depth) { CHECK_GE(max_depth, 2); size = 0;