Statistics
| Branch: | Revision:

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
}