Statistics
| Branch: | Revision:

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
}