Statistics
| Branch: | Revision:

root / target-xtensa / gdbstub.c @ 5d12aa63

History | View | Annotate | Download (3 kB)

1 25d8ac0e Andreas Färber
/*
2 25d8ac0e Andreas Färber
 * Xtensa gdb server stub
3 25d8ac0e Andreas Färber
 *
4 25d8ac0e Andreas Färber
 * Copyright (c) 2003-2005 Fabrice Bellard
5 25d8ac0e Andreas Färber
 * Copyright (c) 2013 SUSE LINUX Products GmbH
6 25d8ac0e Andreas Färber
 *
7 25d8ac0e Andreas Färber
 * This library is free software; you can redistribute it and/or
8 25d8ac0e Andreas Färber
 * modify it under the terms of the GNU Lesser General Public
9 25d8ac0e Andreas Färber
 * License as published by the Free Software Foundation; either
10 25d8ac0e Andreas Färber
 * version 2 of the License, or (at your option) any later version.
11 25d8ac0e Andreas Färber
 *
12 25d8ac0e Andreas Färber
 * This library is distributed in the hope that it will be useful,
13 25d8ac0e Andreas Färber
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 25d8ac0e Andreas Färber
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 25d8ac0e Andreas Färber
 * Lesser General Public License for more details.
16 25d8ac0e Andreas Färber
 *
17 25d8ac0e Andreas Färber
 * You should have received a copy of the GNU Lesser General Public
18 25d8ac0e Andreas Färber
 * License along with this library; if not, see <http://www.gnu.org/licenses/>.
19 25d8ac0e 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 25d8ac0e Andreas Färber
24 5b50e790 Andreas Färber
int xtensa_cpu_gdb_read_register(CPUState *cs, uint8_t *mem_buf, int n)
25 25d8ac0e Andreas Färber
{
26 5b50e790 Andreas Färber
    XtensaCPU *cpu = XTENSA_CPU(cs);
27 5b50e790 Andreas Färber
    CPUXtensaState *env = &cpu->env;
28 25d8ac0e Andreas Färber
    const XtensaGdbReg *reg = env->config->gdb_regmap.reg + n;
29 25d8ac0e Andreas Färber
30 25d8ac0e Andreas Färber
    if (n < 0 || n >= env->config->gdb_regmap.num_regs) {
31 25d8ac0e Andreas Färber
        return 0;
32 25d8ac0e Andreas Färber
    }
33 25d8ac0e Andreas Färber
34 25d8ac0e Andreas Färber
    switch (reg->type) {
35 25d8ac0e Andreas Färber
    case 9: /*pc*/
36 986a2998 Andreas Färber
        return gdb_get_reg32(mem_buf, env->pc);
37 25d8ac0e Andreas Färber
38 25d8ac0e Andreas Färber
    case 1: /*ar*/
39 25d8ac0e Andreas Färber
        xtensa_sync_phys_from_window(env);
40 986a2998 Andreas Färber
        return gdb_get_reg32(mem_buf, env->phys_regs[(reg->targno & 0xff)
41 986a2998 Andreas Färber
                                                     % env->config->nareg]);
42 25d8ac0e Andreas Färber
43 25d8ac0e Andreas Färber
    case 2: /*SR*/
44 986a2998 Andreas Färber
        return gdb_get_reg32(mem_buf, env->sregs[reg->targno & 0xff]);
45 25d8ac0e Andreas Färber
46 25d8ac0e Andreas Färber
    case 3: /*UR*/
47 986a2998 Andreas Färber
        return gdb_get_reg32(mem_buf, env->uregs[reg->targno & 0xff]);
48 25d8ac0e Andreas Färber
49 25d8ac0e Andreas Färber
    case 4: /*f*/
50 986a2998 Andreas Färber
        return gdb_get_reg32(mem_buf, float32_val(env->fregs[reg->targno
51 986a2998 Andreas Färber
                                                             & 0x0f]));
