about summary refs log tree commit diff homepage
path: root/www/Examples.html
diff options
context:
space:
mode:
Diffstat (limited to 'www/Examples.html')
-rw-r--r--www/Examples.html134
1 files changed, 0 insertions, 134 deletions
diff --git a/www/Examples.html b/www/Examples.html
deleted file mode 100644
index 25ee6fb0..00000000
--- a/www/Examples.html
+++ /dev/null
@@ -1,134 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
-          "http://www.w3.org/TR/html4/strict.dtd">
-<html>
-<head>
-  <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
-  <title>KLEE - Examples</title>
-  <link type="text/css" rel="stylesheet" href="menu.css" />
-  <link type="text/css" rel="stylesheet" href="content.css" />
-</head>
-<body>
-
-<!--#include virtual="menu.html.incl"-->
-
-<div id="content">
-
-<h1>KLEE Examples</h1>
-
-<p>Here is a basic example of using KLEE to test a simple regular expression matching function. You can find the basic example in the source tree under <tt>examples/regexp</tt>.</p>
-
-<h2>Example: <tt>Regexp.c</tt></h2>
-
-<p><tt>Regexp.c</tt> contains a simple regular expression matching function, and
-the bare bones testing harness (in <tt>main</tt>) need to explore this code with
-klee. You can see a version of the source
-code <a href="resources/Regexp.c.html">here</a>.</p>
-
-<p>This example will show to build and run the example using KLEE, as well as
-how to interpret the output, and some additional KLEE features that can be used
-when writing a test driver by hand.</p>
-
-<p>We'll start by showing how to build and run the example, and then explain how
-the test harness works in more detail.</p>
-
-<h3>Step 1: Building the example</h3>
-
-<p>The first step is to compile the source code using a compiler which can
-generate object files in LLVM bitcode format. Here we use <tt>llvm-gcc</tt>,
-but <a href="http://clang.llvm.org">Clang</a> works just as well!</p>
-
-<p>From within the <tt>examples/regexp</tt> directory:
-<div class="instr">
-  <b>$ llvm-gcc -I ../../include -emit-llvm -c -g Regexp.c</b>
-</div>
-which should create a <tt>Regexp.o</tt> file in LLVM bitcode
-format. The <tt>-I</tt> argument is used so that the compiler can
-find <a href="http://t1.minormatter.com/~ddunbar/klee-doxygen/klee_8h-source.html">"klee/klee.h"</a>,which
-contains definitions for the intrinsic functions used to interact with the KLEE
-virtual machine. <tt>-c</tt> is used because we only want to compile the code to
-an object file (not a native executable), and finally <tt>-g</tt> causes
-additional debug information to be stored in the object file, which KLEE will
-use to determine source line number information.</p>
-
-<p>If you have the LLVM tools installed in your path, you can verify that this step
-worked by running <tt>llvm-nm</tt> on the generated file:</p>
-<div class="instr">
-<pre>
-  <b>$ llvm-nm Regexp.o</b>
-         t matchstar
-         t matchhere
-         T match
-         T main
-         U klee_make_symbolic_name
-         d LC
-         d LC1
-</pre>
-</div>
-
-<p>Normally before running this program we would need to link it to create a
-native executable. However, KLEE runs directly on LLVM bitcode files -- since
-this program only has a single file there is no need to link. For "real"
-programs with multiple inputs,
-the <a href="http://llvm.org/cmds/llvm-link.html"><tt>llvm-link</tt></a>
-and <a href="http://llvm.org/cmds/llvm-ld.html"><tt>llvm-ld</tt></a> tools can
-be used in place of the regular link step to merge multiple LLVM bitcode files
-into a single module which can be executed by KLEE.</p>
-
-<h3>Step 2: Executing the code with KLEE</h3>
-
-<!-- FIXME: Make only-output-states-covering-new default -->
-<p>The next step is to execute the code with KLEE:</p>
-<div class="instr">
-<pre>
-<b>$ klee --only-output-states-covering-new Regexp.o</b>
-KLEE: output directory = "klee-out-1"
-KLEE: ERROR: .../klee/examples/regexp/Regexp.c:23: memory error: out of bound pointer
-KLEE: NOTE: now ignoring this error at this location
-KLEE: ERROR: .../klee/examples/regexp/Regexp.c:25: memory error: out of bound pointer
-KLEE: NOTE: now ignoring this error at this location
-KLEE: done: total instructions = 6334861
-KLEE: done: completed paths = 7692
-KLEE: done: generated tests = 22
-</pre>
-</div>
-
-<p>On startup, KLEE prints the directory used to store output (in this
-case <tt>klee-out-1</tt>). By default klee will use the first
-free <tt>klee-out-<em>N</em></tt> directory and also create a <tt>klee-last</tt>
-symlink which will point to the most recent created directory. You can specify a
-directory to use for outputs using the <tt>-output-dir=<em>path</em></tt>
-command line argument.</p>
-
-<p>While KLEE is running, it will print status messages for "important" events,
-for example when it finds an error in the program. In this case, KLEE detected
-to invalid memory accesses on lines 23 and 25 of our test program. We'll look
-more at this in a moment.</p>
-
-<p>Finally, when KLEE finishes execution it prints out a few statistics about
-the run. Here we see that KLEE executed a total of ~6 million instructions,
-explored 7,692 paths, and generated 22 test cases.</p>
-
-<p>Note that many realistic programs have an infinite (or extremely large)
-number of paths through them, and it is common that KLEE will not terminate. By
-default KLEE will run until the user presses Control-C (i.e. <tt>klee</tt> gets
-a SIGINT), but there are additional options to limit KLEE's runtime and memory
-usage:<p>
-<ul>
-  <li><tt>-max-time=<em>seconds</em></tt>: Halt execution after the given number
-  of seconds.</li>
-  <li><tt>-max-forks=<em>N</em></tt>: Stop forking after <em>N</em> symbolic
-  branches, and run the remaining paths to termination.</li>
-  <li><tt>-max-memory=<em>N</em></tt>: Try to limit memory consumption
-  to <em>N</em> megabytes.</li>
-</ul>
-</p>
-
-<h3>Step ?: Changing the test harness</h3>
-
-<p>FIXME: Step through & explain the test harness, and how we can modify it.</p>
-
-<p>FIXME: Write: show the important klee.h functions.</p>
-
-</div>
-</body>
-</html>