qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] target/avr: Ignore unimplemented WDR opcode


From: Fred Konrad
Subject: Re: [PATCH] target/avr: Ignore unimplemented WDR opcode
Date: Wed, 5 May 2021 15:35:55 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.10.0



Le 5/2/21 à 9:09 PM, Philippe Mathieu-Daudé a écrit :
Running the WDR opcode triggers a segfault:

   $ cat > foo.S << EOF
   > __start:
   >     wdr
   > EOF
   $ avr-gcc -nostdlib -nostartfiles -mmcu=avr6 foo.S -o foo.elf
   $ qemu-system-avr -serial mon:stdio -nographic -no-reboot \
     -M mega -bios foo.elf -d in_asm --singlestep
   IN:
   0x00000000:  WDR
   Segmentation fault (core dumped)

   (gdb) bt
      #0  0x00005555add0b23a in gdb_get_cpu_pid (cpu=0x5555af5a4af0) at 
../gdbstub.c:718
      #1  0x00005555add0b2dd in gdb_get_cpu_process (cpu=0x5555af5a4af0) at 
../gdbstub.c:743
      #2  0x00005555add0e477 in gdb_set_stop_cpu (cpu=0x5555af5a4af0) at 
../gdbstub.c:2742
      #3  0x00005555adc99b96 in cpu_handle_guest_debug (cpu=0x5555af5a4af0) at 
../softmmu/cpus.c:306
      #4  0x00005555adcc66ab in rr_cpu_thread_fn (arg=0x5555af5a4af0) at 
../accel/tcg/tcg-accel-ops-rr.c:224
      #5  0x00005555adefaf12 in qemu_thread_start (args=0x5555af5d9870) at 
../util/qemu-thread-posix.c:521
      #6  0x00007f692d940ea5 in start_thread () from /lib64/libpthread.so.0
      #7  0x00007f692d6699fd in clone () from /lib64/libc.so.6

Since the watchdog peripheral is not implemented, simply
log the opcode as unimplemented and keep going.

Reported-by: Fred Konrad <konrad@adacore.com>
Signed-off-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
---
  target/avr/helper.c | 6 +-----
  1 file changed, 1 insertion(+), 5 deletions(-)

diff --git a/target/avr/helper.c b/target/avr/helper.c
index 35e10195940..981c29da453 100644
--- a/target/avr/helper.c
+++ b/target/avr/helper.c
@@ -188,11 +188,7 @@ void helper_break(CPUAVRState *env)
void helper_wdr(CPUAVRState *env)
  {
-    CPUState *cs = env_cpu(env);
-
-    /* WD is not implemented yet, placeholder */
-    cs->exception_index = EXCP_DEBUG;
-    cpu_loop_exit(cs);
+    qemu_log_mask(LOG_UNIMP, "WDG reset (not implemented)\n");
  }

Seems ok to me, at least better than having a segfault.

Reviewed-by: KONRAD Frederic <frederic.konrad@adacore.com>

/*




reply via email to

[Prev in Thread] Current Thread [Next in Thread]