52 25d8ac0e Andreas Färber
53 25d8ac0e Andreas Färber
    case 8: /*a*/
54 986a2998 Andreas Färber
        return gdb_get_reg32(mem_buf, env->regs[reg->targno & 0x0f]);
55 25d8ac0e Andreas Färber
56 25d8ac0e Andreas Färber
    default:
57 25d8ac0e Andreas Färber
        qemu_log("%s from reg %d of unsupported type %d\n",
58 25d8ac0e Andreas Färber
                 __func__, n, reg->type);
59 25d8ac0e Andreas Färber
        return 0;
60 25d8ac0e Andreas Färber
    }
61 25d8ac0e Andreas Färber
}
62 25d8ac0e Andreas Färber
63 5b50e790 Andreas Färber
int xtensa_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n)
64 25d8ac0e Andreas Färber
{
65 5b50e790 Andreas Färber
    XtensaCPU *cpu = XTENSA_CPU(cs);
66 5b50e790 Andreas Färber
    CPUXtensaState *env = &cpu->env;
67 25d8ac0e Andreas Färber
    uint32_t tmp;
68 25d8ac0e Andreas Färber
    const XtensaGdbReg *reg = env->config->gdb_regmap.reg + n;
69 25d8ac0e Andreas Färber
70 25d8ac0e Andreas Färber
    if (n < 0 || n >= env->config->gdb_regmap.num_regs) {
71 25d8ac0e Andreas Färber
        return 0;
72 25d8ac0e Andreas Färber
    }
73 25d8ac0e Andreas Färber
74 25d8ac0e Andreas Färber
    tmp = ldl_p(mem_buf);
75 25d8ac0e Andreas Färber
76 25d8ac0e Andreas Färber
    switch (reg->type) {
77 25d8ac0e Andreas Färber
    case 9: /*pc*/
78 25d8ac0e Andreas Färber
        env->pc = tmp;
79 25d8ac0e Andreas Färber
        break;
80 25d8ac0e Andreas Färber
81 25d8ac0e Andreas Färber
    case 1: /*ar*/
82 25d8ac0e Andreas Färber
        env->phys_regs[(reg->targno & 0xff) % env->config->nareg] = tmp;
83 25d8ac0e Andreas Färber
        xtensa_sync_window_from_phys(env);
84 25d8ac0e Andreas Färber
        break;
85 25d8ac0e Andreas Färber
86 25d8ac0e Andreas Färber
    case 2: /*SR*/
87 25d8ac0e Andreas Färber
        env->sregs[reg->targno & 0xff] = tmp;
88 25d8ac0e Andreas Färber
        break;
89 25d8ac0e Andreas Färber
90 25d8ac0e Andreas Färber
    case 3: /*UR*/
91 25d8ac0e Andreas Färber
        env->uregs[reg->targno & 0xff] = tmp;
92 25d8ac0e Andreas Färber
        break;
93 25d8ac0e Andreas Färber
94 25d8ac0e Andreas Färber
    case 4: /*f*/
95 25d8ac0e Andreas Färber
        env->fregs[reg->targno & 0x0f] = make_float32(tmp);
96 25d8ac0e Andreas Färber
        break;
97 25d8ac0e Andreas Färber
98 25d8ac0e Andreas Färber
    case 8: /*a*/
99 25d8ac0e Andreas Färber
        env->regs[reg->targno & 0x0f] = tmp;
100 25d8ac0e Andreas Färber
        break;
101 25d8ac0e Andreas Färber
102 25d8ac0e Andreas Färber
    default:
103 25d8ac0e Andreas Färber
        qemu_log("%s to reg %d of unsupported type %d\n",
104 25d8ac0e Andreas Färber
                 __func__, n, reg->type);
105 25d8ac0e Andreas Färber
        return 0;
106 25d8ac0e Andreas Färber
    }
107 25d8ac0e Andreas Färber
108 25d8ac0e Andreas Färber
    return 4;
109 25d8ac0e Andreas Färber
}