again. This means that the simulation needs to stop in a consistent state,
including the "reentry check" variables in logfunctions::fatal() and
logfunctions::ask().
- fatal() is supposed to quit the simulation. add a clear panic message if it
doesn't quit, but remove the reentry check. The reentry check was causing
problems when you stop and start the simulation again.
- in ask(), keep the reentry check but set in_ask_already=0 before
calling fatal() so that ask() works if we start the simulation again.
and complain if fatal() fails to die.
to describe the format of the log prefix. This option can be any string
with special tokens being replaced at run time :
# %t : 11 decimal digits timer tick
# %i : 8 hexadecimal digits of cpu0 current eip
# %e : 1 character event type ('i'nfo, 'd'ebug, 'p'anic, 'e'rror)
# %d : 5 characters string of the device, between brackets
the default is "%t%i%d", so the logprefix is the same as before.
New tokens can be easily added or changed if needed.
Modified Files:
.bochsrc bochs.h logio.cc main.cc gui/control.cc
gui/siminterface.h gui/siminterface.cc
patches/patch.logfilefmteip
objects point to the io object, it is not safe to delete the io object
as soon as the first logfunctions object is deleted. This leaves all the
other logfunctions objects with pointers to a dead object.
useful because sometimes useful messages are printed on the screen just
before a panic. It's also potentially dangerous if the vga update function
calls ask() again...so I added a re-entry check.
will dump core, and the core can sometimes be loaded into the debugger
to give some hints as to what is going on. This could be especially
useful when the bochs debugger is off.
- try to do something reasonable when abort() doesn't exist on the system.