Welcome to the main channel on the development of MoarVM, a virtual machine for NQP and Rakudo (moarvm.org). This channel is being logged for historical purposes.
Set by lizmat on 24 May 2021.
00:02 reportable6 left 00:10 kjp joined 00:49 releasable6 joined 00:50 statisfiable6 joined, bloatable6 joined 01:03 reportable6 joined 01:05 dogbert11 joined 01:08 dogbert17 left 01:50 linkable6 joined 03:02 nine left, nine joined 03:48 greppable6 joined 03:49 nativecallable6 joined 04:13 lizmat_ joined, RakuIRCLogger left 04:14 TempIRCLogger left, lizmat left 04:15 Geth left 05:15 statisfiable6 left, squashable6 left, quotable6 left, bloatable6 left, tellable6 left, bisectable6 left, linkable6 left, releasable6 left, greppable6 left, sourceable6 left, coverable6 left, evalable6 left, committable6 left, shareable6 left, unicodable6 left, notable6 left, reportable6 left, nativecallable6 left, benchable6 left, reportable6 joined 05:16 committable6 joined, linkable6 joined 05:17 coverable6 joined, quotable6 joined, evalable6 joined 05:18 shareable6 joined, squashable6 joined 06:02 psydroid left, reportable6 left 06:10 psydroid joined 06:17 nativecallable6 joined 06:18 sourceable6 joined, benchable6 joined, tellable6 joined 07:04 reportable6 joined 07:15 statisfiable6 joined, bisectable6 joined 07:17 notable6 joined, greppable6 joined 08:16 unicodable6 joined 08:25 Geth joined 08:26 lizmat_ left, TempIRCLogger joined, lizmat joined 08:28 dogbert11 left, dogbert17 joined 08:35 dogbert11 joined 08:37 dogbert17 left 08:44 dogbert17 joined 08:46 dogbert11 left 08:50 dogbert11 joined 08:53 dogbert17 left 08:56 dogbert11 left, dogbert11 joined
Geth MoarVM: cd809ee472 | (Stefan Seifert)++ | src/6model/containers.c
Fix possible access to fromspace in code_pair_configure_container_spec

MVM_string_ascii_decode_nt allocates, so fetch can get moved during decoding of store.
09:05
nine dogbert11: this ^^^ fixes t/spec/S06-routine-modifiers/proxy.t. Thankfully it was a very straigt forward GC issue :) 09:06
09:12 dogbert17 joined 09:16 dogbert11 left 09:17 releasable6 joined
dogbert17 nine++, so no rabbit hole this time :) 09:23
09:52 dogbert11 joined 09:55 dogbert17 left 10:03 dogbert17 joined 10:04 dogbert11 left
timo :+1: 10:32
i guess contspecs are only created very very early
nine There may be a rabbit hole after all. I switched back to the new-disp-nativecall branch and accidentally run that test again instead of the one I wanted to continue on. And it segfaulted. 10:53
It does so reproducibly due to a broken frame in dispatch. Now I wonder: is this something that's simply already fixed on master and my branch lacks that fix? Or is it something that my branch just unveils due to different memory layout or something like that. Or maybe even a direct regression. 10:54
11:04 linkable6 left, evalable6 left
dogbert17 oh, so there was a rabbit hole after all :) 11:11
nine Ok, it's not a fix in master that the branch lacks 11:16
11:17 bloatable6 joined
nine According to my bisection result it's 93bfeab1ee3d62e1ba7415c3894d2c5803a947b7 "Remove old invoke protocol" 11:18
lizmat aww
nine Of all the commits in my branch, this one makes the most sense as it makes changes to frame allocation 11:19
The segfault seems to be caused by overwriting unrelated memory when promoting a frame to the heap, which could be due to miscalculating frame size 11:20
dogbert17 it's good that you found it 11:27
perhaps I should emulate timo and suggest rr :)
nine No need. That's how I know that its overwriting unrelated memory 11:34
timo nine's computer go brr 11:43
nine This is odd. jnthnwrthngtn++ recently changed it so a frame's work registeres are allocated on the callstack, basically as part of the frame. Yet MVM_frame_move_to_heap does not deal with work registers at all. The work pointer is just copied from the frame on the callstack and will still point into the callstack. 11:46
Now this looks very much like a simple oversight and could cause such interesting issues. But it also sounds like it would wreak havoc long before my branch. 11:47
Ah, I may just misunderstand things. Apparently the original callstack entry of the frame will remain 11:50
timo maybe this is about whether we'll run code in there again?
work is not accessible to inner frames and such, only the lexicals
12:02 reportable6 left 12:04 evalable6 joined 12:06 linkable6 joined
nine Oh what a perfect way to waste some time. Pro tip: after switching branches touching MoarVM headers, recompile rakudo. 12:52
nine can't wait to see extops gone
timo d'oh 12:57
12:58 frost joined 13:04 reportable6 joined
lizmat And yet another Rakudo Weekly news hits the Net: rakudoweekly.blog/2021/11/01/2021-...0-rakoons/ 13:38
Geth MoarVM: 0821570aaa | (Stefan Seifert)++ | src/6model/containers.c
Avoid MVMROOT by better sequencing of the code

