Sorry if this is the wrong list. If there's a more appropriate one, please
let me know.
I've built a debug release of V8 (at git revision 1398078) for ARMv7, and I'm
trying to set GDB breakpoints in JIT-generated code. However when I do,
various crashes abound. Setting a breakpoint at the first instruction of an
unoptimized function results in a segfault, and doing the same thing in an
optimized function produces a sigabort due to a false assertion in the
deoptimizer.
Are others encountering this? Is there a workaround or maybe another
debugger that doesn't have these problems?
What follows is a breakdown of how I reproduce the crashes:
First, the unoptimized code case. I start the d8 shell in gdb and declare
and invoke a function, noting the address of the emitted code thanks to the
--print-code flag. I set a gdb breakpoint at that address, continue, then
invoke the same function again. Here, I would expect execution to pause at
the first instruction of the declared function, but instead I get a
segfault.
$ gdb --args out/arm.debug/d8 --print-code
GNU gdb (GDB) 7.4.1-debian
...
(gdb) r
...
d8> function foo(x) {return x ^ 0x1234;}
...
d8> foo(0);
...
--- Code ---
source_position = 12
kind = FUNCTION
name = foo
Instructions (size = 196)
0x2df888e0 0 e59d2004 ldr r2, [sp, #+4]
0x2df888e4 4 e59ac014 ldr ip, [r10, #+20]
...
(gdb) br *0x2df888e0
Breakpoint 1 at 0x2df888e0
(gdb) c
d8> foo(1);
...
Program received signal SIGSEGV, Segmentation fault.
0x2df888fc in ?? ()
(gdb) bt
#0 0x2df888fc in ?? ()
For the optimized code, my method is mostly the same, but the crash is
different. I start the d8 shell with --always opt to force optimized code
generation. After setting the breakpoint and invoking my JS function again,
there is an invalid assertion in the deoptimizer that crashes the process.
$ gdb --args out/arm.debug/d8 --print-code --always-opt
GNU gdb (GDB) 7.4.1-debian
...
(gdb) r
...
d8> function foo(x) {return x ^ 0x1234;}
...
d8> foo(0);
...
--- Optimized code ---
optimization_id = 21
source_position = 12
kind = OPTIMIZED_FUNCTION
name = foo
stack_slots = 1
Instructions (size = 131)
0x51f10720 0 e92d4882 stmdb sp!, {r1, r7, fp, lr}
0x51f10724 4 e1a0c00c mov ip, ip...
...
(gdb) br * 0x51f10720
Breakpoint 1 at 0x2df888e0
(gdb) c
d8> foo(1);
...
#
# Fatal error in ../src/deoptimizer.cc, line 2726
# CHECK_EQ(Smi::cast(function), Smi::FromInt(StackFrame::STUB)) failed
# Expected: 0x2
# Found: 0xc
#
==== C stack trace ===============================
(empty)
Program received signal SIGABRT, Aborted.
0xf75a7f96 in ?? () from /lib/arm-linux-gnueabihf/libc.so.6
(gdb) bt
#0 0xf75a7f96 in ?? () from /lib/arm-linux-gnueabihf/libc.so.6
#1 0xf75b5f8a in raise () from /lib/arm-linux-gnueabihf/libc.so.6
#2 0xf75b8428 in abort () from /lib/arm-linux-gnueabihf/libc.so.6
#3 0x00b20aaa in v8::base::OS::Abort () at
../src/base/platform/platform-posix.cc:220
#4 0x00b1d5ca in V8_Fatal (file=0xc89a2c "../src/deoptimizer.cc",
line=2726, format=0xc560d0 "CHECK_EQ(%s, %s) failed\n# Expected: %p\n#
Found: %p") at ../src/base/logging.cc:87
#5 0x005a8b60 in CheckEqualsHelper (file=0xc89a2c "../src/deoptimizer.cc",
line=2726, expected_source=0xc8b07c "Smi::cast(function)", expected=0x2,
value_source=0xc8b090 "Smi::FromInt(StackFrame::STUB)", value=0xc) at
.././src/base/logging.h:139
#6 0x006840be in v8::internal::Deoptimizer::ComputeIncomingArgumentSize
(this=0x19bd4d8, function=0x2) at ../src/deoptimizer.cc:2726
#7 0x0068405e in v8::internal::Deoptimizer::ComputeFixedSize
(this=0x19bd4d8, function=0x2) at ../src/deoptimizer.cc:2717
#8 0x00683fbc in v8::internal::Deoptimizer::ComputeInputFrameSize
(this=0x19bd4d8) at ../src/deoptimizer.cc:2700
#9 0x0067e91a in v8::internal::Deoptimizer::Deoptimizer (this=0x19bd4d8,
isolate=0x1995688, function=0x0, type=v8::internal::Deoptimizer::EAGER,
bailout_id=1, from=0x51f10790 "\001", fp_to_sp_delta=12,
optimized_code=0x0) at ../src/deoptimizer.cc:612
#10 0x0067d32e in v8::internal::Deoptimizer::New (function=0x2,
type=v8::internal::Deoptimizer::EAGER, bailout_id=1, from=0x51f10790
"\001", fp_to_sp_delta=12, isolate=0x1995688) at ../src/deoptimizer.cc:90
#11 0x5fb0a268 in ?? ()
#12 0x5fb0a268 in ?? ()
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
--
--
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users
---
You received this message because you are subscribed to the Google Groups
"v8-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.