--- a/libmcount/wrap.c 2022-04-15 17:55:05.279817913 +0000 +++ b/libmcount/wrap.c 2022-04-15 19:45:32.879129081 +0000 @@ -273,7 +272,12 @@ void mcount_hook_functions(void) { +#if !defined __ANDROID__ || __ANDROID_API__ >= 33 real_backtrace = dlsym(RTLD_NEXT, "backtrace"); +#else + void *libandroid_execinfo = dlopen("libandroid-execinfo.so", RTLD_NOW); + real_backtrace = dlsym(libandroid_execinfo, "backtrace"); +#endif real_cxa_throw = dlsym(RTLD_NEXT, "__cxa_throw"); real_cxa_rethrow = dlsym(RTLD_NEXT, "__cxa_rethrow"); real_cxa_begin_catch = dlsym(RTLD_NEXT, "__cxa_begin_catch"); @@ -281,8 +285,14 @@ real_dlopen = dlsym(RTLD_NEXT, "dlopen"); real_pthread_exit = dlsym(RTLD_NEXT, "pthread_exit"); real_unwind_resume = dlsym(RTLD_NEXT, "_Unwind_Resume"); +#if !defined __ANDROID__ || __ANDROID_API__ >= 28 real_posix_spawn = dlsym(RTLD_NEXT, "posix_spawn"); real_posix_spawnp = dlsym(RTLD_NEXT, "posix_spawnp"); +#else + void *libandroid_spawn = dlopen("libandroid-spawn.so", RTLD_NOW); + real_posix_spawn = dlsym(libandroid_spawn, "posix_spawn"); + real_posix_spawnp = dlsym(libandroid_spawn, "posix_spawnp"); +#endif real_execve = dlsym(RTLD_NEXT, "execve"); real_execvpe = dlsym(RTLD_NEXT, "execvpe"); real_fexecve = dlsym(RTLD_NEXT, "fexecve"); @@ -338,7 +320,8 @@ real_cxa_rethrow(); } -__visible_default void _Unwind_Resume(void *exception) +void __real__Unwind_Resume(void *exception); +__visible_default void __wrap__Unwind_Resume(void *exception) { struct mcount_thread_data *mtdp; @@ -360,7 +343,7 @@ mcount_rstack_restore(mtdp); } - real_unwind_resume(exception); + __real__Unwind_Resume(exception); } __visible_default void * __cxa_begin_catch(void *exception)