blob: 3de3d0f083e6160aeceb3117995170fbd2159681 [file] [log] [blame]
Andrew Geissler9aee5002022-03-30 16:27:02 +00001An 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>
Patrick Williams92b42cb2022-09-03 06:53:57 -050011Signed-off-by: Xu Huan <xuhuan.fnst@fujitsu.com>
12---
Patrick Williams520786c2023-06-25 16:20:36 -050013Upstream-Status: Pending
14
Patrick Williams92b42cb2022-09-03 06:53:57 -050015 absl/base/internal/unscaledcycleclock.cc | 4 ++--
16 absl/base/internal/unscaledcycleclock.h | 3 ++-
17 absl/debugging/internal/examine_stack.cc | 8 +++++++-
18 absl/debugging/internal/stacktrace_config.h | 2 +-
19 4 files changed, 12 insertions(+), 5 deletions(-)
Andrew Geissler9aee5002022-03-30 16:27:02 +000020
Patrick Williams92b42cb2022-09-03 06:53:57 -050021diff --git a/absl/base/internal/unscaledcycleclock.cc b/absl/base/internal/unscaledcycleclock.cc
22index b1c396c..d62bfd6 100644
Andrew Geissler9aee5002022-03-30 16:27:02 +000023--- a/absl/base/internal/unscaledcycleclock.cc
24+++ b/absl/base/internal/unscaledcycleclock.cc
25@@ -20,7 +20,7 @@
26 #include <intrin.h>
27 #endif
28
29-#if defined(__powerpc__) || defined(__ppc__)
30+#if (defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__)
31 #ifdef __GLIBC__
32 #include <sys/platform/ppc.h>
33 #elif defined(__FreeBSD__)
Patrick Williams92b42cb2022-09-03 06:53:57 -050034@@ -58,7 +58,7 @@ double UnscaledCycleClock::Frequency() {
Andrew Geissler9aee5002022-03-30 16:27:02 +000035 return base_internal::NominalCPUFrequency();
36 }
37
38-#elif defined(__powerpc__) || defined(__ppc__)
39+#elif (defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__)
40
41 int64_t UnscaledCycleClock::Now() {
42 #ifdef __GLIBC__
Patrick Williams92b42cb2022-09-03 06:53:57 -050043diff --git a/absl/base/internal/unscaledcycleclock.h b/absl/base/internal/unscaledcycleclock.h
44index 2cbeae3..683a5ef 100644
Andrew Geissler9aee5002022-03-30 16:27:02 +000045--- a/absl/base/internal/unscaledcycleclock.h
46+++ b/absl/base/internal/unscaledcycleclock.h
47@@ -46,7 +46,8 @@
48
49 // The following platforms have an implementation of a hardware counter.
50 #if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__) || \
51- defined(__powerpc__) || defined(__ppc__) || defined(__riscv) || \
52+ ((defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__)) || \
53+ defined(__riscv) || \
Patrick Williams92b42cb2022-09-03 06:53:57 -050054 defined(_M_IX86) || (defined(_M_X64) && !defined(_M_ARM64EC))
Andrew Geissler9aee5002022-03-30 16:27:02 +000055 #define ABSL_HAVE_UNSCALED_CYCLECLOCK_IMPLEMENTATION 1
56 #else
Patrick Williams92b42cb2022-09-03 06:53:57 -050057diff --git a/absl/debugging/internal/examine_stack.cc b/absl/debugging/internal/examine_stack.cc
58index 5bdd341..a784e0d 100644
Andrew Geissler9aee5002022-03-30 16:27:02 +000059--- a/absl/debugging/internal/examine_stack.cc
60+++ b/absl/debugging/internal/examine_stack.cc
Patrick Williams92b42cb2022-09-03 06:53:57 -050061@@ -33,6 +33,10 @@
Andrew Geissler9aee5002022-03-30 16:27:02 +000062 #include <csignal>
63 #include <cstdio>
64
65+#if defined(__powerpc__)
66+#include <asm/ptrace.h>
67+#endif
68+
69 #include "absl/base/attributes.h"
70 #include "absl/base/internal/raw_logging.h"
71 #include "absl/base/macros.h"
Patrick Williams92b42cb2022-09-03 06:53:57 -050072@@ -174,8 +178,10 @@ void* GetProgramCounter(void* const vuc) {
Andrew Geissler9aee5002022-03-30 16:27:02 +000073 return reinterpret_cast<void*>(context->uc_mcontext.pc);
74 #elif defined(__powerpc64__)
75 return reinterpret_cast<void*>(context->uc_mcontext.gp_regs[32]);
76-#elif defined(__powerpc__)
77+#elif defined(__powerpc__) && defined(__GLIBC__)
78 return reinterpret_cast<void*>(context->uc_mcontext.uc_regs->gregs[32]);
79+#elif defined(__powerpc__)
80+ return reinterpret_cast<void*>(((struct pt_regs *)context->uc_regs)->gregs[32]);
81 #elif defined(__riscv)
82 return reinterpret_cast<void*>(context->uc_mcontext.__gregs[REG_PC]);
83 #elif defined(__s390__) && !defined(__s390x__)
Patrick Williams92b42cb2022-09-03 06:53:57 -050084diff --git a/absl/debugging/internal/stacktrace_config.h b/absl/debugging/internal/stacktrace_config.h
85index 3929b1b..23d5e50 100644
Andrew Geissler9aee5002022-03-30 16:27:02 +000086--- a/absl/debugging/internal/stacktrace_config.h
87+++ b/absl/debugging/internal/stacktrace_config.h
Patrick Williams92b42cb2022-09-03 06:53:57 -050088@@ -60,7 +60,7 @@
Andrew Geissler9aee5002022-03-30 16:27:02 +000089 #elif defined(__i386__) || defined(__x86_64__)
90 #define ABSL_STACKTRACE_INL_HEADER \
91 "absl/debugging/internal/stacktrace_x86-inl.inc"
92-#elif defined(__ppc__) || defined(__PPC__)
93+#elif (defined(__ppc__) || defined(__PPC__)) && defined(__GLIBC__)
94 #define ABSL_STACKTRACE_INL_HEADER \
95 "absl/debugging/internal/stacktrace_powerpc-inl.inc"
96 #elif defined(__aarch64__)
Patrick Williams92b42cb2022-09-03 06:53:57 -050097--
982.25.1
99