oracular (1) goto-instrument.1.gz

Provided by: cbmc_6.1.1-2_amd64 bug

NAME

       goto-instrument - Perform analysis or instrumentation of goto binaries

SYNOPSIS

       goto-instrument [-?] [-h] [--help]
              show help

       goto-instrument --version
              show version and exit

       goto-instrument [options] in [out]
              perform analysis or instrumentation

DESCRIPTION

       goto-instrument  reads  a  GOTO  binary,  performs  a  given  program transformation, and then writes the
       resulting program as GOTO binary on disk.

OPTIONS

   Dump Source:
       --dump-c
              generate C source

       --dump-c-type-header m
              generate a C header for types local in m

       --dump-cpp
              generate C++ source

       --no-system-headers
              generate C source expanding libc includes

       --use-all-headers
              generate C source with all includes

       --harness
              include input generator in output

       --horn print program as constrained horn clauses

   Diagnosis:
       --show-properties
              show the properties, but don't run analysis

       --document-properties-html
              generate HTML property documentation

       --document-properties-latex
              generate Latex property documentation

       --show-symbol-table
              show loaded symbol table

       --list-symbols
              list symbols with type information

       --show-goto-functions
              show loaded goto program

       --list-goto-functions
              list loaded goto functions

       --count-eloc
              count effective lines of code

       --list-eloc
              list full path names of lines containing code

       --print-global-state-size
              count the total number of bits of global objects

       --print-path-lengths
              print statistics about control-flow graph paths

       --show-locations
              show all source locations

       --dot  generate CFG graph in DOT format

       --print-internal-representation
              show verbose internal representation of the program

       --list-undefined-functions
              list functions without body

       --list-calls-args
              list all function calls with their arguments

       --call-graph
              show graph of function calls

       --reachable-call-graph
              show graph of function calls potentially reachable from main function

       --show-class-hierarchy
              show the class hierarchy

       --validate-goto-model
              enable additional well-formedness checks on the goto program

       --validate-ssa-equation
              enable additional well-formedness checks on the SSA representation

       --validate-goto-binary
              check the well-formedness of the passed in GOTO binary and then exit

       --interpreter
              do concrete execution

   Data-flow analyses:
       --show-struct-alignment
              show struct members that might be concurrently accessed

       --show-threaded
              show instructions that may be executed by more than one thread

       --show-local-safe-pointers
              show pointer expressions that are trivially dominated by a not-null check

       --show-safe-dereferences
              show pointer expressions that are trivially  dominated  by  a  not-null  check  *and*  used  as  a
              dereference operand

       --show-value-sets
              show points-to information (using value sets)

       --show-global-may-alias
              show may-alias information over globals

       --show-local-bitvector-analysis
              show procedure-local pointer analysis

       --escape-analysis
              perform escape analysis

       --show-escape-analysis
              show results of escape analysis

       --custom-bitvector-analysis
              perform configurable bitvector analysis

       --show-custom-bitvector-analysis
              show results of configurable bitvector analysis

       --interval-analysis
              perform interval analysis

       --show-intervals
              show results of interval analysis

       --show-uninitialized
              show maybe-uninitialized variables

       --show-points-to
              show points-to information

       --show-rw-set
              show read-write sets

       --show-call-sequences
              show function call sequences

       --show-reaching-definitions
              show reaching definitions

       --show-dependence-graph
              show program-dependence graph

       --show-sese-regions
              show single-entry-single-exit regions

   Safety checks:
       --no-assertions
              ignore user assertions

       --bounds-check
              enable array bounds checks

       --pointer-check
              enable pointer checks

       --memory-leak-check
              enable memory leak checks

       --memory-cleanup-check
              Enable  memory  cleanup  checks:  assert that all dynamically allocated memory is explicitly freed
              before terminating the program.

       --div-by-zero-check
              enable division by zero checks for integer division

       --float-div-by-zero-check
              enable division by zero checks for floating-point division

       --signed-overflow-check
              enable signed arithmetic over- and underflow checks

       --unsigned-overflow-check
              enable arithmetic over- and underflow checks

       --pointer-overflow-check
              enable pointer arithmetic over- and underflow checks

       --conversion-check
              check whether values can be represented after type cast

       --undefined-shift-check
              check shift greater than bit-width

       --float-overflow-check
              check floating-point for +/-Inf

       --nan-check
              check floating-point for NaN

       --enum-range-check
              checks that all enum type expressions have values in the enum range

       --pointer-primitive-check
              checks that all pointers in pointer primitives are valid or null

       --retain-trivial-checks
              include checks that are trivially true

       --error-label label
              check that label is unreachable

       --no-built-in-assertions
              ignore assertions in built-in library

       --no-assertions
              ignore user assertions

       --no-assumptions
              ignore user assumptions

       --assert-to-assume
              convert user assertions to assumptions

       --uninitialized-check
              add checks for uninitialized locals (experimental)

       --stack-depth n
              add check that call stack size of non-inlined functions never exceeds n

       --race-check
              add floating-point data race checks

   Semantic transformations:
       --nondet-volatile
       --nondet-volatile-variable variable
              By default, cbmc(1) treats volatile variables the same as non-volatile  variables.   That  is,  it
              assumes  that  a volatile variable does not change between subsequent reads, unless it was written
              to by the program. With the above options, goto-instrument can be  instructed  to  instrument  the
              given  goto  program  such  as  to  (1) make reads from all volatile expressions non-deterministic
              (--nondet-volatile),    (2)    make    reads    from    specific    variables    non-deterministic
              (--nondet-volatile-variable),  or  (3)  model  reads  from  specific  variables  by  given  models
              (--nondet-volatile-model).

              Below we give two usage examples for the  options.  Consider  the  following  test,  for  function
              get_celsius and with harness test_get_celsius:

                  #include <assert.h>
                  #include <limits.h>
                  #include <stdint.h>

                  // hardware sensor for temperature in kelvin
                  extern volatile uint16_t temperature;

                  int get_celsius() {
                    if (temperature > (1000 + 273)) {
                      return INT_MIN; // value indicating error
                    }
                    return temperature - 273;
                  }

                  void test_get_celsius() {
                    int t = get_celsius();
                    assert(t == INT_MIN || t <= 1000);
                    assert(t == INT_MIN || t >= -273);
                  }

              Here the variable temperature corresponds to a hardware sensor. It returns the current temperature
              on each read. The get_celsius function converts the value in Kelvin to degrees Celsius, given  the
              value  is  in  the expected range.  However, it has a bug where it reads temperature a second time
              after the check, which may yield a value for which the check would not  succeed.   Verifying  this
              program  as is with cbmc(1) would yield a verification success. We can use goto-instrument to make
              reads from temperature non-deterministic:

                  goto-cc -o get_celsius_test.gb get_celsius_test.c
                  goto-instrument --nondet-volatile-variable temperature \
                    get_celsius_test.gb get_celsius_test-mod.gb
                  cbmc --function test_get_celsius get_celsius_test-mod.gb

              Here the final invocation of cbmc(1) correctly reports a verification failure.

       --nondet-volatile-model variable:model
              Simply treating volatile variables as non-deterministic may for some use cases be too  inaccurate.
              Consider the following test, for function get_message and with harness test_get_message:

                  #include <assert.h>
                  #include <stdint.h>

                  extern volatile uint32_t clock;

                  typedef struct message {
                    uint32_t timestamp;
                    void *data;
                  } message_t;

                  void *read_data();

                  message_t get_message() {
                    message_t msg;
                    msg.timestamp = clock;
                    msg.data = read_data();
                    return msg;
                  }

                  void test_get_message() {
                    message_t msg1 = get_message();
                    message_t msg2 = get_message();
                    assert(msg1.timestamp <= msg2.timestamp);
                  }

              The harness verifies that get_message assigns non-decreasing time stamps to the returned messages.
              However, simply treating clock as non-deterministic would not  suffice  to  prove  this  property.
              Thus, we can supply a model for reads from clock:

                  // model for reads of the variable clock
                  uint32_t clock_read_model() {
                    static uint32_t clock_value = 0;
                    uint32_t increment;
                    __CPROVER_assume(increment <= 100);
                    clock_value += increment;
                    return clock_value;
                  }

              The model is stateful in that it keeps the current clock value between invocations in the variable
              clock_value. On each invocation, it increments the clock by a non-deterministic value in the range
              0  to  100.  We  can  tell  goto-instrument  to  use the model clock_read_model for reads from the
              variable clock as follows:

                  goto-cc -o get_message_test.gb get_message_test.c
                  goto-instrument --nondet-volatile-model clock:clock_read_model \
                    get_message_test.gb get_message_test-mod.gb
                  cbmc --function get_message_test get_message_test-mod.gb

              Now the final invocation of cbmc(1) reports verification success.

       --isr function
              instruments an interrupt service routine

       --mmio instruments memory-mapped I/O

       --nondet-static
              add nondeterministic initialization of variables with static lifetime

       --nondet-static-exclude e
              same as nondet-static except for the variable e (use multiple times if required)

       --nondet-static-matching r
              add nondeterministic initialization of variables with static lifetime matching regex r

       --function-enter f
       --function-exit f
       --branch f
              instruments a call to f at the beginning, the exit, or a branch point, respectively

       --splice-call caller,callee
              prepends a call to callee in the body of caller

       --check-call-sequence seq
              instruments checks to assert that all call sequences match seq

       --undefined-function-is-assume-false
              convert each call to an undefined function to assume(false)

       --insert-final-assert-false function
              generate assert(false) at end of function

       --generate-function-body regex
              This transformation inserts implementations of functions without definition,  i.e.,  a  body.  The
              behavior of the generated function is chosen via --generate-function-body-options option:

       --generate-function-body-options option
              One     of    assert-false,    assume-false,    nondet-return,    assert-false-assume-false    and
              havoc[,params:regex][,globals:regex][,params:p_n1;p_n2;..]  (default: nondet-return)

              assert-false: The body consists of a single command: assert(0).

              assume-false: The body consists of a single command: assume(0).

              assert-false-assume-false: Two commands as above.

              nondet-return: The generated function returns a non-deterministic value of its return type.

              havoc[,params:p-regex][,globals:g-regex]:  Assign  non-deterministic  values  to  the  targets  of
              pointer-to-non-constant  parameters  matching  the  regular  expression  p-regex, and non-constant
              globals matching g-regex, and then (in case of non-void function) returning as with nondet-return.
              The following example demonstrates the use:

                  // main.c
                  int global;
                  const int c_global;
                  int function(int *param, const int *c_param);

              Often  we want to avoid overwriting internal symbols, i.e., those with an __ prefix, which is done
              using the pattern (?!__).

                  goto-cc main.c -o main.gb
                  goto-instrument main.gb main-out.gb \
                    --generate-function-body-options 'havoc,params:(?!__).*,globals:(?!__).*' \
                    --generate-funtion-body function

              This leads to a GOTO binary equivalent to the following C code:

                  // main-mod.c
                  int function(int *param, const int *c_param) {
                    *param = nondet_int();
                    global = nondet_int();
                    return nondet_int();
                  }

              The parameters should that should be non-deterministically updated can be specified  either  by  a
              regular  expression  (as  above)  or  by  a semicolon-separated list of their numbers. For example
              havoc,params:0;3;4 will assign non-deterministic values to the first, fourth, and fifth parameter.

              Note that only parameters of pointer type can be havoced and goto-instrument will produce an error
              report  if given a parameter number associated with a non-pointer parameter. Requesting to havoc a
              parameter with a number higher than the number of parameters a  given  function  takes  will  also
              results in an error report.

       --generate-havocing-body option fun_name,params:p_n1;p_n2;..
       --generate-havocing-body option fun_name[,call-site-id,params:p_n1;p_n2;..>]+
              Request  a  different  implementation  for a number of call-sites of a single function. The option
              --generate-havocing-body inserts new functions for selected call-sites and replaces the  calls  to
              the origin function with calls to the respective new functions.

                  // main.c
                  int function(int *first, int *second, int *third);

                  int main() {
                    int a = 10;
                    int b = 10;
                    int c = 10;
                    function(&a, &b, &c);
                    function(&a, &b, &c);
                  }

              The user can specify different behavior for each call-site as follows:

                  goto-cc main.c -o main.gb
                  goto-instrument main.gb  main-mod.gb \
                    --generate-havocing-body 'function,1,params:0;2,2,params:1'

              This results in a GOTO binary equivalent to:

                  // main-mod.c
                  int function_1(int *first, int *second, int *third) {
                    *first = nondet_int();
                    *third = nondet_int();
                  }

                  int function_2(int *first, int *second, int *third) { *second = nondet_int(); }

                  int main() {
                    int a = 10;
                    int b = 10;
                    int c = 10;
                    function_1(&a, &b, &c);
                    function_2(&a, &b, &c);
                  }

       --restrict-function-pointer
              pointer_name/target[,targets]*  Replace  function  pointers by a user-defined set of targets. This
              may be required when --remove-function-pointers creates to large a set of direct calls.   Consider
              the  example  presented  for  --remove-function-pointers.  Assume  that  call  will always receive
              pointers to either f or g during actual executions of the program, and symbolic execution for h is
              too expensive to simply ignore the cost of its branch.

              To  facilitate  the  controlled  replace, we will label the places in each function where function
              pointers are being called, to this pattern:

              function-name.function_pointer_call.N

              where N is refers to the N-th function call via a function pointer  in  function-name,  i.e.,  the
              first  call  to a function pointer in a function will have N=1, the fifth N=5 etc.  Alternatively,
              if the calls carry labels in the source code, we can also refer to a function pointer as

              function-name.label

              To implement this assumption that the first call to a function pointer in function call an only be
              a call to f or g, use

                  goto-instrument --restrict-function-pointer \
                    call.function_pointer_call.1/f,g in.gb out.gb

              The resulting output (written to GOTO binary out.gb) looks similar to the original example, except
              now there will not be a call to h:

                  void call(fptr_t fptr) {
                    int r;
                    if (fptr == &f) {
                      r = f(10);
                    } else if (fptr == &g) {
                      r = g(10);
                    } else {
                      // sanity check
                      assert(false);
                      assume(false);
                    }
                    return r;
                  }

              As another example imagine we have a simple virtual filesystem API and implementation like this:

                  typedef struct filesystem_t filesystem_t;
                  struct filesystem_t {
                    int (*open)(filesystem_t *filesystem, const char *file_name);
                  };

                  int fs_open(filesystem_t *filesystem, const char *file_name) {
                    filesystem->open(filesystem, file_name);
                  }

                  int nullfs_open(filesystem_t *filesystem, const char *file_name) { return -1; }

                  filesystem_t nullfs_val = {.open = nullfs_open};
                  filesystem *const nullfs = &nullfs_val;

                  filesystem_t *get_fs_impl() {
                    // some fancy logic to determine
                    // which filesystem we're getting -
                    // in-memory, backed by a database, OS file system
                    // - but in our case, we know that
                    // it always ends up being nullfs
                    // for the cases we care about
                    return nullfs;
                  }
                  int main(void) {
                    filesystem_t *fs = get_fs_impl();
                    assert(fs_open(fs, "hello.txt") != -1);
                  }

              In this case, the assumption is that in function main, fs can be nothing other  than  nullfs.  But
              perhaps  due to the logic being too complicated, symbolic execution ends up being unable to figure
              this out, so in the call to fs_open we end up branching on all functions matching the signature of
              filesystem_t::open, which could be quite a few functions within the program.  Worst of all, if its
              address  is  ever  taken  in   the   program,   as   far   as   function   pointer   removal   via
              --remove-function-pointers  is  concerned  it  could be fs_open itself due to it having a matching
              signature, leading to symbolic execution being forced to follow a potentially  infinite  recursion
              until its unwind limit.

              In this case we can again restrict the function pointer to the value which we know it will have:

                  goto-instrument --restrict-function-pointer \
                    fs_open.function_pointer_call.1/nullfs_open in.gb out.gb

       --function-pointer-restrictions-file file_name
              If  you  have many places where you want to restrict function pointers, it'd be a nuisance to have
              to specify them all on the command line. In these cases, you  can  specify  a  file  to  load  the
              restrictions from instead, which you can give the name of a JSON file with this format:

                  {
                    "function_call_site_name": ["function1", "function2", ...],
                     ...
                  }

              If  you  pass  in  multiple  files,  or  a  mix  of files and command line restrictions, the final
              restrictions will be a set union of all specified restrictions.

              Note that if something goes wrong during type  checking  (i.e.,  making  sure  that  all  function
              pointer replacements refer to functions in the symbol table that have the correct type), the error
              message will refer to the command line option --restrict-function-pointer  regardless  of  whether
              the restriction in question came from the command line or a file.

       --restrict-function-pointer-by-name symbol_name/target[,targets]*
              Restrict  a  function  pointer  where  symbol_name is the unmangled name, before labeling function
              pointers.

       --remove-calls-no-body
              remove calls to functions without a body

       --add-library
              add models of C library functions

       --malloc-may-fail
              allow malloc calls to return a null pointer

       --malloc-fail-assert
              set malloc failure mode to assert-then-assume

       --malloc-fail-null
              set malloc failure mode to return null

       --no-malloc-may-fail
              do not allow malloc calls to fail by default

       --string-abstraction
              track C string lengths and zero-termination

       --model-argc-argv n
              Create up to n non-deterministic C strings as entries to argv and set argc accordingly. In absence
              of  such modelling, argv is left uninitialized except for a terminating NULL pointer. Consider the
              following example:

                  // needs_argv.c
                  #include <assert.h>

                  int main(int argc, char *argv[]) {
                    if (argc >= 2)
                      assert(argv[1] != 0);

                    return 0;
                  }

              If cbmc(1) is run directly on this example, it will report a failing assertion  for  the  lack  of
              modeling of argv. To make the assertion succeed, as expected, use:

                  goto-cc needs_argv.c
                  goto-instrument --model-argc-argv 2 a.out a.out
                  cbmc a.out

       --remove-function-body f
              remove the implementation of function f (may be repeated)

       --replace-calls f:g
              replace calls to f with calls to g

       --max-nondet-tree-depth N
              limit size of nondet (e.g. input) object tree; at level N pointers are set to null

       --min-null-tree-depth N
              minimum level at which a pointer can first be NULL in a recursively nondet initialized struct

   Semantics-preserving transformations:
       --ensure-one-backedge-per-target
              transform loop bodies such that there is a single edge back to the loop head

       --drop-unused-functions
              drop functions trivially unreachable from main function

       --remove-pointers
              converts pointer arithmetic to base+offset expressions

       --constant-propagator
              propagate constants and simplify expressions

       --inline
              perform full inlining

       --partial-inline
              perform partial inlining

       --function-inline function
              transitively inline all calls function makes

       --no-caching
              disable caching of intermediate results during transitive function inlining

       --log file
              log in JSON format which code segments were inlined, use with --function-inline

       --remove-function-pointers
              Resolve calls via function pointers to direct function calls. Candidate functions are chosen based
              on their signature and whether or not they have their address taken somewhere in the  program  The
              following  example  illustrates  the  approach  taken.  Given  that there are functions with these
              signatures available in the program:

                  int f(int x);
                  int g(int x);
                  int h(int x);

              And we have a call site like this:

                  typedef int (*fptr_t)(int x);
                  void call(fptr_t fptr) {
                    int r = fptr(10);
                    assert(r > 0);
                  }

              Function pointer removal will turn this into code similar to this:

                  void call(fptr_t fptr) {
                    int r;
                    if (fptr == &f) {
                      r = f(10);
                    } else if (fptr == &g) {
                      r = g(10);
                    } else if (fptr == &h) {
                      r = h(10);
                    } else {
                      // sanity check
                      assert(false);
                      assume(false);
                    }
                    return r;
                  }

              Beware that there may be many functions matching a particular signature, and some of them  may  be
              costly  to  a  subsequently  run  analysis. Consider using --restrict-function-pointer to manually
              specify this set of functions, or --value-set-fi-fp-removal.

       --remove-const-function-pointers
              remove function pointers that are constant or constant part of an array

       --value-set-fi-fp-removal
              Build a flow-insensitive value set and replace function pointers by  a  case  statement  over  the
              possible  assignments. If the set of possible assignments is empty the function pointer is removed
              using the standard --remove-function-pointers pass.

   Loop information and transformations:
       --show-loops
              show the loops in the program

       --unwind nr
              unwind nr times

       --unwindset [T:]L:B,...
              unwind loop L with a bound of B (optionally restricted to thread T) (use --show-loops to  get  the
              loop IDs)

       --unwindset-file file
              read unwindset from file

       --partial-loops
              permit paths with partial loops

       --no-unwinding-assertions
              do not generate unwinding assertions

       --unwinding-assertions
              generate  unwinding  assertions (enabled by default; overrides --no-unwinding-assertions when both
              of these are given)

       --continue-as-loops
              add loop for remaining iterations after unwound part

       --k-induction k
              check loops with k-induction

       --step-case
              k-induction: do step-case

       --base-case
              k-induction: do base-case

       --havoc-loops
              over-approximate all loops

       --accelerate
              add loop accelerators

       --z3   use Z3 when computing loop accelerators

       --skip-loops loop-ids
              add gotos to skip selected loops during execution

       --show-lexical-loops
              Show lexical loops.  A lexical loop is a block of goto program instructions with  a  single  entry
              edge  at  the top and a single backedge leading from bottom to top, where "top" and "bottom" refer
              to program order. The loop may have holes: instructions which sit in between the top and bottom in
              program  order, but which can't reach the loop backedge. Lexical loops are a subset of the natural
              loops, which are cheaper to compute and include most natural loops generated from typical C code.

       --show-natural-loops
              Show natural loop heads.  A natural loop is when the nodes and edges of a  graph  make  one  self-
              encapsulating circle with no incoming edges from external nodes. For example A -> B -> C -> D -> A
              is a natural loop, but if B has an incoming edge from X, then it isn't a natural loop,  because  X
              is an external node. Outgoing edges don't affect the natural-ness of a loop.

   Memory model instrumentations:
       --mm [tso|pso|rmo|power]
              Instruments  the program so that it can be verified for different weak memory models with a model-
              checker verifying sequentially consistent programs.

       --scc  detects critical cycles per SCC (one thread per SCC)

       --one-event-per-cycle
              only instruments one event per cycle

       --minimum-interference
              instruments an optimal number of events

       --my-events
              only instruments events whose ids appear in inst.evt

       --read-first, --write-first
              only instrument cycles where a read or write occurs as first event, respectively

       --max-var N
              limit cycles to N variables read/written

       --max-po-trans N
              limit cycles to N program-order edges

       --ignore-arrays
              instrument arrays as a single object

       --cav11
              always instrument shared variables, even when they are not part of any cycle

       --force-loop-duplication, --no-loop-duplication
              optional program transformation to construct cycles in program loops

       --cfg-kill
              enables symbolic execution used to reduce spurious cycles

       --no-dependencies
              no dependency analysis

       --no-po-rendering
              no representation of the threads in the dot

       --hide-internals
              do not include thread-internal (Rfi) events in dot output

       --render-cluster-file
              clusterises the dot by files

       --render-cluster-function
              clusterises the dot by functions

   Slicing:
       --fp-reachability-slice f
              Remove instructions that cannot appear on a trace that visits all given  functions.  The  list  of
              functions has to be given as a comma separated list f.

       --reachability-slice
              remove instructions that cannot appear on a trace from entry point to a property

       --reachability-slice-fb
              remove instructions that cannot appear on a trace from entry point through a property

       --full-slice
              slice away instructions that don't affect assertions

       --property id
              slice with respect to specific property id only

       --slice-global-inits
              slice away initializations of unused global variables

       --aggressive-slice
              remove  bodies  of  any  functions  not  on  the  shortest path between the start function and the
              function containing the property(s)

       --aggressive-slice-call-depth n
              used with --aggressive-slice, preserves all functions within n function calls of the functions  on
              the shortest path

       --aggressive-slice-preserve-function f
              force the aggressive slicer to preserve function f

       --aggressive-slice-preserve-functions-containing f
              force the aggressive slicer to preserve all functions with names containing f

       --aggressive-slice-preserve-all-direct-paths
              force aggressive slicer to preserve all direct paths

   Code contracts:
       --apply-loop-contracts

       -disable-loop-contracts-side-effect-check
              UNSOUND  OPTION. Disable checking the absence of side effects in loop contract clauses. In absence
              of such checking, loop contracts clauses will accept more expressions, such as pure functions  and
              statement expressions.  But user have to make sure the loop contracts are side-effect free by them
              self to get a sound result.

       -loop-contracts-no-unwind
              do not unwind transformed loops

       -loop-contracts-file file
              annotate loop contracts from the file to the goto program

       --replace-call-with-contract fun
              replace calls to fun with fun's contract

       --enforce-contract fun
              wrap fun with an assertion of its contract

       --enforce-contract-rec fun
              wrap fun with an assertion of its contract that can handle recursive calls

       --dfcc fun
              instrument dynamic frame condition checks method using fun as entry point

   User-interface options:
       --flush
              flush every line of output

       --xml  output files in XML where supported

       --xml-ui
              use XML-formatted output

       --json-ui
              use JSON-formatted output

       --verbosity n
              verbosity level

       --timestamp [monotonic|wall]
              Print microsecond-precision timestamps.  monotonic: stamps increase monotonically.  wall: ISO-8601
              wall clock timestamps.

ENVIRONMENT

       All tools honor the TMPDIR environment variable when generating temporary files and directories.

BUGS

       If you encounter a problem please create an issue at https://github.com/diffblue/cbmc/issues

SEE ALSO

       cbmc(1), goto-cc(1)

       2008-2013, Daniel Kroening