]>
git.proxmox.com Git - mirror_qemu.git/blob - target/loongarch/gdbstub.c
2 * LOONGARCH gdb server stub
4 * Copyright (c) 2021 Loongson Technology Corporation Limited
6 * SPDX-License-Identifier: LGPL-2.1+
9 #include "qemu/osdep.h"
11 #include "internals.h"
12 #include "exec/gdbstub.h"
14 int loongarch_cpu_gdb_read_register(CPUState
*cs
, GByteArray
*mem_buf
, int n
)
16 LoongArchCPU
*cpu
= LOONGARCH_CPU(cs
);
17 CPULoongArchState
*env
= &cpu
->env
;
19 if (0 <= n
&& n
< 32) {
20 return gdb_get_regl(mem_buf
, env
->gpr
[n
]);
22 return gdb_get_regl(mem_buf
, env
->pc
);
24 return gdb_get_regl(mem_buf
, env
->badaddr
);
29 int loongarch_cpu_gdb_write_register(CPUState
*cs
, uint8_t *mem_buf
, int n
)
31 LoongArchCPU
*cpu
= LOONGARCH_CPU(cs
);
32 CPULoongArchState
*env
= &cpu
->env
;
33 target_ulong tmp
= ldtul_p(mem_buf
);
36 if (0 <= n
&& n
< 32) {
38 length
= sizeof(target_ulong
);
41 length
= sizeof(target_ulong
);
46 static int loongarch_gdb_get_fpu(CPULoongArchState
*env
,
47 GByteArray
*mem_buf
, int n
)
49 if (0 <= n
&& n
< 32) {
50 return gdb_get_reg64(mem_buf
, env
->fpr
[n
]);
51 } else if (32 <= n
&& n
< 40) {
52 return gdb_get_reg8(mem_buf
, env
->cf
[n
- 32]);
54 return gdb_get_reg32(mem_buf
, env
->fcsr0
);
59 static int loongarch_gdb_set_fpu(CPULoongArchState
*env
,
60 uint8_t *mem_buf
, int n
)
64 if (0 <= n
&& n
< 32) {
65 env
->fpr
[n
] = ldq_p(mem_buf
);
67 } else if (32 <= n
&& n
< 40) {
68 env
->cf
[n
- 32] = ldub_p(mem_buf
);
71 env
->fcsr0
= ldl_p(mem_buf
);
77 void loongarch_cpu_register_gdb_regs_for_features(CPUState
*cs
)
79 gdb_register_coprocessor(cs
, loongarch_gdb_get_fpu
, loongarch_gdb_set_fpu
,
80 41, "loongarch-fpu64.xml", 0);