blob: f39a9616d9635f3403867d9e8a4a3eb18e446061 [file] [log] [blame]
Patrick Williams03514f12024-04-05 07:04:11 -05001From 102dcce6610e6606fffd3a4986f84eb52177f8c8 Mon Sep 17 00:00:00 2001
Patrick Williams169d7bc2024-01-05 11:33:25 -06002From: Khem Raj <raj.khem@gmail.com>
3Date: Sat, 13 Mar 2021 10:26:25 -0800
4Subject: [PATCH] An all-in-one patch that fixes several issues:
Andrew Geissler9aee5002022-03-30 16:27:02 +00005
61) UnscaledCycleClock not fully implemented for ppc*-musl (disabled on musl)
72) powerpc stacktrace implementation only works on glibc (disabled on musl)
83) powerpc stacktrace implementation has ppc64 assumptions (fixed)
94) examine_stack.cpp makes glibc assumptions on powerpc (fixed)
10
11Sourced from void linux
12
Patrick Williams169d7bc2024-01-05 11:33:25 -060013Upstream-Status: Pending
Andrew Geissler9aee5002022-03-30 16:27:02 +000014Signed-off-by: Khem Raj <raj.khem@gmail.com>
Patrick Williams92b42cb2022-09-03 06:53:57 -050015Signed-off-by: Xu Huan <xuhuan.fnst@fujitsu.com>
Patrick Williams169d7bc2024-01-05 11:33:25 -060016---
17 .../abseil-cpp/absl/base/internal/unscaledcycleclock.cc | 4 ++--
18 .../absl/base/internal/unscaledcycleclock_config.h | 3 ++-
19 .../abseil-cpp/absl/debugging/internal/examine_stack.cc | 8 +++++++-
20 .../absl/debugging/internal/stacktrace_config.h | 2 +-
Patrick Williams92b42cb2022-09-03 06:53:57 -050021 4 files changed, 12 insertions(+), 5 deletions(-)
Andrew Geissler9aee5002022-03-30 16:27:02 +000022
Patrick Williams169d7bc2024-01-05 11:33:25 -060023diff --git a/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc b/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc
Patrick Williams03514f12024-04-05 07:04:11 -050024index 05e0e7b..f11fecb 100644
Patrick Williams169d7bc2024-01-05 11:33:25 -060025--- a/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc
26+++ b/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc
Andrew Geissler9aee5002022-03-30 16:27:02 +000027@@ -20,7 +20,7 @@
28 #include <intrin.h>
29 #endif
30
31-#if defined(__powerpc__) || defined(__ppc__)
32+#if (defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__)
33 #ifdef __GLIBC__
34 #include <sys/platform/ppc.h>
35 #elif defined(__FreeBSD__)
Patrick Williams92b42cb2022-09-03 06:53:57 -050036@@ -58,7 +58,7 @@ double UnscaledCycleClock::Frequency() {
Andrew Geissler9aee5002022-03-30 16:27:02 +000037 return base_internal::NominalCPUFrequency();
38 }
39
40-#elif defined(__powerpc__) || defined(__ppc__)
41+#elif (defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__)
42
43 int64_t UnscaledCycleClock::Now() {
44 #ifdef __GLIBC__
Patrick Williams169d7bc2024-01-05 11:33:25 -060045diff --git a/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h b/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h
46index 24b324a..5e232c1 100644
47--- a/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h
48+++ b/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h
49@@ -21,7 +21,8 @@
50
51 // The following platforms have an implementation of a hardware counter.
52 #if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__) || \
53- defined(__powerpc__) || defined(__ppc__) || defined(__riscv) || \
54+ ((defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__)) || \
55+ defined(__riscv) || \
56 defined(_M_IX86) || (defined(_M_X64) && !defined(_M_ARM64EC))
57 #define ABSL_HAVE_UNSCALED_CYCLECLOCK_IMPLEMENTATION 1
58 #else
59diff --git a/third_party/abseil-cpp/absl/debugging/internal/examine_stack.cc b/third_party/abseil-cpp/absl/debugging/internal/examine_stack.cc
Patrick Williams03514f12024-04-05 07:04:11 -050060index 3dd6ba1..9f0601c 100644
Patrick Williams169d7bc2024-01-05 11:33:25 -060061--- a/third_party/abseil-cpp/absl/debugging/internal/examine_stack.cc
62+++ b/third_party/abseil-cpp/absl/debugging/internal/examine_stack.cc
Patrick Williams03514f12024-04-05 07:04:11 -050063@@ -36,6 +36,10 @@
Andrew Geissler9aee5002022-03-30 16:27:02 +000064 #include <csignal>
65 #include <cstdio>
66
67+#if defined(__powerpc__)
68+#include <asm/ptrace.h>
69+#endif
70+
71 #include "absl/base/attributes.h"
72 #include "absl/base/internal/raw_logging.h"
73 #include "absl/base/macros.h"
Patrick Williams03514f12024-04-05 07:04:11 -050074@@ -177,8 +181,10 @@ void* GetProgramCounter(void* const vuc) {
Andrew Geissler9aee5002022-03-30 16:27:02 +000075 return reinterpret_cast<void*>(context->uc_mcontext.pc);
76 #elif defined(__powerpc64__)
77 return reinterpret_cast<void*>(context->uc_mcontext.gp_regs[32]);
78-#elif defined(__powerpc__)
79+#elif defined(__powerpc__) && defined(__GLIBC__)
80 return reinterpret_cast<void*>(context->uc_mcontext.uc_regs->gregs[32]);
81+#elif defined(__powerpc__)
82+ return reinterpret_cast<void*>(((struct pt_regs *)context->uc_regs)->gregs[32]);
83 #elif defined(__riscv)
84 return reinterpret_cast<void*>(context->uc_mcontext.__gregs[REG_PC]);
85 #elif defined(__s390__) && !defined(__s390x__)
Patrick Williams169d7bc2024-01-05 11:33:25 -060086diff --git a/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h b/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h
87index 3929b1b..23d5e50 100644
88--- a/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h
89+++ b/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h
Patrick Williams92b42cb2022-09-03 06:53:57 -050090@@ -60,7 +60,7 @@
Andrew Geissler9aee5002022-03-30 16:27:02 +000091 #elif defined(__i386__) || defined(__x86_64__)
92 #define ABSL_STACKTRACE_INL_HEADER \
93 "absl/debugging/internal/stacktrace_x86-inl.inc"
94-#elif defined(__ppc__) || defined(__PPC__)
95+#elif (defined(__ppc__) || defined(__PPC__)) && defined(__GLIBC__)
96 #define ABSL_STACKTRACE_INL_HEADER \
97 "absl/debugging/internal/stacktrace_powerpc-inl.inc"
98 #elif defined(__aarch64__)