VI(1)                                                       VI(1)

          5i, ki, vi, qi - instruction simulators

          vi [ textfile ]
          vi pid
          5i [ textfile ]
          5i pid
          ki [ textfile ]
          ki pid
          qi [ textfile ]
          qi pid

          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

          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:

               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

               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

               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.

          /sys/src/cmd/vi etc.

          nm(1), db(1)

          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.