You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Ali Ijaz Sheikh 52af5c4eeb deps: upgrade V8 to 5.0.71.32 9 years ago
..
Makefile deps: update v8 to 3.28.73 10 years ago
README deps: upgrade v8 to 3.18.4 12 years ago
bootstrap.sh deps: update v8 to 3.28.73 10 years ago
download_gcmole_tools.py deps: upgrade V8 to 5.0.71.32 9 years ago
gccause.lua Upgrade V8 to 3.7.12 13 years ago
gcmole-tools.tar.gz.sha1 deps: upgrade V8 to 5.0.71.32 9 years ago
gcmole.cc deps: update v8 to 3.28.73 10 years ago
gcmole.lua deps: upgrade v8 to 4.2.77.13 10 years ago
parallel.py deps: upgrade v8 to 4.2.77.13 10 years ago
run-gcmole.isolate deps: upgrade V8 to 5.0.71.32 9 years ago
run-gcmole.py deps: upgrade V8 to 5.0.71.32 9 years ago
run_gcmole.gyp deps: upgrade V8 to 5.0.71.32 9 years ago

README

DESCRIPTION -------------------------------------------------------------------

gcmole is a simple static analysis tool used to find possible evaluation order
dependent GC-unsafe places in the V8 codebase.

For example the following code is GC-unsafe:

Handle<Object> Foo(); // Assume Foo can trigger a GC.
void Bar(Object*, Object*);

Handle<Object> baz;
baz->Qux(*Foo()); // (a)
Bar(*Foo(), *baz); // (b)

Both in cases (a) and (b) compiler is free to evaluate call arguments (that
includes receiver) in any order. That means it can dereference baz before
calling to Foo and save a raw pointer to a heap object in the register or
on the stack.

PREREQUISITES -----------------------------------------------------------------

1) Install Lua 5.1

2) Get LLVM 2.9 and Clang 2.9 sources and build them.

Follow the instructions on http://clang.llvm.org/get_started.html.

Make sure to pass --enable-optimized to configure to get Release build
instead of a Debug one.

3) Build gcmole Clang plugin (libgcmole.so)