Perl 6 - the future is here, just unevenly distributed

IRC log for #divine, 2016-07-23

| Channels | #divine index | Today | | Search | Google Search | Plain-Text | summary

All times shown according to UTC.

Time Nick Message
06:58 xstill je možný, že ten va_start úplně nefunguje (i když jsem ho teda testoval), zkontroluju
06:59 xstill i když, to by vlastně vůbec nefungoval dios trace a ten vypadá OK
07:00 xstill (btw. variadický funkce nejde volat přes __vm_jump)
07:16 xstill no to ale vůbec nedává smysl
08:26 xstill mornfall: nevím jak je to možný, ale printf na pointer zdá se vypisuje jen object id, zatímco pokud to explicitně castu tak je tam vidět i jak se mění offset
08:35 mornfall to je trochu divný no
08:35 mornfall co znamená nejde volat?
08:36 mornfall (variadický funkce)
08:36 mornfall skočit do ní jde ne? jestli myslíš zkonstruovat rámec, to by taky skoro mohlo jít ne?
08:36 xstill hm, vlastně asi jo
08:41 xstill zjevně bitcast pointru + load není to samé jako load + inttoptr
08:42 xstill http://pastebin.dqd.cz/sxC2/
08:42 mornfall který se použije kdy?
08:44 mornfall resp. co z toho funguje?
08:46 xstill ještě lepší: http://pastebin.dqd.cz/gVsw/ (tři první jsou bitcast pointru a load jako číslo, 4. a 5. je ptr2int, 6. je int2ptr . ptr2int)
08:46 mornfall divine/vm/pointer.hpp:79 může být rozbitý
08:47 mornfall předtím tam byl union, to asi fungovalo líp (i když se to teoreticky nesmí)
08:50 mornfall VM: Avoid undefined behaviour in GenericPointer's Raw conversions. ← co se stane když tohle rollbackuješ?
08:50 yaqwsx joined #divine
08:50 mornfall (gcc tvrdí že type punning skrz union je podporovanej, ale o clangu jsem to zatím nikde nenašel)
08:51 mornfall (teda že to bude dělat to co chceš)
08:51 mornfall ale ono C11 to plusminus vyžaduje (C++11 myslim ne)
08:51 mornfall teda standard dovoluje ten program zabít, ale není to UB
08:52 mornfall (zabít ve smyslu procesorový výjimky)
08:53 xstill pak se to chová konzistentně, nicméně nikde není vidět offset
08:53 mornfall jak může nebýt vidět offset?
08:54 xstill to by mě taky zajímalo
08:54 xstill sprintf( buf, "%ld, %ld, %ld, %ld, %ld, %ld", buf + 1, u.p, u.i + 1, (unsigned long)(u.p), i, p );
08:54 xstill T: 589826, 589826, 589827, 589826, 589826, 589826
08:55 mornfall a (void *)(u.i + 1)?
08:55 xstill jakto, že tohle není definované?
08:55 xstill (ten union)
08:55 mornfall no není :) to se nesmí
08:55 mornfall z unionu smíš přečíst jen to pole který jsi zapsal
08:55 mornfall naposled
08:56 xstill aha, hm
08:56 xstill to snad ale ani nejde kontrolovat, ne?
08:56 xstill teda staticky asi jo
08:56 mornfall kontrolovat ne
08:56 xstill takže by to ten kompilátor asi směl nějak zprasit v optimalizátoru
08:56 mornfall jo to smí
08:57 mornfall (ale kontrolovat něco je mnohem těžší než to rozbít :-)
08:57 xstill sprintf( buf, "%ld, %ld, %ld, %ld, %ld, %ld, %ld", buf + 1, u.p, u.i + 1, (unsigned long)(u.p), i, p, (void*)(u.i + 1) ); T: 589826, 589826, 589827, 589826, 589826, 589826, 58982
08:57 mornfall ta důležitá číslice docela chybí :D
08:58 mornfall 6 nebo 7?
08:58 xstill :D T: 589826, 589826, 589827, 589826, 589826, 589826, 589827 hm a co cast na char * a memcpy? to by mohlo být
08:58 xstill definované, ne?
08:59 xstill to první (skutečně nad pointerm) je GEP
08:59 xstill 66966   %10 = getelementptr inbounds [1024 x i8], [1024 x i8]* %buf, i32 0, i32 0, !dbg !122762
08:59 xstill 66967   %11 = getelementptr inbounds i8, i8* %10, i64 1, !dbg !122763
08:59 xstill (ta %11)
09:00 xstill oproti
09:00 xstill 66979   %23 = load i64, i64* %22, align 8, !dbg !122771
09:00 xstill 66980   %24 = add nsw i64 %23, 1, !dbg !122772
09:00 xstill 66981   %25 = inttoptr i64 %24 to i8*, !dbg !122773
09:01 xstill (musím si jít sehnat nějaké jídlo)
09:14 mornfall hm, kdyby byl bug v GEP-u tak bychom to snad věděli
09:15 mornfall jo, memcpy definované je a občas ho překladač dokáže aj umazat
09:16 mornfall já bych ale radši někde našel jak je to s clangem a dělal to skrz ten union
09:16 mornfall je to mnohem elegantnější
09:53 mornfall no, llvm/lib/Support/APInt.cpp:828
09:54 mornfall takže type punning můžem vesele používat :p
10:06 xstill ok, takže to rollbacknu do repa a upravím ten komentář
10:06 mornfall ok
10:30 xstill btw. nevím jestli to víte, ale v lambdě (která chytá this) se dají volat metody toho chyceného this jako this->this->bla()
10:30 xstill při debugování interpretru se to docela hodí
10:42 mornfall proč se to hodí? (resp. jaký je rozdíl mezi bla(), this->bla() a this->this->bla()?)
10:44 xstill no ten že ty první dvě v lambdě nefungují
10:44 xstill (v gdb)
10:47 mornfall jo v gdb
10:47 mornfall volat metody v gdb kdekoliv je docela hazard :D
10:48 xstill no je, ale bez toho to moc nejde
12:11 xstill je to celý divný
12:12 xstill přidal jsem do castu  std::cerr << v1.get( 1 ) << " -> " << v0.get( 0 ) << std::endl;
12:12 xstill a leze mi z toho třeba toto: [pointer [heap 150000 0] dd] -> [int 1376256]
12:12 xstill [int 1376256] -> [pointer [code 1376256 0] dd]
12:49 xstill mornfall: value.hpp:91 (!)
13:05 xstill ale aritmetika je pořád rozbitá
13:09 xstill no jasně, layout Rep je špatně
13:14 xstill takže se to musí udělat ještě jinak
13:14 xstill mornfall: netahal jsi ještě ty moje dnešní patche?
13:34 xstill i když ono je to asi jedno
14:35 xstill mornfall: proč nedefinovaný pointer/hodnota dává _VM_F_Hypercall?
14:56 mornfall ještě ne
14:56 mornfall asi když dáš hypercallu nedefinovanej parametr ne?
14:56 mornfall až na to že operandCk se používá všude
14:57 mornfall to se tam asi dostalo nějakou faktorizací
14:57 xstill právě
14:57 xstill ale to je asi teď jedno, je to celý nějaký rozbitý
14:57 xstill momentálně mi double faultuje cokoli co zavolá sprintf
14:58 mornfall xstill: ten intmax_t není dobře
14:59 xstill proč?
14:59 mornfall tam má přijít explicit, určitě se to nesmí dostat do cesty jakékoliv konverzi
14:59 mornfall to je jen na výrobu konstant
15:00 xstill takže ten konstruktor se vůbec neměl volat v tom případě?
15:00 xstill stejně bych tam nechal intmax_t, ale dám to explicit
15:00 mornfall ne, to je nějakej zákeřnej bug
15:00 mornfall proč intmax_t?
15:01 xstill no aby tím šlo vytvářet konstanty větší než int
15:01 mornfall když už tak Cooked
15:02 xstill OK
15:02 mornfall já tam ten explicit dám, je potřeba opravit aj testy
15:03 xstill ok
15:03 xstill já zatím testuju vaargs
15:07 mornfall na tom je zajímavý, že tím explicit se nic kolem ukazatelů nerozbilo
15:08 mornfall teda že na pár místech chyběla nějaká konverze z faktickýho intu, ale nic kolem ukazatelů
15:08 mornfall impmentation defined :p
15:16 mornfall nicméně se někde volá
15:21 mornfall omg :D
15:23 xstill co?
15:23 yaqwsx No tak, nenapínej!
15:23 mornfall to není že jsou rozbitý ukazatele, prostě nefungovalo načítání 64b intů
15:23 mornfall nikdy, vůbec
15:23 yaqwsx :D
15:24 xstill heh
15:24 yaqwsx Jop, i SymDIVINE na podobné chybě pohořel... :D
15:27 mornfall ono to je celkově ... já to už mám bokem předělaný, ale zatím to vůbec nefunguje
15:28 xstill jak předělaný?
15:28 mornfall (všude explicitně reprezentuju raw jako unsigned, případně dvojici unsigned když to je třeba 80b float)
15:29 mornfall a halda načítá explicitně skrz tady tu bitvektorovou reprezentaci
15:30 mornfall teď to načítá jako konverzi z T::Raw na T, a v tom Int-u to chytlo ten konstruktor s int-em
15:32 mornfall jdu vymotat ty změny do value abych to mohl pushnout
15:43 xstill hm, ale bez fungujícího trace se sakra blbě debuguje
16:50 xstill hm, je možný, že printf v pdclibu je hrozně blbě? (functions/stdio/_PDCLIB_print.c, to co se děje se status->prec)
16:51 xstill krom toho tam nikde nevidím, že by to umělo tisknout floaty…
18:24 yaqwsx_cz joined #divine
19:20 xstill mornfall: je možný, že přepsání pointru po (definovaných) bytech teď způsobí, že ta výsledná paměť bude nedefinovaná?
19:20 mornfall definovanost se sleduje jen u pointrů, aktuálně
19:22 yaqwsx joined #divine
19:22 mornfall (tzn. jestli někde vidíš nedefinovaný číslo, tak se něco dost rozbilo)
19:22 yaqwsx Pochopil jsem tedy správně, že problém s va_list, který pozoruji byl dán těmi konstantami a teď už by mohl být OK?
19:24 xstill yaqwsx: těžko říct čím to bylo, ale vzhledem k tomu, co jsme dneska našli bys to měl zkusit znova
19:24 yaqwsx Stačí tedy pull z hlavního repa, jo?
19:25 xstill ne
19:25 xstill mornfall: pošleš ty moje patche?
19:25 mornfall co je hlavní repo?
19:26 yaqwsx anna:/home/xrockai/src/divine/next
19:28 xstill hm, nějak pochybně se mi oddefinuje pointer aniž by se smazal
19:28 mornfall no ono to nebude fungovat
19:28 xstill co nebude fungovat?
19:28 mornfall to co je teď v next (dotáhnul jsem ty va_* patche, ale ty ukazatele nefungujou)
19:30 xstill proč? já myslel, že jen stačí dát ten konstruktor explict a opravit testy
19:31 mornfall no ne
19:31 mornfall už mi sice prochází unit testy, ale ještě jsem to nestihl pustit na ničem dalším
19:33 mornfall SIGILL, to není úplně dobrej začátek
19:34 xstill to bývá chybějící return
19:34 mornfall bývá, ale warning nevidim
19:36 mornfall a v gdb to segví v kusu kódu na kterej jsem vůbec nehrabal, při zápisu do lokálního pole na nulovej offset
19:39 mornfall xstill: s tím va_* jsi tam zarecordoval aj něco navíc
19:39 mornfall HypercallJump
19:39 xstill sakra
19:39 xstill ale jen kus, že?
19:39 mornfall jo jen kus
19:40 xstill už jsi to pushnul?
19:40 mornfall pullnul :)
19:41 mornfall hlavně v tom mam spoustu konfliktů a tohle je jeden z nich
19:41 xstill hm a mám to teda odrecordovat z toho patche, nebo ne?
19:42 mornfall cc::stringifyToCode třeba nemá return :-)
19:42 mornfall už asi ne, já to zase odmažu
19:45 mornfall gdb už minutu parsuje core
19:49 mornfall xstill: ty return kontroly jsou nějak blbě
19:50 xstill hm? spíš by to chtělo celý vymyslet jinak (jestli myslíš undefined pointry)
19:51 mornfall ne, myslím to že values.size() == 0 je nějakej úlet
19:52 xstill jo, to by se asi stávat nemělo (stalo se to když se omylem zavolal druhej fault těsně po té co se vytvořil rámec toho předchozího (ještě než se začal spouštět)
19:53 xstill asi jsem to měl předělat na assert
19:55 xstill řekni jestli to mám předělat… ty ostatní kontroly by měly dávat smysl
19:55 mornfall no momentálně mi dios na prvním faultu zacyklí
19:55 mornfall T: FAULT: Returned value is bigger then expected by caller
19:56 mornfall hm, což je to že ten fault se musí nějak opravit
19:56 xstill mě necyklí, ale já tu mám ještě dost změn co jsem nepushnul
19:57 xstill nějak to dokopu
19:58 xstill mám takový podezření že jsem toho omylem zarecordoval víc (HypercallJump)
19:59 xstill aha, to je vlastně to na co jsi narazil
20:00 xstill můžu ti poslat zbytek? případně to nějak spoj a řekni mi jestli to mám unpullnout u sebe a natáhnout znova
20:00 mornfall já jsem mezičasem něco pushnul
20:01 mornfall i když nemyslim že to úplně funguje, protože v diosu to faultuje
20:02 xstill a co jsi udělal s tím HypecallJump?
20:02 mornfall vrátil jsem to
20:02 mornfall snad
20:02 xstill ale to jsi nepushnul
20:02 mornfall no já to neměl jak moc oddělit z toho konfliktu
20:03 xstill hm, mám milion konfliktů ve value
20:04 mornfall cos tam dělal?
20:04 xstill ten Int konstruktor
20:04 xstill to revertnu
20:05 xstill ad HypecallJump, jestli ti to blbne v dios tak zkontroluj, že jsi zrevertoval ten 2. argument (pc)
20:06 mornfall jo
20:07 xstill aha, tys to revertnul v tom patchy, já si toho nevšiml (a blbě se mi to zmergovalo)
20:16 xstill hm, sakra taky mi to cyklí
20:17 mornfall ale tak ono to dává smysl
20:17 mornfall ten return z fault handleru je špatně
20:17 mornfall takže se zavolá fault počas ret-u v handleru
20:18 mornfall → cyklus
20:18 xstill jo ten return já už nemám
20:18 xstill padá mi to zase v PDClib_print
20:20 xstill moje repo na arke by mělo obsahovat i ty změny v userspace které vyhodili ten return
20:22 xstill hm, špatněj stackrestore
20:26 xstill no protože je rozbitá definovanost v compare
20:29 mornfall jakto?
20:30 yaqwsx joined #divine
20:31 mornfall definovanost je sice rozbitá, ale nevim jestli zrovna v compare
20:32 xstill protože je rozbitá u i1 (protože full< char > je 0xff, ale plně definovaný i1 je 0x1)
20:32 mornfall ne, to je správně
20:32 xstill pak se to špatně nastavuje v comapre
20:33 mornfall to taky ne
20:33 mornfall defined( true ) volá defbits( full )
20:33 xstill hm tak teď nevím co jsem v tom debuggeru viděl
20:34 mornfall to samozřejmě nevylučuje že někde se stvoří bool s defbits 0x1
20:34 mornfall ale kde...
20:34 xstill no jasně, v Int je dobře, ale v Float a Pointer špatně
20:35 mornfall to asi furt nevidim
20:36 xstill no Bool( v, o.defined() && defined(), … ) nefunguje, protože druje parametr konstruktoru je maska definovanosti (ne bool definovanosti)
20:36 xstill tj: true ->  0x1
20:36 mornfall no jasně
20:36 mornfall compare(), ne defined()
20:37 mornfall to by tam vůbec nemělo být 3x
20:38 mornfall zjevně jsem to opravil jen v intu a copypasta mě zničila
20:38 xstill to bys z toho base asi musel udělat mixin
20:38 mornfall jo, něco takového
20:38 xstill mech E: .../divine/vm/shadow.hpp: 133:
20:38 xstill encountered a missing implementation
20:38 mornfall už jsem byl několikrát v pokušení a asi tomu neuteču
20:38 mornfall jo to je chyba tam má být ASSERT_EQ( offset % 4, 0 )
20:39 mornfall nikoliv NOT_IMPLEMENTED
20:39 mornfall hm
20:39 xstill už mi z toho hrabe, na to že jsem se dneska DIVINE nechtěl věnovat tak jsem s tím strávil skoro celej den, takže jdu spát
20:39 mornfall jo, tady jo, tohle se může zavolat jen na rámec
23:08 mornfall asi běží záloha, arke nejde vůbec používat
23:14 mornfall xstill: z toho fault backtrace patche jsem vyamendoval konflikt pak
23:17 mornfall a ten fix na __vm_jump v runtime by si fakt zasloužil oddělit od implementace unwind
23:18 mornfall vypadá to že to už zase nějak funguje
23:28 mornfall hm, ta změna layoutu taky něco rozbila
23:29 mornfall (bez toho patche mi jednoduchej program s diosem projde)
23:53 mornfall ok, snad opraveno, takže zítra zpátky k shadow
23:53 mornfall → zzz

| Channels | #divine index | Today | | Search | Google Search | Plain-Text | summary