00:27
leont joined
01:23
colomon joined
01:34
geekosaur joined
01:44
geekosaur joined
01:46
geekosaur joined
02:56
vendethiel joined
04:18
geekosaur joined
06:26
japhb joined
|
|||
nwc10 | good *, #moarvm | 07:34 | |
07:48
zakharyas joined
07:56
patrickz joined
08:05
FROGGS joined
08:23
zakharyas joined
08:49
ShimmerFairy joined
09:54
zakharyas joined
10:04
brrt joined
10:06
leont joined
|
|||
brrt | ohhai #moarvm | 10:06 | |
i just had a mildly evil idea that i just can't find the flaw on yet | |||
you might know that i've added a facility to extract the values used into a single tile out of the tree into a linear array; that is very useful for ensuring that values which should be in a register are actually there | 10:07 | ||
as well as ensuring that values which are never further used are 'killed' | 10:08 | ||
anyway, a very simple and practical difficulty in tiler linearisation is that i want to interleave the tiles with nodes representing the 'inter-tile-work' that is done by the compiler | 10:11 | ||
that is to say, i want to insert loads, stores, labels, and conditional jumps, because that is all there is | |||
bear with me; i'll get to the point :-) | |||
these things all take integer values as arguments | 10:12 | ||
i can store any number of integers in the expression tree as arguments | |||
i can extract a number of intergers out of the expression tree, by the above-mentioned mechanism | |||
hence, i can insert the arguments for these functions into the tree, and deal with them as i would with regular tiles | 10:13 | ||
i can create fake pseudotiles, and all will be well.... | |||
but it's conflating of the tree and its' storage mechanism, for one thing, and reusing that storage mechanism for nefarious purposes, too | 10:14 | ||
hence, big software engineering red flag | 10:15 | ||
but, it will work | |||
you may understand my dillema :-) | |||
stmuk | do I open MoarVM bugs on RT or GH? | 10:28 | |
brrt | both are fine i think | 10:29 | |
RT is used a little more? but I use github personally | |||
stmuk: what's the bug? | |||
stmuk | the build has recently broken on FreeBSD | ||
I have a crude fix | 10:30 | ||
but not sure putting an #ifndef __FreeBSD__ in is that good nice | |||
ah its reported with a similar fix anyway | 10:32 | ||
github.com/MoarVM/MoarVM/issues/311 | |||
brrt | oh, yes, i can recall that | 10:36 | |
i don't like the suggested fix; it'll end up with a long list of platforms that have fileno defined as a macro | 10:39 | ||
iirc, jnthn recently added the native-fileno method on file handles | |||
i'd prefer renaming the function fileno to native_fileno or something like that | 10:40 | ||
10:46
virtualsue joined,
Peter_R joined
|
|||
jnthn | It ended up as native-descriptor | 10:57 | |
I think we'll go with something like that as the name in Moar too | 10:58 | ||
brrt | descriptor, that's the right term | 11:04 | |
timotimo | yeah | 11:12 | |
brrt: if you have design decisions like that, why not "plan to throw one away"? ;P | |||
see where it leads you? | |||
brrt | hmmm | ||
good enough point.... | 11:13 | ||
timotimo | i don't really see the big trouble with using a pseudotile for the inter-tile compiler work | ||
it reminds me a tiny bit of how PHI nodes are handled in spesh | 11:14 | ||
those are fake, too, in that they have an opcode of MVM_SSA_PHI, but there's actually multiple info structs allocated for them, because every PHI node can have a different number of arguments | |||
brrt | well, there's another option, and i would like it best if it didn't involve a whole bunch of allocation work | ||
which is, copy the arguments into an array..... | 11:15 | ||
oh | |||
that is not even a really bad idea | |||
now that i think of it | |||
i can just use a fixed-size array internal to the 'linear tile node' and pass it to the tile when it is time to emit it | 11:16 | ||
that... fixes all my objections, which were (among other things) 'gee, isn't it a pain to manage a billion pointers for such a simple thing' | |||
timotimo++ # you've just made my day :-D | 11:17 | ||
timotimo | <3 | ||
brrt | (urgh, i'm entering the relative-overcaffeniation/under-caloric state, which means it is time for lunch) | 11:18 | |
timotimo | i just had a tiny noms break my own self | 11:25 | |
i'm amazed i could pump out such good advice while nomming on some toast | |||
jnthn is still on breakfast... :) | 11:29 | ||
timotimo | i've only had a miniature breakfast so far :) | 11:30 | |
dalek | arVM: 1a896ff | jnthn++ | src/io/io. (2 files): Fix build bustage where fileno is a macro. Turns out that C macros don't C so well. |
11:43 | |
nwc10 | jnthn: "still"? surely any meal is correct when one is in UGT? | 11:44 | |
jnthn | True :) | 11:45 | |
stmuk | with regard to github.com/MoarVM/MoarVM/issues/311 the parans fix of cygx might be a good temporary solution allowing *BSD until fileno is renaming (which appears to be in multiple places?) | 11:48 | |
s/ing/ed | |||
jnthn | stmuk: I already did it above | 11:50 | |
stmuk | d'uh | ||
jnthn | :) | ||
stmuk | :) | ||
jnthn | Don't have a BSD to test it on though, so that'd be appreciated by anyone who does | ||
stmuk | oh I thought it was renaming the opcode as well | 11:51 | |
I can test | |||
jnthn | opcode should be harmless | ||
brrt has a bsd vm stashed somewhere | 12:06 | ||
nwc10 | 1cc1: error: unrecognized command line option "-Wno-logical-op-parentheses" | 12:10 | |
ops | |||
cc1: error: unrecognized command line option "-Wno-logical-op-parentheses" | |||
OK, how do I get round that one... | 12:11 | ||
--compiler=gcc | 12:12 | ||
jnthn | Upgrade to a newer clang? :P | ||
nwc10 | OK, bigger F-up | ||
no, really, what we need is someone who understands Win32 and *nix to produce (or "buy in") a better configuration system that doesn't pre-code a bunch of assumptions | |||
but, failing that | |||
I get to fix the gnu-make assumptions | |||
oh wait | |||
gmake is installed | |||
stmuk | it works on NetBSD I'm just waiting for the old clunky clang to finish | ||
nwc10 | I'll ignore that bug for now too | 12:13 | |
stmuk | clang36+ on FreeBSD is much faster than the default one | ||
nwc10 | I'm not root | ||
stmuk | nwc10: which platform is this? | 12:14 | |
nwc10 | 7.2-RELEASE FreeBSD | 12:15 | |
and I'm not going to say *where*, as IIRC that's out of security | |||
stmuk | hahaha | 12:16 | |
nwc10 | OK | ||
sorry, | |||
build FAIL | |||
there are gmake assumptions in the top level Makefile | |||
stmuk | it works (or worked) on FreeBSD 8.x | ||
nwc10 | and some sort of "doesn't like gmake" assumptions somewhere lower | ||
oh, odd | 12:17 | ||
`gmake -` *works* | 12:18 | ||
MoarVM builds | |||
stmuk | nwc10: if you wanted a modern toolchain you could probably use pkgsrc with a prefix of $HOME/pkg or whatever | 12:21 | |
nwc10 | I didn't know one could do that | 12:22 | |
stmuk | its useful for people stranded on obsolete systems in industry :/ | 12:23 | |
nwc10 | for now, I seem to be getting a viable build with the default ancient(ish) toolchain | 12:24 | |
stmuk | an old gcc is probably faster than an old clang anyway :) | 12:32 | |
brrt | nwc10, current version is 10.2 ? :-o | 12:40 | |
and yes, there are gmake assumptions | |||
nwc10 | something like that | ||
brrt | there is also special nmake magic i think | ||
i wonder if the state-of-the-art in perl5 Configure.pl scripts has improved | 12:41 | ||
i would *hate* to lose make, fwiw | |||
also, i would equally hate to lose perl5-as-a-guaranteed-property-of-the-build process | |||
nwc10 | I'd love to see the assumption of perl *5* gone from the build process. | 12:42 | |
brrt | but but but | ||
nwc10 | I'm biased. | ||
brrt | i use perl5 for my preprocessors | ||
i'd have to rewrite everything in minilua :-P | |||
nwc10 | "rebuild" is different from bootstrap | ||
brrt | hmmm | ||
stmuk | I think removing perl 5 dependency from panda type installs should be first | 12:43 | |
brrt | lets just say i wouldn't like to checkin the generated headers from preprocessing templates / tile descriptions | ||
stmuk | I don't think needing perl 5 to build is unreasonable | ||
brrt | thing is, something like luajit gets by *just fine* with a single makefile, no preconfiguring necessary | 12:44 | |
nwc10 | I *do* | ||
brrt | configuring is imho an autotools legacy, and if we *can* get away without it, that would be better | ||
nwc10 | but that's because I don't want to mandate that someone keeps having to maintain Perl 5, just so that Perl 6 can build | 12:45 | |
but this is at the 10 year timescale. | |||
but you're right that Panda is the thing to start with | |||
work from that end backwards, and see where things go | |||
stmuk | anyway moarvm builds on all 3 major BSDs (I deleted my DragonFlyBSD sadly) | 12:48 | |
nwc10 | stmuk++ | 12:50 | |
doing better than me | |||
stmuk | virtualbox++ | 12:51 | |
brrt | i think people will be maintaining perl5 for such timescales whether we want them to or not | 13:02 | |
nwc10 | oh yes, I don't disagree with *that* | ||
but it shouldn't be forever | 13:03 | ||
but start with Panda and work back | |||
it should be viable for everything from NQP onwards to build without Perl 5, given that NQP already self-bootstraps with code written in NQP | 13:04 | ||
and we're a long way from getting to that | |||
which is "easy" (for a dubious value of easy) | |||
"we" also need to address the toolchain code duplication between NQP and Rakudo | |||
and all of that is probably more important and easier than any (semi) ideological purge of Perl 5 | 13:05 | ||
stmuk | I rather liked the current perl configure scripts since they were very clear and better than most perl 5 I've seen | ||
nwc10 | they are pretty clear, but there are too many copies of the same code in 2 or 3 repositories | ||
and there's too much assupmtion/not enough probing | |||
(I'm biased) | 13:06 | ||
but, as you said, start with Panda | |||
stmuk | certainly nicer than the usual auto* and the increasingly popular cmake | ||
I think leont has a prove6 type thing already | 13:08 | ||
brrt nods | 13:17 | ||
yeah, the whole thing can be made much more robust | |||
but there is so much encoded knowledge there.... | |||
pretty much nobody knows all that about all platforms | 13:18 | ||
jnthn back | 13:39 | ||
13:40
geekosaur joined
13:41
geekosaur joined
|
|||
brrt | ohai jnthn | 13:54 | |
jnthn | o/ brrt | ||
dalek | arVM: 8aa4cd4 | jnthn++ | / (3 files): Configure bits for \n -> \r\n on output. |
13:57 | |
arVM: e7ebeb9 | jnthn++ | src/ (12 files): Implement input newline translation. Applies to all I/O handles except sockets. |
14:23 | ||
14:36
travis-ci joined
|
|||
travis-ci | MoarVM build failed. jnthn 'Implement input newline translation. | 14:36 | |
travis-ci.org/MoarVM/MoarVM/builds/97224178 github.com/MoarVM/MoarVM/compare/8...ebeb957a29 | |||
14:36
travis-ci left
|
|||
jnthn | I bet that'll be heisenbuild... :P | 14:36 | |
dalek | arVM: 6935e94 | jnthn++ | / (30 files): Translate newline \n -> \r\n on output. When doing I/O for anything except sockets, and only when configured to do so (meaning "on Windows builds"). |
15:01 | |
jnthn | heh, not heisenbuild :) | 15:05 | |
dalek | arVM: 49f10b9 | jnthn++ | src/strings/normalize.c: Fix missing intialization. |
15:07 | |
15:16
travis-ci joined
|
|||
travis-ci | MoarVM build failed. jnthn 'Translate newline \n -> \r\n on output. | 15:16 | |
travis-ci.org/MoarVM/MoarVM/builds/97232730 github.com/MoarVM/MoarVM/compare/e...35e941dfc1 | |||
15:16
travis-ci left
|
|||
nwc10 | jnthn: t/moar/03-line-seps.t fails | 15:16 | |
not ok 14 - \r\n separator used | |||
jnthn | Yeah, that test is now wrong | 15:17 | |
Fixed locally | |||
15:27
travis-ci joined
|
|||
travis-ci | MoarVM build failed. jnthn 'Fix missing intialization.' | 15:27 | |
travis-ci.org/MoarVM/MoarVM/builds/97233863 github.com/MoarVM/MoarVM/compare/6...f10b9b8651 | |||
15:27
travis-ci left
16:20
domidumont joined
16:21
zakharyas joined
|
|||
brrt | commute & | 16:22 | |
16:25
zakharyas joined
16:53
zakharyas joined
|
|||
jnthn | Seems we we aren't especially validating typevars properly | 16:59 | |
In the bytecode validator | |||
Meaning we get away with spitting out bytecode for various things with very dubious behaviors | |||
Like num32 lex being read into a num64 register, and vice versa | 17:00 | ||
Without the appropriate coercion | |||
timotimo | that could be kinda bad | 17:01 | |
jnthn | Yes, it's why num32 mis-behaves in rt.perl.org/Ticket/Display.html?id=124084 | 17:02 | |
oh, it seems it does happen for reg reg, but not for lex reg or reg lex | 17:03 | ||
I wonder how much chaos fixing this will cause | 17:10 | ||
Well, nqp's make test still passes | 17:19 | ||
And it catches the issue | |||
C:\consulting\rakudo>perl6-m -e "my num32 $n; say $n;" | |||
Bytecode validation error at offset 18, instruction 4: | |||
operand type 40 does not match register type 48 | |||
timotimo | ideally we'd complain at the compiler stage rather than at the bytecode validation stage | 17:21 | |
jnthn | That's a nice to have :) | ||
Running bytecode that's full of it is just really wrong :) | 17:22 | ||
timotimo | right! | ||
jnthn | Feel free to patch mast/compiler.c or so | ||
(I'll probably only do that now if it makes debugging easier) | |||
Well, NQP builds and passes tests with the patch. Now to see if Rakudo builds. | 17:24 | ||
Phew, yes, it does :) | 17:25 | ||
Blows up make test in a couple of places | 17:26 | ||
17:33
zakharyas joined
|
|||
jnthn | And a couple of spectests, it seems | 17:34 | |
But seems everything it catches is genuine bad code-gen | |||
timotimo | very good | 17:35 | |
jnthn | I'd guess the nativecall fails that it results in match up with native call fails on BE | ||
17:40
virtualsue joined
|
|||
dalek | arVM/sized-native-fixes: ee0afc2 | jnthn++ | src/core/validation.c: Validate lexical types properly. This means that we catch invalid code-gen for storing wrongly sized values into lexicals, and vice versa. |
17:44 | |
arVM/sized-native-fixes: d23cbe2 | jnthn++ | src/core/interp.c: Implement truncate/extend ops for num32. |
|||
nwc10 | *aha*, them | ||
jnthn | .oO( The sun never sets on Big Endian ) |
||
Enough for now...will look at the code-gen fixes we need later | 17:46 | ||
JimmyZ | (MVMnum64)GET_REG(cur_op, 2).n64; # do you mean MVMnum32 here? | 17:48 | |
jnthn | yes | ||
dalek | arVM/sized-native-fixes: d6544f5 | jnthn++ | src/core/interp.c: Fix cast; JimmyZ++. |
17:49 | |
jnthn | That's exactly why I'll worry about the rest later :P | ||
JimmyZ | ;) | 17:50 | |
jnthn | dinner & | ||
diakopter | jnthn: dare I suggest the nativecall fails are also related to what you saw on windows with the deserialization cache thing XD XD XD XD *Christmas Cheer*** | 18:35 | |
(yes I'm still gonna try to repro on windows) | |||
18:52
leont joined
18:55
zakharyas joined
19:04
zakharyas joined
19:05
vendethiel joined
19:19
zakharyas1 joined
19:35
virtualsue joined
|
|||
jnthn | diakopter: Sadly, I highly doubt it...the bustage I've uncovered will be cross-platform. | 19:37 | |
19:49
FROGGS joined
|
|||
diakopter | oh | 19:52 | |
20:00
virtualsue joined
|
|||
nwc10 | jnthn: ASAN likes (OK, tolerates with the usual disdain) your branch so far | 20:01 | |
jnthn | :) | 20:02 | |
20:25
virtualsue joined
20:54
virtualsue joined
20:58
zakharyas joined
|
|||
ilmari | wow, just running nqp's Configure on an ubsan-enabled moar spews tons of errors | 21:25 | |
it didn't do that a few weeks ago, iirc | |||
laods of misaligned loads | 21:26 | ||
src/core/validation.c:156:12: runtime error: load of misaligned address 0x7fcb21c463d9 for type 'MVMuint16', which requires 2 byte alignment | |||
that's opcode = *(MVMuint16 *)val->cur_op; | 21:27 | ||
and callsites_equal() passing null pointers to memcmp | 21:28 | ||
hoelzro | github.com/joyent/libuv/issues/414 | 21:29 | |
that explains the UDP issues | |||
FROGGS | jnthn: could that explain the blowup? gist.github.com/FROGGS/bc20e5799a3...xt-L16-L23 | 21:30 | |
TimToady | went to bed | ||
FROGGS | ahh :o) | 21:33 | |
21:37
colomon joined
|
|||
ilmari | ubsan output from nqp Configure.pl run: paste.scsys.co.uk/502894 | 21:38 | |
hoelzro | wow | 21:39 | |
ilmari | gcc 5.2.1-23 on debian testing | ||
hoelzro | these sanitizers are so cool | ||
dalek | arVM: 016bb5e | FROGGS++ | src/core/bytecode.c: init cd->arg_flags so callsites_equal wont complain |
21:40 | |
FROGGS | sadly, this does not help | ||
ilmari | well, no, it's still passing null pointers to memcmp | 21:41 | |
if arg_flags == NULL is a valid state, callsite_equals needs to guard against that | |||
diakopter | ilmari: nopaste the error list? | 21:46 | |
ilmari | diakopter: 21:38 < ilmari> ubsan output from nqp Configure.pl run: paste.scsys.co.uk/502894 | ||
diakopter | ahah | 21:47 | |
gah | 21:48 | ||
ilmari | FROGGS: there are other places where arrays that would be zero-sized are not allocated, then add_foo functions blindly memcpy them | 21:52 | |
21:55
travis-ci joined
|
|||
travis-ci | MoarVM build passed. Tobias Leich 'init cd->arg_flags so callsites_equal wont complain' | 21:55 | |
travis-ci.org/MoarVM/MoarVM/builds/97320646 github.com/MoarVM/MoarVM/compare/4...6bb5ec9cae | |||
21:55
travis-ci left
|
|||
ilmari | although in other places it does malloc(0) | 21:56 | |
but malloc(0) is allowed to return NULL anyway, so we can't rely on that | 22:27 | ||
22:28
colomon joined
|
|||
ilmari | FROGGS: github.com/MoarVM/MoarVM/pull/312 | 22:54 | |
FROGGS: fixes all null pointer memc(py|mp) in callsite.c and spesh/ | 22:55 | ||
dalek | arVM: 31bdb0f | (Dagfinn Ilmari Mannsåker)++ | src/spesh/ (3 files): Avoid memcpy(x, NULL, 0) in spesh Although most compilers sensibly do nothing in this case, it is undefined behaviour according to the standard, and UBSAN complains. |
23:13 | |
arVM: c571752 | (Dagfinn Ilmari Mannsåker)++ | src/core/callsite.c: Don't try to compare empty flag sets This avoids calling memcmp() with NULL pointers, which is undefined behaviour, even is the count is zero. |
|||
diakopter | ilmari: I merged it | ||
show me a couple of the 6model ones you're not sure about | 23:14 | ||
ilmari: which 6model things | 23:26 | ||
ilmari | diakopter: the ones in src/6model/serialization.c:concatenate_outputs | 23:32 | |
diakopter: ubsan only flagged the one for repos_table | 23:33 | ||
this was just during 'make' of nqp | |||
diakopter | maybe ubscan divined that it couldn't definitively determine that the size sent to memcpy would always be zero when the pointer was invalid | 23:34 | |
ilmari | I don't think ubsan does that kind of analysis | 23:35 | |
diakopter | oh | ||
ilmari | null pointers to memc(py|mp) are undefined even when size == 0 | ||
diakopter | well, is it a problem to send invalid pointers to memcpy when the size is 0? oh | ||
I see | |||
ilmari | yes, it's explicitly undefined, presumably for speed/ease of implementation | ||
diakopter | yeah, the check for zero would need to be *somewhere*; might as well make the caller do it | 23:38 | |
ilmari | and often you know that it can't be zero, so don't need to check | 23:39 | |
diakopter | but yes, should add those checks to the 6model serialization too | 23:40 | |
most of those memcpy usages could theoretically be zero | 23:41 | ||
ilmari | 'nqp make' is up over 200k lines of ubsan output | 23:51 | |
mostly misaligned access | |||
diakopter | well hopefully it decreases non-linearly XD | ||
ilmari | I'll upload the full output pluss deduplicated by source code line | 23:52 |