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.
 
 
 
 
 
 
Myles Borins 0a66b223e1
deps: update V8 to 6.0.286.52
7 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: update V8 to 5.8.283.38 8 years ago
gcmole.cc deps: update V8 to 5.8.283.38 8 years ago
gcmole.lua deps: update V8 to 6.0.286.52 7 years ago
parallel.py deps: upgrade v8 to 4.2.77.13 10 years ago
run-gcmole.isolate deps: update V8 to 5.5.372.40 8 years ago
run-gcmole.py deps: update V8 to 5.9.211.32 7 years ago
run_gcmole.gyp deps: update V8 to 5.4.500.27 8 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)