aboutsummaryrefslogtreecommitdiffstats
path: root/main/nodejs/ppc-fix-musl-mcontext.patch
blob: 240f0262fc82ef722eeb4dfd254f6afec5740047 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
From: Gustavo Romero <gromero@br.ibm.com>
Date: Mon, 27 Mar 2017 22:24:16 +0000
Subject: [PATCH] Fix compilation on PPC when libc musl is used instead of glibc

Musl on Power does not define regs member as a pt_regs pointer type,
hence it's necessary to use member gp_regs instead.

--- a/deps/v8/src/profiler/sampler.cc
+++ b/deps/v8/src/profiler/sampler.cc
@@ -487,9 +487,17 @@
   state.sp = reinterpret_cast<Address>(mcontext.gregs[29]);
   state.fp = reinterpret_cast<Address>(mcontext.gregs[30]);
 #elif V8_HOST_ARCH_PPC
+#if V8_LIBC_GLIBC
   state.pc = reinterpret_cast<Address>(ucontext->uc_mcontext.regs->nip);
   state.sp = reinterpret_cast<Address>(ucontext->uc_mcontext.regs->gpr[PT_R1]);
   state.fp = reinterpret_cast<Address>(ucontext->uc_mcontext.regs->gpr[PT_R31]);
+#else
+  // Some C libraries, notably Musl, define the regs member as a void pointer,
+  // hence we use the gp_regs member instead.
+  state.pc = reinterpret_cast<Address>(ucontext->uc_mcontext.gp_regs[32]);
+  state.sp = reinterpret_cast<Address>(ucontext->uc_mcontext.gp_regs[1]);
+  state.fp = reinterpret_cast<Address>(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