diff options
Diffstat (limited to 'meta-oe/recipes-devtools/breakpad/breakpad/mcontext.patch')
-rw-r--r-- | meta-oe/recipes-devtools/breakpad/breakpad/mcontext.patch | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/meta-oe/recipes-devtools/breakpad/breakpad/mcontext.patch b/meta-oe/recipes-devtools/breakpad/breakpad/mcontext.patch new file mode 100644 index 000000000..42e073b94 --- /dev/null +++ b/meta-oe/recipes-devtools/breakpad/breakpad/mcontext.patch | |||
@@ -0,0 +1,77 @@ | |||
1 | map the mcontext_t structure for musl | ||
2 | |||
3 | Upstream-Status: Inappropriate[need to consider Android] | ||
4 | |||
5 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
6 | Index: git/src/client/linux/dump_writer_common/thread_info.cc | ||
7 | =================================================================== | ||
8 | --- git.orig/src/client/linux/dump_writer_common/thread_info.cc | ||
9 | +++ git/src/client/linux/dump_writer_common/thread_info.cc | ||
10 | @@ -229,7 +229,6 @@ void ThreadInfo::FillCPUContext(RawConte | ||
11 | } | ||
12 | |||
13 | #elif defined(__mips__) | ||
14 | - | ||
15 | uintptr_t ThreadInfo::GetInstructionPointer() const { | ||
16 | return mcontext.pc; | ||
17 | } | ||
18 | @@ -263,8 +262,11 @@ void ThreadInfo::FillCPUContext(RawConte | ||
19 | out->cause = 0; // Not stored in mcontext | ||
20 | |||
21 | for (int i = 0; i < MD_FLOATINGSAVEAREA_MIPS_FPR_COUNT; ++i) | ||
22 | +#ifdef __GLIBC__ | ||
23 | out->float_save.regs[i] = mcontext.fpregs.fp_r.fp_fregs[i]._fp_fregs; | ||
24 | - | ||
25 | +#else | ||
26 | + out->float_save.regs[i] = mcontext.fpregs[i]; | ||
27 | +#endif | ||
28 | out->float_save.fpcsr = mcontext.fpc_csr; | ||
29 | #if _MIPS_SIM == _ABIO32 | ||
30 | out->float_save.fir = mcontext.fpc_eir; | ||
31 | Index: git/src/client/linux/dump_writer_common/ucontext_reader.cc | ||
32 | =================================================================== | ||
33 | --- git.orig/src/client/linux/dump_writer_common/ucontext_reader.cc | ||
34 | +++ git/src/client/linux/dump_writer_common/ucontext_reader.cc | ||
35 | @@ -247,8 +247,11 @@ void UContextReader::FillCPUContext(RawC | ||
36 | out->cause = 0; // Not reported in signal context. | ||
37 | |||
38 | for (int i = 0; i < MD_FLOATINGSAVEAREA_MIPS_FPR_COUNT; ++i) | ||
39 | +#ifdef __GLIBC__ | ||
40 | out->float_save.regs[i] = uc->uc_mcontext.fpregs.fp_r.fp_dregs[i]; | ||
41 | - | ||
42 | +#else | ||
43 | + out->float_save.regs[i] = uc->uc_mcontext.fpregs[i]; | ||
44 | +#endif | ||
45 | out->float_save.fpcsr = uc->uc_mcontext.fpc_csr; | ||
46 | #if _MIPS_SIM == _ABIO32 | ||
47 | out->float_save.fir = uc->uc_mcontext.fpc_eir; // Unused. | ||
48 | Index: git/src/client/linux/minidump_writer/linux_core_dumper.cc | ||
49 | =================================================================== | ||
50 | --- git.orig/src/client/linux/minidump_writer/linux_core_dumper.cc | ||
51 | +++ git/src/client/linux/minidump_writer/linux_core_dumper.cc | ||
52 | @@ -196,7 +196,7 @@ bool LinuxCoreDumper::EnumerateThreads() | ||
53 | info.tgid = status->pr_pgrp; | ||
54 | info.ppid = status->pr_ppid; | ||
55 | #if defined(__mips__) | ||
56 | -#if defined(__ANDROID__) | ||
57 | +#if defined(__ANDROID__) || !defined(__GLIBC__) | ||
58 | for (int i = EF_R0; i <= EF_R31; i++) | ||
59 | info.mcontext.gregs[i - EF_R0] = status->pr_reg[i]; | ||
60 | #else // __ANDROID__ | ||
61 | Index: git/src/tools/linux/md2core/minidump-2-core.cc | ||
62 | =================================================================== | ||
63 | --- git.orig/src/tools/linux/md2core/minidump-2-core.cc | ||
64 | +++ git/src/tools/linux/md2core/minidump-2-core.cc | ||
65 | @@ -516,8 +516,12 @@ ParseThreadRegisters(CrashedProcess::Thr | ||
66 | thread->mcontext.lo3 = rawregs->lo[2]; | ||
67 | |||
68 | for (int i = 0; i < MD_FLOATINGSAVEAREA_MIPS_FPR_COUNT; ++i) { | ||
69 | +#ifdef __GLIBC__ | ||
70 | thread->mcontext.fpregs.fp_r.fp_fregs[i]._fp_fregs = | ||
71 | rawregs->float_save.regs[i]; | ||
72 | +#else | ||
73 | + thread->mcontext.fpregs[i] = rawregs->float_save.regs[i]; | ||
74 | +#endif | ||
75 | } | ||
76 | |||
77 | thread->mcontext.fpc_csr = rawregs->float_save.fpcsr; | ||