diff --git a/Source/JavaScriptCore/heap/MachineStackMarker.cpp b/Source/JavaScriptCore/heap/MachineStackMarker.cpp index 883914fd3d1..9c0209ad2f3 100644 --- a/Source/JavaScriptCore/heap/MachineStackMarker.cpp +++ b/Source/JavaScriptCore/heap/MachineStackMarker.cpp @@ -683,7 +683,19 @@ void* MachineThreads::Thread::Registers::framePointer() const #endif #else -#error Need a way to get the frame pointer for another thread on this platform + +// The following sequence depends on musl libc's sys/ucontext.h. +#if CPU(X86) + return reinterpret_cast((uintptr_t) regs.machineContext.gregs[REG_EBP]); +#elif CPU(X86_64) + return reinterpret_cast((uintptr_t) regs.machineContext.gregs[REG_RBP]); +#elif CPU(ARM) + return reinterpret_cast((uintptr_t) regs.machineContext.arm_fp); +#elif CPU(ARM64) + return reinterpret_cast((uintptr_t) regs.machineContext.regs[29]); +#elif CPU(MIPS) + return reinterpret_cast((uintptr_t) regs.machineContext.gregs[30]); +#endif #endif } @@ -765,7 +777,19 @@ void* MachineThreads::Thread::Registers::instructionPointer() const #endif #else -#error Need a way to get the instruction pointer for another thread on this platform + +// The following sequence depends on musl libc's sys/ucontext.h. +#if CPU(X86) + return reinterpret_cast((uintptr_t) regs.machineContext.gregs[REG_EIP]); +#elif CPU(X86_64) + return reinterpret_cast((uintptr_t) regs.machineContext.gregs[REG_RIP]); +#elif CPU(ARM) + return reinterpret_cast((uintptr_t) regs.machineContext.arm_pc); +#elif CPU(ARM64) + return reinterpret_cast((uintptr_t) regs.machineContext.pc); +#elif CPU(MIPS) + return reinterpret_cast((uintptr_t)regs.machineContext.pc); +#endif #endif } void* MachineThreads::Thread::Registers::llintPC() const @@ -856,7 +880,19 @@ void* MachineThreads::Thread::Registers::llintPC() const #endif #else -#error Need a way to get the LLIntPC for another thread on this platform + +// The following sequence depends on musl libc's sys/ucontext.h. +#if CPU(X86) + return reinterpret_cast((uintptr_t) regs.machineContext.gregs[REG_ESI]); +#elif CPU(X86_64) + return reinterpret_cast((uintptr_t) regs.machineContext.gregs[REG_R8]); +#elif CPU(ARM) + return reinterpret_cast((uintptr_t) regs.machineContext.arm_r8); +#elif CPU(ARM64) + return reinterpret_cast((uintptr_t) regs.machineContext.regs[4]); +#elif CPU(MIPS) + return reinterpret_cast((uintptr_t) regs.machineContext.gregs[12]); +#endif #endif } #endif // ENABLE(SAMPLING_PROFILER)