| 1 | From b6a312ed8e144a37da840ae50dbd39df5ffb7e9f Mon Sep 17 00:00:00 2001 |
| 2 | From: Khem Raj <raj.khem@gmail.com> |
| 3 | Date: Sun, 2 Jul 2017 16:34:54 -0700 |
| 4 | Subject: [PATCH 2/2] replace struct ucontext with ucontext_t |
| 5 | |
| 6 | glibc 2.26 does not expose struct ucontext any longer |
| 7 | |
| 8 | Upstream-Status: Pending |
| 9 | |
| 10 | Signed-off-by: Khem Raj <raj.khem@gmail.com> |
| 11 | --- |
| 12 | .../linux/dump_writer_common/ucontext_reader.cc | 30 +++++++++++----------- |
| 13 | .../linux/dump_writer_common/ucontext_reader.h | 10 ++++---- |
| 14 | .../src/client/linux/handler/exception_handler.cc | 8 +++--- |
| 15 | .../src/client/linux/handler/exception_handler.h | 2 +- |
| 16 | .../linux/microdump_writer/microdump_writer.cc | 2 +- |
| 17 | .../linux/minidump_writer/minidump_writer.cc | 2 +- |
| 18 | 6 files changed, 27 insertions(+), 27 deletions(-) |
| 19 | |
| 20 | diff --git a/breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc b/breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc |
| 21 | index c80724dd8..93b4d9f85 100644 |
| 22 | --- a/breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc |
| 23 | +++ b/breakpad/src/client/linux/dump_writer_common/ucontext_reader.cc |
| 24 | @@ -40,15 +40,15 @@ namespace google_breakpad { |
| 25 | |
| 26 | #if defined(__i386__) |
| 27 | |
| 28 | -uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { |
| 29 | +uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) { |
| 30 | return uc->uc_mcontext.gregs[REG_ESP]; |
| 31 | } |
| 32 | |
| 33 | -uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { |
| 34 | +uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) { |
| 35 | return uc->uc_mcontext.gregs[REG_EIP]; |
| 36 | } |
| 37 | |
| 38 | -void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, |
| 39 | +void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc, |
| 40 | const struct _libc_fpstate* fp) { |
| 41 | const greg_t* regs = uc->uc_mcontext.gregs; |
| 42 | |
| 43 | @@ -88,15 +88,15 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, |
| 44 | |
| 45 | #elif defined(__x86_64) |
| 46 | |
| 47 | -uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { |
| 48 | +uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) { |
| 49 | return uc->uc_mcontext.gregs[REG_RSP]; |
| 50 | } |
| 51 | |
| 52 | -uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { |
| 53 | +uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) { |
| 54 | return uc->uc_mcontext.gregs[REG_RIP]; |
| 55 | } |
| 56 | |
| 57 | -void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, |
| 58 | +void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc, |
| 59 | const struct _libc_fpstate* fpregs) { |
| 60 | const greg_t* regs = uc->uc_mcontext.gregs; |
| 61 | |
| 62 | @@ -145,15 +145,15 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, |
| 63 | |
| 64 | #elif defined(__ARM_EABI__) |
| 65 | |
| 66 | -uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { |
| 67 | +uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) { |
| 68 | return uc->uc_mcontext.arm_sp; |
| 69 | } |
| 70 | |
| 71 | -uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { |
| 72 | +uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) { |
| 73 | return uc->uc_mcontext.arm_pc; |
| 74 | } |
| 75 | |
| 76 | -void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc) { |
| 77 | +void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc) { |
| 78 | out->context_flags = MD_CONTEXT_ARM_FULL; |
| 79 | |
| 80 | out->iregs[0] = uc->uc_mcontext.arm_r0; |
| 81 | @@ -184,15 +184,15 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc) { |
| 82 | |
| 83 | #elif defined(__aarch64__) |
| 84 | |
| 85 | -uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { |
| 86 | +uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) { |
| 87 | return uc->uc_mcontext.sp; |
| 88 | } |
| 89 | |
| 90 | -uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { |
| 91 | +uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) { |
| 92 | return uc->uc_mcontext.pc; |
| 93 | } |
| 94 | |
| 95 | -void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, |
| 96 | +void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc, |
| 97 | const struct fpsimd_context* fpregs) { |
| 98 | out->context_flags = MD_CONTEXT_ARM64_FULL; |
| 99 | |
| 100 | @@ -210,15 +210,15 @@ void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc, |
| 101 | |
| 102 | #elif defined(__mips__) |
| 103 | |
| 104 | -uintptr_t UContextReader::GetStackPointer(const struct ucontext* uc) { |
| 105 | +uintptr_t UContextReader::GetStackPointer(const ucontext_t* uc) { |
| 106 | return uc->uc_mcontext.gregs[MD_CONTEXT_MIPS_REG_SP]; |
| 107 | } |
| 108 | |
| 109 | -uintptr_t UContextReader::GetInstructionPointer(const struct ucontext* uc) { |
| 110 | +uintptr_t UContextReader::GetInstructionPointer(const ucontext_t* uc) { |
| 111 | return uc->uc_mcontext.pc; |
| 112 | } |
| 113 | |
| 114 | -void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext *uc) { |
| 115 | +void UContextReader::FillCPUContext(RawContextCPU *out, const ucontext_t *uc) { |
| 116 | #if _MIPS_SIM == _ABI64 |
| 117 | out->context_flags = MD_CONTEXT_MIPS64_FULL; |
| 118 | #elif _MIPS_SIM == _ABIO32 |
| 119 | diff --git a/breakpad/src/client/linux/dump_writer_common/ucontext_reader.h b/breakpad/src/client/linux/dump_writer_common/ucontext_reader.h |
| 120 | index b6e77b4b5..2369a9ad3 100644 |
| 121 | --- a/breakpad/src/client/linux/dump_writer_common/ucontext_reader.h |
| 122 | +++ b/breakpad/src/client/linux/dump_writer_common/ucontext_reader.h |
| 123 | @@ -41,21 +41,21 @@ namespace google_breakpad { |
| 124 | |
| 125 | // Wraps platform-dependent implementations of accessors to ucontext structs. |
| 126 | struct UContextReader { |
| 127 | - static uintptr_t GetStackPointer(const struct ucontext* uc); |
| 128 | + static uintptr_t GetStackPointer(const ucontext_t* uc); |
| 129 | |
| 130 | - static uintptr_t GetInstructionPointer(const struct ucontext* uc); |
| 131 | + static uintptr_t GetInstructionPointer(const ucontext_t* uc); |
| 132 | |
| 133 | // Juggle a arch-specific ucontext into a minidump format |
| 134 | // out: the minidump structure |
| 135 | // info: the collection of register structures. |
| 136 | #if defined(__i386__) || defined(__x86_64) |
| 137 | - static void FillCPUContext(RawContextCPU *out, const ucontext *uc, |
| 138 | + static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc, |
| 139 | const struct _libc_fpstate* fp); |
| 140 | #elif defined(__aarch64__) |
| 141 | - static void FillCPUContext(RawContextCPU *out, const ucontext *uc, |
| 142 | + static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc, |
| 143 | const struct fpsimd_context* fpregs); |
| 144 | #else |
| 145 | - static void FillCPUContext(RawContextCPU *out, const ucontext *uc); |
| 146 | + static void FillCPUContext(RawContextCPU *out, const ucontext_t *uc); |
| 147 | #endif |
| 148 | }; |
| 149 | |
| 150 | diff --git a/breakpad/src/client/linux/handler/exception_handler.cc b/breakpad/src/client/linux/handler/exception_handler.cc |
| 151 | index b63f973b8..f2688acaf 100644 |
| 152 | --- a/breakpad/src/client/linux/handler/exception_handler.cc |
| 153 | +++ b/breakpad/src/client/linux/handler/exception_handler.cc |
| 154 | @@ -439,9 +439,9 @@ bool ExceptionHandler::HandleSignal(int sig, siginfo_t* info, void* uc) { |
| 155 | // Fill in all the holes in the struct to make Valgrind happy. |
| 156 | memset(&g_crash_context_, 0, sizeof(g_crash_context_)); |
| 157 | memcpy(&g_crash_context_.siginfo, info, sizeof(siginfo_t)); |
| 158 | - memcpy(&g_crash_context_.context, uc, sizeof(struct ucontext)); |
| 159 | + memcpy(&g_crash_context_.context, uc, sizeof(ucontext_t)); |
| 160 | #if defined(__aarch64__) |
| 161 | - struct ucontext* uc_ptr = (struct ucontext*)uc; |
| 162 | + ucontext_t* uc_ptr = (ucontext_t*)uc; |
| 163 | struct fpsimd_context* fp_ptr = |
| 164 | (struct fpsimd_context*)&uc_ptr->uc_mcontext.__reserved; |
| 165 | if (fp_ptr->head.magic == FPSIMD_MAGIC) { |
| 166 | @@ -452,7 +452,7 @@ bool ExceptionHandler::HandleSignal(int sig, siginfo_t* info, void* uc) { |
| 167 | // FP state is not part of user ABI on ARM Linux. |
| 168 | // In case of MIPS Linux FP state is already part of struct ucontext |
| 169 | // and 'float_state' is not a member of CrashContext. |
| 170 | - struct ucontext* uc_ptr = (struct ucontext*)uc; |
| 171 | + ucontext_t* uc_ptr = (ucontext_t*)uc; |
| 172 | if (uc_ptr->uc_mcontext.fpregs) { |
| 173 | memcpy(&g_crash_context_.float_state, uc_ptr->uc_mcontext.fpregs, |
| 174 | sizeof(g_crash_context_.float_state)); |
| 175 | @@ -476,7 +476,7 @@ bool ExceptionHandler::SimulateSignalDelivery(int sig) { |
| 176 | // ExceptionHandler::HandleSignal(). |
| 177 | siginfo.si_code = SI_USER; |
| 178 | siginfo.si_pid = getpid(); |
| 179 | - struct ucontext context; |
| 180 | + ucontext_t context; |
| 181 | getcontext(&context); |
| 182 | return HandleSignal(sig, &siginfo, &context); |
| 183 | } |
| 184 | diff --git a/breakpad/src/client/linux/handler/exception_handler.h b/breakpad/src/client/linux/handler/exception_handler.h |
| 185 | index 591c31085..846df772f 100644 |
| 186 | --- a/breakpad/src/client/linux/handler/exception_handler.h |
| 187 | +++ b/breakpad/src/client/linux/handler/exception_handler.h |
| 188 | @@ -191,7 +191,7 @@ class ExceptionHandler { |
| 189 | struct CrashContext { |
| 190 | siginfo_t siginfo; |
| 191 | pid_t tid; // the crashing thread. |
| 192 | - struct ucontext context; |
| 193 | + ucontext_t context; |
| 194 | #if !defined(__ARM_EABI__) && !defined(__mips__) |
| 195 | // #ifdef this out because FP state is not part of user ABI for Linux ARM. |
| 196 | // In case of MIPS Linux FP state is already part of struct |
| 197 | diff --git a/breakpad/src/client/linux/microdump_writer/microdump_writer.cc b/breakpad/src/client/linux/microdump_writer/microdump_writer.cc |
| 198 | index 6f5b43559..a508667a0 100644 |
| 199 | --- a/breakpad/src/client/linux/microdump_writer/microdump_writer.cc |
| 200 | +++ b/breakpad/src/client/linux/microdump_writer/microdump_writer.cc |
| 201 | @@ -571,7 +571,7 @@ class MicrodumpWriter { |
| 202 | |
| 203 | void* Alloc(unsigned bytes) { return dumper_->allocator()->Alloc(bytes); } |
| 204 | |
| 205 | - const struct ucontext* const ucontext_; |
| 206 | + const ucontext_t* const ucontext_; |
| 207 | #if !defined(__ARM_EABI__) && !defined(__mips__) |
| 208 | const google_breakpad::fpstate_t* const float_state_; |
| 209 | #endif |
| 210 | diff --git a/breakpad/src/client/linux/minidump_writer/minidump_writer.cc b/breakpad/src/client/linux/minidump_writer/minidump_writer.cc |
| 211 | index 86009b9f6..f2aec73d7 100644 |
| 212 | --- a/breakpad/src/client/linux/minidump_writer/minidump_writer.cc |
| 213 | +++ b/breakpad/src/client/linux/minidump_writer/minidump_writer.cc |
| 214 | @@ -1248,7 +1248,7 @@ class MinidumpWriter { |
| 215 | const int fd_; // File descriptor where the minidum should be written. |
| 216 | const char* path_; // Path to the file where the minidum should be written. |
| 217 | |
| 218 | - const struct ucontext* const ucontext_; // also from the signal handler |
| 219 | + const ucontext_t* const ucontext_; // also from the signal handler |
| 220 | #if !defined(__ARM_EABI__) && !defined(__mips__) |
| 221 | const google_breakpad::fpstate_t* const float_state_; // ditto |
| 222 | #endif |
| 223 | -- |
| 224 | 2.13.2 |
| 225 | |