--- base/allocator/partition_allocator/partition_alloc_config.h	2021-05-25 00:05:31.000000000 +0200
+++ -	2021-05-26 22:23:47.172940826 +0200
@@ -88,7 +88,8 @@
 // PUT_REF_COUNT_IN_PREVIOUS_SLOT does. In this case the refcount overlaps with
 // the next pointer shadow for the smallest bucket.
 #if !(defined(OS_MAC) && defined(ARCH_CPU_ARM64)) && \
-    !BUILDFLAG(PUT_REF_COUNT_IN_PREVIOUS_SLOT)
+    !BUILDFLAG(PUT_REF_COUNT_IN_PREVIOUS_SLOT) && \
+    !defined(__powerpc64__)
 #define PA_HAS_FREELIST_HARDENING
 #endif

diff --git sandbox/linux/bpf_dsl/seccomp_macros.h sandbox/linux/bpf_dsl/seccomp_macros.h
index a6aec544e..2a4a7f1bc 100644
--- sandbox/linux/bpf_dsl/seccomp_macros.h
+++ sandbox/linux/bpf_dsl/seccomp_macros.h
@@ -16,7 +16,7 @@
 #if defined(__mips__)
 // sys/user.h in eglibc misses size_t definition
 #include <stddef.h>
-#elif defined(__powerpc64__)
+#elif defined(__powerpc64__) && defined(__GLIBC__)
 // Manually define greg_t on ppc64
 typedef unsigned long long greg_t;
 #endif
@@ -361,11 +361,11 @@ typedef struct pt_regs regs_struct;
 #define SECCOMP_ARCH AUDIT_ARCH_PPC64
 #endif
 
-#define SECCOMP_REG(_ctx, _reg) ((_ctx)->uc_mcontext.regs->gpr[_reg])
+#define SECCOMP_REG(_ctx, _reg) (((struct pt_regs *)(_ctx)->uc_mcontext.regs)->gpr[_reg])
 
 #define SECCOMP_RESULT(_ctx) SECCOMP_REG(_ctx, 3)
 #define SECCOMP_SYSCALL(_ctx) SECCOMP_REG(_ctx, 0)
-#define SECCOMP_IP(_ctx) (_ctx)->uc_mcontext.regs->nip
+#define SECCOMP_IP(_ctx) ((struct pt_regs *)(_ctx)->uc_mcontext.regs)->nip
 #define SECCOMP_PARM1(_ctx) SECCOMP_REG(_ctx, 3)
 #define SECCOMP_PARM2(_ctx) SECCOMP_REG(_ctx, 4)
 #define SECCOMP_PARM3(_ctx) SECCOMP_REG(_ctx, 5)
