On 5/8/19 4:56 PM, Yoshinori Sato wrote: > Signed-off-by: Yoshinori Sato <ys...@users.sourceforge.jp> > --- > target/rx/gdbstub.c | 112 > ++++++++++++++++++++++++++++++++++++++++++++++++ > target/rx/monitor.c | 38 ++++++++++++++++ > target/rx/Makefile.objs | 12 ++++++ > 3 files changed, 162 insertions(+) > create mode 100644 target/rx/gdbstub.c > create mode 100644 target/rx/monitor.c > create mode 100644 target/rx/Makefile.objs > > diff --git a/target/rx/gdbstub.c b/target/rx/gdbstub.c > new file mode 100644 > index 0000000000..d76ca52e82 > --- /dev/null > +++ b/target/rx/gdbstub.c > @@ -0,0 +1,112 @@ > +/* > + * RX gdb server stub > + * > + * Copyright (c) 2019 Yoshinori Sato > + * > + * This program is free software; you can redistribute it and/or modify it > + * under the terms and conditions of the GNU General Public License, > + * version 2 or later, as published by the Free Software Foundation. > + * > + * This program is distributed in the hope it will be useful, but WITHOUT > + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or > + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for > + * more details. > + * > + * You should have received a copy of the GNU General Public License along > with > + * this program. If not, see <http://www.gnu.org/licenses/>. > + */ > +#include "qemu/osdep.h" > +#include "qemu-common.h" > +#include "cpu.h" > +#include "exec/gdbstub.h" > + > +int rx_cpu_gdb_read_register(CPUState *cs, uint8_t *mem_buf, int n) > +{ > + RXCPU *cpu = RXCPU(cs); > + CPURXState *env = &cpu->env; > + > + switch (n) { > + case 0 ... 15: > + return gdb_get_regl(mem_buf, env->regs[n]); > + case 16: > + return gdb_get_regl(mem_buf, (env->psw_u) ? env->regs[0] : env->usp); > + case 17: > + return gdb_get_regl(mem_buf, (!env->psw_u) ? env->regs[0] : > env->isp); > + case 18: > + return gdb_get_regl(mem_buf, rx_cpu_pack_psw(env)); > + case 19: > + return gdb_get_regl(mem_buf, env->pc); > + case 20: > + return gdb_get_regl(mem_buf, env->intb); > + case 21: > + return gdb_get_regl(mem_buf, env->bpsw); > + case 22: > + return gdb_get_regl(mem_buf, env->bpc); > + case 23: > + return gdb_get_regl(mem_buf, env->fintv); > + case 24: > + return gdb_get_regl(mem_buf, env->fpsw); > + case 25: > + return 0; > + } > + return 0; > +} > + > +int rx_cpu_gdb_write_register(CPUState *cs, uint8_t *mem_buf, int n) > +{ > + RXCPU *cpu = RXCPU(cs); > + CPURXState *env = &cpu->env; > + uint32_t psw; > + switch (n) { > + case 0 ... 15: > + env->regs[n] = ldl_p(mem_buf); > + if (n == 0) { > + if (env->psw_u) { > + env->usp = env->regs[0]; > + } else { > + env->isp = env->regs[0]; > + } > + } > + break; > + case 16: > + env->usp = ldl_p(mem_buf); > + if (env->psw_u) { > + env->regs[0] = ldl_p(mem_buf); > + } > + break; > + case 17: > + env->isp = ldl_p(mem_buf); > + if (!env->psw_u) { > + env->regs[0] = ldl_p(mem_buf); > + } > + break; > + case 18: > + psw = ldl_p(mem_buf); > + rx_cpu_unpack_psw(env, psw, 1); > + break; > + case 19: > + env->pc = ldl_p(mem_buf); > + break; > + case 20: > + env->intb = ldl_p(mem_buf); > + break; > + case 21: > + env->bpsw = ldl_p(mem_buf); > + break; > + case 22: > + env->bpc = ldl_p(mem_buf); > + break; > + case 23: > + env->fintv = ldl_p(mem_buf); > + break; > + case 24: > + env->fpsw = ldl_p(mem_buf); > + break; > + case 25: > + return 8; > + default: > + return 0; > + } > + > + return 4; > +} > diff --git a/target/rx/monitor.c b/target/rx/monitor.c > new file mode 100644 > index 0000000000..5d7a1e58b5 > --- /dev/null > +++ b/target/rx/monitor.c > @@ -0,0 +1,38 @@ > +/* > + * QEMU monitor > + * > + * Copyright (c) 2003-2004 Fabrice Bellard > + * > + * Permission is hereby granted, free of charge, to any person obtaining a > copy > + * of this software and associated documentation files (the "Software"), to > deal > + * in the Software without restriction, including without limitation the > rights > + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell > + * copies of the Software, and to permit persons to whom the Software is > + * furnished to do so, subject to the following conditions: > + * > + * The above copyright notice and this permission notice shall be included in > + * all copies or substantial portions of the Software. > + * > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR > + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, > + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL > + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER > + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING > FROM, > + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN > + * THE SOFTWARE. > + */ > +#include "qemu/osdep.h" > +#include "cpu.h" > +#include "monitor/monitor.h" > +#include "monitor/hmp-target.h" > +#include "hmp.h" > + > +void hmp_info_tlb(Monitor *mon, const QDict *qdict) > +{ > + CPUArchState *env = mon_get_cpu_env(); > + > + if (!env) { > + monitor_printf(mon, "No CPU available\n"); > + return; > + } > +}
^ I'd add those 3 files in patch #3 "CPU definitions" > diff --git a/target/rx/Makefile.objs b/target/rx/Makefile.objs > new file mode 100644 > index 0000000000..aa6f2d2d6c > --- /dev/null > +++ b/target/rx/Makefile.objs > @@ -0,0 +1,12 @@ > +obj-y += translate.o op_helper.o helper.o cpu.o gdbstub.o disas.o > +obj-$(CONFIG_SOFTMMU) += monitor.o > + > +DECODETREE = $(SRC_PATH)/scripts/decodetree.py > + > +target/rx/decode.inc.c: \ > + $(SRC_PATH)/target/rx/insns.decode $(DECODETREE) > + $(call quiet-command,\ > + $(PYTHON) $(DECODETREE) --varinsnwidth 32 -o $@ $<, "GEN", > $(TARGET_DIR)$@) > + > +target/rx/translate.o: target/rx/decode.inc.c > +target/rx/disas.o: target/rx/decode.inc.c > ^ this one belongs to patch #1 "TCG translation"