diff --git a/src/client/linux/dump_writer_common/thread_info.cc b/src/client/linux/dump_writer_common/thread_info.cc index f8488366..9fe253c6 100644 --- a/src/client/linux/dump_writer_common/thread_info.cc +++ b/src/client/linux/dump_writer_common/thread_info.cc @@ -178,12 +178,8 @@ void ThreadInfo::FillCPUContext(RawContextCPU* out) const { out->flt_save.data_offset = fpregs.rdp; out->flt_save.data_selector = 0; // We don't have this. out->flt_save.mx_csr = fpregs.mxcsr; -#if defined (__ANDROID__) - // Internal bug b/18097559 - out->flt_save.mx_csr_mask = fpregs.mxcsr_mask; -#else out->flt_save.mx_csr_mask = fpregs.mxcr_mask; -#endif + my_memcpy(&out->flt_save.float_registers, &fpregs.st_space, 8 * 16); my_memcpy(&out->flt_save.xmm_registers, &fpregs.xmm_space, 16 * 16); } diff --git a/src/client/linux/dump_writer_common/thread_info.h b/src/client/linux/dump_writer_common/thread_info.h index 5f24fd6b..2a99bb97 100644 --- a/src/client/linux/dump_writer_common/thread_info.h +++ b/src/client/linux/dump_writer_common/thread_info.h @@ -31,7 +31,22 @@ #define CLIENT_LINUX_DUMP_WRITER_COMMON_THREAD_INFO_H_ #include + +// TODO(primiano): remove this after Chromium has stably rolled to NDK r10d. +// Historical context: NDK releases < r10d had a typo in sys/user.h (mxcsr_mask +// instead of mxcr_mask), which is fixed in r10d. However, just switching to use +// the correct one (mxcr_mask) would put Breakpad in a state where it can be +// rolled in chromium only atomically with the r10d NDK. A revert of either +// project (android_tools, breakpad) would make the other one unrollable. +// This hack makes breakpad code compatible with both r10c and r10d NDKs, +// reducing the dependency entangling with android_tools. +#if defined (__ANDROID__) +#define mxcsr_mask mxcr_mask #include +#undef mxcsr_mask +#else +#include +#endif #include "client/linux/dump_writer_common/raw_context_cpu.h" #include "common/memory.h"