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" 224ea5fe99SAlex Bennée #include "gdbstub/helpers.h" 23c88de14cSAndreas Färber 24a010bdbeSAlex Bennée int m68k_cpu_gdb_read_register(CPUState *cs, GByteArray *mem_buf, int n) 25c88de14cSAndreas Färber { 26e22a4560SPhilippe Mathieu-Daudé CPUM68KState *env = cpu_env(cs); 275b50e790SAndreas Färber 28c88de14cSAndreas Färber if (n < 8) { 29c88de14cSAndreas Färber /* D0-D7 */ 30986a2998SAndreas Färber return gdb_get_reg32(mem_buf, env->dregs[n]); 31c88de14cSAndreas Färber } else if (n < 16) { 32c88de14cSAndreas Färber /* A0-A7 */ 33986a2998SAndreas Färber return gdb_get_reg32(mem_buf, env->aregs[n - 8]); 34c88de14cSAndreas Färber } else { 35c88de14cSAndreas Färber switch (n) { 36c88de14cSAndreas Färber case 16: 37bf1fa691SLucien Murray-Pitts /* SR is made of SR+CCR, CCR is many 1bit flags so uses helper */ 38bf1fa691SLucien Murray-Pitts return gdb_get_reg32(mem_buf, env->sr | cpu_m68k_get_ccr(env)); 39c88de14cSAndreas Färber case 17: 40986a2998SAndreas Färber return gdb_get_reg32(mem_buf, env->pc); 41c88de14cSAndreas Färber } 42c88de14cSAndreas Färber } 43808d77bcSLucien Murray-Pitts /* 44808d77bcSLucien Murray-Pitts * FP registers not included here because they vary between 45808d77bcSLucien Murray-Pitts * ColdFire and m68k. Use XML bits for these. 46808d77bcSLucien Murray-Pitts */ 47c88de14cSAndreas Färber return 0; 48c88de14cSAndreas Färber } 49c88de14cSAndreas Färber 505b50e790SAndreas Färber int m68k_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n) 51c88de14cSAndreas Färber { 52e22a4560SPhilippe Mathieu-Daudé CPUM68KState *env = cpu_env(cs); 53c88de14cSAndreas Färber uint32_t tmp; 54c88de14cSAndreas Färber 55*3a76d302SPhilippe Mathieu-Daudé tmp = ldl_be_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: 666e22b28eSLaurent 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