[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RFC] AVR watchdog
From: |
Fred Konrad |
Subject: |
[RFC] AVR watchdog |
Date: |
Wed, 28 Apr 2021 16:17:56 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.10.0 |
Hi,
I fall on a segfault while running the wdr instruction on AVR:
(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
Wondering if there are some plan/on-going work to implement this watchdog?
---
Also meanwhile I though about a workaround like that:
diff --git a/target/avr/helper.c b/target/avr/helper.c
index 35e1019594..7944ed21f4 100644
--- a/target/avr/helper.c
+++ b/target/avr/helper.c
@@ -24,6 +24,7 @@
#include "exec/exec-all.h"
#include "exec/address-spaces.h"
#include "exec/helper-proto.h"
+#include "sysemu/runstate.h"
bool avr_cpu_exec_interrupt(CPUState *cs, int interrupt_request)
{
@@ -191,7 +192,7 @@ void helper_wdr(CPUAVRState *env)
CPUState *cs = env_cpu(env);
/* WD is not implemented yet, placeholder */
- cs->exception_index = EXCP_DEBUG;
+ qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
cpu_loop_exit(cs);
}
In the case the guest wants to reset the board through the watchdog, would that
make sense to swap to that?
Best Regards,
Fred
- [RFC] AVR watchdog,
Fred Konrad <=