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 10d749fb85SThomas Huth * version 2.1 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" 2133c11879SPaolo Bonzini #include "cpu.h" 225b50e790SAndreas Färber #include "exec/gdbstub.h" 23c88de14cSAndreas Färber 24*a010bdbeSAlex Bennée int m68k_cpu_gdb_read_register(CPUState *cs, GByteArray *mem_buf, int n) 25c88de14cSAndreas Färber { 265b50e790SAndreas Färber M68kCPU *cpu = M68K_CPU(cs); 275b50e790SAndreas Färber CPUM68KState *env = &cpu->env; 285b50e790SAndreas Färber 29c88de14cSAndreas Färber if (n < 8) { 30c88de14cSAndreas Färber /* D0-D7 */ 31986a2998SAndreas Färber return gdb_get_reg32(mem_buf, env->dregs[n]); 32c88de14cSAndreas Färber } else if (n < 16) { 33c88de14cSAndreas Färber /* A0-A7 */ 34986a2998SAndreas Färber return gdb_get_reg32(mem_buf, env->aregs[n - 8]); 35c88de14cSAndreas Färber } else { 36c88de14cSAndreas Färber switch (n) { 37c88de14cSAndreas Färber case 16: 38bf1fa691SLucien Murray-Pitts /* SR is made of SR+CCR, CCR is many 1bit flags so uses helper */ 39bf1fa691SLucien Murray-Pitts return gdb_get_reg32(mem_buf, env->sr | cpu_m68k_get_ccr(env)); 40c88de14cSAndreas Färber case 17: 41986a2998SAndreas Färber return gdb_get_reg32(mem_buf, env->pc); 42c88de14cSAndreas Färber } 43c88de14cSAndreas Färber } 44808d77bcSLucien Murray-Pitts /* 45808d77bcSLucien Murray-Pitts * FP registers not included here because they vary between 46808d77bcSLucien Murray-Pitts * ColdFire and m68k. Use XML bits for these. 47808d77bcSLucien Murray-Pitts */ 48c88de14cSAndreas Färber return 0; 49c88de14cSAndreas Färber } 50c88de14cSAndreas Färber 515b50e790SAndreas Färber int m68k_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n) 52c88de14cSAndreas Färber { 535b50e790SAndreas Färber M68kCPU *cpu = M68K_CPU(cs); 545b50e790SAndreas Färber CPUM68KState *env = &cpu->env; 55c88de14cSAndreas Färber uint32_t tmp; 56c88de14cSAndreas Färber 57c88de14cSAndreas Färber tmp = ldl_p(mem_buf); 58c88de14cSAndreas Färber 59c88de14cSAndreas Färber if (n < 8) { 60c88de14cSAndreas Färber /* D0-D7 */ 61c88de14cSAndreas Färber env->dregs[n] = tmp; 62c88de14cSAndreas Färber } else if (n < 16) { 63c88de14cSAndreas Färber /* A0-A7 */ 64c88de14cSAndreas Färber env->aregs[n - 8] = tmp; 65c88de14cSAndreas Färber } else { 66c88de14cSAndreas Färber switch (n) { 67c88de14cSAndreas Färber case 16: 686e22b28eSLaurent Vivier cpu_m68k_set_sr(env, tmp); 69c88de14cSAndreas Färber break; 70c88de14cSAndreas Färber case 17: 71c88de14cSAndreas Färber env->pc = tmp; 72c88de14cSAndreas Färber break; 73c88de14cSAndreas Färber default: 74c88de14cSAndreas Färber return 0; 75c88de14cSAndreas Färber } 76c88de14cSAndreas Färber } 77c88de14cSAndreas Färber return 4; 78c88de14cSAndreas Färber } 79