zhuomingliang++ for suggesting this much better version of the GC issue fix
13:49 frost left
jnthnwrthngtn nine: The lifetime of ->work is always that of the dynamic scope of the frame, which is precisely the lifetime of the callstack record, so there's no need to move that (unlike the environment, which can - in a promoted frame - outlive the dynamic scope) 13:59
This is very much by design, not an oversight.
nine At least that motivated me to have a look at the remaining extops. Couldn't RAKUDO_FIRST_FLAG easily be replaced with a state var? 14:11
jnthnwrthngtn Cheaper in terms of keeping the loop body inlinable would be a secret lexical in the outer scope. 14:12
(We can't inline things with state vars, I'm not really hurrying to implement that, and it's probably easier to implement it as a lexical in the scope where the loop appears anyway)
timo it can't be a local from the start? 14:17
oh, only after inlining, of course
14:51 Altai-man joined, Voldenet left, Altai-man left 14:54 Voldenet joined 16:02 Voldenet left 16:07 Voldenet joined
dogbert17 Already set resume init args for this dispatcher 17:55
in block at t/spec/S02-types/range.t line 424
in sub subtest at /home/dogbert/repos/rakudo/lib/Test.rakumod (Test) line 437
this pops up when running with a (very) small nursery and MVM_SPESH_BLOCKING=1 plus MVM_SPESH_NODELAY=1 17:56
timo the --ll-exception here could be interesting 17:57
dogbert17 timo: gist.github.com/dogbert17/9c648c7e...c6e046b573 18:01
timo and dump_bytecode from inside that dispatcher as well
dogbert17 aha
timo did we get any further for the "need to use tracked capture" one from the other day? that was you with a small nursery as well wasn't it? 18:02
18:02 reportable6 left 18:04 reportable6 joined
dogbert17 timo: gist updated 18:05
the other bug didn't want to show itself when nine tried to repro :( 18:06
timo ok, so the only way to reach that error message is through the syscall dispatcher-set-resume-init-args 18:18
and there's only one call to that in our dumped bytecode
and this is the boot-resume-caller dispatcher i assume 18:20
i think my local v6c.nqp from BOOTSTRAP doesn't match the line numbers supplied 18:21
ok, i'm still on my branch so no big surprise
what's that line on your machine there? 18:22
might be interesting to see the contents of the record->rec.resume_inits 18:30
dogbert17 6481 # Initialization of a non-trivial dispatch. Receives a dispatch resumption 18:55
6482 # kind, which is zero if we're not resuming.
6483 -> $capture {
6484 # Extract and guard on the kind (first argument).
running it under gdb led to a 'MoarVM panic: Adding pointer 0x555555686208 to past fromspace to GC worklist' 19:01
(gdb) p *record->rec.resume_inits 19:06
$3 = {disp = 0x555556c9c698, capture = 0x55555555bc18}
I updated the gist with some info about the panic, perhaps nine++ can make something of that 19:12
timo so perhaps we're not marking everything in these records 19:45
19:53 Kaiepi left, Kaiepi joined 20:12 linkable6 left
timo how many resume inits are in there? you'll want to print the entire record->rec actually, forgot how that works 20:21
dogbert17 (gdb) p record->rec 20:37
$7 = {initial_capture = {capture = 0x55555555b2b0, transformation = MVMDispProgramRecordingInitial, index = 21845, value_index = 1516444472, captures = 0x55555a6a3490, captures_num = 1, captures_alloc = 8},
resume_kind = MVMDispProgramRecordingResumeCaller, inline_cache_size = 1, resumptions = 0x55555a69d6d0, resumptions_num = 3, resumptions_alloc = 4, values = 0x55555a6a4ac0, values_num = 26,
values_alloc = 34, resume_inits = 0x55555a69c7b0, resume_inits_num = 1, resume_inits_alloc = 4, outcome_value = 1516458416, outcome_capture = 0x0, bind_failure_resumption_flag = 1484418240,
bind_success_resumption_flag = 21845, map_bind_outcome_to_resumption = MVMDispProgramRecordingBindControlNone, do_not_install = 0 '\000'}
japhb What's with all the hex 5's? 20:41
timo ok so there's just the one resume_inits, the one you already posted, with the disp and the capture 20:42
japhb (BTW, I'm not actually just being silly, strings of 0101 are often used as sentinels, so it is really weird seeing it so much here.) 20:43
timo dogbert17 could give us the output of /proc/$pid/maps (or i guess gdb probably has a command that does something similar) where these address ranges live 20:44
dogbert17 timo: gist updated 20:53
timo ok the 5s are harmless then
japhb Weird, but yeah, I suppose so. 21:54
22:13 linkable6 joined 23:39 evalable6 left, linkable6 left 23:43 dogbert17 left 23:46 dogbert17 joined