diff options
author | Richard Henderson <richard.henderson@linaro.org> | 2025-08-28 12:31:49 +1000 |
---|---|---|
committer | Richard Henderson <richard.henderson@linaro.org> | 2025-08-30 07:04:04 +1000 |
commit | dabda4f36a992dffde252919124a25fe7054fe42 (patch) | |
tree | c781163727bd59b3413bb8a7614f1f52788361f5 /linux-user | |
parent | 71c2c79815fafe6d509ca1a76bc67d6041aaa37b (diff) | |
download | qemu-dabda4f36a992dffde252919124a25fe7054fe42.zip qemu-dabda4f36a992dffde252919124a25fe7054fe42.tar.gz qemu-dabda4f36a992dffde252919124a25fe7054fe42.tar.bz2 |
linux-user/s390x: Expand target_elf_gregset_t
Make use of the fact that target_elf_gregset_t is a proper structure.
This lets us drop the ugly cast to uint32_t* in the middle.
Drop ELF_NREG, target_elf_greg_t, and tswapreg.
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'linux-user')
-rw-r--r-- | linux-user/s390x/elfload.c | 28 | ||||
-rw-r--r-- | linux-user/s390x/target_elf.h | 12 |
2 files changed, 14 insertions, 26 deletions
diff --git a/linux-user/s390x/elfload.c b/linux-user/s390x/elfload.c index 4113273..2710927 100644 --- a/linux-user/s390x/elfload.c +++ b/linux-user/s390x/elfload.c @@ -68,29 +68,15 @@ const char *elf_hwcap_str(uint32_t bit) return bit < ARRAY_SIZE(hwcap_str) ? hwcap_str[bit] : NULL; } -#define tswapreg(ptr) tswapal(ptr) - -enum { - TARGET_REG_PSWM = 0, - TARGET_REG_PSWA = 1, - TARGET_REG_GPRS = 2, - TARGET_REG_ARS = 18, - TARGET_REG_ORIG_R2 = 26, -}; - void elf_core_copy_regs(target_elf_gregset_t *r, const CPUS390XState *env) { - int i; - uint32_t *aregs; - - r->regs[TARGET_REG_PSWM] = tswapreg(env->psw.mask); - r->regs[TARGET_REG_PSWA] = tswapreg(env->psw.addr); - for (i = 0; i < 16; i++) { - r->regs[TARGET_REG_GPRS + i] = tswapreg(env->regs[i]); + r->pt.psw.mask = tswapal(env->psw.mask); + r->pt.psw.addr = tswapal(env->psw.addr); + for (int i = 0; i < 16; i++) { + r->pt.gprs[i] = tswapal(env->regs[i]); } - aregs = (uint32_t *)&(r->regs[TARGET_REG_ARS]); - for (i = 0; i < 16; i++) { - aregs[i] = tswap32(env->aregs[i]); + for (int i = 0; i < 16; i++) { + r->pt.acrs[i] = tswap32(env->aregs[i]); } - r->regs[TARGET_REG_ORIG_R2] = 0; + r->pt.orig_gpr2 = 0; } diff --git a/linux-user/s390x/target_elf.h b/linux-user/s390x/target_elf.h index b7d863e..670c7b3 100644 --- a/linux-user/s390x/target_elf.h +++ b/linux-user/s390x/target_elf.h @@ -8,15 +8,17 @@ #ifndef S390X_TARGET_ELF_H #define S390X_TARGET_ELF_H +#include "target_ptrace.h" + #define HAVE_ELF_HWCAP 1 #define HAVE_ELF_CORE_DUMP 1 -typedef abi_ulong target_elf_greg_t; - -/* See linux kernel: arch/s390/include/uapi/asm/ptrace.h (s390_regs). */ -#define ELF_NREG 27 +/* + * See linux kernel: arch/s390/include/asm/elf.h, where + * elf_gregset_t is typedef'd to struct s390_regs. + */ typedef struct target_elf_gregset_t { - target_elf_greg_t regs[ELF_NREG]; + struct target_s390_regs pt; } target_elf_gregset_t; #endif |