00:29
ingy joined
|
|||
FROGGS | jnthn: that might be interesting gist.github.com/FROGGS/8efa32fce9e288e9f7f0 | 00:58 | |
jnthn: it seems like a MVMStaticFrame is exploding there | |||
jnthn: at src/core/interp.c:2268 is an alloc in box_i | 01:12 | ||
timotimo | so type should be temp-rooted? | 01:16 | |
adding that doesn't prevent the pointer to past fromspace :( | 01:23 | ||
but box_n and box_s do the same thing | 01:24 | ||
(also, aren't registers rooted anyway?) | |||
no change :\ | 01:28 | ||
01:49
jnap joined
02:04
jnap joined
02:20
eternaleye joined
02:27
eternaleye joined
03:03
ggoebel111 joined
03:39
colomon joined
04:13
jnap joined
|
|||
FROGGS | timotimo: it must be something before box_i | 06:46 | |
since the allocation in box_i just triggers a gc run | |||
timotimo | ah | 07:45 | |
FROGGS | morning timotimo | 07:50 | |
07:51
jnap joined
08:56
lizmat joined
09:19
lizmat_ joined
09:53
jnap joined
10:07
cognominal joined
10:42
tgt joined
|
|||
jnthn | Note that type doesn't need rooting in box_i 'cus it's used only as args to the next line, which allocates | 10:45 | |
FROGGS | yes, box_i just kicks the gc | 10:47 | |
jnthn | Right | ||
Interesting that it's a pointer to a static frame though | 10:48 | ||
FROGGS | yeah, I skimmed through the code, but was to sleepy to see anything | 10:49 | |
jnthn | It may (or may not) be helpful to know what was on the stack during the *previous* GC run | 10:52 | |
hm, I see a bug | 10:56 | ||
Though...how it'd be hit I dunno. | |||
No, that makes no sense to be the issue... | |||
dalek | arVM: 204495e | jnthn++ | src/core/frame.c: Add a missing write barrier. |
11:04 | |
FROGGS tries | |||
jnthn | I'm doubtful that does anything to help | ||
FROGGS | no, no change | 11:05 | |
I don't know how to look what was on the stack before :/ | 11:06 | ||
jnthn | I thought you did that once before? | 11:08 | |
FROGGS | yeah... | ||
jnthn | The thing with gc_seq_number? | ||
FROGGS reads clogs | |||
jnthn | And conditional breakpoint on that | 11:09 | |
dalek | arVM: 9f8d923 | jnthn++ | src/core/interp.c: Mame freshcoderef op less vulnerable to GC issues. |
11:11 | |
FROGGS | jnthn: okay, before it did src/core/interp.c:1959 | 11:13 | |
nqp::create | |||
gist.github.com/FROGGS/f703c5e110204da6a54a | 11:15 | ||
jnthn | OK, that tells us nothing really, then... | ||
FROGGS | jnthn: I stepped through from the second breakpoint: Breakpoint 2, MVM_gc_collect (tc=0x6033e0, what_to_do=<optimized out>, gen=gen@entry=0 '\000') at src/gc/collect.c:73 | 11:17 | |
73 process_worklist(tc, worklist, &wtp, gen); | |||
(gdb) finish | |||
Run till exit from #0 MVM_gc_collect (tc=0x6033e0, what_to_do=<optimized out>, gen=gen@entry=0 '\000') at src/gc/collect.c:73 | |||
run_gc (tc=tc@entry=0x6033e0, what_to_do=what_to_do@entry=0 '\000') at src/gc/orchestrate.c:267 | |||
267 for (i = 0, n = tc->gc_work_count ; i < n; i++) { | |||
(gdb) finish | |||
Run till exit from #0 run_gc (tc=tc@entry=0x6033e0, what_to_do=what_to_do@entry=0 '\000') at src/gc/orchestrate.c:267 | |||
MVM_gc_enter_from_allocator (tc=tc@entry=0x6033e0) at src/gc/orchestrate.c:380 | |||
380} | |||
(gdb) finish | |||
Run till exit from #0 MVM_gc_enter_from_allocator (tc=tc@entry=0x6033e0) at src/gc/orchestrate.c:380 | |||
MVM_gc_allocate_nursery (tc=0x6033e0, size=64) at src/gc/allocation.c:29 | |||
29 while ((char *)tc->nursery_alloc + size >= (char *)tc->nursery_alloc_limit) { | |||
(gdb) finish | |||
Run till exit from #0 MVM_gc_allocate_nursery (tc=0x6033e0, size=64) at src/gc/allocation.c:29 | |||
0x00007ffff7a00ada in MVM_gc_allocate_object (tc=0x6033e0, st=0x78c708) at src/gc/allocation.c:84 | |||
84 MVMROOT(tc, st, { | |||
Value returned is $2 = (void *) 0x7ffff6a4cd30 | |||
(gdb) finish | |||
Run till exit from #0 0x00007ffff7a00ada in MVM_gc_allocate_object (tc=0x6033e0, st=0x78c708) at src/gc/allocation.c:84 | |||
MVM_interp_run (tc=tc@entry=0x6033e0, initial_invoke=initial_invoke@entry=0x7ffff7a30330 <toplevel_initial_invoke>, invoke_data=<optimized out>) at src/core/interp.c:1960 | |||
1960 GET_REG(cur_op, 0).o = obj; | |||
Value returned is $3 = (MVMObject *) 0x7ffff6a4cd30 | |||
(gdb) finish | |||
Run till exit from #0 MVM_interp_run (tc=tc@entry=0x6033e0, initial_invoke=initial_invoke@entry=0x7ffff7a30330 <toplevel_initial_invoke>, invoke_data=<optimized out>) | |||
at src/core/interp.c:1960 | |||
Breakpoint 1, process_worklist (tc=tc@entry=0x6033e0, worklist=worklist@entry=0x53fa7f0, wtp=wtp@entry=0x7fffffffd910, gen=gen@entry=1 | 11:18 | ||
err | |||
sory | |||
gist.github.com/FROGGS/f703c5e1102...ile-2-bash | |||
>.< | |||
jnthn | ... | ||
Sure, there you're just running it until it hits the next GC, though, I guess... | 11:19 | ||
FROGGS | before the nqp::create it did OP(takeclosure) | 11:20 | |
jnthn | takeclosure *does* do stuff with static frames... | ||
FROGGS | yeah | ||
I'll print its pointer to see if this one is it | 11:21 | ||
jnthn | Could always try a build with frame.c not optimized, too... | 11:23 | |
11:24
colomon joined
|
|||
FROGGS | okay, MVM_frame_takeclosure seems involved | 11:25 | |
the reported pointer is `closure` | |||
jnthn | The out-dated pointer? | 11:27 | |
FROGGS | yes | ||
the one from "Heap corruption detected: pointer 0x7ffff69fc650 to past fromspace" | |||
jnthn | o.O | ||
FROGGS | this pointer is reported five times in MVM_frame_takeclosure due to my print statement | 11:28 | |
four times with different code pointers, but the fifth code pointer is indentical to the fourth | 11:29 | ||
jnthn | But...closure is allocated each time in that routine... | ||
FROGGS | so we are taking a closure of the same code I guess? | ||
jnthn | Are we talking about code or about closure here? | ||
Yes, that's very likely, but it's code I'd expect to see repeated, not closure... | 11:30 | ||
Unless this is entire execution? | |||
FROGGS | gist.github.com/FROGGS/2e518058dcd3661d5c4e | 11:31 | |
and that is for the entire compilation of m-BOOTSTRAP | 11:32 | ||
jnthn | Can you print the gc_seq_number out for each of those too? | 11:35 | |
FROGGS | k | 11:36 | |
jnthn: updated gist.github.com/FROGGS/2e518058dcd3661d5c4e | 11:39 | ||
jnthn | Ah, they're spread over many runs... | 11:47 | |
150...and which is the seq number where we crash? | 11:48 | ||
FROGGS | jnthn: 180 | 11:51 | |
jnthn | Whoa, that's still a good way off | 11:52 | |
Can you maybe try dong a print like that in the allocate function of MVMStaticFrame.c? | |||
FROGGS | k | ||
jnthn | So we can catch every allocation of them? | ||
FROGGS | ahh, it allocates an MVMCode, not MVMStaticframe | 12:00 | |
jnthn | takeclosure? Yes... | ||
FROGGS | should I print every allocation of MVMStaticFrame then? | 12:01 | |
jnthn | Well, every matching one, yes | ||
FROGGS | there are not too many as it seems | ||
jnthn | No, there shouldn't be many in total | ||
So could just do all then filter it | |||
FROGGS | there is no matching one | 12:02 | |
ohh, you mean the ones that match closure->body.sf | |||
jnthn | No, that match the one in the error | 12:03 | |
FROGGS | no match | ||
MVMCode->allocate matches though | 12:04 | ||
jnthn: here is a better gist: gist.github.com/FROGGS/01405a4286863c673fbc | 12:07 | ||
JimmyZ | jnthn: Did you see my message to you? :P | 12:15 | |
jnthn | JimmyZ: About the probably unrequired flatten_ropes call? | 12:16 | |
JimmyZ | yeah | ||
jnthn | I suspect you're right... | ||
12:26
colomon joined
12:56
jnap joined
|
|||
nwc10 | I have a SEGV after stage mbc with: | 13:00 | |
238 if (handle->type == UV_SIGNAL) | |||
$1 = (uv_handle_t *) 0xfff7ddbe60ddc040 | |||
running with valgrind | |||
expect more in about 3 hours | |||
FROGGS | so, handle is null I guess | 13:02 | |
nwc10 | um, it's garbage, not NULL. | 13:03 | |
FROGGS | that might be the issue jnthn++ pointed out last night | 13:05 | |
jnthn | Quite possibly, yes. | 13:08 | |
13:33
camelia joined
|
|||
FROGGS | jnthn: I just think the printed pointers are coincidences... the printed ones have repr MVMCode while the exploding one show MVMStaticFrame | 14:09 | |
jnthn | Sonds like :( | ||
Though, maybe the printed ones point us to where we store something that later becomes invalid... | 14:10 | ||
14:17
tgt joined
14:35
lizmat joined,
jnap joined
14:46
ggoebel111 joined
|
|||
FROGGS | jnthn: it appears in GCDEBUG: gist.github.com/FROGGS/01405a4286863c673fbc | 15:52 | |
or, hmmm | 15:53 | ||
no, the exploding one has repr id 23 | 15:54 | ||
TimToady | FROGGS: if you're using irssi, you should know about paste_verify_line_count, which prevents most accidental pastes | 16:06 | |
FROGGS is an XChat user | |||
but I might switch some day | 16:07 | ||
arnsholt | Yeah, the "are you sure you want to paste all of this junk" functionality in irssi is a lifesaver | 16:10 | |
diakopter | yeah but it doesn't always work for me | 16:37 | |
TimToady has his set to 1, so sometimes it gets false positives on echo lag, but rarely produces a false negative | 16:39 | ||
TimToady doesn't mind typing an extra ^K occasionally to confirm | 16:40 | ||
17:16
lizmat joined
|
|||
dalek | arVM: 9bb18f5 | (Tobias Leich)++ | src/gc/collect.c: fix s/%d/%p/ in GCDEBUG and print reprid in two others |
17:42 | |
FROGGS | jnthn: is there something else in that exploding sf that gives us useful information? | 17:45 | |
jnthn | Not that I can immediately think of :( | 17:46 | |
FROGGS | :/ | ||
gc bugs are really the worst things out there | 17:47 | ||
18:01
ssutch joined
18:11
colomon joined
|
|||
FROGGS | btw, it seems like to happen after switching from<=>tospace | 18:43 | |
because I added a print stmt in MVMStaticFrame->allocate, and after a block of similar mem addresses, there is one that sticks out and then the crash | 18:45 | ||
18:51
lizmat joined
|
|||
nwc10 | bad news - valgrind only shows the base64_* errors | 18:59 | |
so I think that that means that "GC bug" is the most likely | |||
20:03
jnap joined
20:40
lue joined
21:11
lizmat joined
21:33
colomon joined
22:03
colomon_ joined
22:05
jnap1 joined
23:48
lizmat joined
|