From 83b9a28cf94979f9b6c33f492a4072766eff3e6e Mon Sep 17 00:00:00 2001 From: "rmcilroy@chromium.org" Date: Wed, 2 Apr 2014 23:12:40 +0000 Subject: First cut at adding arm64 Linux / Android support to Breakpad. This is an initial attempt to add Arm64 (aarch64) support to Breakpad for Linux / Android platforms. This CL adds the Arm64 data structures, but does not yet implement the Android getcontext support or CPUFillFromThreadInfo / CPUFillFromUContext. BUG=354405,335641 R=mark@chromium.org Review URL: https://breakpad.appspot.com/1354002 git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@1301 4c0a9323-5329-0410-9bdc-e9ce6186880e --- src/common/android/include/sys/procfs.h | 4 +++- src/common/android/include/sys/ucontext.h | 13 +++++++++++++ src/common/android/include/sys/user.h | 5 +++++ 3 files changed, 21 insertions(+), 1 deletion(-) (limited to 'src/common/android/include/sys') diff --git a/src/common/android/include/sys/procfs.h b/src/common/android/include/sys/procfs.h index 9cfdd01c..ec65b91c 100644 --- a/src/common/android/include/sys/procfs.h +++ b/src/common/android/include/sys/procfs.h @@ -44,7 +44,7 @@ extern "C" { #endif // __cplusplus -#ifdef __x86_64__ +#if defined(__x86_64__) || defined(__aarch64__) typedef unsigned long long elf_greg_t; #else typedef unsigned long elf_greg_t; @@ -52,6 +52,8 @@ typedef unsigned long elf_greg_t; #ifdef __arm__ #define ELF_NGREG (sizeof(struct user_regs) / sizeof(elf_greg_t)) +#elif defined(__aarch64__) +#define ELF_NGREG (sizeof(struct user_pt_regs) / sizeof(elf_greg_t)) #else #define ELF_NGREG (sizeof(struct user_regs_struct) / sizeof(elf_greg_t)) #endif diff --git a/src/common/android/include/sys/ucontext.h b/src/common/android/include/sys/ucontext.h index 85c69ebd..8bd5877f 100644 --- a/src/common/android/include/sys/ucontext.h +++ b/src/common/android/include/sys/ucontext.h @@ -62,6 +62,19 @@ typedef struct ucontext { // Other fields are not used by Google Breakpad. Don't define them. } ucontext_t; +#elif defined(__aarch64__) + +#include +typedef struct sigcontext mcontext_t; + +typedef struct ucontext { + unsigned long uc_flags; + struct ucontext *uc_link; + stack_t uc_stack; + sigset_t uc_sigmask; + mcontext_t uc_mcontext; +} ucontext_t; + #elif defined(__i386__) /* 80-bit floating-point register */ diff --git a/src/common/android/include/sys/user.h b/src/common/android/include/sys/user.h index bc275bbe..257cd803 100644 --- a/src/common/android/include/sys/user.h +++ b/src/common/android/include/sys/user.h @@ -75,6 +75,11 @@ struct user_vfpregs { unsigned long fpscr; }; +#elif defined(__aarch64__) + +// aarch64 does not have user_regs definitions in , instead +// use the definitions in , which we don't need to redefine here. + #elif defined(__i386__) #define _I386_USER_H 1 // Prevent conflicts -- cgit v1.2.1