Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Last Writer Slicing: data provenance tracking for concurrent program debugging & analysis
C C++ Objective-C
branch: master

README

CTraps for GCC-4.8, as published at CGO 2015.
    
    Copyright (C) 2012-2014 Brandon Lucia blucia@cmu.edu

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

The accepted version of this paper is in this repository as ``paper.pdf''.
This is not the camera-ready version, but rather the accepted version with
author names added.

Build instructions for CGO Artifact Evaluation
-----------------------------------------------

This README will help you build the Last Writer Slices compiler pass and
runtime, and test them both on an included example program.  The output of the
test program shows the contents of the last writer table, which is the main
contribution of the paper.  README.orig describes the advanced features of this
system, such as how to build plugins (i.e., CTraps), and a few other features.
For a basic artifact evaluation, the most important component is the LWS
runtime described here.

This package was built and tested on OS X Mavericks, with homebrew installed.  First, clone the project from github:

0)$>git clone git@github.com:blucia0a/CTraps-gcc.git

To build the cloned project, there are a few prerequisites.

1)Install homebrew (http://brew.sh/)
2)$>brew install gcc48

That will install g++-4.8, which is used to build the plugin.

Homebrew changed the name of the libiberty.h header that is required by the plugin infrastructure. That means we need to symlink the renamed homebrew one to the original name using this command:

$>ln -s `brew --prefix`/Cellar/gcc48/4.8.3/lib/gcc/x86_64-apple-darwin13.3.0/4.8.3/plugin/include/libiberty-4.8.h `brew --prefix`/Cellar/gcc48/4.8.3/lib/gcc/x86_64-apple-darwin13.3.0/4.8.3/plugin/include/libiberty.h

After that, things should build.

$>cd Compiler; make
$>cd ../Runtime; make

On my machine, this process produces a few bit-shift width warnings that are safe to ignore, but no other errors.

The next thing to do is build and run the test program in Test/test.c

$>cd ../Test; make; make run

This runs the test driver.  By default, the Last Writer Slices runtime is
configured with #define ARTIFACTEVAL.  The effect of this is that each time the
Last Writer Table is updated, the runtime prints the variable's address, thread
ID, and program counter of the update.  Normally, this information would be
accessible via gdb (or lldb), but for the sake of making evaluation easier,
I've opted to display the output for the artifact evaluator.
Something went wrong with that request. Please try again.