github.com/moarvm/moarvm | IRC logs at colabti.org/irclogger/irclogger_logs/moarvm Set by AlexDaniel on 12 June 2018. |
|||
01:17
lizmat left
01:30
lizmat joined,
p6bannerbot sets mode: +v lizmat
02:36
lucasb left
06:13
robertle left
06:42
Kaiepi left
06:46
Kaiepi joined
06:47
p6bannerbot sets mode: +v Kaiepi
07:03
domidumont joined,
p6bannerbot sets mode: +v domidumont
07:18
lizmat left
|
|||
Geth | MoarVM: 6455d1f6ac | (Ben Davies)++ | src/platform/sys.c Fix double free in platform/sys.c |
07:18 | |
MoarVM: d7a4c4c56b | niner++ (committed using GitHub Web editor) | src/platform/sys.c Merge pull request #1008 from Kaiepi/cpus Fix double free in platform/sys.c |
|||
07:29
lizmat joined,
p6bannerbot sets mode: +v lizmat
07:35
travis-ci joined,
p6bannerbot sets mode: +v travis-ci
|
|||
travis-ci | MoarVM build failed. niner 'Merge pull request #1008 from Kaiepi/cpus | 07:35 | |
travis-ci.org/MoarVM/MoarVM/builds/464205207 github.com/MoarVM/MoarVM/compare/f...a4c4c56b7f | |||
07:35
travis-ci left
|
|||
nine | The failure is apparently due to a label key conflict. It tries to reference a label that hasn't been added to the frame yet. This sounds suspiciously like the 32 bit problem reported by dogbert++ | 07:55 | |
Since the label key is just the nqp::objectid($label), I wonder: shouldn't that id be unique? | 07:56 | ||
timotimo | when you request the objid of something, it gets "pinned" | 07:57 | |
by getting a permanent slot in the gen2 allocated for it | |||
which, i now realize, could perhaps be avoided for mild memory savings | |||
nine | And the id is essentially the new permanent memory address. | ||
timotimo | aye | 07:58 | |
nine | So how can that not be unique? | ||
timotimo | good question! | ||
nine | This build failure shows that clearly the issue also exists on 64 bit architectures. The smaller address space on 32 bit just makes it much more probable. | ||
Oh | 07:59 | ||
I looked at the wrong end. I audited the code multiple times to make sure the label object is still referenced at the point of the error and it's address hasn't been re-used yet. | |||
But it's entirely possible that a different label in the same frame has lived at the same address before. | 08:00 | ||
And has been collected in the meantime. | |||
timotimo | could try verifying the assumption by putting the objid it got at the start in an attribute and later check if it's still right | ||
hm, re-use of the slot is possible i guess, though i don't know if we perhaps have something to prevent that | 08:01 | ||
which of course would be a good way to DOS a program i guess | |||
nine | So, either I add a destructor to MAST::Label that removes the label from the frame's %!labels lookup hash, or I collect the labels in the frame itself to prevent them from being freed until the frame is done compiling. | 08:02 | |
timotimo | the latter doesn't seem too hard? | 08:03 | |
how many labels would get their lifetime extended by that? | |||
and for how long? | |||
nine | Probably all of them until the comp unit is finished. | 08:06 | |
timotimo | oh, hmm. | ||
nine | But labels are also tiny objects consisting of just an int | ||
timotimo | fwiw, the object header makes them not quite as tiny :P | 08:14 | |
08:20
robertle joined
08:21
p6bannerbot sets mode: +v robertle
10:06
lucasb joined,
p6bannerbot sets mode: +v lucasb
10:50
zakharyas joined
10:51
p6bannerbot sets mode: +v zakharyas
10:58
dogbert2_ joined
10:59
p6bannerbot sets mode: +v dogbert2_
11:06
domidumont left
13:00
domidumont joined,
p6bannerbot sets mode: +v domidumont
13:03
robertle left
13:05
robertle joined
13:06
p6bannerbot sets mode: +v robertle
13:14
zakharyas left
13:52
zakharyas joined,
p6bannerbot sets mode: +v zakharyas
13:56
robertle left
14:04
robertle joined
14:05
p6bannerbot sets mode: +v robertle
15:05
lizmat left
15:30
lizmat joined,
p6bannerbot sets mode: +v lizmat
15:35
robertle left
15:37
robertle joined
15:38
p6bannerbot sets mode: +v robertle
16:18
robertle left
16:26
Geth left
16:31
domidumont1 joined
16:32
p6bannerbot sets mode: +v domidumont1
16:34
domidumont left
16:46
zakharyas left
16:52
domidumont1 left
|
|||
AlexDaniel | please some attention to M#1009 | 17:01 | |
synopsebot_: help | 17:02 | ||
anyway: github.com/MoarVM/MoarVM/issues/1009 | |||
nine | Looks like an endianness issue in the bytecode writer | 17:43 | |
timotimo | my first thought, too | ||
who made versions a signed integer? :D | 17:44 | ||
lucasb | check if the first bytes are ARMOVM or whatever is the representation of the signature in the other endianness platform | 17:55 | |
j/k, dunno if this check would work :) | 17:56 | ||
github.com/MoarVM/MoarVM/blob/mast...#L145-L146 | 18:00 | ||
ah, the MOARVM test is done before the version test | |||
Would be informative to dump version variable (and maybe MIN_BYTECODE_VERSION and MAX_BYTECODE_VERSION) in those messages | 18:01 | ||
nine | Nah, MoarVM's bytecode has a well defined byte order | ||
I think, writeint is missing support for the endian flag | 18:04 | ||
18:15
robertle joined,
p6bannerbot sets mode: +v robertle
|
|||
nine | Darn....I just stumbled over the sentence "Operations not configured with one of these options will assume native endian." which means that I left too little space for the endian-flags. I'd need 2 bits instead of just 1 | 20:30 | |
Fixing that requires another coordinated change in nqp and MoarVM | 20:32 | ||
Unless I work around that by using some high bit, i.e. 0x100000000 | 20:33 | ||
for nqp::const::BINARY_ENDIAN_LITTLE and 0x100000001 for nqp::const::BINARY_ENDIAN_BIG | |||
But then, I'd still need to add nqp::const::BINARY_ENDIAN_LITTLE to all the (many) callers for it to actually have an effect on big endian machines. But at least we'd stay backwards compatible on little endian ones | 20:35 | ||
timotimo | i have a suggestion for you | 20:39 | |
the qastcompiler can introspect how many arguments an op was called with | |||
if you just check if there was an "extra" argument, interpret that as the big/little endian marker, otherwise just spit out a call with the default endianness flag | 20:40 | ||
there ought to already be some ops that work like that | |||
20:41
brrt joined,
p6bannerbot sets mode: +v brrt
|
|||
nine | But all existing callers actually need to set the little endian flag | 20:50 | |
timotimo | in that case make that the default? | 20:53 | |
nine | The existing callers need it because MoarVM's bytecode is explicitly in little endian. In other cases defaulting to the native endianness makes most sense. | 21:03 | |
brrt | ohai | 21:05 | |
timotimo | yo brrt | 21:11 | |
brrt | \o timotimo | 21:19 | |
can i just say that dynasm is an evil piece of code | |||
timotimo | well, it has to do a pretty evil job | ||
brrt | hmmm | 21:20 | |
I've pondered rewriting it in perl | |||
timotimo | a friend of mine is going to give a public little talk on x86 assembly in a few days | ||
brrt | but. maybe let's not | ||
hehe | |||
yeah, x86 encoding is a bit hairy | |||
anyway, /me -> mario kart | |||
:-) | |||
timotimo | have fun! | ||
21:20
brrt left
23:47
MasterDuke joined
23:48
p6bannerbot sets mode: +v MasterDuke
23:51
MasterDuke left
23:55
MasterDuke joined
23:56
p6bannerbot sets mode: +v MasterDuke
|