| 1 | /* SPDX-License-Identifier: GPL-2.0-or-later */ |
| 2 | |
| 3 | #include "qemu/osdep.h" |
| 4 | #include "qemu.h" |
| 5 | #include "loader.h" |
| 6 | #include "target_elf.h" |
| 7 | |
| 8 | |
| 9 | abi_ulong get_elf_hwcap(CPUState *cs) |
| 10 | { |
| 11 | /* |
| 12 | * The Linux kernel computes ELF_HWCAP as ~amask(-1), which clears a bit |
| 13 | * for each supported ISA extension. env->amask stores exactly those bits |
| 14 | * set for the extensions supported by the emulated CPU model, matching |
| 15 | * the kernel's convention: bit set in AT_HWCAP ↔ extension present. |
| 16 | */ |
| 17 | return cpu_env(cs)->amask; |
| 18 | } |
| 19 | |
| 20 | void elf_core_copy_regs(target_elf_gregset_t *r, const CPUAlphaState *env) |
| 21 | { |
| 22 | int i; |
| 23 | |
| 24 | for (i = 0; i < 31; i++) { |
| 25 | r->regs[i] = tswap64(env->ir[i]); |
| 26 | } |
| 27 | r->pc = tswap64(env->pc); |
| 28 | r->unique = tswap64(env->unique); |
| 29 | } |
| 30 | |
| 31 | const char *get_elf_cpu_model(uint32_t eflags) |
| 32 | { |
| 33 | return "ev67"; |
| 34 | } |
| 35 | |
| 36 | void elf_core_copy_fpregs(target_elf_fpregset_t *r, const CPUAlphaState *env) |
| 37 | { |
| 38 | int i; |
| 39 | |
| 40 | for (i = 0; i < 31; i++) { |
| 41 | r->fpr[i] = tswap64(env->fir[i]); |
| 42 | } |
| 43 | r->fpcr = tswap64(cpu_alpha_load_fpcr((CPUAlphaState *)env)); |
| 44 | } |