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