1c3ce8eb3SAndreas Färber /* 2c3ce8eb3SAndreas Färber * Alpha gdb server stub 3c3ce8eb3SAndreas Färber * 4c3ce8eb3SAndreas Färber * Copyright (c) 2003-2005 Fabrice Bellard 5c3ce8eb3SAndreas Färber * Copyright (c) 2013 SUSE LINUX Products GmbH 6c3ce8eb3SAndreas Färber * 7c3ce8eb3SAndreas Färber * This library is free software; you can redistribute it and/or 8c3ce8eb3SAndreas Färber * modify it under the terms of the GNU Lesser General Public 9c3ce8eb3SAndreas Färber * License as published by the Free Software Foundation; either 10d6ea4236SChetan Pant * version 2.1 of the License, or (at your option) any later version. 11c3ce8eb3SAndreas Färber * 12c3ce8eb3SAndreas Färber * This library is distributed in the hope that it will be useful, 13c3ce8eb3SAndreas Färber * but WITHOUT ANY WARRANTY; without even the implied warranty of 14c3ce8eb3SAndreas Färber * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15c3ce8eb3SAndreas Färber * Lesser General Public License for more details. 16c3ce8eb3SAndreas Färber * 17c3ce8eb3SAndreas Färber * You should have received a copy of the GNU Lesser General Public 18c3ce8eb3SAndreas Färber * License along with this library; if not, see <http://www.gnu.org/licenses/>. 19c3ce8eb3SAndreas Färber */ 20e2e5e114SPeter Maydell #include "qemu/osdep.h" 2133c11879SPaolo Bonzini #include "cpu.h" 224ea5fe99SAlex Bennée #include "gdbstub/helpers.h" 23c3ce8eb3SAndreas Färber 24a010bdbeSAlex Bennée int alpha_cpu_gdb_read_register(CPUState *cs, GByteArray *mem_buf, int n) 25c3ce8eb3SAndreas Färber { 26*50cb36ceSPhilippe Mathieu-Daudé CPUAlphaState *env = cpu_env(cs); 27c3ce8eb3SAndreas Färber uint64_t val; 28c3ce8eb3SAndreas Färber CPU_DoubleU d; 29c3ce8eb3SAndreas Färber 30c3ce8eb3SAndreas Färber switch (n) { 31c3ce8eb3SAndreas Färber case 0 ... 30: 3259124384SRichard Henderson val = cpu_alpha_load_gr(env, n); 33c3ce8eb3SAndreas Färber break; 34c3ce8eb3SAndreas Färber case 32 ... 62: 35c3ce8eb3SAndreas Färber d.d = env->fir[n - 32]; 36c3ce8eb3SAndreas Färber val = d.ll; 37c3ce8eb3SAndreas Färber break; 38c3ce8eb3SAndreas Färber case 63: 39c3ce8eb3SAndreas Färber val = cpu_alpha_load_fpcr(env); 40c3ce8eb3SAndreas Färber break; 41c3ce8eb3SAndreas Färber case 64: 42c3ce8eb3SAndreas Färber val = env->pc; 43c3ce8eb3SAndreas Färber break; 44c3ce8eb3SAndreas Färber case 66: 45c3ce8eb3SAndreas Färber val = env->unique; 46c3ce8eb3SAndreas Färber break; 47c3ce8eb3SAndreas Färber case 31: 48c3ce8eb3SAndreas Färber case 65: 49c3ce8eb3SAndreas Färber /* 31 really is the zero register; 65 is unassigned in the 50c3ce8eb3SAndreas Färber gdb protocol, but is still required to occupy 8 bytes. */ 51c3ce8eb3SAndreas Färber val = 0; 52c3ce8eb3SAndreas Färber break; 53c3ce8eb3SAndreas Färber default: 54c3ce8eb3SAndreas Färber return 0; 55c3ce8eb3SAndreas Färber } 56986a2998SAndreas Färber return gdb_get_regl(mem_buf, val); 57c3ce8eb3SAndreas Färber } 58c3ce8eb3SAndreas Färber 595b50e790SAndreas Färber int alpha_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n) 60c3ce8eb3SAndreas Färber { 61*50cb36ceSPhilippe Mathieu-Daudé CPUAlphaState *env = cpu_env(cs); 62c3ce8eb3SAndreas Färber target_ulong tmp = ldtul_p(mem_buf); 63c3ce8eb3SAndreas Färber CPU_DoubleU d; 64c3ce8eb3SAndreas Färber 65c3ce8eb3SAndreas Färber switch (n) { 66c3ce8eb3SAndreas Färber case 0 ... 30: 6759124384SRichard Henderson cpu_alpha_store_gr(env, n, tmp); 68c3ce8eb3SAndreas Färber break; 69c3ce8eb3SAndreas Färber case 32 ... 62: 70c3ce8eb3SAndreas Färber d.ll = tmp; 71c3ce8eb3SAndreas Färber env->fir[n - 32] = d.d; 72c3ce8eb3SAndreas Färber break; 73c3ce8eb3SAndreas Färber case 63: 74c3ce8eb3SAndreas Färber cpu_alpha_store_fpcr(env, tmp); 75c3ce8eb3SAndreas Färber break; 76c3ce8eb3SAndreas Färber case 64: 77c3ce8eb3SAndreas Färber env->pc = tmp; 78c3ce8eb3SAndreas Färber break; 79c3ce8eb3SAndreas Färber case 66: 80c3ce8eb3SAndreas Färber env->unique = tmp; 81c3ce8eb3SAndreas Färber break; 82c3ce8eb3SAndreas Färber case 31: 83c3ce8eb3SAndreas Färber case 65: 84c3ce8eb3SAndreas Färber /* 31 really is the zero register; 65 is unassigned in the 85c3ce8eb3SAndreas Färber gdb protocol, but is still required to occupy 8 bytes. */ 86c3ce8eb3SAndreas Färber break; 87c3ce8eb3SAndreas Färber default: 88c3ce8eb3SAndreas Färber return 0; 89c3ce8eb3SAndreas Färber } 90c3ce8eb3SAndreas Färber return 8; 91c3ce8eb3SAndreas Färber } 92