diff options
-rw-r--r-- | Makefile.am | 14 | ||||
-rw-r--r-- | Makefile.in | 60 | ||||
-rw-r--r-- | src/common/android/testing/include/wchar.h | 72 | ||||
-rw-r--r-- | src/common/android/testing/mkdtemp.h | 103 | ||||
-rw-r--r-- | src/common/android/testing/pthread_fixes.h | 98 | ||||
-rw-r--r-- | src/common/linux/elf_core_dump_unittest.cc | 2 | ||||
-rw-r--r-- | src/common/linux/tests/crash_generator.cc | 3 | ||||
-rw-r--r-- | src/common/tests/auto_tempdir.h | 1 | ||||
-rw-r--r-- | src/common/tests/file_utils.cc | 1 |
9 files changed, 328 insertions, 26 deletions
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 <wchar.h> + +// 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 <assert.h> +#include <errno.h> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <sys/stat.h> + +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 <pthread.h> + +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 <string> +#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 <fcntl.h> #include <stdio.h> #include <string.h> +#include <sys/stat.h> #include <unistd.h> #include "common/linux/eintr_wrapper.h" |