root / target-alpha / gdbstub.c @ 5b50e790
History | View | Annotate | Download (2.4 kB)
1 | c3ce8eb3 | Andreas Färber | /*
|
---|---|---|---|
2 | c3ce8eb3 | Andreas Färber | * Alpha gdb server stub
|
3 | c3ce8eb3 | Andreas Färber | *
|
4 | c3ce8eb3 | Andreas Färber | * Copyright (c) 2003-2005 Fabrice Bellard
|
5 | c3ce8eb3 | Andreas Färber | * Copyright (c) 2013 SUSE LINUX Products GmbH
|
6 | c3ce8eb3 | Andreas Färber | *
|
7 | c3ce8eb3 | Andreas Färber | * This library is free software; you can redistribute it and/or
|
8 | c3ce8eb3 | Andreas Färber | * modify it under the terms of the GNU Lesser General Public
|
9 | c3ce8eb3 | Andreas Färber | * License as published by the Free Software Foundation; either
|
10 | c3ce8eb3 | Andreas Färber | * version 2 of the License, or (at your option) any later version.
|
11 | c3ce8eb3 | Andreas Färber | *
|
12 | c3ce8eb3 | Andreas Färber | * This library is distributed in the hope that it will be useful,
|
13 | c3ce8eb3 | Andreas Färber | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
14 | c3ce8eb3 | Andreas Färber | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
15 | c3ce8eb3 | Andreas Färber | * Lesser General Public License for more details.
|
16 | c3ce8eb3 | Andreas Färber | *
|
17 | c3ce8eb3 | Andreas Färber | * You should have received a copy of the GNU Lesser General Public
|
18 | c3ce8eb3 | Andreas Färber | * License along with this library; if not, see <http://www.gnu.org/licenses/>.
|
19 | c3ce8eb3 | 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 | c3ce8eb3 | Andreas Färber | |
24 | 5b50e790 | Andreas Färber | int alpha_cpu_gdb_read_register(CPUState *cs, uint8_t *mem_buf, int n) |
25 | c3ce8eb3 | Andreas Färber | { |
26 | 5b50e790 | Andreas Färber | AlphaCPU *cpu = ALPHA_CPU(cs); |
27 | 5b50e790 | Andreas Färber | CPUAlphaState *env = &cpu->env; |
28 | c3ce8eb3 | Andreas Färber | uint64_t val; |
29 | c3ce8eb3 | Andreas Färber | CPU_DoubleU d; |
30 | c3ce8eb3 | Andreas Färber | |
31 | c3ce8eb3 | Andreas Färber | switch (n) {
|
32 | c3ce8eb3 | Andreas Färber | case 0 ... 30: |
33 | c3ce8eb3 | Andreas Färber | val = env->ir[n]; |
34 | c3ce8eb3 | Andreas Färber | break;
|
35 | c3ce8eb3 | Andreas Färber | case 32 ... 62: |
36 | c3ce8eb3 | Andreas Färber | d.d = env->fir[n - 32];
|
37 | c3ce8eb3 | Andreas Färber | val = d.ll; |
38 | c3ce8eb3 | Andreas Färber | break;
|
39 | c3ce8eb3 | Andreas Färber | case 63: |
40 | c3ce8eb3 | Andreas Färber | val = cpu_alpha_load_fpcr(env); |
41 | c3ce8eb3 | Andreas Färber | break;
|
42 | c3ce8eb3 | Andreas Färber | case 64: |
43 | c3ce8eb3 | Andreas Färber | val = env->pc; |
44 | c3ce8eb3 | Andreas Färber | break;
|
45 | c3ce8eb3 | Andreas Färber | case 66: |
46 | c3ce8eb3 | Andreas Färber | val = env->unique; |
47 | c3ce8eb3 | Andreas Färber | break;
|
48 | c3ce8eb3 | Andreas Färber | case 31: |
49 | c3ce8eb3 | Andreas Färber | case 65: |
50 | c3ce8eb3 | Andreas Färber | /* 31 really is the zero register; 65 is unassigned in the
|
51 | c3ce8eb3 | Andreas Färber | gdb protocol, but is still required to occupy 8 bytes. */
|
52 | c3ce8eb3 | Andreas Färber | val = 0;
|
53 | c3ce8eb3 | Andreas Färber | break;
|
54 | c3ce8eb3 | Andreas Färber | default:
|
55 | c3ce8eb3 | Andreas Färber | return 0; |
56 | c3ce8eb3 | Andreas Färber | } |
57 | 986a2998 | Andreas Färber | return gdb_get_regl(mem_buf, val);
|
58 | c3ce8eb3 | Andreas Färber | } |
59 | c3ce8eb3 | Andreas Färber | |
60 | 5b50e790 | Andreas Färber | int alpha_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n) |
61 | c3ce8eb3 | Andreas Färber | { |
62 | 5b50e790 | Andreas Färber | AlphaCPU *cpu = ALPHA_CPU(cs); |
63 | 5b50e790 | Andreas Färber | CPUAlphaState *env = &cpu->env; |
64 | c3ce8eb3 | Andreas Färber | target_ulong tmp = ldtul_p(mem_buf); |
65 | c3ce8eb3 | Andreas Färber | CPU_DoubleU d; |
66 | c3ce8eb3 | Andreas Färber | |
67 | c3ce8eb3 | Andreas Färber | switch (n) {
|
68 | c3ce8eb3 | Andreas Färber | case 0 ... 30: |
69 | c3ce8eb3 | Andreas Färber | env->ir[n] = tmp; |
70 | c3ce8eb3 | Andreas Färber | break;
|
71 | c3ce8eb3 | Andreas Färber | case 32 ... 62: |
72 | c3ce8eb3 | Andreas Färber | d.ll = tmp; |
73 | c3ce8eb3 | Andreas Färber | env->fir[n - 32] = d.d;
|
74 | c3ce8eb3 | Andreas Färber | break;
|
75 | c3ce8eb3 | Andreas Färber | case 63: |
76 | c3ce8eb3 | Andreas Färber | cpu_alpha_store_fpcr(env, tmp); |
77 | c3ce8eb3 | Andreas Färber | break;
|
78 | c3ce8eb3 | Andreas Färber | case 64: |
79 | c3ce8eb3 | Andreas Färber | env->pc = tmp; |
80 | c3ce8eb3 | Andreas Färber | break;
|
81 | c3ce8eb3 | Andreas Färber | case 66: |
82 | c3ce8eb3 | Andreas Färber | env->unique = tmp; |
83 | c3ce8eb3 | Andreas Färber | break;
|
84 | c3ce8eb3 | Andreas Färber | case 31: |
85 | c3ce8eb3 | Andreas Färber | case 65: |
86 | c3ce8eb3 | Andreas Färber | /* 31 really is the zero register; 65 is unassigned in the
|
87 | c3ce8eb3 | Andreas Färber | gdb protocol, but is still required to occupy 8 bytes. */
|
88 | c3ce8eb3 | Andreas Färber | break;
|
89 | c3ce8eb3 | Andreas Färber | default:
|
90 | c3ce8eb3 | Andreas Färber | return 0; |
91 | c3ce8eb3 | Andreas Färber | } |
92 | c3ce8eb3 | Andreas Färber | return 8; |
93 | c3ce8eb3 | Andreas Färber | } |