1An all-in-one patch that fixes several issues: 2 31) UnscaledCycleClock not fully implemented for ppc*-musl (disabled on musl) 42) powerpc stacktrace implementation only works on glibc (disabled on musl) 53) powerpc stacktrace implementation has ppc64 assumptions (fixed) 64) examine_stack.cpp makes glibc assumptions on powerpc (fixed) 7 8Sourced from void linux 9 10Signed-off-by: Khem Raj <raj.khem@gmail.com> 11Signed-off-by: Xu Huan <xuhuan.fnst@fujitsu.com> 12--- 13 absl/base/internal/unscaledcycleclock.cc | 4 ++-- 14 absl/base/internal/unscaledcycleclock.h | 3 ++- 15 absl/debugging/internal/examine_stack.cc | 8 +++++++- 16 absl/debugging/internal/stacktrace_config.h | 2 +- 17 4 files changed, 12 insertions(+), 5 deletions(-) 18 19diff --git a/absl/base/internal/unscaledcycleclock.cc b/absl/base/internal/unscaledcycleclock.cc 20index b1c396c..d62bfd6 100644 21--- a/absl/base/internal/unscaledcycleclock.cc 22+++ b/absl/base/internal/unscaledcycleclock.cc 23@@ -20,7 +20,7 @@ 24 #include <intrin.h> 25 #endif 26 27-#if defined(__powerpc__) || defined(__ppc__) 28+#if (defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__) 29 #ifdef __GLIBC__ 30 #include <sys/platform/ppc.h> 31 #elif defined(__FreeBSD__) 32@@ -58,7 +58,7 @@ double UnscaledCycleClock::Frequency() { 33 return base_internal::NominalCPUFrequency(); 34 } 35 36-#elif defined(__powerpc__) || defined(__ppc__) 37+#elif (defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__) 38 39 int64_t UnscaledCycleClock::Now() { 40 #ifdef __GLIBC__ 41diff --git a/absl/base/internal/unscaledcycleclock.h b/absl/base/internal/unscaledcycleclock.h 42index 2cbeae3..683a5ef 100644 43--- a/absl/base/internal/unscaledcycleclock.h 44+++ b/absl/base/internal/unscaledcycleclock.h 45@@ -46,7 +46,8 @@ 46 47 // The following platforms have an implementation of a hardware counter. 48 #if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__) || \ 49- defined(__powerpc__) || defined(__ppc__) || defined(__riscv) || \ 50+ ((defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__)) || \ 51+ defined(__riscv) || \ 52 defined(_M_IX86) || (defined(_M_X64) && !defined(_M_ARM64EC)) 53 #define ABSL_HAVE_UNSCALED_CYCLECLOCK_IMPLEMENTATION 1 54 #else 55diff --git a/absl/debugging/internal/examine_stack.cc b/absl/debugging/internal/examine_stack.cc 56index 5bdd341..a784e0d 100644 57--- a/absl/debugging/internal/examine_stack.cc 58+++ b/absl/debugging/internal/examine_stack.cc 59@@ -33,6 +33,10 @@ 60 #include <csignal> 61 #include <cstdio> 62 63+#if defined(__powerpc__) 64+#include <asm/ptrace.h> 65+#endif 66+ 67 #include "absl/base/attributes.h" 68 #include "absl/base/internal/raw_logging.h" 69 #include "absl/base/macros.h" 70@@ -174,8 +178,10 @@ void* GetProgramCounter(void* const vuc) { 71 return reinterpret_cast<void*>(context->uc_mcontext.pc); 72 #elif defined(__powerpc64__) 73 return reinterpret_cast<void*>(context->uc_mcontext.gp_regs[32]); 74-#elif defined(__powerpc__) 75+#elif defined(__powerpc__) && defined(__GLIBC__) 76 return reinterpret_cast<void*>(context->uc_mcontext.uc_regs->gregs[32]); 77+#elif defined(__powerpc__) 78+ return reinterpret_cast<void*>(((struct pt_regs *)context->uc_regs)->gregs[32]); 79 #elif defined(__riscv) 80 return reinterpret_cast<void*>(context->uc_mcontext.__gregs[REG_PC]); 81 #elif defined(__s390__) && !defined(__s390x__) 82diff --git a/absl/debugging/internal/stacktrace_config.h b/absl/debugging/internal/stacktrace_config.h 83index 3929b1b..23d5e50 100644 84--- a/absl/debugging/internal/stacktrace_config.h 85+++ b/absl/debugging/internal/stacktrace_config.h 86@@ -60,7 +60,7 @@ 87 #elif defined(__i386__) || defined(__x86_64__) 88 #define ABSL_STACKTRACE_INL_HEADER \ 89 "absl/debugging/internal/stacktrace_x86-inl.inc" 90-#elif defined(__ppc__) || defined(__PPC__) 91+#elif (defined(__ppc__) || defined(__PPC__)) && defined(__GLIBC__) 92 #define ABSL_STACKTRACE_INL_HEADER \ 93 "absl/debugging/internal/stacktrace_powerpc-inl.inc" 94 #elif defined(__aarch64__) 95-- 962.25.1 97 98