master
c 44 lines 1.06 KB
Raw
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 }