1*4882a593SmuzhiyunAn all-in-one patch that fixes several issues: 2*4882a593Smuzhiyun 3*4882a593Smuzhiyun1) UnscaledCycleClock not fully implemented for ppc*-musl (disabled on musl) 4*4882a593Smuzhiyun2) powerpc stacktrace implementation only works on glibc (disabled on musl) 5*4882a593Smuzhiyun3) powerpc stacktrace implementation has ppc64 assumptions (fixed) 6*4882a593Smuzhiyun4) examine_stack.cpp makes glibc assumptions on powerpc (fixed) 7*4882a593Smuzhiyun 8*4882a593SmuzhiyunSourced from void linux 9*4882a593Smuzhiyun 10*4882a593SmuzhiyunSigned-off-by: Khem Raj <raj.khem@gmail.com> 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun--- a/absl/base/internal/unscaledcycleclock.cc 13*4882a593Smuzhiyun+++ b/absl/base/internal/unscaledcycleclock.cc 14*4882a593Smuzhiyun@@ -20,7 +20,7 @@ 15*4882a593Smuzhiyun #include <intrin.h> 16*4882a593Smuzhiyun #endif 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun-#if defined(__powerpc__) || defined(__ppc__) 19*4882a593Smuzhiyun+#if (defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__) 20*4882a593Smuzhiyun #ifdef __GLIBC__ 21*4882a593Smuzhiyun #include <sys/platform/ppc.h> 22*4882a593Smuzhiyun #elif defined(__FreeBSD__) 23*4882a593Smuzhiyun@@ -59,7 +59,7 @@ double UnscaledCycleClock::Frequency() { 24*4882a593Smuzhiyun return base_internal::NominalCPUFrequency(); 25*4882a593Smuzhiyun } 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun-#elif defined(__powerpc__) || defined(__ppc__) 28*4882a593Smuzhiyun+#elif (defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__) 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun int64_t UnscaledCycleClock::Now() { 31*4882a593Smuzhiyun #ifdef __GLIBC__ 32*4882a593Smuzhiyun--- a/absl/base/internal/unscaledcycleclock.h 33*4882a593Smuzhiyun+++ b/absl/base/internal/unscaledcycleclock.h 34*4882a593Smuzhiyun@@ -46,7 +46,8 @@ 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun // The following platforms have an implementation of a hardware counter. 37*4882a593Smuzhiyun #if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__) || \ 38*4882a593Smuzhiyun- defined(__powerpc__) || defined(__ppc__) || defined(__riscv) || \ 39*4882a593Smuzhiyun+ ((defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__)) || \ 40*4882a593Smuzhiyun+ defined(__riscv) || \ 41*4882a593Smuzhiyun defined(_M_IX86) || defined(_M_X64) 42*4882a593Smuzhiyun #define ABSL_HAVE_UNSCALED_CYCLECLOCK_IMPLEMENTATION 1 43*4882a593Smuzhiyun #else 44*4882a593Smuzhiyun--- a/absl/debugging/internal/examine_stack.cc 45*4882a593Smuzhiyun+++ b/absl/debugging/internal/examine_stack.cc 46*4882a593Smuzhiyun@@ -27,6 +27,10 @@ 47*4882a593Smuzhiyun #include <csignal> 48*4882a593Smuzhiyun #include <cstdio> 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun+#if defined(__powerpc__) 51*4882a593Smuzhiyun+#include <asm/ptrace.h> 52*4882a593Smuzhiyun+#endif 53*4882a593Smuzhiyun+ 54*4882a593Smuzhiyun #include "absl/base/attributes.h" 55*4882a593Smuzhiyun #include "absl/base/internal/raw_logging.h" 56*4882a593Smuzhiyun #include "absl/base/macros.h" 57*4882a593Smuzhiyun@@ -63,8 +67,10 @@ void* GetProgramCounter(void* vuc) { 58*4882a593Smuzhiyun return reinterpret_cast<void*>(context->uc_mcontext.pc); 59*4882a593Smuzhiyun #elif defined(__powerpc64__) 60*4882a593Smuzhiyun return reinterpret_cast<void*>(context->uc_mcontext.gp_regs[32]); 61*4882a593Smuzhiyun-#elif defined(__powerpc__) 62*4882a593Smuzhiyun+#elif defined(__powerpc__) && defined(__GLIBC__) 63*4882a593Smuzhiyun return reinterpret_cast<void*>(context->uc_mcontext.uc_regs->gregs[32]); 64*4882a593Smuzhiyun+#elif defined(__powerpc__) 65*4882a593Smuzhiyun+ return reinterpret_cast<void*>(((struct pt_regs *)context->uc_regs)->gregs[32]); 66*4882a593Smuzhiyun #elif defined(__riscv) 67*4882a593Smuzhiyun return reinterpret_cast<void*>(context->uc_mcontext.__gregs[REG_PC]); 68*4882a593Smuzhiyun #elif defined(__s390__) && !defined(__s390x__) 69*4882a593Smuzhiyun--- a/absl/debugging/internal/stacktrace_config.h 70*4882a593Smuzhiyun+++ b/absl/debugging/internal/stacktrace_config.h 71*4882a593Smuzhiyun@@ -59,7 +59,7 @@ 72*4882a593Smuzhiyun #elif defined(__i386__) || defined(__x86_64__) 73*4882a593Smuzhiyun #define ABSL_STACKTRACE_INL_HEADER \ 74*4882a593Smuzhiyun "absl/debugging/internal/stacktrace_x86-inl.inc" 75*4882a593Smuzhiyun-#elif defined(__ppc__) || defined(__PPC__) 76*4882a593Smuzhiyun+#elif (defined(__ppc__) || defined(__PPC__)) && defined(__GLIBC__) 77*4882a593Smuzhiyun #define ABSL_STACKTRACE_INL_HEADER \ 78*4882a593Smuzhiyun "absl/debugging/internal/stacktrace_powerpc-inl.inc" 79*4882a593Smuzhiyun #elif defined(__aarch64__) 80