On Mon, Dec 2, 2019 at 2:28 AM Aleksandar Markovic
<address@hidden <mailto:address@hidden>> wrote:
On Wednesday, November 27, 2019, Michael Rolnik <address@hidden
<mailto:address@hidden>> wrote:
Provide function disassembles executed instruction when `-d
in_asm` is
provided
Example:
`./avr-softmmu/qemu-system-avr -bios
free-rtos/Demo/AVR_ATMega2560_GCC/demo.elf -d in_asm` will
produce something like the following
```
...
IN:
0x0000014a: CALL 0x3808
IN: main
0x00003808: CALL 0x4b4
IN: vParTestInitialise
0x000004b4: LDI r24, 255
0x000004b6: STS r24, 0
0x000004b8: MULS r16, r20
0x000004ba: OUT $1, r24
0x000004bc: LDS r24, 0
0x000004be: MULS r16, r20
0x000004c0: OUT $2, r24
0x000004c2: RET
...
```
Signed-off-by: Michael Rolnik <address@hidden
<mailto:address@hidden>>
Suggested-by: Richard Henderson <address@hidden
<mailto:address@hidden>>
Suggested-by: Philippe Mathieu-Daudé <address@hidden
<mailto:address@hidden>>
Suggested-by: Aleksandar Markovic <address@hidden
<mailto:address@hidden>>
Reviewed-by: Philippe Mathieu-Daudé <address@hidden
<mailto:address@hidden>>
Tested-by: Philippe Mathieu-Daudé <address@hidden
<mailto:address@hidden>>
---
target/avr/cpu.h | 1 +
target/avr/cpu.c | 2 +-
target/avr/disas.c | 228
+++++++++++++++++++++++++++++++++++++++++
target/avr/translate.c | 11 ++
4 files changed, 241 insertions(+), 1 deletion(-)
create mode 100644 target/avr/disas.c
diff --git a/target/avr/cpu.h b/target/avr/cpu.h
index 9ea5260165..a3e615a1eb 100644
--- a/target/avr/cpu.h
+++ b/target/avr/cpu.h
@@ -157,6 +157,7 @@ bool avr_cpu_exec_interrupt(CPUState *cpu,
int int_req);
hwaddr avr_cpu_get_phys_page_debug(CPUState *cpu, vaddr addr);
int avr_cpu_gdb_read_register(CPUState *cpu, uint8_t *buf, int
reg);
int avr_cpu_gdb_write_register(CPUState *cpu, uint8_t *buf,
int reg);
+int avr_print_insn(bfd_vma addr, disassemble_info *info);
static inline int avr_feature(CPUAVRState *env, int feature)
{
diff --git a/target/avr/cpu.c b/target/avr/cpu.c
index dae56d7845..52ec21dd16 100644
--- a/target/avr/cpu.c
+++ b/target/avr/cpu.c
@@ -83,7 +83,7 @@ static void avr_cpu_reset(CPUState *cs)
static void avr_cpu_disas_set_info(CPUState *cpu,
disassemble_info *info)
{
info->mach = bfd_arch_avr;
- info->print_insn = NULL;
+ info->print_insn = avr_print_insn;
}
static void avr_cpu_realizefn(DeviceState *dev, Error **errp)
diff --git a/target/avr/disas.c b/target/avr/disas.c
new file mode 100644
index 0000000000..a51ade7c2a
--- /dev/null
+++ b/target/avr/disas.c
@@ -0,0 +1,228 @@
+/*
+ * AVR disassembler
+ *
+ * Copyright (c) 2018 Richard Henderson <address@hidden
<mailto:address@hidden>>
Just a detail: since this file is created in 2019, the copyright
year should be 2019 too.
+ * Copyright (c) 2019 Michael Rolnik <address@hidden
<mailto:address@hidden>>
+ *
+ * This program is free software: you can redistribute it
and/or modify
+ * it under the terms of the GNU General Public License as
published by
+ * the Free Software Foundation, either version 2 of the
License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that 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/>.
+ */