diff options
author | digit@chromium.org <digit@chromium.org@4c0a9323-5329-0410-9bdc-e9ce6186880e> | 2012-08-21 14:34:48 +0000 |
---|---|---|
committer | digit@chromium.org <digit@chromium.org@4c0a9323-5329-0410-9bdc-e9ce6186880e> | 2012-08-21 14:34:48 +0000 |
commit | 62d486be7c8b6e866c3104b6e8170e69db0a95f1 (patch) | |
tree | 4ed041798986544b35a38edb49af042e49e0b8f9 /src/client | |
parent | Fix Android build. (diff) | |
download | breakpad-62d486be7c8b6e866c3104b6e8170e69db0a95f1.tar.xz |
Improve Android support
This patch remove many Android-specific #ifdefs from the Breakpad
source code. This is achieved by providing "fixed-up" platform
headers (e.g. <signal.h> or <sys/user,h>), in the new directory
src/common/android/include/, which masks differences between
the NDK and GLibc headers.
The old "android_link.h" and "android_ucontext.h" are moved
and renamed.
This also requires putting this directory as the first
include path during Android-hosted builds, hence the
modification of Makefile.am and configure.ac
Review URL: https://breakpad.appspot.com/434002
git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@1017 4c0a9323-5329-0410-9bdc-e9ce6186880e
Diffstat (limited to 'src/client')
-rw-r--r-- | src/client/linux/android_link.h | 48 | ||||
-rw-r--r-- | src/client/linux/android_ucontext.h | 160 | ||||
-rw-r--r-- | src/client/linux/handler/exception_handler.cc | 2 | ||||
-rw-r--r-- | src/client/linux/handler/exception_handler.h | 4 | ||||
-rw-r--r-- | src/client/linux/minidump_writer/linux_dumper.h | 22 | ||||
-rw-r--r-- | src/client/linux/minidump_writer/linux_ptrace_dumper.cc | 2 | ||||
-rw-r--r-- | src/client/linux/minidump_writer/minidump_writer.cc | 8 |
7 files changed, 1 insertions, 245 deletions
diff --git a/src/client/linux/android_link.h b/src/client/linux/android_link.h deleted file mode 100644 index 32261fc2..00000000 --- a/src/client/linux/android_link.h +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (c) 2010, 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. - -// The Android NDK doesn't have link.h. Fortunately, the only thing -// that Breakpad uses from it is the ElfW macro, so define it here. - -#ifndef GOOGLE_BREAKPAD_CLIENT_LINUX_ANDROID_LINK_H_ -#define GOOGLE_BREAKPAD_CLIENT_LINUX_ANDROID_LINK_H_ - -// TODO(zhenghao): exec_elf.h conflicts with linux/elf.h. -// But we still need ELFSIZE. -//#include <sys/exec_elf.h> -#include <machine/exec.h> -#define ELFSIZE ARCH_ELFSIZE - -#ifndef ElfW -#define ElfW(type) _ElfW (Elf, ELFSIZE, type) -#define _ElfW(e,w,t) _ElfW_1 (e, w, _##t) -#define _ElfW_1(e,w,t) e##w##t -#endif - -#endif // GOOGLE_BREAKPAD_CLIENT_LINUX_ANDROID_LINK_H_ diff --git a/src/client/linux/android_ucontext.h b/src/client/linux/android_ucontext.h deleted file mode 100644 index bd47f33b..00000000 --- a/src/client/linux/android_ucontext.h +++ /dev/null @@ -1,160 +0,0 @@ -// Copyright (c) 2009, 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. - -// Only recent versions of Android's C library correctly define the -// required types for ucontext_t handling. This header provides a -// custom declarations that will work when Google Breakpad is built -// against any version of the NDK or platform headers, and work on -// any version of the system. -// -// See http://code.google.com/p/android/issues/detail?id=34784 -// -#ifndef GOOGLE_BREAKPAD_CLIENT_LINUX_ANDROID_UCONTEXT_H_ -#define GOOGLE_BREAKPAD_CLIENT_LINUX_ANDROID_UCONTEXT_H_ - -#include <signal.h> -#include <stdint.h> - -#ifndef __BIONIC_HAVE_UCONTEXT_T - -#if defined(__arm__) - -// Ensure that 'struct sigcontext' is defined. -#include <asm/sigcontext.h> -typedef struct sigcontext mcontext_t; - -typedef struct ucontext { - uint32_t uc_flags; - struct ucontext* uc_link; - stack_t uc_stack; - mcontext_t uc_mcontext; - // Other fields are not used by Google Breakpad. Don't define them. -} ucontext_t; - -#elif defined(__i386__) - -/* 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 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, - REG_ES, - REG_ES, - REG_ES, - REG_ES, -}; - -typedef struct ucontext { - uint32_t uc_flags; - struct ucontext* uc_link; - stack_t uc_stack; - mcontext_t uc_mcontext; - // Other fields are not used by Google Breakpad. Don't define them. -} ucontext_t; - -#elif defined(__mips__) - -// Not supported by Google Breakpad at this point, but just in case. -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; - // Other fields are not used by Google Breakpad. Don't define them. -} ucontext_t; - -#else -# error "Unsupported Android CPU ABI!" -#endif - -#endif // !__BIONIC_HAVE_UCONTEXT_T - -#endif // GOOGLE_BREAKPAD_CLIENT_LINUX_ANDROID_UCONTEXT_H_ diff --git a/src/client/linux/handler/exception_handler.cc b/src/client/linux/handler/exception_handler.cc index f10cdbf1..0cdde2d1 100644 --- a/src/client/linux/handler/exception_handler.cc +++ b/src/client/linux/handler/exception_handler.cc @@ -77,12 +77,10 @@ #include <sys/wait.h> #include <unistd.h> -#if !defined(__ANDROID__) #include <sys/signal.h> #include <sys/ucontext.h> #include <sys/user.h> #include <ucontext.h> -#endif #include <algorithm> #include <utility> diff --git a/src/client/linux/handler/exception_handler.h b/src/client/linux/handler/exception_handler.h index f66b8270..f9e7ce3b 100644 --- a/src/client/linux/handler/exception_handler.h +++ b/src/client/linux/handler/exception_handler.h @@ -37,10 +37,8 @@ #include <signal.h> #include <stdint.h> #include <stdio.h> +#include <sys/ucontext.h> -#if defined(__ANDROID__) -#include "client/linux/android_ucontext.h" -#endif #include "client/linux/crash_generation/crash_generation_client.h" #include "client/linux/handler/minidump_descriptor.h" #include "client/linux/minidump_writer/minidump_writer.h" diff --git a/src/client/linux/minidump_writer/linux_dumper.h b/src/client/linux/minidump_writer/linux_dumper.h index 42b2a991..0fca9937 100644 --- a/src/client/linux/minidump_writer/linux_dumper.h +++ b/src/client/linux/minidump_writer/linux_dumper.h @@ -42,9 +42,7 @@ #include <linux/limits.h> #include <stdint.h> #include <sys/types.h> -#if !defined(__ANDROID__) #include <sys/user.h> -#endif #include "common/memory.h" #include "google_breakpad/common/minidump_format.h" @@ -57,23 +55,7 @@ typedef typeof(((struct user*) 0)->u_debugreg[0]) debugreg_t; // Typedef for our parsing of the auxv variables in /proc/pid/auxv. #if defined(__i386) || defined(__ARM_EABI__) -#if !defined(__ANDROID__) typedef Elf32_auxv_t elf_aux_entry; -#else -// Android is missing this structure definition -typedef struct -{ - uint32_t a_type; /* Entry type */ - union - { - uint32_t a_val; /* Integer value */ - } a_un; -} elf_aux_entry; - -#if !defined(AT_SYSINFO_EHDR) -#define AT_SYSINFO_EHDR 33 -#endif -#endif // __ANDROID__ #elif defined(__x86_64) typedef Elf64_auxv_t elf_aux_entry; #endif @@ -104,12 +86,8 @@ struct ThreadInfo { #elif defined(__ARM_EABI__) // Mimicking how strace does this(see syscall.c, search for GETREGS) -#if defined(__ANDROID__) - struct pt_regs regs; -#else struct user_regs regs; struct user_fpregs fpregs; -#endif // __ANDROID__ #endif }; diff --git a/src/client/linux/minidump_writer/linux_ptrace_dumper.cc b/src/client/linux/minidump_writer/linux_ptrace_dumper.cc index 2647801c..5591067a 100644 --- a/src/client/linux/minidump_writer/linux_ptrace_dumper.cc +++ b/src/client/linux/minidump_writer/linux_ptrace_dumper.cc @@ -186,11 +186,9 @@ bool LinuxPtraceDumper::GetThreadInfoByIndex(size_t index, ThreadInfo* info) { return false; } -#if !defined(__ANDROID__) if (sys_ptrace(PTRACE_GETFPREGS, tid, NULL, &info->fpregs) == -1) { return false; } -#endif #if defined(__i386) if (sys_ptrace(PTRACE_GETFPXREGS, tid, NULL, &info->fpxregs) == -1) diff --git a/src/client/linux/minidump_writer/minidump_writer.cc b/src/client/linux/minidump_writer/minidump_writer.cc index fefef1d2..e3eb6c34 100644 --- a/src/client/linux/minidump_writer/minidump_writer.cc +++ b/src/client/linux/minidump_writer/minidump_writer.cc @@ -50,17 +50,13 @@ #include <ctype.h> #include <errno.h> #include <fcntl.h> -#if !defined(__ANDROID__) #include <link.h> -#endif #include <stdio.h> #if defined(__ANDROID__) #include <sys/system_properties.h> #endif -#if !defined(__ANDROID__) #include <sys/ucontext.h> #include <sys/user.h> -#endif #include <sys/utsname.h> #include <unistd.h> @@ -69,10 +65,6 @@ #include "client/minidump_file_writer.h" #include "google_breakpad/common/minidump_format.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" |