From ff22166d3f68786e5f129d2fb34a38cfdc0631b3 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Thu, 28 Aug 2025 11:24:05 +1000 Subject: [PATCH] linux-user/aarch64: Expand target_elf_gregset_t Make use of the fact that target_elf_gregset_t is a proper structure by using target_user_pt_regs. Drop ELF_NREG, target_elf_greg_t, and tswapreg. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- linux-user/aarch64/elfload.c | 11 +++++------ linux-user/aarch64/target_elf.h | 11 +++++++---- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/linux-user/aarch64/elfload.c b/linux-user/aarch64/elfload.c index 00550f9fdfa..07a0c3f8441 100644 --- a/linux-user/aarch64/elfload.c +++ b/linux-user/aarch64/elfload.c @@ -349,13 +349,12 @@ const char *get_elf_platform(CPUState *cs) return TARGET_BIG_ENDIAN ? "aarch64_be" : "aarch64"; } -#define tswapreg(ptr) tswapal(ptr) - void elf_core_copy_regs(target_elf_gregset_t *r, const CPUARMState *env) { - for (int i = 0; i < 32; i++) { - r->regs[i] = tswapreg(env->xregs[i]); + for (int i = 0; i < 31; i++) { + r->pt.regs[i] = tswap64(env->xregs[i]); } - r->regs[32] = tswapreg(env->pc); - r->regs[33] = tswapreg(pstate_read((CPUARMState *)env)); + r->pt.sp = tswap64(env->xregs[31]); + r->pt.pc = tswap64(env->pc); + r->pt.pstate = tswap64(pstate_read((CPUARMState *)env)); } diff --git a/linux-user/aarch64/target_elf.h b/linux-user/aarch64/target_elf.h index b0728a10082..9eb8bb547e4 100644 --- a/linux-user/aarch64/target_elf.h +++ b/linux-user/aarch64/target_elf.h @@ -8,16 +8,19 @@ #ifndef AARCH64_TARGET_ELF_H #define AARCH64_TARGET_ELF_H +#include "target_ptrace.h" + #define HAVE_ELF_HWCAP 1 #define HAVE_ELF_HWCAP2 1 #define HAVE_ELF_PLATFORM 1 #define HAVE_ELF_CORE_DUMP 1 -typedef abi_ulong target_elf_greg_t; - -#define ELF_NREG 34 +/* + * See linux kernel: arch/arm64/include/asm/elf.h, where + * elf_gregset_t is mapped to struct user_pt_regs via sizeof. + */ typedef struct target_elf_gregset_t { - target_elf_greg_t regs[ELF_NREG]; + struct target_user_pt_regs pt; } target_elf_gregset_t; #endif -- 2.47.3