From 13d9e27ef04797cfd00ac56cb1ee37f71d70214e Mon Sep 17 00:00:00 2001 From: "digit@chromium.org" Date: Thu, 23 Aug 2012 15:45:01 +0000 Subject: [PATCH] Fix Breakpad unit tests build for Android. This patch contains the source-related fixes to ensure that the Breakpad unit tests build properly when targetting Android. Calling 'make check' still fails because there is still no way to run the unit test programs on a device. This will be addressed by a future patch. Important notes: - You must target Android API level 9 (Gingerbread) or higher to build the unit tests. This requirement is due to the current GTest revision used in the breakpad source tree. - This patch adds headers providing inlined C library functions missing from the NDK (see src/common/android/testing). They are inlined to avoid modifying Makefile.am and other build files. - Similarly, the header-fix under src/common/android/testing/include is only required by GTest's current revision. E.g. it's not needed when building Breakpad as part of Chromium which uses a more up-to-date revision. Review URL: https://breakpad.appspot.com/439002 git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@1020 4c0a9323-5329-0410-9bdc-e9ce6186880e --- Makefile.am | 14 ++- Makefile.in | 60 +++++++----- src/common/android/testing/include/wchar.h | 72 ++++++++++++++ src/common/android/testing/mkdtemp.h | 103 +++++++++++++++++++++ src/common/android/testing/pthread_fixes.h | 98 ++++++++++++++++++++ src/common/linux/elf_core_dump_unittest.cc | 2 + src/common/linux/tests/crash_generator.cc | 3 + src/common/tests/auto_tempdir.h | 1 + src/common/tests/file_utils.cc | 1 + 9 files changed, 328 insertions(+), 26 deletions(-) create mode 100644 src/common/android/testing/include/wchar.h create mode 100644 src/common/android/testing/mkdtemp.h create mode 100644 src/common/android/testing/pthread_fixes.h diff --git a/Makefile.am b/Makefile.am index 410ca83e..562c0bcf 100644 --- a/Makefile.am +++ b/Makefile.am @@ -32,14 +32,20 @@ # This allows #includes to be relative to src/ AM_CPPFLAGS = -I$(top_srcdir)/src + +AM_CXXFLAGS = + if ANDROID_HOST # This allows using fixed NDK headers when building for Android. -AM_CPPFLAGS += -I$(top_srcdir)/src/common/android/include +AM_CXXFLAGS += -I$(top_srcdir)/src/common/android/include +# This is only necessary for building the unit tests until GTest is upgraded +# to a future version. +AM_CXXFLAGS += -I$(top_srcdir)/src/common/android/testing/include endif if GCC # These are good warnings to be treated as errors -AM_CXXFLAGS = \ +AM_CXXFLAGS += \ -Werror=non-virtual-dtor \ -Werror=vla \ -Werror=unused-variable \ @@ -351,6 +357,10 @@ src_client_linux_linux_client_unittest_LDADD = \ src/common/linux/safe_readlink.o \ src/common/string_conversion.o \ $(PTHREAD_CFLAGS) $(PTHREAD_LIBS) +if ANDROID_HOST +src_client_linux_linux_client_unittest_LDFLAGS = \ + -llog +endif src_client_linux_linux_client_unittest_DEPENDENCIES = \ src/client/linux/linux_dumper_unittest_helper \ diff --git a/Makefile.in b/Makefile.in index a85b2683..e7984bdd 100644 --- a/Makefile.in +++ b/Makefile.in @@ -66,29 +66,43 @@ PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ + # This allows using fixed NDK headers when building for Android. -@ANDROID_HOST_TRUE@am__append_1 = -I$(top_srcdir)/src/common/android/include +# This is only necessary for building the unit tests until GTest is upgraded +# to a future version. +@ANDROID_HOST_TRUE@am__append_1 = \ +@ANDROID_HOST_TRUE@ -I$(top_srcdir)/src/common/android/include \ +@ANDROID_HOST_TRUE@ -I$(top_srcdir)/src/common/android/testing/include + +# These are good warnings to be treated as errors +@GCC_TRUE@am__append_2 = \ +@GCC_TRUE@ -Werror=non-virtual-dtor \ +@GCC_TRUE@ -Werror=vla \ +@GCC_TRUE@ -Werror=unused-variable \ +@GCC_TRUE@ -Werror=missing-braces \ +@GCC_TRUE@ -Werror=overloaded-virtual + bin_PROGRAMS = $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) check_PROGRAMS = $(am__EXEEXT_4) $(am__EXEEXT_5) $(am__EXEEXT_6) \ $(am__EXEEXT_7) -@DISABLE_PROCESSOR_FALSE@am__append_2 = src/libbreakpad.a -@DISABLE_PROCESSOR_FALSE@am__append_3 = src/third_party/libdisasm/libdisasm.a -@LINUX_HOST_TRUE@am__append_4 = src/client/linux/libbreakpad_client.a -@DISABLE_PROCESSOR_FALSE@am__append_5 = \ +@DISABLE_PROCESSOR_FALSE@am__append_3 = src/libbreakpad.a +@DISABLE_PROCESSOR_FALSE@am__append_4 = src/third_party/libdisasm/libdisasm.a +@LINUX_HOST_TRUE@am__append_5 = src/client/linux/libbreakpad_client.a +@DISABLE_PROCESSOR_FALSE@am__append_6 = \ @DISABLE_PROCESSOR_FALSE@ src/processor/minidump_dump \ @DISABLE_PROCESSOR_FALSE@ src/processor/minidump_stackwalk -@LINUX_HOST_TRUE@am__append_6 = \ +@LINUX_HOST_TRUE@am__append_7 = \ @LINUX_HOST_TRUE@ src/client/linux/linux_dumper_unittest_helper -@DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@am__append_7 = \ +@DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@am__append_8 = \ @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/tools/linux/core2md/core2md \ @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/tools/linux/dump_syms/dump_syms \ @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/tools/linux/md2core/minidump-2-core \ @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/tools/linux/symupload/minidump_upload \ @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/tools/linux/symupload/sym_upload -@DISABLE_PROCESSOR_FALSE@am__append_8 = \ +@DISABLE_PROCESSOR_FALSE@am__append_9 = \ @DISABLE_PROCESSOR_FALSE@ src/common/test_assembler_unittest \ @DISABLE_PROCESSOR_FALSE@ src/processor/address_map_unittest \ @DISABLE_PROCESSOR_FALSE@ src/processor/binarystream_unittest \ @@ -113,14 +127,14 @@ check_PROGRAMS = $(am__EXEEXT_4) $(am__EXEEXT_5) $(am__EXEEXT_6) \ @DISABLE_PROCESSOR_FALSE@ src/processor/stackwalker_x86_unittest \ @DISABLE_PROCESSOR_FALSE@ src/processor/synth_minidump_unittest -@LINUX_HOST_TRUE@am__append_9 = \ +@LINUX_HOST_TRUE@am__append_10 = \ @LINUX_HOST_TRUE@ src/client/linux/linux_client_unittest -@DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@am__append_10 = \ +@DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@am__append_11 = \ @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/common/dumper_unittest \ @DISABLE_TOOLS_FALSE@@LINUX_HOST_TRUE@ src/tools/linux/md2core/minidump_2_core_unittest -@DISABLE_PROCESSOR_FALSE@@SELFTEST_TRUE@am__append_11 = \ +@DISABLE_PROCESSOR_FALSE@@SELFTEST_TRUE@am__append_12 = \ @DISABLE_PROCESSOR_FALSE@@SELFTEST_TRUE@ src/processor/stackwalker_selftest noinst_PROGRAMS = @@ -433,6 +447,9 @@ am__src_client_linux_linux_client_unittest_SOURCES_DIST = \ src_client_linux_linux_client_unittest_OBJECTS = \ $(am_src_client_linux_linux_client_unittest_OBJECTS) am__DEPENDENCIES_1 = +src_client_linux_linux_client_unittest_LINK = $(CXXLD) $(AM_CXXFLAGS) \ + $(CXXFLAGS) $(src_client_linux_linux_client_unittest_LDFLAGS) \ + $(LDFLAGS) -o $@ am__src_client_linux_linux_dumper_unittest_helper_SOURCES_DIST = src/client/linux/minidump_writer/linux_dumper_unittest_helper.cc @LINUX_HOST_TRUE@am_src_client_linux_linux_dumper_unittest_helper_OBJECTS = src/client/linux/minidump_writer/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.$(OBJEXT) src_client_linux_linux_dumper_unittest_helper_OBJECTS = \ @@ -1217,16 +1234,8 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # This allows #includes to be relative to src/ -AM_CPPFLAGS = -I$(top_srcdir)/src $(am__append_1) - -# These are good warnings to be treated as errors -@GCC_TRUE@AM_CXXFLAGS = \ -@GCC_TRUE@ -Werror=non-virtual-dtor \ -@GCC_TRUE@ -Werror=vla \ -@GCC_TRUE@ -Werror=unused-variable \ -@GCC_TRUE@ -Werror=missing-braces \ -@GCC_TRUE@ -Werror=overloaded-virtual - +AM_CPPFLAGS = -I$(top_srcdir)/src +AM_CXXFLAGS = $(am__append_1) $(am__append_2) # Specify include paths for ac macros ACLOCAL_AMFLAGS = -I m4 @@ -1238,8 +1247,8 @@ dist_doc_DATA = \ NEWS \ README -noinst_LIBRARIES = $(am__append_3) -lib_LIBRARIES = $(am__append_2) $(am__append_4) +noinst_LIBRARIES = $(am__append_4) +lib_LIBRARIES = $(am__append_3) $(am__append_5) @LINUX_HOST_TRUE@src_client_linux_libbreakpad_client_a_SOURCES = \ @LINUX_HOST_TRUE@ src/client/linux/crash_generation/crash_generation_client.cc \ @LINUX_HOST_TRUE@ src/client/linux/handler/exception_handler.cc \ @@ -1443,6 +1452,9 @@ TESTS_ENVIRONMENT = @LINUX_HOST_TRUE@ src/common/string_conversion.o \ @LINUX_HOST_TRUE@ $(PTHREAD_CFLAGS) $(PTHREAD_LIBS) +@ANDROID_HOST_TRUE@@LINUX_HOST_TRUE@src_client_linux_linux_client_unittest_LDFLAGS = \ +@ANDROID_HOST_TRUE@@LINUX_HOST_TRUE@ -llog + @LINUX_HOST_TRUE@src_client_linux_linux_client_unittest_DEPENDENCIES = \ @LINUX_HOST_TRUE@ src/client/linux/linux_dumper_unittest_helper \ @LINUX_HOST_TRUE@ src/client/linux/libbreakpad_client.a \ @@ -2576,7 +2588,7 @@ src/processor/src_client_linux_linux_client_unittest-pathname_stripper.$(OBJEXT) src/processor/$(DEPDIR)/$(am__dirstamp) src/client/linux/linux_client_unittest$(EXEEXT): $(src_client_linux_linux_client_unittest_OBJECTS) $(src_client_linux_linux_client_unittest_DEPENDENCIES) src/client/linux/$(am__dirstamp) @rm -f src/client/linux/linux_client_unittest$(EXEEXT) - $(CXXLINK) $(src_client_linux_linux_client_unittest_OBJECTS) $(src_client_linux_linux_client_unittest_LDADD) $(LIBS) + $(src_client_linux_linux_client_unittest_LINK) $(src_client_linux_linux_client_unittest_OBJECTS) $(src_client_linux_linux_client_unittest_LDADD) $(LIBS) src/client/linux/minidump_writer/src_client_linux_linux_dumper_unittest_helper-linux_dumper_unittest_helper.$(OBJEXT): \ src/client/linux/minidump_writer/$(am__dirstamp) \ src/client/linux/minidump_writer/$(DEPDIR)/$(am__dirstamp) diff --git a/src/common/android/testing/include/wchar.h b/src/common/android/testing/include/wchar.h new file mode 100644 index 00000000..9649cab6 --- /dev/null +++ b/src/common/android/testing/include/wchar.h @@ -0,0 +1,72 @@ +// Copyright (c) 2012, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Android doesn't provide wcscasecmp(), so provide an alternative here. +// +// Note that this header is not needed when Breakpad is compiled against +// a recent version of Googletest. It shall be considered for removal once +// src/testing/ is updated to an appropriate revision in the future. + +#ifndef GOOGLEBREAKPAD_COMMON_ANDROID_INCLUDE_WCHAR_H +#define GOOGLEBREAKPAD_COMMON_ANDROID_INCLUDE_WCHAR_H + +#include_next + +// This needs to be in an extern "C" namespace, or Googletest will not +// compile against it. +#ifdef __cplusplus +extern "C" { +#endif // __cplusplus + +static wchar_t inline wcstolower(wchar_t ch) { + if (ch >= L'a' && ch <= L'A') + ch -= L'a' - L'A'; + return ch; +} + +static int inline wcscasecmp(const wchar_t* s1, const wchar_t* s2) { + for (;;) { + wchar_t c1 = wcstolower(*s1); + wchar_t c2 = wcstolower(*s2); + if (c1 < c2) + return -1; + if (c1 > c2) + return 1; + if (c1 == L'0') + return 0; + s1++; + s2++; + } +} + +#ifdef __cplusplus +} // extern "C" +#endif // __cplusplus + +#endif // GOOGLEBREAKPAD_COMMON_ANDROID_INCLUDE_WCHAR_H diff --git a/src/common/android/testing/mkdtemp.h b/src/common/android/testing/mkdtemp.h new file mode 100644 index 00000000..063e356f --- /dev/null +++ b/src/common/android/testing/mkdtemp.h @@ -0,0 +1,103 @@ +// Copyright (c) 2012, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Android doesn't provide mkdtemp(). Keep this implementation in an +// C++ anonymous namespace to avoid conflicts on Chromium (which +// already provides an extern "C" mkdtemp function). +// +// The reason this is inlined here is to avoid linking a new object file +// into each unit test program (i.e. keep build files simple). + +#ifndef GOOGLE_BREAKPAD_COMMON_ANDROID_TESTING_MKDTEMP_H +#define GOOGLE_BREAKPAD_COMMON_ANDROID_TESTING_MKDTEMP_H + +#include +#include +#include +#include +#include +#include + +namespace { + +char* mkdtemp(char* path) { + if (path == NULL) { + errno = EINVAL; + return NULL; + } + + // 'path' must be terminated with six 'X' + const char kSuffix[] = "XXXXXX"; + const size_t kSuffixLen = strlen(kSuffix); + char* path_end = path + strlen(path); + + if (path_end - path < kSuffixLen || + memcmp(path_end - kSuffixLen, kSuffix, kSuffixLen) != 0) { + errno = EINVAL; + return NULL; + } + + // If 'path' contains a directory separator, check that it exists to + // avoid looping later. + char* sep = strrchr(path, '/'); + if (sep != NULL) { + struct stat st; + int ret; + *sep = '\0'; // temporarily zero-terminate the dirname. + ret = stat(path, &st); + *sep = '/'; // restore full path. + if (ret < 0) + return NULL; + if (!S_ISDIR(st.st_mode)) { + errno = ENOTDIR; + return NULL; + } + } + + // Loop. On each iteration, replace the XXXXXX suffix with a random + // number. + int tries; + for (tries = 128; tries > 0; tries--) { + int random = rand() % 1000000; + + snprintf(path_end - kSuffixLen, kSuffixLen + 1, "%0d", random); + if (mkdir(path, 0700) == 0) + return path; // Success + + if (errno != EEXIST) + return NULL; + } + + assert(errno == EEXIST); + return NULL; +} + +} // namespace + +#endif // GOOGLE_BREAKPAD_COMMON_ANDROID_TESTING_MKDTEMP_H diff --git a/src/common/android/testing/pthread_fixes.h b/src/common/android/testing/pthread_fixes.h new file mode 100644 index 00000000..2304ee39 --- /dev/null +++ b/src/common/android/testing/pthread_fixes.h @@ -0,0 +1,98 @@ +// Copyright (c) 2012, Google Inc. +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// This contains Pthread-related functions not provided by the Android NDK +// but required by the Breakpad unit test. The functions are inlined here +// in a C++ anonymous namespace in order to keep the build files simples. + +#ifndef GOOGLE_BREAKPAD_COMMON_ANDROID_TESTING_PTHREAD_FIXES_H +#define GOOGLE_BREAKPAD_COMMON_ANDROID_TESTING_PTHREAD_FIXES_H + +#include + +namespace { + +// Android doesn't provide pthread_barrier_t for now. +#ifndef PTHREAD_BARRIER_SERIAL_THREAD + +// Anything except 0 will do here. +#define PTHREAD_BARRIER_SERIAL_THREAD 0x12345 + +typedef struct { + pthread_mutex_t mutex; + pthread_cond_t cond; + unsigned count; +} pthread_barrier_t; + +int pthread_barrier_init(pthread_barrier_t* barrier, + const void* /* barrier_attr */, + unsigned count) { + barrier->count = count; + pthread_mutex_init(&barrier->mutex, NULL); + pthread_cond_init(&barrier->cond, NULL); + return 0; +} + +int pthread_barrier_wait(pthread_barrier_t* barrier) { + // Lock the mutex + pthread_mutex_lock(&barrier->mutex); + // Decrement the count. If this is the first thread to reach 0, wake up + // waiters, unlock the mutex, then return PTHREAD_BARRIER_SERIAL_THREAD. + if (--barrier->count == 0) { + // First thread to reach the barrier + pthread_cond_broadcast(&barrier->cond); + pthread_mutex_unlock(&barrier->mutex); + return PTHREAD_BARRIER_SERIAL_THREAD; + } + // Otherwise, wait for other threads until the count reaches 0, then + // return 0 to indicate this is not the first thread. + do { + pthread_cond_wait(&barrier->cond, &barrier->mutex); + } while (barrier->count > 0); + + pthread_mutex_unlock(&barrier->mutex); + return 0; +} + +int pthread_barrier_destroy(pthread_barrier_t *barrier) { + barrier->count = 0; + pthread_cond_destroy(&barrier->cond); + pthread_mutex_destroy(&barrier->mutex); +} + +#endif // defined(PTHREAD_BARRIER_SERIAL_THREAD) + +int pthread_yield(void) { + sched_yield(); + return 0; +} + +} // namespace + +#endif // GOOGLE_BREAKPAD_COMMON_ANDROID_TESTING_PTHREAD_FIXES_H diff --git a/src/common/linux/elf_core_dump_unittest.cc b/src/common/linux/elf_core_dump_unittest.cc index e872a4fd..ce0ab540 100644 --- a/src/common/linux/elf_core_dump_unittest.cc +++ b/src/common/linux/elf_core_dump_unittest.cc @@ -182,7 +182,9 @@ TEST(ElfCoreDumpTest, ValidCoreFile) { size_t num_nt_prpsinfo = 0; size_t num_nt_prstatus = 0; +#if defined(__i386__) || defined(__x86_64__) size_t num_nt_fpregset = 0; +#endif #if defined(__i386__) size_t num_nt_prxfpreg = 0; #endif diff --git a/src/common/linux/tests/crash_generator.cc b/src/common/linux/tests/crash_generator.cc index c78b793e..9262c323 100644 --- a/src/common/linux/tests/crash_generator.cc +++ b/src/common/linux/tests/crash_generator.cc @@ -43,6 +43,9 @@ #include +#if defined(__ANDROID__) +#include "common/android/testing/pthread_fixes.h" +#endif #include "common/linux/eintr_wrapper.h" #include "common/tests/auto_tempdir.h" #include "common/tests/file_utils.h" diff --git a/src/common/tests/auto_tempdir.h b/src/common/tests/auto_tempdir.h index a54bc053..1df88db8 100644 --- a/src/common/tests/auto_tempdir.h +++ b/src/common/tests/auto_tempdir.h @@ -44,6 +44,7 @@ #define TEMPDIR "/tmp" #else #define TEMPDIR "/data/local/tmp" +#include "common/android/testing/mkdtemp.h" #endif namespace google_breakpad { diff --git a/src/common/tests/file_utils.cc b/src/common/tests/file_utils.cc index 1264b078..80a6b650 100644 --- a/src/common/tests/file_utils.cc +++ b/src/common/tests/file_utils.cc @@ -33,6 +33,7 @@ #include #include #include +#include #include #include "common/linux/eintr_wrapper.h"