]> Git Repo - qemu.git/blob - target-s390x/gdbstub.c
target-s390x: Move cpu_gdb_{read,write}_register()
[qemu.git] / target-s390x / gdbstub.c
1 /*
2  * s390x 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
21 static int cpu_gdb_read_register(CPUS390XState *env, uint8_t *mem_buf, int n)
22 {
23     uint64_t val;
24     int cc_op;
25
26     switch (n) {
27     case S390_PSWM_REGNUM:
28         cc_op = calc_cc(env, env->cc_op, env->cc_src, env->cc_dst, env->cc_vr);
29         val = deposit64(env->psw.mask, 44, 2, cc_op);
30         GET_REGL(val);
31     case S390_PSWA_REGNUM:
32         GET_REGL(env->psw.addr);
33     case S390_R0_REGNUM ... S390_R15_REGNUM:
34         GET_REGL(env->regs[n-S390_R0_REGNUM]);
35     case S390_A0_REGNUM ... S390_A15_REGNUM:
36         GET_REG32(env->aregs[n-S390_A0_REGNUM]);
37     case S390_FPC_REGNUM:
38         GET_REG32(env->fpc);
39     case S390_F0_REGNUM ... S390_F15_REGNUM:
40         GET_REG64(env->fregs[n-S390_F0_REGNUM].ll);
41     }
42
43     return 0;
44 }
45
46 static int cpu_gdb_write_register(CPUS390XState *env, uint8_t *mem_buf, int n)
47 {
48     target_ulong tmpl;
49     uint32_t tmp32;
50     int r = 8;
51     tmpl = ldtul_p(mem_buf);
52     tmp32 = ldl_p(mem_buf);
53
54     switch (n) {
55     case S390_PSWM_REGNUM:
56         env->psw.mask = tmpl;
57         env->cc_op = extract64(tmpl, 44, 2);
58         break;
59     case S390_PSWA_REGNUM:
60         env->psw.addr = tmpl;
61         break;
62     case S390_R0_REGNUM ... S390_R15_REGNUM:
63         env->regs[n-S390_R0_REGNUM] = tmpl;
64         break;
65     case S390_A0_REGNUM ... S390_A15_REGNUM:
66         env->aregs[n-S390_A0_REGNUM] = tmp32;
67         r = 4;
68         break;
69     case S390_FPC_REGNUM:
70         env->fpc = tmp32;
71         r = 4;
72         break;
73     case S390_F0_REGNUM ... S390_F15_REGNUM:
74         env->fregs[n-S390_F0_REGNUM].ll = tmpl;
75         break;
76     default:
77         return 0;
78     }
79     return r;
80 }
This page took 0.043411 seconds and 4 git commands to generate.