|
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