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 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.