48 lines
1.6 KiB
Plaintext
48 lines
1.6 KiB
Plaintext
To use the new external I/O traces (EIO traces) and checkpointing features:
|
|
|
|
make an EIO trace:
|
|
|
|
sim-eio -trace FOO.eio tests/bin.little/test-fmath
|
|
|
|
make an EIO trace but starting 1000000 instructions into the execution:
|
|
|
|
sim-eio -fastfwd 1000000 -trace FOO.eio tests/bin.little/test-fmath
|
|
|
|
run an EIO trace:
|
|
|
|
sim-whatever FOO.eio
|
|
|
|
create checkpoint inside an EIO trace execution (eg, @ inst # 1000):
|
|
|
|
sim-eio -dump FOO.chkpt 1000: FOO.eio
|
|
|
|
run an EIO trace starting at checkpoint:
|
|
|
|
sim-whatever -chkpt FOO.chkpt FOO.eio
|
|
|
|
The EIO traces are self checking, if the data going into the system
|
|
calls from registers or memory ever deviates from the traced run,
|
|
you'll get a detailed error message indicating the inconsistancy.
|
|
Other than the error messages, EIO executions produce no output,
|
|
because they're not really interacting with the OS, just the EIO
|
|
trace and EIO module (eio.[hc]).
|
|
|
|
The "-dump" option takes two arguments, a checkpoint filename and
|
|
a range, see "sim-eio -h" for details on ranges. "1000:" means
|
|
trigger the checkpoint at instruction count 1000.
|
|
|
|
The EIO tracing support is implemented in eio.[hc] and in the libexo
|
|
directory (libexo reads and write EXO files, which is the I/O format
|
|
used by the EIO code). Look at the support added to sim-safe.c
|
|
to support tracing:
|
|
|
|
- predecode is disabled when EIO tracing, since the memory
|
|
is already predecoded
|
|
|
|
- when tracing is enabled, SYSCALL()'s call eio_read_trace()
|
|
instead of ss_syscall()
|
|
|
|
Plus, there are eio_*() calls in main.c which set up the initial memory
|
|
image and checkpoints. That's it, its a very lightweight interface.
|
|
|