Statistics
| Branch: | Revision:

root / target-m68k / gdbstub.c @ 5b50e790

History | View | Annotate | Download (2 kB)

1
/*
2
 * m68k gdb server stub
3
 *
4
 * Copyright (c) 2003-2005 Fabrice Bellard
5
 * Copyright (c) 2013 SUSE LINUX Products GmbH
6
 *
7
 * This library is free software; you can redistribute it and/or
8
 * modify it under the terms of the GNU Lesser General Public
9
 * License as published by the Free Software Foundation; either
10
 * version 2 of the License, or (at your option) any later version.
11
 *
12
 * This library is distributed in the hope that it will be useful,
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15
 * Lesser General Public License for more details.
16
 *
17
 * You should have received a copy of the GNU Lesser General Public
18
 * License along with this library; if not, see <http://www.gnu.org/licenses/>.
19
 */
20
#include "config.h"
21
#include "qemu-common.h"
22
#include "exec/gdbstub.h"
23

    
24
int m68k_cpu_gdb_read_register(CPUState *cs, uint8_t *mem_buf, int n)
25
{
26
    M68kCPU *cpu = M68K_CPU(cs);
27
    CPUM68KState *env = &cpu->env;
28

    
29
    if (n < 8) {
30
        /* D0-D7 */
31
        return gdb_get_reg32(mem_buf, env->dregs[n]);
32
    } else if (n < 16) {
33
        /* A0-A7 */
34
        return gdb_get_reg32(mem_buf, env->aregs[n - 8]);
35
    } else {
36
        switch (n) {
37
        case 16:
38
            return gdb_get_reg32(mem_buf, env->sr);
39
        case 17:
40
            return gdb_get_reg32(mem_buf, env->pc);
41
        }
42
    }
43
    /* FP registers not included here because they vary between
44
       ColdFire and m68k.  Use XML bits for these.  */
45
    return 0;
46
}
47

    
48
int m68k_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n)
49
{
50
    M68kCPU *cpu = M68K_CPU(cs);
51
    CPUM68KState *env = &cpu->env;
52
    uint32_t tmp;
53

    
54
    tmp = ldl_p(mem_buf);
55

    
56
    if (n < 8) {
57
        /* D0-D7 */
58
        env->dregs[n] = tmp;
59
    } else if (n < 16) {
60
        /* A0-A7 */
61
        env->aregs[n - 8] = tmp;
62
    } else {
63
        switch (n) {
64
        case 16:
65
            env->sr = tmp;
66
            break;
67
        case 17:
68
            env->pc = tmp;
69
            break;
70
        default:
71
            return 0;
72
        }
73
    }
74
    return 4;
75
}