-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 3b4feb3
Showing
22 changed files
with
2,724 additions
and
0 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,223 @@ | ||
From 6f067da77b786787c6a3c3253198b0516da79904 Mon Sep 17 00:00:00 2001 | ||
From: Elvis Pranskevichus <[email protected]> | ||
Date: Mon, 27 Nov 2017 17:26:03 -0500 | ||
Subject: [PATCH] glibc-2.26 compatibility fix | ||
|
||
--- | ||
.../linux/dump_writer_common/ucontext_reader.cc | 30 +++++++++++----------- | ||
.../linux/dump_writer_common/ucontext_reader.h | 10 ++++---- | ||
src/client/linux/handler/exception_handler.cc | 10 ++++---- | ||
src/client/linux/handler/exception_handler.h | 2 +- | ||
.../linux/microdump_writer/microdump_writer.cc | 2 +- | ||
.../linux/minidump_writer/minidump_writer.cc | 2 +- | ||
6 files changed, 28 insertions(+), 28 deletions(-) | ||
|
||
diff --git a/src/client/linux/dump_writer_common/ucontext_reader.cc b/src/client/linux/dump_writer_common/ucontext_reader.cc | ||
index c80724dd..93b4d9f8 100644 | ||
--- a/src/client/linux/dump_writer_common/ucontext_reader.cc | ||
+++ b/src/client/linux/dump_writer_common/ucontext_reader.cc | ||
@@ -40,15 +40,15 @@ namespace google_breakpad { | ||
|
||
#if defined(__i386__) | ||
|
||
-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { | ||
+uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) { | ||
return uc->uc_mcontext.gregs[REG_ESP]; | ||
} | ||
|
||
-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { | ||
+uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) { | ||
return uc->uc_mcontext.gregs[REG_EIP]; | ||
} | ||
|
||
-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, | ||
+void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc, | ||
const struct _libc_fpstate* fp) { | ||
const greg_t* regs = uc->uc_mcontext.gregs; | ||
|
||
@@ -88,15 +88,15 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, | ||
|
||
#elif defined(__x86_64) | ||
|
||
-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { | ||
+uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) { | ||
return uc->uc_mcontext.gregs[REG_RSP]; | ||
} | ||
|
||
-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { | ||
+uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) { | ||
return uc->uc_mcontext.gregs[REG_RIP]; | ||
} | ||
|
||
-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, | ||
+void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc, | ||
const struct _libc_fpstate* fpregs) { | ||
const greg_t* regs = uc->uc_mcontext.gregs; | ||
|
||
@@ -145,15 +145,15 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, | ||
|
||
#elif defined(__ARM_EABI__) | ||
|
||
-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { | ||
+uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) { | ||
return uc->uc_mcontext.arm_sp; | ||
} | ||
|
||
-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { | ||
+uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) { | ||
return uc->uc_mcontext.arm_pc; | ||
} | ||
|
||
-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc) { | ||
+void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc) { | ||
out->context_flags = MD_CONTEXT_ARM_FULL; | ||
|
||
out->iregs[0] = uc->uc_mcontext.arm_r0; | ||
@@ -184,15 +184,15 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc) { | ||
|
||
#elif defined(__aarch64__) | ||
|
||
-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { | ||
+uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) { | ||
return uc->uc_mcontext.sp; | ||
} | ||
|
||
-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { | ||
+uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) { | ||
return uc->uc_mcontext.pc; | ||
} | ||
|
||
-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, | ||
+void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc, | ||
const struct fpsimd_context* fpregs) { | ||
out->context_flags = MD_CONTEXT_ARM64_FULL; | ||
|
||
@@ -210,15 +210,15 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, | ||
|
||
#elif defined(__mips__) | ||
|
||
-uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { | ||
+uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) { | ||
return uc->uc_mcontext.gregs[MD_CONTEXT_MIPS_REG_SP]; | ||
} | ||
|
||
-uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { | ||
+uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) { | ||
return uc->uc_mcontext.pc; | ||
} | ||
|
||
-void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc) { | ||
+void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc) { | ||
#if _MIPS_SIM == _ABI64 | ||
out->context_flags = MD_CONTEXT_MIPS64_FULL; | ||
#elif _MIPS_SIM == _ABIO32 | ||
diff --git a/src/client/linux/dump_writer_common/ucontext_reader.h b/src/client/linux/dump_writer_common/ucontext_reader.h | ||
index b6e77b4b..2369a9ad 100644 | ||
--- a/src/client/linux/dump_writer_common/ucontext_reader.h | ||
+++ b/src/client/linux/dump_writer_common/ucontext_reader.h | ||
@@ -41,21 +41,21 @@ namespace google_breakpad { | ||
|
||
// Wraps platform-dependent implementations of accessors to ucontext structs. | ||
struct UContextReader { | ||
- static uintptr_t GetStackPointer(const struct ucontext* uc); | ||
+ static uintptr_t GetStackPointer(const ucontext_t* uc); | ||
|
||
- static uintptr_t GetInstructionPointer(const struct ucontext* uc); | ||
+ static uintptr_t GetInstructionPointer(const ucontext_t* uc); | ||
|
||
// Juggle a arch-specific ucontext into a minidump format | ||
// out: the minidump structure | ||
// info: the collection of register structures. | ||
#if defined(__i386__) || defined(__x86_64) | ||
- static void FillCPUContext(RawContextCPU *out, const ucontext *uc, | ||
+ static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc, | ||
const struct _libc_fpstate* fp); | ||
#elif defined(__aarch64__) | ||
- static void FillCPUContext(RawContextCPU *out, const ucontext *uc, | ||
+ static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc, | ||
const struct fpsimd_context* fpregs); | ||
#else | ||
- static void FillCPUContext(RawContextCPU *out, const ucontext *uc); | ||
+ static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc); | ||
#endif | ||
}; | ||
|
||
diff --git a/src/client/linux/handler/exception_handler.cc b/src/client/linux/handler/exception_handler.cc | ||
index 148d61f9..9d53c11e 100644 | ||
--- a/src/client/linux/handler/exception_handler.cc | ||
+++ b/src/client/linux/handler/exception_handler.cc | ||
@@ -439,9 +439,9 @@ bool ExceptionHandler::HandleSignal(int sig, siginfo_t* info, void* uc) { | ||
// Fill in all the holes in the struct to make Valgrind happy. | ||
memset(&g_crash_context_, 0, sizeof(g_crash_context_)); | ||
memcpy(&g_crash_context_.siginfo, info, sizeof(siginfo_t)); | ||
- memcpy(&g_crash_context_.context, uc, sizeof(struct ucontext)); | ||
+ memcpy(&g_crash_context_.context, uc, sizeof(ucontext_t)); | ||
#if defined(__aarch64__) | ||
- struct ucontext* uc_ptr = (struct ucontext*)uc; | ||
+ ucontext_t* uc_ptr = (ucontext_t*)uc; | ||
struct fpsimd_context* fp_ptr = | ||
(struct fpsimd_context*)&uc_ptr->uc_mcontext.__reserved; | ||
if (fp_ptr->head.magic == FPSIMD_MAGIC) { | ||
@@ -450,9 +450,9 @@ bool ExceptionHandler::HandleSignal(int sig, siginfo_t* info, void* uc) { | ||
} | ||
#elif !defined(__ARM_EABI__) && !defined(__mips__) | ||
// FP state is not part of user ABI on ARM Linux. | ||
- // In case of MIPS Linux FP state is already part of struct ucontext | ||
+ // In case of MIPS Linux FP state is already part of ucontext_t | ||
// and 'float_state' is not a member of CrashContext. | ||
- struct ucontext* uc_ptr = (struct ucontext*)uc; | ||
+ ucontext_t* uc_ptr = (ucontext_t*)uc; | ||
if (uc_ptr->uc_mcontext.fpregs) { | ||
memcpy(&g_crash_context_.float_state, uc_ptr->uc_mcontext.fpregs, | ||
sizeof(g_crash_context_.float_state)); | ||
@@ -476,7 +476,7 @@ bool ExceptionHandler::SimulateSignalDelivery(int sig) { | ||
// ExceptionHandler::HandleSignal(). | ||
siginfo.si_code = SI_USER; | ||
siginfo.si_pid = getpid(); | ||
- struct ucontext context; | ||
+ ucontext_t context; | ||
getcontext(&context); | ||
return HandleSignal(sig, &siginfo, &context); | ||
} | ||
diff --git a/src/client/linux/handler/exception_handler.h b/src/client/linux/handler/exception_handler.h | ||
index 591c3108..846df772 100644 | ||
--- a/src/client/linux/handler/exception_handler.h | ||
+++ b/src/client/linux/handler/exception_handler.h | ||
@@ -191,7 +191,7 @@ class ExceptionHandler { | ||
struct CrashContext { | ||
siginfo_t siginfo; | ||
pid_t tid; // the crashing thread. | ||
- struct ucontext context; | ||
+ ucontext_t context; | ||
#if !defined(__ARM_EABI__) && !defined(__mips__) | ||
// #ifdef this out because FP state is not part of user ABI for Linux ARM. | ||
// In case of MIPS Linux FP state is already part of struct | ||
diff --git a/src/client/linux/microdump_writer/microdump_writer.cc b/src/client/linux/microdump_writer/microdump_writer.cc | ||
index d459d9ec..759f432e 100644 | ||
--- a/src/client/linux/microdump_writer/microdump_writer.cc | ||
+++ b/src/client/linux/microdump_writer/microdump_writer.cc | ||
@@ -416,7 +416,7 @@ class MicrodumpWriter { | ||
|
||
void* Alloc(unsigned bytes) { return dumper_->allocator()->Alloc(bytes); } | ||
|
||
- const struct ucontext* const ucontext_; | ||
+ const ucontext_t* const ucontext_; | ||
#if !defined(__ARM_EABI__) && !defined(__mips__) | ||
const google_breakpad::fpstate_t* const float_state_; | ||
#endif | ||
diff --git a/src/client/linux/minidump_writer/minidump_writer.cc b/src/client/linux/minidump_writer/minidump_writer.cc | ||
index f407caa7..407c1e32 100644 | ||
--- a/src/client/linux/minidump_writer/minidump_writer.cc | ||
+++ b/src/client/linux/minidump_writer/minidump_writer.cc | ||
@@ -1240,7 +1240,7 @@ class MinidumpWriter { | ||
const int fd_; // File descriptor where the minidum should be written. | ||
const char* path_; // Path to the file where the minidum should be written. | ||
|
||
- const struct ucontext* const ucontext_; // also from the signal handler | ||
+ const ucontext_t* const ucontext_; // also from the signal handler | ||
#if !defined(__ARM_EABI__) && !defined(__mips__) | ||
const google_breakpad::fpstate_t* const float_state_; // ditto | ||
#endif | ||
-- | ||
2.14.3 | ||
|
Oops, something went wrong.