xref: /qemu/target/m68k/gdbstub.c (revision c88de14ca45257feb82e23f3ff07e861010bd5ba)
1c88de14cSAndreas Färber /*
2c88de14cSAndreas Färber  * m68k gdb server stub
3c88de14cSAndreas Färber  *
4c88de14cSAndreas Färber  * Copyright (c) 2003-2005 Fabrice Bellard
5c88de14cSAndreas Färber  * Copyright (c) 2013 SUSE LINUX Products GmbH
6c88de14cSAndreas Färber  *
7c88de14cSAndreas Färber  * This library is free software; you can redistribute it and/or
8c88de14cSAndreas Färber  * modify it under the terms of the GNU Lesser General Public
9c88de14cSAndreas Färber  * License as published by the Free Software Foundation; either
10c88de14cSAndreas Färber  * version 2 of the License, or (at your option) any later version.
11c88de14cSAndreas Färber  *
12c88de14cSAndreas Färber  * This library is distributed in the hope that it will be useful,
13c88de14cSAndreas Färber  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14c88de14cSAndreas Färber  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15c88de14cSAndreas Färber  * Lesser General Public License for more details.
16c88de14cSAndreas Färber  *
17c88de14cSAndreas Färber  * You should have received a copy of the GNU Lesser General Public
18c88de14cSAndreas Färber  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
19c88de14cSAndreas Färber  */
20c88de14cSAndreas Färber 
21c88de14cSAndreas Färber static int cpu_gdb_read_register(CPUM68KState *env, uint8_t *mem_buf, int n)
22c88de14cSAndreas Färber {
23c88de14cSAndreas Färber     if (n < 8) {
24c88de14cSAndreas Färber         /* D0-D7 */
25c88de14cSAndreas Färber         GET_REG32(env->dregs[n]);
26c88de14cSAndreas Färber     } else if (n < 16) {
27c88de14cSAndreas Färber         /* A0-A7 */
28c88de14cSAndreas Färber         GET_REG32(env->aregs[n - 8]);
29c88de14cSAndreas Färber     } else {
30c88de14cSAndreas Färber         switch (n) {
31c88de14cSAndreas Färber         case 16:
32c88de14cSAndreas Färber             GET_REG32(env->sr);
33c88de14cSAndreas Färber         case 17:
34c88de14cSAndreas Färber             GET_REG32(env->pc);
35c88de14cSAndreas Färber         }
36c88de14cSAndreas Färber     }
37c88de14cSAndreas Färber     /* FP registers not included here because they vary between
38c88de14cSAndreas Färber        ColdFire and m68k.  Use XML bits for these.  */
39c88de14cSAndreas Färber     return 0;
40c88de14cSAndreas Färber }
41c88de14cSAndreas Färber 
42c88de14cSAndreas Färber static int cpu_gdb_write_register(CPUM68KState *env, uint8_t *mem_buf, int n)
43c88de14cSAndreas Färber {
44c88de14cSAndreas Färber     uint32_t tmp;
45c88de14cSAndreas Färber 
46c88de14cSAndreas Färber     tmp = ldl_p(mem_buf);
47c88de14cSAndreas Färber 
48c88de14cSAndreas Färber     if (n < 8) {
49c88de14cSAndreas Färber         /* D0-D7 */
50c88de14cSAndreas Färber         env->dregs[n] = tmp;
51c88de14cSAndreas Färber     } else if (n < 16) {
52c88de14cSAndreas Färber         /* A0-A7 */
53c88de14cSAndreas Färber         env->aregs[n - 8] = tmp;
54c88de14cSAndreas Färber     } else {
55c88de14cSAndreas Färber         switch (n) {
56c88de14cSAndreas Färber         case 16:
57c88de14cSAndreas Färber             env->sr = tmp;
58c88de14cSAndreas Färber             break;
59c88de14cSAndreas Färber         case 17:
60c88de14cSAndreas Färber             env->pc = tmp;
61c88de14cSAndreas Färber             break;
62c88de14cSAndreas Färber         default:
63c88de14cSAndreas Färber             return 0;
64c88de14cSAndreas Färber         }
65c88de14cSAndreas Färber     }
66c88de14cSAndreas Färber     return 4;
67c88de14cSAndreas Färber }
68