diff options
Diffstat (limited to 'android/cpp/coffeecatch_r10c.diff')
-rw-r--r-- | android/cpp/coffeecatch_r10c.diff | 216 |
1 files changed, 216 insertions, 0 deletions
diff --git a/android/cpp/coffeecatch_r10c.diff b/android/cpp/coffeecatch_r10c.diff new file mode 100644 index 0000000000..ddee5b3292 --- /dev/null +++ b/android/cpp/coffeecatch_r10c.diff @@ -0,0 +1,216 @@ +diff --git a/coffeecatch.c b/coffeecatch.c +index 448fe0f..f39fcdb 100644 +--- a/coffeecatch.c ++++ b/coffeecatch.c +@@ -43,10 +43,7 @@ + #include <assert.h> + #include <signal.h> + #include <setjmp.h> +-#if defined(__ANDROID__) && !defined(__BIONIC_HAVE_UCONTEXT_T) && \ +- defined(__arm__) && !defined(__BIONIC_HAVE_STRUCT_SIGCONTEXT) +-#include <asm/sigcontext.h> +-#endif ++#include <sys/ucontext.h> + #if (defined(USE_UNWIND) && !defined(USE_CORKSCREW)) + #include <unwind.h> + #endif +@@ -88,154 +85,34 @@ static const int native_sig_catch[SIG_CATCH_COUNT + 1] + /* Maximum value of a caught signal. */ + #define SIG_NUMBER_MAX 32 + +-#if (defined(__ANDROID__) && (!defined(__BIONIC_HAVE_UCONTEXT_T))) +-#ifndef ucontext_h_seen +-#define ucontext_h_seen +- +-/* stack_t definition */ +-#include <asm/signal.h> +- +-#if defined(__arm__) +- +-/* Taken from richard.quirk's header file. (Android does not have it) */ +- +-typedef struct ucontext { +- unsigned long uc_flags; +- struct ucontext *uc_link; +- stack_t uc_stack; +- struct sigcontext uc_mcontext; +- unsigned long uc_sigmask; +-} ucontext_t; +- +-#elif defined(__i386__) +- +-/* Taken from Google Breakpad. */ +- +-/* 80-bit floating-point register */ +-struct _libc_fpreg { +- unsigned short significand[4]; +- unsigned short exponent; +-}; +- +-/* Simple floating-point state, see FNSTENV instruction */ +-struct _libc_fpstate { +- unsigned long cw; +- unsigned long sw; +- unsigned long tag; +- unsigned long ipoff; +- unsigned long cssel; +- unsigned long dataoff; +- unsigned long datasel; +- struct _libc_fpreg _st[8]; +- unsigned long status; +-}; +- +-typedef uint32_t greg_t; +- +-typedef struct { +- uint32_t gregs[19]; +- struct _libc_fpstate* fpregs; +- uint32_t oldmask; +- uint32_t cr2; +-} mcontext_t; +- +-enum { +- REG_GS = 0, +- REG_FS, +- REG_ES, +- REG_DS, +- REG_EDI, +- REG_ESI, +- REG_EBP, +- REG_ESP, +- REG_EBX, +- REG_EDX, +- REG_ECX, +- REG_EAX, +- REG_TRAPNO, +- REG_ERR, +- REG_EIP, +- REG_CS, +- REG_EFL, +- REG_UESP, +- REG_SS, +-}; +- +-typedef struct ucontext { +- uint32_t uc_flags; +- struct ucontext* uc_link; +- stack_t uc_stack; +- mcontext_t uc_mcontext; +-} ucontext_t; +- +-#elif defined(__mips__) +- +-/* Taken from Google Breakpad. */ +- +-typedef struct { +- uint32_t regmask; +- uint32_t status; +- uint64_t pc; +- uint64_t gregs[32]; +- uint64_t fpregs[32]; +- uint32_t acx; +- uint32_t fpc_csr; +- uint32_t fpc_eir; +- uint32_t used_math; +- uint32_t dsp; +- uint64_t mdhi; +- uint64_t mdlo; +- uint32_t hi1; +- uint32_t lo1; +- uint32_t hi2; +- uint32_t lo2; +- uint32_t hi3; +- uint32_t lo3; +-} mcontext_t; +- +-typedef struct ucontext { +- uint32_t uc_flags; +- struct ucontext* uc_link; +- stack_t uc_stack; +- mcontext_t uc_mcontext; +-} ucontext_t; +- +-#else +-#error "Architecture is not supported (unknown ucontext layout)" +-#endif +- +-#endif +- + #ifdef USE_CORKSCREW + typedef struct map_info_t map_info_t; + /* Extracted from Android's include/corkscrew/backtrace.h */ +-typedef struct { +- uintptr_t absolute_pc; +- uintptr_t stack_top; +- size_t stack_size; +-} backtrace_frame_t; +-typedef struct { +- uintptr_t relative_pc; +- uintptr_t relative_symbol_addr; +- char* map_name; +- char* symbol_name; +- char* demangled_name; ++typedef struct { ++ uintptr_t absolute_pc; ++ uintptr_t stack_top; ++ size_t stack_size; ++} backtrace_frame_t; ++typedef struct { ++ uintptr_t relative_pc; ++ uintptr_t relative_symbol_addr; ++ char* map_name; ++ char* symbol_name; ++ char* demangled_name; + } backtrace_symbol_t; + /* Extracted from Android's libcorkscrew/arch-arm/backtrace-arm.c */ +-typedef ssize_t (*t_unwind_backtrace_signal_arch) +-(siginfo_t* si, void* sc, const map_info_t* lst, backtrace_frame_t* bt, +-size_t ignore_depth, size_t max_depth); +-typedef map_info_t* (*t_acquire_my_map_info_list)(); +-typedef void (*t_release_my_map_info_list)(map_info_t* milist); +-typedef void (*t_get_backtrace_symbols)(const backtrace_frame_t* backtrace, ++typedef ssize_t (*t_unwind_backtrace_signal_arch) ++(siginfo_t* si, void* sc, const map_info_t* lst, backtrace_frame_t* bt, ++size_t ignore_depth, size_t max_depth); ++typedef map_info_t* (*t_acquire_my_map_info_list)(); ++typedef void (*t_release_my_map_info_list)(map_info_t* milist); ++typedef void (*t_get_backtrace_symbols)(const backtrace_frame_t* backtrace, + size_t frames, + backtrace_symbol_t* symbols); + typedef void (*t_free_backtrace_symbols)(backtrace_symbol_t* symbols, + size_t frames); + #endif + +-#endif +- + /* Process-wide crash handler structure. */ + typedef struct native_code_global_struct { + /* Initialized. */ +@@ -341,7 +218,7 @@ static ssize_t coffeecatch_backtrace_signal(siginfo_t* si, void* sc, + && acquire_my_map_info_list != NULL + && release_my_map_info_list != NULL) { + map_info_t*const info = acquire_my_map_info_list(); +- const ssize_t size = ++ const ssize_t size = + unwind_backtrace_signal_arch(si, sc, info, frames, ignore_depth, + max_depth); + release_my_map_info_list(info); +@@ -1073,12 +950,12 @@ static uintptr_t coffeecatch_get_pc_from_ucontext(const ucontext_t *uc) { + return uc->uc_mcontext.regs->nip; + #elif (defined(__hppa__)) + return uc->uc_mcontext.sc_iaoq[0] & ~0x3UL; +-#elif (defined(__sparc__) && defined (__arch64__)) +- return uc->uc_mcontext.mc_gregs[MC_PC]; +-#elif (defined(__sparc__) && !defined (__arch64__)) +- return uc->uc_mcontext.gregs[REG_PC]; +-#elif (defined(__mips__)) +- return uc->uc_mcontext.gregs[31]; ++#elif (defined(__sparc__) && defined (__arch64__)) ++ return uc->uc_mcontext.mc_gregs[MC_PC]; ++#elif (defined(__sparc__) && !defined (__arch64__)) ++ return uc->uc_mcontext.gregs[REG_PC]; ++#elif (defined(__mips__)) ++ return uc->uc_mcontext.gregs[31]; + #else + #error "Architecture is unknown, please report me!" + #endif
\ No newline at end of file |