diff --git sandbox/linux/seccomp-bpf/syscall.cc sandbox/linux/seccomp-bpf/syscall.cc
index d53a7ff56..c290f0e92 100644
--- sandbox/linux/seccomp-bpf/syscall.cc
+++ sandbox/linux/seccomp-bpf/syscall.cc
@@ -499,9 +499,9 @@ void Syscall::PutValueInUcontext(intptr_t ret_val, ucontext_t* ctx) {
   // Same as MIPS, need to invert ret and set error register (cr0.SO)
   if (ret_val <= -1 && ret_val >= -4095) {
     ret_val = -ret_val;
-    ctx->uc_mcontext.regs->ccr |= (1 << 28);
+    ((struct pt_regs *)ctx->uc_mcontext.regs)->ccr |= (1 << 28);
   } else {
-    ctx->uc_mcontext.regs->ccr &= ~(1 << 28);
+    ((struct pt_regs *)ctx->uc_mcontext.regs)->ccr &= ~(1 << 28);
   }
 #endif
   SECCOMP_RESULT(ctx) = static_cast<greg_t>(ret_val);
diff --git third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h
index cdce9bf8..73d77dda 100644
--- third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h
+++ third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h
@@ -46,7 +46,7 @@
 
 // The following platforms have an implementation of a hardware counter.
 #if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__) || \
-  defined(__powerpc__) || defined(__ppc__) || \
+  ((defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__)) || \
   defined(_M_IX86) || defined(_M_X64)
 #define ABSL_HAVE_UNSCALED_CYCLECLOCK_IMPLEMENTATION 1
 #else
--- third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h
+++ third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h
@@ -64,7 +64,7 @@
 #elif defined(__i386__) || defined(__x86_64__)
 #define ABSL_STACKTRACE_INL_HEADER \
   "absl/debugging/internal/stacktrace_x86-inl.inc"
-#elif defined(__ppc__) || defined(__PPC__)
+#elif (defined(__ppc__) || defined(__PPC__)) && defined(__GLIBC__)
 #define ABSL_STACKTRACE_INL_HEADER \
   "absl/debugging/internal/stacktrace_powerpc-inl.inc"
 #elif defined(__aarch64__)
diff --git third_party/breakpad/BUILD.gn third_party/breakpad/BUILD.gn
index f9a60e37..25f3a0b7 100644
--- third_party/breakpad/BUILD.gn
+++ third_party/breakpad/BUILD.gn
@@ -637,6 +637,7 @@ if (is_linux || is_android) {
 
     if (current_cpu == "ppc64") {
         defines = [ "HAVE_GETCONTEXT" ]
+        libs += [ "ucontext" ]
     } else {
         sources += [
             "breakpad/src/common/linux/breakpad_getcontext.S"
diff --git third_party/breakpad/breakpad/src/client/linux/dump_writer_common/thread_info.cc third_party/breakpad/breakpad/src/client/linux/dump_writer_common/thread_info.cc
index 03afec7a..0264ecf1 100644
--- third_party/breakpad/breakpad/src/client/linux/dump_writer_common/thread_info.cc
+++ third_party/breakpad/breakpad/src/client/linux/dump_writer_common/thread_info.cc
@@ -273,6 +273,9 @@ void ThreadInfo::FillCPUContext(RawContextCPU* out) const {
 
 #elif defined(__powerpc64__)
 
+#include <asm/elf.h>
+#include <asm/ptrace.h>
+
 uintptr_t ThreadInfo::GetInstructionPointer() const {
     return mcontext.gp_regs[PT_NIP];
 }
@@ -290,9 +293,9 @@ void ThreadInfo::FillCPUContext(RawContextCPU* out) const {
     out->ctr = mcontext.gp_regs[PT_CTR];
     
     for (int i = 0; i < MD_FLOATINGSAVEAREA_PPC_FPR_COUNT; i++)
-        out->float_save.fpregs[i] = mcontext.fp_regs[i];
+        out->float_save.fpregs[i] = ((uint64_t *)&mcontext.fp_regs)[i];
 
-    out->float_save.fpscr = mcontext.fp_regs[NFPREG-1];
+    out->float_save.fpscr = ((uint64_t *)&mcontext.fp_regs)[ELF_NFPREG-1];
 
     for (int i = 0; i < MD_VECTORSAVEAREA_PPC_VR_COUNT; i++)
         out->vector_save.save_vr[i] = \
diff --git third_party/breakpad/breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc third_party/breakpad/breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc
index 1090470f..e580233d 100644
--- third_party/breakpad/breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc
+++ third_party/breakpad/breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc
@@ -257,6 +257,9 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc) {
 
 #elif defined(__powerpc64__)
 
+#include <asm/elf.h>
+#include <asm/ptrace.h>
+
 uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) {
     return uc->uc_mcontext.gp_regs[MD_CONTEXT_PPC64_REG_SP];
 }
@@ -280,9 +283,9 @@ void UContextReader::FillCPUContext(RawContextCPU* out, const ucontext_t* uc,
     out->ctr = uc->uc_mcontext.gp_regs[PT_CTR];
     
     for (int i = 0; i < MD_FLOATINGSAVEAREA_PPC_FPR_COUNT; i++)
-        out->float_save.fpregs[i] = uc->uc_mcontext.fp_regs[i];
+        out->float_save.fpregs[i] = ((uint64_t *)&uc->uc_mcontext.fp_regs)[i];
 
-    out->float_save.fpscr = uc->uc_mcontext.fp_regs[NFPREG-1];
+    out->float_save.fpscr = ((uint64_t *)&uc->uc_mcontext.fp_regs)[ELF_NFPREG-1];
 
     for (int i = 0; i < MD_VECTORSAVEAREA_PPC_VR_COUNT; i++)
         out->vector_save.save_vr[i] =
diff --git third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.cc third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.cc
index 5a7ab50c..ee8b858c 100644
--- third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.cc
+++ third_party/breakpad/breakpad/src/client/linux/handler/exception_handler.cc
@@ -105,6 +105,11 @@
 #define PR_SET_PTRACER 0x59616d61
 #endif
 
+/* musl hack, can't include asm/ptrace.h as that causes conflicts */
+#if defined(__powerpc64__) && !defined(PT_NIP)
+#define PT_NIP 32
+#endif
+
 namespace google_breakpad {
 
 namespace {
diff --git third_party/crashpad/crashpad/snapshot/linux/signal_context.h third_party/crashpad/crashpad/snapshot/linux/signal_context.h
index 8e335a09..b2a0f155 100644
--- third_party/crashpad/crashpad/snapshot/linux/signal_context.h
+++ third_party/crashpad/crashpad/snapshot/linux/signal_context.h
@@ -469,7 +469,7 @@ struct MContext64 {
   SignalThreadContext64 gp_regs;
   SignalFloatContext64  fp_regs;
   SignalVectorContext64 *v_regs;
-  int64_t vmx_reserve[69];
+  int64_t vmx_reserve[101];
 };
 
 struct ContextTraits64 : public Traits64 {
diff --git third_party/crashpad/crashpad/util/linux/thread_info.h third_party/crashpad/crashpad/util/linux/thread_info.h
index dea0d1f3..b203e5b2 100644
--- third_party/crashpad/crashpad/util/linux/thread_info.h
+++ third_party/crashpad/crashpad/util/linux/thread_info.h
@@ -30,6 +30,7 @@
 
 #if defined(ARCH_CPU_PPC64_FAMILY)
 #include <sys/ucontext.h>
+#include <asm/ptrace.h>
 #endif
 
 namespace crashpad {
diff --git third_party/lss/linux_syscall_support.h third_party/lss/linux_syscall_support.h
index 9955ce44..4c1cc488 100644
--- third_party/lss/linux_syscall_support.h
+++ third_party/lss/linux_syscall_support.h
@@ -4216,9 +4216,13 @@ struct kernel_statfs {
     }
   #endif
   #if defined(__NR_fstatat64)
+    // musl does #define fstatat64 fstatat
+    #undef fstatat64
     LSS_INLINE _syscall4(int,   fstatat64,        int,   d,
                          const char *,      p,
                          struct kernel_stat64 *,   b,    int,   f)
+    // set it back like it was
+    #define fstatat64 fstatat
   #endif
   #if defined(__NR_waitpid)
     // waitpid is polyfilled below when not available.
