VI(1) VI(1)
NAME
5i, ki, vi, qi - instruction simulators
SYNOPSIS
vi [ textfile ]
vi pid
5i [ textfile ]
5i pid
ki [ textfile ]
ki pid
qi [ textfile ]
qi pid
DESCRIPTION
Vi simulates the execution of a MIPS binary in a Plan 9
environment. It has two main uses: as a debugger and as a
statistics gatherer. Programs running under vi execute
about two hundred times slower than normal-but faster than
single stepping under db. 5i, ki, and qi are similar to vi
but interpret ARM, SPARC, and PowerPC binaries. The follow-
ing discussion refers to vi but applies to the others as
well.
Vi will simulate the execution of a named textfile. It will
also make a copy of an existing process with process id pid
and simulate its continuation.
As a debugger vi offers more complete information than
db(1). Tracing can be performed at the level of instruc-
tions, system calls, or function calls. Vi allows break-
points to be triggered when specified addresses in memory
are accessed. A report of instruction counts, load delay
fills and distribution is produced for each run. Vi simu-
lates the CPU's caches and MMU to assist the optimization of
compilers and programs.
The command interface mirrors the interface to db; see db(1)
for a detailed description. Data formats and addressing are
compatible with db except for disassembly: vi offers only
MIPS (db -mmipsco) mnemonics for machine instructions. Ki
offers both Plan 9 and Sun SPARC formats.
Several extra commands allow extended tracing and printing
of statistics:
$t[0ics]
The t command controls tracing. Zero cancels all trac-
ing options.
i Enable instruction tracing
Page 1 Plan 9 (printed 11/3/25)
VI(1) VI(1)
c Enable call tracing
s Enable system call tracing
$i[itsp]
The i command prints statistics accumulated by all code
run in this session.
i Print instruction counts and frequency.
p Print cycle profile.
t (Vi only) Print TLB and cache statistics.
s Print memory reference, working set and size
statistics.
:b[arwe]
Vi allows breakpoints to be set on any memory location.
These breakpoints monitor when a location is accessed,
read, written, or equals a certain value. For equality
the compared value is the count (see db(1)) supplied to
the command.
SOURCE
/sys/src/cmd/vi etc.
SEE ALSO
nm(1), db(1)
BUGS
The code generated by the compilers is well supported, but
some unusual instructions are unimplemented. Some Plan 9
system calls such as rfork cause simulated traps. The
floating point simulation makes assumptions about the inter-
preting machine's floating point support. The floating point
conversions performed by vi may cause a loss of precision.
Page 2 Plan 9 (printed 11/3/25)