-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathREADME
64 lines (44 loc) · 2.95 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
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.