CSI Guide
← Prev Next →

Running CSI


Tracing Schemes

To compile with csi-cc, you must tell the compiler which tracing variants to create for each function. This page describes the methods for providing this data to csi-cc, and the format of the data.

If not otherwise specified, csi-cc will prompt the user for tracing configuration (read from stdin) before compilation. To specify a file containing appropriate tracing configuration, use the --trace flag. For example, to instrument every function with path tracing and call-site coverage, you can the pre-built file provided with this release, as follows:
csi-cc --trace=cc_pt.schema <input file>

A description of tracing schemes and customization can be found in the journal paper associated with this code release [2]. In brief: each function in the original program has one or more possible sets of tracing mechanisms that it can have active during a run. Each such set is called a tracing “scheme.” For example, the aforementioned file cc_pt.schema encodes that all functions in the entire program have a single scheme: call-site coverage plus path tracing. Another provided example schema, realistic.schema, creates three different variants for each original function:

  1. No instrumentation: an exact copy of the original function
  2. Call-site coverage
  3. Call-site coverage plus path tracing

A tracing schema is composed of an ordered list of matching rules. Each function in the program is instrumented based on the first matching rule. For example, the following schema:

foo;{};{CC}
*;{};{FC};{CC,PT}
indicates that any function named foo will have two variants:
  1. No instrumentation
  2. Call-site coverage
and that any other function will have three variants:
  1. No instrumentation
  2. Function coverage
  3. Call-site coverage plus path tracing

The format grammar follows. Non-terminals are distinguished from terminals by capitalization, color, and italics.

Rule_List Rule Rule_List
| ε
Rule fn-name ; Scheme_List
| * ; Scheme_List
Scheme_List Scheme ; Scheme_List
| Scheme
Scheme { Mechanism_List }
| { }
Mechanism_List Mechanism , Mechanism_List
| Mechanism
Mechanism BBC | CC | FC | PT

← Prev Next →