| IRC logs at
Set by AlexDaniel on 12 June 2018.
02:20 linkable6 left, evalable6 left 02:21 evalable6 joined 02:22 linkable6 joined 06:37 sena_kun joined 08:54 zakharyas joined 09:21 Altai-man joined 09:24 sena_kun left
Geth MoarVM/CStruct-bind_attribute-inlined-CArray-unaligned-overrun: ee404e164d | (Nicholas Clark)++ | src/6model/reprs/CStruct.c
In CStruct `bind_attribute`, don't `set_ptr_at_offset` for inlined CArray.

  `bind_attribute` had been calling `set_ptr_at_offset` for all `CArray`s,
whether inlined or not. That writes a pointer at the slot offset.
For the corner case of the inlined array being both the last member in the structure and smaller than the size of a pointer ... (23 more lines)
MoarVM: nwc10++ created pull request #1369:
CStruct bind_attribute can write beyond malloc'd buffer.
MoarVM/master: 4 commits pushed by (Nicholas Clark)++, nwc10++ 10:23
nwc10 .seen froggs 10:30
tellable6 nwc10, I saw froggs 2019-09-15T13:29:14Z in #perl6: <FROGGS> uhhh, that sounds awesome
nwc10 I doubt that he really wanted to be a reviewer. github suggested him 10:31
nine The repetition between CStruct, CPPStruct and CUnion has bitten us countless times 10:53
nwc10 If I go "back" to commit 163ee73f6eafc44c89a7ed5145ad8b99c7907274
at that commit diff between CStruct.c and CPPStruct.c seems to be pretty much s/CPP/C/ and s/cpp/c/ 10:54
(and some whitespace)
I'm not totally sure why the two need to be distinct, other than having a different repr name in error messages, and a different repr ID
if that *is* all that needs to differ, I think I can see how to merge them, and "instantiate" two with #include and 2 macros 10:55
(Since that commit they have diverged a lot, and I'm wondering if most of that divergence is bugs)
lizmat nwc10++ # making code DRYer 10:56
nwc10 but "AFK" I wodnered if the *union* is also (pretty much) CStruct, just without addign size to offset each time round the loop
lizmat: I can't promise that I am correct. This is code that I really don't undestand
I can just see a lot of patterns
and a commit message that suggests that it shouldn't be that different
lizmat perhaps because you do not really understand the code, you can see the patterns :-) 10:57
nwc10 and I am guilty of DRY-violations with all the hash stuff. But I can't see how to "Template" that without the result being worse thatn what we have
nine I think those 3 can be unified a lot
nwc10 I can see patterns in code I understand too
OK, right now I'm off trying to fix all the big endian test bugs
or, maybe also, AFK 10:58
on "hoilday"
nine Well we've lived with the duplication for years....we can grant you a couple hours off before unifying them ;)
nwc10 it needs at least 1 competant reviewer 10:59
and also I don't think that this stuff has enoguh tests
nine is looking at #1369 right now
nwc10 thanks
given that I don't think that rakudo/rakudo#3687 added any tests 11:00
linkable6 RAKUDO#3687 [closed]: Binding to an inlined CStruct does not do what it means
nwc10 also, it's hard to add tests, because I can't see the right way to add them with "this will pass once MoarVM gets to *that* revision, but until then it's TODO"
nine Just add the NQP/MoarVM bump to the same commit that adds the tests
nwc10 also, it seems that dyncall is (slightly) architecturally buggy, as it looks like they also have a known failure on ppc32 11:17
(but I have not gone tryign to find out what the Power ABI spec is)
basically, dyncall implements `unsigned short` and `unsigned char` arguments by casting to `short` and `char` respectively and using those functions 11:18
which loses the info about whether the 16 or 8 bit thingy was signed or unsigned
and seems that this matters on ppc32 *too*
looks like libfii doesn't have this problem
but as best I can tell *that* was "more by luck than judgement"
ie - using libffi rather than dyncall on sparc linux gets us one more test passin g 11:19
nine Good thing my NativeCall JIT code only works on x86_64 ;) I'm pretty sure I did similar things there 11:20
nwc10 who is Aleks-Daniel Jakimenko-Aleksejev [email@hidden.address] ?
nine AlexDaniel on IRC
nwc10 aha
Geth MoarVM: 4ced726fed | (Nicholas Clark)++ | 4 files
Use MVM_{malloc,realloc,calloc,free} consistency.

