From 623038a48cded0d2b5ad804c78b92d6b7d979cac Mon Sep 17 00:00:00 2001 From: Lei Wen Date: Mon, 28 Jul 2014 10:12:57 +0800 Subject: [PATCH 1/4] gcore: fix build for arm64 Change-Id: Ic075720ea7a0d3523cdde616772b3d75dd90f7ae Signed-off-by: Lei Wen --- extensions/libgcore/gcore_arm64.c | 4 +-- extensions/libgcore/gcore_coredump.c | 5 --- extensions/libgcore/gcore_defs.h | 58 +++++++++++++++++++++++++++------- 3 files changed, 49 insertions(+), 18 deletions(-) diff --git a/extensions/libgcore/gcore_arm64.c b/extensions/libgcore/gcore_arm64.c index 8ea1994..5f05dd9 100644 --- a/extensions/libgcore/gcore_arm64.c +++ b/extensions/libgcore/gcore_arm64.c @@ -24,12 +24,12 @@ static int gpr_get(struct task_context *target, const struct user_regset *regset, unsigned int size, void *buf) { - struct user_pt_regs *regs = (struct user_pt_regs *)buf; + struct user_regs_struct *regs = (struct user_regs_struct *)buf; BZERO(regs, sizeof(*regs)); readmem(machdep->get_stacktop(target->task) - 16 - SIZE(pt_regs), KVADDR, - regs, sizeof(struct user_pt_regs), "gpr_get: user_pt_regs", + regs, sizeof(struct user_regs_struct), "gpr_get: user_regs_struct", gcore_verbose_error_handle()); return 0; diff --git a/extensions/libgcore/gcore_coredump.c b/extensions/libgcore/gcore_coredump.c index fe6b46e..19156d0 100644 --- a/extensions/libgcore/gcore_coredump.c +++ b/extensions/libgcore/gcore_coredump.c @@ -682,12 +682,7 @@ fill_prstatus_note(struct elf_note_info *info, struct task_context *tc, struct memelfnote *memnote) { struct elf_prstatus dummy, *prstatus = (struct elf_prstatus *)memnote->data; -#if defined(X86) || defined(X86_64) || defined(ARM) struct user_regs_struct *regs = (struct user_regs_struct *)memnote->data; -#endif -#ifdef ARM64 - struct user_pt_regs *regs = (struct user_pt_regs *)memnote->data; -#endif ulong pending_signal_sig0, blocked_sig0, real_parent, group_leader, signal, cutime, cstime; diff --git a/extensions/libgcore/gcore_defs.h b/extensions/libgcore/gcore_defs.h index a34ff98..ba7c1bd 100644 --- a/extensions/libgcore/gcore_defs.h +++ b/extensions/libgcore/gcore_defs.h @@ -486,10 +486,54 @@ struct user_regs_struct{ #define ARM_VFPREGS_SIZE ( 32 * 8 /*fpregs*/ + 4 /*fpscr*/ ) #endif +#ifdef ARM64 +struct user_fpsimd_state { + __uint128_t vregs[32]; + uint32_t fpsr; + uint32_t fpcr; +}; + +struct user_regs_struct{ + unsigned long x0; + unsigned long x1; + unsigned long x2; + unsigned long x3; + unsigned long x4; + unsigned long x5; + unsigned long x6; + unsigned long x7; + unsigned long x8; + unsigned long x9; + unsigned long x10; + unsigned long x11; + unsigned long x12; + unsigned long x13; + unsigned long x14; + unsigned long x15; + unsigned long x16; + unsigned long x17; + unsigned long x18; + unsigned long x19; + unsigned long x20; + unsigned long x21; + unsigned long x22; + unsigned long x23; + unsigned long x24; + unsigned long x25; + unsigned long x26; + unsigned long x27; + unsigned long x28; + unsigned long x29; + unsigned long x30; + unsigned long x31; + unsigned long pc; + unsigned long cpsr; +}; + +#endif + typedef ulong elf_greg_t; -#if defined(X86) || defined(X86_64) || defined(ARM) #define ELF_NGREG (sizeof(struct user_regs_struct) / sizeof(elf_greg_t)) -#endif typedef elf_greg_t elf_gregset_t[ELF_NGREG]; #if defined(X86) || defined(ARM) @@ -534,14 +578,12 @@ enum pid_type PIDTYPE_MAX }; -#if defined(X86) || defined(X86_64) || defined(ARM) struct elf_siginfo { int si_signo; /* signal number */ int si_code; /* extra code */ int si_errno; /* errno */ }; -#endif /* Parameters used to convert the timespec values: */ #define NSEC_PER_USEC 1000L @@ -633,7 +675,6 @@ cputime_to_compat_timeval(const cputime_t cputime, } #endif -#if defined(X86) || defined(X86_64) || defined(ARM) struct elf_prstatus { struct elf_siginfo pr_info; /* Info associated with signal */ @@ -651,17 +692,14 @@ struct elf_prstatus elf_gregset_t pr_reg; /* GP registers */ int pr_fpvalid; /* True if math co-processor being used. */ }; -#endif -#if defined(X86) || defined(X86_64) || defined(ARM) typedef unsigned short __kernel_old_uid_t; typedef unsigned short __kernel_old_gid_t; -#endif typedef __kernel_old_uid_t old_uid_t; typedef __kernel_old_gid_t old_gid_t; -#ifdef X86_64 +#if defined(X86_64) || defined(ARM64) typedef unsigned int __kernel_uid_t; typedef unsigned int __kernel_gid_t; #endif @@ -724,7 +762,6 @@ static inline ulong ffz(ulong word) #define ELF_PRARGSZ (80) /* Number of chars for args */ -#if defined(X86) || defined(X86_64) || defined(ARM) struct elf_prpsinfo { char pr_state; /* numeric process state */ @@ -739,7 +776,6 @@ struct elf_prpsinfo char pr_fname[16]; /* filename of executable */ char pr_psargs[ELF_PRARGSZ]; /* initial part of arg list */ }; -#endif #ifdef GCORE_ARCH_COMPAT -- 1.7.9.5