diff --git a/src/common/signal_chain.cpp b/src/common/signal_chain.cpp index 2e4fecc482..261e02c341 100644 --- a/src/common/signal_chain.cpp +++ b/src/common/signal_chain.cpp @@ -10,27 +10,16 @@ namespace Common { +#ifdef __ANDROID__ template T* LookupLibcSymbol(const char* name) { -#if defined(__BIONIC__) Common::DynamicLibrary provider("libc.so"); - if (!provider.IsOpen()) { - UNREACHABLE_MSG("Failed to open libc!"); - } -#else - // For other operating environments, we assume the symbol is not overridden. - const char* base = nullptr; - Common::DynamicLibrary provider(base); -#endif - + ASSERT_MSG(provider.IsOpen(), "Failed to open libc!"); void* sym = provider.GetSymbolAddress(name); if (sym == nullptr) { sym = dlsym(RTLD_DEFAULT, name); } - if (sym == nullptr) { - UNREACHABLE_MSG("Unable to find symbol {}!", name); - } - + ASSERT_MSG(sym != nullptr, "Unable to find symbol {}!", name); return reinterpret_cast(sym); } @@ -38,5 +27,10 @@ int SigAction(int signum, const struct sigaction* act, struct sigaction* oldact) static auto libc_sigaction = LookupLibcSymbol("sigaction"); return libc_sigaction(signum, act, oldact); } +#else +int SigAction(int signum, const struct sigaction* act, struct sigaction* oldact) { + return sigaction(signum, act, oldact); +} +#endif } // namespace Common diff --git a/src/core/arm/nce/arm_nce.s b/src/core/arm/nce/arm_nce.s index 44e0635346..33e7c93c43 100644 --- a/src/core/arm/nce/arm_nce.s +++ b/src/core/arm/nce/arm_nce.s @@ -66,19 +66,20 @@ _ZN4Core6ArmNce37ReturnToRunCodeByExceptionLevelChangeEiPv: #endif /* This jumps to the signal handler, which will restore the entire context. */ /* On entry, x0 = thread id, which is already in the right place. Even on macOS. */ - /* Move tpidr to x9 so it is not trampled. */ - mov x9, x1 + mov x9, x1 /* Move tpidr to x9 so it is not trampled. */ mov x1, #(ReturnToRunCodeByExceptionLevelChangeSignal) #ifdef __APPLE__ /* I can never be happy, why no tkill in mach kernel? Ugh ... */ /* Signature: 328 AUE_PTHREADKILL ALL { int __pthread_kill(int thread_port, int sig); } */ mov x16, #(328) + svc #0x80 /* Tail call the signal handler. */ + brk #0xF000 /* See: https://discourse.llvm.org/t/stepping-over-a-brk-instruction-on-arm64/69766/7 */ #else /* Signature: int tgkill(pid_t tgid, pid_t tid, int sig); */ mov x8, #(__NR_tkill) + svc #0 /* Tail call the signal handler. */ + brk #1000 /* Block execution from flowing here. */ #endif - svc #0 /* Tail call the signal handler. */ - brk #1000 /* Block execution from flowing here. */ /* static void Core::ArmNce::ReturnToRunCodeByExceptionLevelChangeSignalHandler(int sig, void* info, void* raw_context) */ #ifdef __APPLE__