|
16 | 16 | #include "riscv.h"
|
17 | 17 | #include "riscv_private.h"
|
18 | 18 |
|
19 |
| -static int rv_read_reg(void *args, int regno, size_t *data) |
| 19 | +static size_t rv_get_reg_bytes(UNUSED int regno) |
| 20 | +{ |
| 21 | + return 4; |
| 22 | +} |
| 23 | + |
| 24 | +static int rv_read_reg(void *args, int regno, void *data) |
20 | 25 | {
|
21 | 26 | riscv_t *rv = (riscv_t *) args;
|
22 | 27 |
|
23 | 28 | if (unlikely(regno > 32))
|
24 | 29 | return EFAULT;
|
25 | 30 |
|
26 | 31 | if (regno == 32)
|
27 |
| - *data = rv_get_pc(rv); |
| 32 | + *(riscv_word_t *) data = rv_get_pc(rv); |
28 | 33 | else
|
29 |
| - *data = rv_get_reg(rv, regno); |
| 34 | + *(riscv_word_t *) data = rv_get_reg(rv, regno); |
30 | 35 |
|
31 | 36 | return 0;
|
32 | 37 | }
|
33 | 38 |
|
34 |
| -static int rv_write_reg(void *args, int regno, size_t data) |
| 39 | +static int rv_write_reg(void *args, int regno, void *data) |
35 | 40 | {
|
36 | 41 | if (unlikely(regno > 32))
|
37 | 42 | return EFAULT;
|
38 | 43 |
|
39 | 44 | riscv_t *rv = (riscv_t *) args;
|
40 | 45 | if (regno == 32)
|
41 |
| - rv_set_pc(rv, data); |
| 46 | + rv_set_pc(rv, *(riscv_word_t *) data); |
42 | 47 | else
|
43 |
| - rv_set_reg(rv, regno, data); |
| 48 | + rv_set_reg(rv, regno, *(riscv_word_t *) data); |
44 | 49 |
|
45 | 50 | return 0;
|
46 | 51 | }
|
@@ -132,6 +137,7 @@ static void rv_on_interrupt(void *args)
|
132 | 137 | }
|
133 | 138 |
|
134 | 139 | const struct target_ops gdbstub_ops = {
|
| 140 | + .get_reg_bytes = rv_get_reg_bytes, |
135 | 141 | .read_reg = rv_read_reg,
|
136 | 142 | .write_reg = rv_write_reg,
|
137 | 143 | .read_mem = rv_read_mem,
|
|
0 commit comments