From d288a87e33cdb7c76408ca8f8668605f948a411e Mon Sep 17 00:00:00 2001 From: Roberto Oliveira Date: Fri, 4 Aug 2017 13:16:24 +0000 Subject: [PATCH] Fix build on PPC arch with musl Some C libraries, notably Musl, define the regs member as a void pointer, hence we need to use the gp_regs member instead. Change-Id: I1ca2dbdba79a03ff81c25438c87c767d7a7cece4 Reviewed-on: https://chromium-review.googlesource.com/602327 Reviewed-by: Jaideep Bajwa Reviewed-by: Ulan Degenbaev Commit-Queue: Ulan Degenbaev Cr-Commit-Position: refs/heads/master@{#47481} --- src/libsampler/sampler.cc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/libsampler/sampler.cc b/src/libsampler/sampler.cc index 8b351613e7..7519720beb 100644 --- a/src/libsampler/sampler.cc +++ b/src/libsampler/sampler.cc @@ -450,11 +450,18 @@ void SignalHandler::FillRegisterState(void* context, RegisterState* state) { state->sp = reinterpret_cast(mcontext.gregs[29]); state->fp = reinterpret_cast(mcontext.gregs[30]); #elif V8_HOST_ARCH_PPC +#if V8_LIBC_GLIBC state->pc = reinterpret_cast(ucontext->uc_mcontext.regs->nip); state->sp = reinterpret_cast(ucontext->uc_mcontext.regs->gpr[PT_R1]); state->fp = reinterpret_cast(ucontext->uc_mcontext.regs->gpr[PT_R31]); +#else + // Some C libraries, notably Musl, define the regs member as a void pointer + state->pc = reinterpret_cast(ucontext->uc_mcontext.gp_regs[32]); + state->sp = reinterpret_cast(ucontext->uc_mcontext.gp_regs[1]); + state->fp = reinterpret_cast(ucontext->uc_mcontext.gp_regs[31]); +#endif #elif V8_HOST_ARCH_S390 #if V8_TARGET_ARCH_32_BIT // 31-bit target will have bit 0 (MSB) of the PSW set to denote addressing