[pypy-dev] Fuzzing with Fusil and JIT crash
Victor Stinner
victor.stinner at haypocalc.com
Sun Oct 11 01:12:17 CEST 2009
Hi,
Because of the last posts on your blog (a JIT better than just a PoC), I
choosed to give a new try to PyPy. I'm trying PyPy with Fusil the fuzzer
because it's my project, so I can easily fix bugs in Fusil, and also because
it's a great tool to find bugs in PyPy :-)
I already found some bugs/crashs (see PyPy's bugtracker), but it's not bad
(there are few bugs if you compare it to other projects). Since PyPy is open
source, I can write patches to fix the issues ;-)
Slowly, I know PyPy enough to fix RPython bugs (I mean to fix modules written
in RPython). But now my problem are the JIT crashes. I'm unable to locate the
crash. There is not enough informations:
BROKEN PROFILER DATA!
~~~ Crash in JIT!
~~~ <AssertionError object at 0x8449878>
BROKEN PROFILER DATA!
Fatal RPython error: CrashInJIT
Ok, nice, a crash. But where? What is the assertion? Sometimes, it fails with
a TypeError (same output except the exception type).
gdb doesn't help:
(gdb) where
#0 0xb7fe1424 in __kernel_vsyscall ()
#1 0xb7c1d3d0 in raise () from /lib/i686/cmov/libc.so.6
#2 0xb7c20a85 in abort () from /lib/i686/cmov/libc.so.6
#3 0x0804ce1e in main ()
"main()", that's all. No file name or line number :-/
On IRC, we asked me to recompiled PyPy using the hidden "make debug_exc"
command. But it doesn't change anything. I'm not sure that the make did really
enable the hidden debug features. How can I check it? Does it output something
special? Always or only on a crash. On a crash, the output is the same using
pypy-c-jit ("make") or pypy-c-jit-debug ("make debug_exc").
I will retry to recompile PyPy from scratch using directly the right commmand
("make debug_exc").
Note: Don't try to compile PyPy C backend using -O0 or -O1. Only "-O3" and "-
O2 -fomit-frame-pointer" are supported.
Note2: "make clean" doesn't remove testing_1.s. Someone told me that it should
be fixed now.
Oh, another problem: on make failure, all .s files are removed. It's not
possible to debug the error. I added ".PRECIOUS: %.s" in the Makefile. Can it
be done by default?
---
If you would like to try Fusil, it's available in Debian, Ubuntu, Mandriva,
OpenEmbedded, Arch Linux, MacPort, Gentoo, ... For better performances and
fewer false positives, clone the Mercurial repository. Fusil website:
http://bitbucket.org/haypo/fusil/wiki/Home
To reproduce the JIT crash, it takes 20 to 60 seconds using the following
command:
export PYTHONPATH=~/prog/HG/fusil/:~/prog/HG/python-ptrace/
./pypy-c-jit-debug --jit threshold=10 \
~/prog/HG/fusil/fuzzers/fusil-python \
--success=100 --blacklist=logging,compileall,this,socket
(socket is blacklisted because of the issue #465, a crash in _ssl)
You don't need to install Fusil if you change the PYTHONPATH.
--
Victor Stinner
http://www.haypocalc.com/
More information about the Pypy-dev
mailing list