I'm working on a hobbyist OS with Simics. I'm running my target on simics-qsp-x86-6.0.67 machine. When I try to use the reverse execution I got an error. These are the steps I performed on Simics console:
simics>
$disk0_image="/home/peppe/Desktop/g-os-grub2/g-os/img/c.img"
run-command-file /opt/simics/simics-qsp-x86-6.0.67/targets/qsp-x86/qsp-hdd-boot.simics
connect-real-network-bridge
enable-debugger
add-symbol-file /home/peppe/Desktop/g-os-grub2/g-os/kernel.bin
enable-reverse-execution
bp.source_location.break kmain
bp.source_location.break process_0
simics> run
At some point Simics reaches the first and then the second breakpoint:
process_0() at /home/peppe/Desktop/g-os-grub2/g-os/process_0.c:35
35 argv[0] = argv1;
simics> rs
[tcf error] process_work called while already processing work. This will cause unexpected behavior
If I press CTRL-C:
int_handler_ahci() at /home/peppe/Desktop/g-os-grub2/g-os/drivers/ahci/ahci.c:116
116 EXIT_INT_HANDLER(0,processor_reg)
Line 116 is where rs command should stop, but it happens only if I press CTRL-C. So in order to use reverse execution, I always need to explicitly stop Simics.
My question: is there a way to fix this behavior so Simics stops itself when reaches a breakpoint?
While being connected to the real network is unsupported in combination with reverse execution I would want the debugger team to have a look at this. The
simics>
prompt shows Simics has indeed stopped when you issuers
but what is causing the TCF issue I cannot tell now.