root / target-openrisc / gdbstub.c @ 5b50e790
History | View | Annotate | Download (2.1 kB)
1 | 30028739 | Andreas Färber | /*
|
---|---|---|---|
2 | 30028739 | Andreas Färber | * OpenRISC gdb server stub
|
3 | 30028739 | Andreas Färber | *
|
4 | 30028739 | Andreas Färber | * Copyright (c) 2003-2005 Fabrice Bellard
|
5 | 30028739 | Andreas Färber | * Copyright (c) 2013 SUSE LINUX Products GmbH
|
6 | 30028739 | Andreas Färber | *
|
7 | 30028739 | Andreas Färber | * This library is free software; you can redistribute it and/or
|
8 | 30028739 | Andreas Färber | * modify it under the terms of the GNU Lesser General Public
|
9 | 30028739 | Andreas Färber | * License as published by the Free Software Foundation; either
|
10 | 30028739 | Andreas Färber | * version 2 of the License, or (at your option) any later version.
|
11 | 30028739 | Andreas Färber | *
|
12 | 30028739 | Andreas Färber | * This library is distributed in the hope that it will be useful,
|
13 | 30028739 | Andreas Färber | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14 | 30028739 | Andreas Färber | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
15 | 30028739 | Andreas Färber | * Lesser General Public License for more details.
|
16 | 30028739 | Andreas Färber | *
|
17 | 30028739 | Andreas Färber | * You should have received a copy of the GNU Lesser General Public
|
18 | 30028739 | Andreas Färber | * License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
19 | 30028739 | Andreas Färber | */
|
20 | 5b50e790 | Andreas Färber | #include "config.h" |
21 | 5b50e790 | Andreas Färber | #include "qemu-common.h" |
22 | 5b50e790 | Andreas Färber | #include "exec/gdbstub.h" |
23 | 30028739 | Andreas Färber | |
24 | 5b50e790 | Andreas Färber | int openrisc_cpu_gdb_read_register(CPUState *cs, uint8_t *mem_buf, int n) |
25 | 30028739 | Andreas Färber | { |
26 | 5b50e790 | Andreas Färber | OpenRISCCPU *cpu = OPENRISC_CPU(cs); |
27 | 5b50e790 | Andreas Färber | CPUOpenRISCState *env = &cpu->env; |
28 | 5b50e790 | Andreas Färber | |
29 | 30028739 | Andreas Färber | if (n < 32) { |
30 | 986a2998 | Andreas Färber | return gdb_get_reg32(mem_buf, env->gpr[n]);
|
31 | 30028739 | Andreas Färber | } else {
|
32 | 30028739 | Andreas Färber | switch (n) {
|
33 | 30028739 | Andreas Färber | case 32: /* PPC */ |
34 | 986a2998 | Andreas Färber | return gdb_get_reg32(mem_buf, env->ppc);
|
35 | 30028739 | Andreas Färber | |
36 | 30028739 | Andreas Färber | case 33: /* NPC */ |
37 | 986a2998 | Andreas Färber | return gdb_get_reg32(mem_buf, env->npc);
|
38 | 30028739 | Andreas Färber | |
39 | 30028739 | Andreas Färber | case 34: /* SR */ |
40 | 986a2998 | Andreas Färber | return gdb_get_reg32(mem_buf, env->sr);
|
41 | 30028739 | Andreas Färber | |
42 | 30028739 | Andreas Färber | default:
|
43 | 30028739 | Andreas Färber | break;
|
44 | 30028739 | Andreas Färber | } |
45 | 30028739 | Andreas Färber | } |
46 | 30028739 | Andreas Färber | return 0; |
47 | 30028739 | Andreas Färber | } |
48 | 30028739 | Andreas Färber | |
49 | 5b50e790 | Andreas Färber | int openrisc_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n) |
50 | 30028739 | Andreas Färber | { |
51 | 5b50e790 | Andreas Färber | OpenRISCCPU *cpu = OPENRISC_CPU(cs); |
52 | 5b50e790 | Andreas Färber | CPUClass *cc = CPU_GET_CLASS(cs); |
53 | 5b50e790 | Andreas Färber | CPUOpenRISCState *env = &cpu->env; |
54 | 30028739 | Andreas Färber | uint32_t tmp; |
55 | 30028739 | Andreas Färber | |
56 | 30028739 | Andreas Färber | if (n > cc->gdb_num_core_regs) {
|
57 | 30028739 | Andreas Färber | return 0; |
58 | 30028739 | Andreas Färber | } |
59 | 30028739 | Andreas Färber | |
60 | 30028739 | Andreas Färber | tmp = ldl_p(mem_buf); |
61 | 30028739 | Andreas Färber | |
62 | 30028739 | Andreas Färber | if (n < 32) { |
63 | 30028739 | Andreas Färber | env->gpr[n] = tmp; |
64 | 30028739 | Andreas Färber | } else {
|
65 | 30028739 | Andreas Färber | switch (n) {
|
66 | 30028739 | Andreas Färber | case 32: /* PPC */ |
67 | 30028739 | Andreas Färber | env->ppc = tmp; |
68 | 30028739 | Andreas Färber | break;
|
69 | 30028739 | Andreas Färber | |
70 | 30028739 | Andreas Färber | case 33: /* NPC */ |
71 | 30028739 | Andreas Färber | env->npc = tmp; |
72 | 30028739 | Andreas Färber | break;
|
73 | 30028739 | Andreas Färber | |
74 | 30028739 | Andreas Färber | case 34: /* SR */ |
75 | 30028739 | Andreas Färber | env->sr = tmp; |
76 | 30028739 | Andreas Färber | break;
|
77 | 30028739 | Andreas Färber | |
78 | 30028739 | Andreas Färber | default:
|
79 | 30028739 | Andreas Färber | break;
|
80 | 30028739 | Andreas Färber | } |
81 | 30028739 | Andreas Färber | } |
82 | 30028739 | Andreas Färber | return 4; |
83 | 30028739 | Andreas Färber | } |