Le 13/05/2021 à 19:04, Philippe Mathieu-Daudé a écrit : > Cc'ing qemu-trivial@
Applied to my trivial-patches branch. Thanks, Laurent > On 5/5/21 3:35 PM, Fred Konrad wrote: >> 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 <kon...@adacore.com> >>> Signed-off-by: Philippe Mathieu-Daudé <f4...@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.kon...@adacore.com> >> >>> /* >>> >> >