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 */ 20d8416665SPeter Maydell #include "qemu/osdep.h" 215b50e790SAndreas Färber #include "qemu-common.h" 2233c11879SPaolo Bonzini #include "cpu.h" 235b50e790SAndreas Färber #include "exec/gdbstub.h" 24c88de14cSAndreas Färber 255b50e790SAndreas Färber int m68k_cpu_gdb_read_register(CPUState *cs, uint8_t *mem_buf, int n) 26c88de14cSAndreas Färber { 275b50e790SAndreas Färber M68kCPU *cpu = M68K_CPU(cs); 285b50e790SAndreas Färber CPUM68KState *env = &cpu->env; 295b50e790SAndreas Färber 30c88de14cSAndreas Färber if (n < 8) { 31c88de14cSAndreas Färber /* D0-D7 */ 32986a2998SAndreas Färber return gdb_get_reg32(mem_buf, env->dregs[n]); 33c88de14cSAndreas Färber } else if (n < 16) { 34c88de14cSAndreas Färber /* A0-A7 */ 35986a2998SAndreas Färber return gdb_get_reg32(mem_buf, env->aregs[n - 8]); 36c88de14cSAndreas Färber } else { 37c88de14cSAndreas Färber switch (n) { 38c88de14cSAndreas Färber case 16: 39986a2998SAndreas Färber return gdb_get_reg32(mem_buf, env->sr); 40c88de14cSAndreas Färber case 17: 41986a2998SAndreas Färber return gdb_get_reg32(mem_buf, env->pc); 42c88de14cSAndreas Färber } 43c88de14cSAndreas Färber } 44c88de14cSAndreas Färber /* FP registers not included here because they vary between 45c88de14cSAndreas Färber ColdFire and m68k. Use XML bits for these. */ 46c88de14cSAndreas Färber return 0; 47c88de14cSAndreas Färber } 48c88de14cSAndreas Färber 495b50e790SAndreas Färber int m68k_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n) 50c88de14cSAndreas Färber { 515b50e790SAndreas Färber M68kCPU *cpu = M68K_CPU(cs); 525b50e790SAndreas Färber CPUM68KState *env = &cpu->env; 53c88de14cSAndreas Färber uint32_t tmp; 54c88de14cSAndreas Färber 55c88de14cSAndreas Färber tmp = ldl_p(mem_buf); 56c88de14cSAndreas Färber 57c88de14cSAndreas Färber if (n < 8) { 58c88de14cSAndreas Färber /* D0-D7 */ 59c88de14cSAndreas Färber env->dregs[n] = tmp; 60c88de14cSAndreas Färber } else if (n < 16) { 61c88de14cSAndreas Färber /* A0-A7 */ 62c88de14cSAndreas Färber env->aregs[n - 8] = tmp; 63c88de14cSAndreas Färber } else { 64c88de14cSAndreas Färber switch (n) { 65c88de14cSAndreas Färber case 16: 66*6e22b28eSLaurent Vivier cpu_m68k_set_sr(env, tmp); 67c88de14cSAndreas Färber break; 68c88de14cSAndreas Färber case 17: 69c88de14cSAndreas Färber env->pc = tmp; 70c88de14cSAndreas Färber break; 71c88de14cSAndreas Färber default: 72c88de14cSAndreas Färber return 0; 73c88de14cSAndreas Färber } 74c88de14cSAndreas Färber } 75c88de14cSAndreas Färber return 4; 76c88de14cSAndreas Färber } 77