diff options
Diffstat (limited to 'src/client/linux/minidump_writer/minidump_writer.cc')
-rw-r--r-- | src/client/linux/minidump_writer/minidump_writer.cc | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/client/linux/minidump_writer/minidump_writer.cc b/src/client/linux/minidump_writer/minidump_writer.cc index d629ee81..9deed20b 100644 --- a/src/client/linux/minidump_writer/minidump_writer.cc +++ b/src/client/linux/minidump_writer/minidump_writer.cc @@ -50,11 +50,15 @@ #include <errno.h> #include <fcntl.h> +#if !defined(__ANDROID__) #include <link.h> +#endif #include <stdio.h> #include <unistd.h> +#if !defined(__ANDROID__) #include <sys/ucontext.h> #include <sys/user.h> +#endif #include <sys/utsname.h> #include "client/minidump_file_writer.h" @@ -62,6 +66,10 @@ #include "google_breakpad/common/minidump_cpu_amd64.h" #include "google_breakpad/common/minidump_cpu_x86.h" +#if defined(__ANDROID__) +#include "client/linux/android_link.h" +#include "client/linux/android_ucontext.h" +#endif #include "client/linux/handler/exception_handler.h" #include "client/linux/minidump_writer/line_reader.h" #include "client/linux/minidump_writer/linux_dumper.h" @@ -311,11 +319,13 @@ static void CPUFillFromThreadInfo(MDRawContextARM *out, out->iregs[i] = info.regs.uregs[i]; // No CPSR register in ThreadInfo(it's not accessible via ptrace) out->cpsr = 0; +#if !defined(__ANDROID__) out->float_save.fpscr = info.fpregs.fpsr | (static_cast<u_int64_t>(info.fpregs.fpcr) << 32); //TODO: sort this out, actually collect floating point registers memset(&out->float_save.regs, 0, sizeof(out->float_save.regs)); memset(&out->float_save.extra, 0, sizeof(out->float_save.extra)); +#endif } static void CPUFillFromUContext(MDRawContextARM *out, const ucontext *uc, @@ -389,7 +399,9 @@ class MinidumpWriter { // it to a MD_LINUX_DSO_DEBUG stream. struct r_debug* r_debug = NULL; uint32_t dynamic_length = 0; - +#if !defined(__ANDROID__) + // The Android NDK is missing structure definitions for most of this. + // For now, it's simpler just to skip it. for (int i = 0;;) { ElfW(Dyn) dyn; dynamic_length += sizeof(dyn); @@ -400,6 +412,7 @@ class MinidumpWriter { } else if (dyn.d_tag == DT_NULL) break; } +#endif // A minidump file contains a number of tagged streams. This is the number // of stream which we write. @@ -866,6 +879,9 @@ class MinidumpWriter { bool WriteDSODebugStream(MDRawDirectory* dirent, struct r_debug* r_debug, uint32_t dynamic_length) { +#if defined(__ANDROID__) + return false; +#else // The caller provided us with a pointer to "struct r_debug". We can // look up the "r_map" field to get a linked list of all loaded DSOs. // Our list of DSOs potentially is different from the ones in the crashing @@ -939,6 +955,7 @@ class MinidumpWriter { delete[] dso_debug_data; return true; +#endif } private: |