All these calls changed to the MVM_* wrappers are on memory blocks where the other calls are MVM_* wrappers.
There are still a few "bare" `malloc`s/`free`s, but these seem to be self-contained, or related to memory allocated by `strdup`/`strndup`, which is using the platform `malloc` internally.
11:41 patrickb joined 12:35 zakharyas left 12:54 brrt joined
brrt \o 12:55
tellable6 2020-10-24T19:43:42Z #moarvm <nwc10> brrt it's getting worse. Now I'm looking at assembler output from *gdb*
brrt .tell nwc10 so you've crossed the rubicon 12:56
tellable6 brrt, I'll pass your message to nwc10
nwc10 o/ 13:07
tellable6 2020-10-26T12:56:08Z #moarvm <brrt> nwc10 so you've crossed the rubicon
lizmat And yet another Rakudo Weekly News hits the Net: 13:18
13:22 sena_kun joined 13:24 Altai-man left 13:40 zakharyas joined 13:41 patrickb left 13:46 sena_kun left 13:57 lucasb joined
brrt lizmat++ 14:45
14:50 domidumont joined
brrt /query nwc10 16:03
nwc10 x 16:21
16:22 brrt left, sena_kun joined
nwc10 oh. I scared his client :-( 16:22
lizmat didn't know that "boo" was spelled "x" in client speak 16:23
nwc10 I claim that it's the simplest possible explanation 16:25
Geth MoarVM/utf16-swap-bytes-BE-too: 55964708fa | (Nicholas Clark)++ | src/strings/utf16.c
`swap_bytes` in utf16.c needs to also swap bytes on big endian platforms.

The way it had been written worked perfectly on little endian platforms, and was actually a no-op on big endian platforms, because it *read* from memory in fixed (little endian) order, but wrote back using bitwise operations, meaning that the read acted as a second byte swap on big endian platforms. This was somewhat LTA.
MoarVM: nwc10++ created pull request #1371:
`swap_bytes` in utf16.c needs to also swap bytes on big endian platforms
nwc10 lets see what the automated tests think of that.
16:52 domidumont left
nine That whole interning of parametrics thing is horribly complicated :/ 17:03
nwc10 meanwhile: 17:15
nick@gcc202:~/Perl/rakudo$ ./rakudo-m -e 'my uint8 $var = 255; say $var' 255
nick@gcc202:~/Perl/rakudo$ ./rakudo-m -e 'my uint8 $var = 255; my $x = $var; say $x'
that's 0xff00000000000000
I have some idea how to find that cause of that. Let's see how long it takes
nine Our whole uint support is a bit of a mess
nwc10 it's more of a mess on big endian platforms 17:16
I see a bunch of TODOs in the spectest that suggest that uint64 doesn't work too well
timotimo yeah, uint is kind of wild 17:17
nwc10 OK, what am I doing wrong. How am I meant to get lots of trace output with --tracing. I've rebuild with the flag enabled, yet all I get is two lineS: 17:24
Op 159 at <unknown>:1 (/home/nick/Perl/rakudo/rakudo.moarvm:<dependencies+deserialize>)
Op 159 at <unknown>:1 (/home/nick/Perl/rakudo/rakudo.moarvm:<entry>)
nine has never used tracing 17:26
nwc10 I thought I had it working from NQP
anyway, I am guessing that the relevant op for this mess is trunc_u8
nine call MVM_dump_bytecode(tc) has been incredibly helpful in gdb
nwc10 actually, sorry, extend_u8 17:27
GET_REG(cur_op, 0).u64 = (MVMuint64)GET_REG(cur_op, 2).u8;
no, it shouldn't
nine that looks quite correct?
nwc10 yes, I more meant - if it's assuming memory layout from the union (and not just sizes) it's going to go wrong. But I think I'm wrong on makign that assumption 17:28
17:56 zakharyas left 18:25 brrt joined
nwc10 x 18:30
brrt: see for context 18:31
It was "none of the above" for the cause of the big endian fail shown. Testing a fix... 18:32
[Coke] nwc10: hey, the extend_u8 and _i8 variants aren't documented. Can you document them? 19:00
(neither are some trunc_...) 19:01
nwc10 not trivially, because I didn't go further than realisign that they weren't the cause 19:03
and right now I have a stack of other things I was trying to get done first
(such as spectest clean on 64 bit big endian systems)
[Coke] was worth a shot. ;) 19:06
19:22 zakharyas joined
Geth MoarVM/NativeRef-uint-too: 62d07f0edb | (Nicholas Clark)++ | src/6model/reprs/NativeRef.c
MVM_nativeref_{read,write}_lex_i should handle uint8, uint16, uint32

Previously these three (and uint64) all took the `default:` path through the case statement, which meant that they were read/written as 64 bits, eg:
   return var->i64;
... (13 more lines)
MoarVM: nwc10++ created pull request #1372:
MVM_nativeref_{read,write}_lex_i should handle uint8, uint16, uint32
20:07 Altai-man joined 20:10 sena_kun left
timotimo does there also have to be a _u variant of these functions? 20:15
nwc10 I think not. (I'm guessing here)
the register type can encode unsigned or signed 20:16
yes, the return type is always MVMint64, but we seem to get away with that
20:17 MasterDuke joined
lizmat nwc10: there's a long standing issue with unsigned 64 bit ints (and 32 bit unsigned ints on 32 bit systems) 20:22
MasterDuke not just 64 bit unsigned ints though, all sizes 20:25
lizmat ah? 20:28
20:40 brrt left
nwc10 I could see a bunch of things marked TODO. I wasn't worrying about them yet. I was trying to get to parity - ie nothing fails on big endian that passes on little endian 20:51
MasterDuke m: my uint8 $a = 2**50; say $a 20:52
camelia 0
MasterDuke m: my uint64 $a = 2**66; say $a
camelia Cannot unbox 67 bit wide bigint into native integer
in block <unit> at <tmp> line 1
MasterDuke shouldn't the first one fail the same way? 20:53
maybe that's expected, but there are a bunch of oddities/stuff NYI around uints so i don't use them 20:55
a while ago i had a branch trying to add *_u versions of all relevant ops to moarvm, but i got stuck somewhere and left it 20:56
in other news, i have parse_coverage_report.p6 updated to record (and include in the output) the files+lines that were run to cover each line of the setting. however, i don't know html, so haven't tried to make it look at all nice 20:59
21:01 sxmx joined
MasterDuke i'll probably PR it as-is once the code is cleaned up and then let the actual form of the output be bikeshed 21:01
22:07 vrurg left 22:12 vrurg joined 22:14 zakharyas left 22:43 Altai-man left