Perl 6 - the future is here, just unevenly distributed

IRC log for #divine, 2017-01-21

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

All times shown according to UTC.

Time Nick Message
02:48 ilbot3 joined #divine
02:48 Topic for #divine is now DIVINE | http://divine.fi.muni.cz | http://irclog.perlgeek.de/divine/
08:53 xstill mornfall: ad virtuálka, momentálně umím nabuildit 3.3.3 s libstdc++, jen jsem měl blbě prefix, takže to teď běží znovu
08:53 xstill pokud chcem libc++ tak to budu muset ještě dodělat
08:56 xstill mornfall: už vím proč funguje ten prefix i když není nastavený, ty ho máš totiž v Makefile jako PREFIX ?= /opt/divine
08:57 mornfall určitě to můžem celý dodělat s libstdc++ a kdyby se nám to nezdálo tak to nebude už tolik práce pak vyměnit
08:57 xstill nicméně nechápu jak funguje install, protože make install ukazuje na toolchain-install
08:57 mornfall neukazuje, to je jen dodatečná závislost (snad)
08:57 mornfall install je TARGET
08:58 xstill aha, to jde?
08:58 mornfall snad jo :-) žádnej make mi za to zatím nevynadal
08:58 xstill asi jo no, protože to nejspíš nějak funguje v té virtuálce
08:59 xstill hm, ale nepobijou se ty dvě LLVM? jakože to z toolchain s tím co z buildu?
08:59 mornfall myslím že gcc generuje závislosti taky takhle
08:59 mornfall pobijou, nainstaluje se toolchainový a pak se přepíše (není to optimální, ale řeší se to dost blbě)
09:00 mornfall cmake se moc neobtěžuje vyrábět částečný install pravidla
09:00 xstill a musí se to toolchainové vůbec instalovat?
09:00 mornfall a bez libc++ z toolchainu to moc nefunguje
09:00 xstill ajo
09:18 yaqwsx joined #divine
09:58 mornfall yaqwsx: nevim jestli to s diosem stejně nakonec nedopadne šablonama, protože nevim jak do 'hezkého' komponentového modelu nacpat něco jako per-thread počítadlo na indent pro trace
10:00 yaqwsx mornfall: Hm, na to jsem nepomyslel.
10:02 yaqwsx Protlačit přes handler by to bylo drahé, co?
10:02 yaqwsx Nebo - nemohl by scheduler strkat do registru pointer na strukturu popisující vlákno?
10:03 mornfall no nejde o to -- jde o ten prostor kam se to bude ukládat
10:03 mornfall vyrábět asociativní mapu vlákno → int zní docela nemile
10:04 mornfall na druhý straně si myslim, že skoro nemá smysl mít dios kompletně runtime přeskládatelný, ono bude stačit pár ručně vybraných konfigurací (snad)
10:12 yaqwsx Teď nevidím ten problém.
10:17 xstill + by se možná vyplatilo bezvláknový program a dios linkovat s libc která nemá pthready (respektive má nastubovaný pthread_once a podobný věci co tak kompilátor vkládá občas)
10:21 mornfall yaqwsx: no jde o to, že třeba --autotrace je dost nečitelnej protože indent je mimo, ale je otázka jestli má smysl zabrat integer na vlákno i když se to zrovna nepoužívá
10:24 yaqwsx Implementovat všechno přes handelry by bylo pekelně drahé, co?
10:35 mornfall no já nevim co se tím myslí
10:35 mornfall nebo nevidim jak by to mělo fungovat
10:36 mornfall (pro případ tady toho trace)
10:36 mornfall syscally jde udělat přes handlery, to by neměl být problém
10:36 yaqwsx Stav DiOSu je tabulka handlerů. Když potřebuji zjistit ID vlákna, zavolám handlerTable[ _DiOS_Scheduler_ThreadId ]()
10:37 mornfall no ale co s tím ID pak uděláš?
10:37 yaqwsx Jakože tabulka handlerů bude obsahovat více věcí než jen syscally
10:37 mornfall vyrobíš si std::map< ID, int >?
10:37 yaqwsx handlerTable[ _DiOS_Scheduler_Hid ]( id )?
10:38 mornfall no ale kam uložíš to počítadlo?
10:38 yaqwsx To bude někde ve scheduleru.
10:38 mornfall no právě
10:38 mornfall jenže když vypnu trace tak nechci aby tam bylo
10:39 yaqwsx Tak v bootu do tabulky nasázím scheduler, který to netracuje.
10:39 mornfall ale to netracuje scheduler přece
10:39 yaqwsx Jakto?
10:39 mornfall __dios_trace
10:40 yaqwsx Eh, pravda a tabulku handlerů nechceme zviditelnit.
10:42 yaqwsx ...leda že by byly tabulky dvě. Jedna s obyčejnými function pointery, která klidně může být veřejná.
10:43 mornfall ten problém spíš spočívá čím to naplnit, když ta implementace závisí na typech komponent
10:45 yaqwsx Však to to řeší - ne? Dejme tomu, že mám Třídu pro schedule, která jako template parametr má jestli traceovat nebo ne. Poskytuje nějaké metody, které zajišťují scheduling a implementaci syscallů, poté má statické metody, které realizují např. vytažení indendu z TLS. Do neveřejné tabulky (stavu) nastrkám delegaty s metodami, do veřejné tabulky vyplním pointery na statické metody. Pak to sedí.
10:46 mornfall no to dělá přesně to co jsem říkal na začátku, že to vyrobíš šablonami
10:48 yaqwsx Aha, tak to jsem myslel, že myslíš šablony na jiné úrovni - že stav (v podobě jaké je teď) je nějak těžce šablonován.
10:48 yaqwsx V tomhle řešení není stav šablonován, pouze si výrobu dvou různých schedulerů usnadním pomocí šablony.
10:50 mornfall taky by šlo tu tabulku generovat jako template< typename CTX > Table makeVFS() { Table t; #define SYSCALL(n,...) t[ _SC_ ## n ] = []( CTX &ctx, ... ) { return std::get< VFS >( ctx ).n( ... ); } #include <vfs.def> #undef SYSCALL return t; }
10:52 mornfall (kde CTX je pak std::tuple kterej stvoří __boot podle parametrů)
10:52 mornfall Table< CTX > taky
10:53 mornfall ale taky to moc neřeší problém scheduler vs trace
10:55 mornfall dobře, ten problém jde řešit aj úplně jinak asi
10:55 mornfall trace je problém protože čísla vláken jsou nějaký uhozený ukazatele
10:55 mornfall (ve víc než jednom ohledu)
10:56 mornfall kdyby se udělala ta tabulka objid schovaná za weakptr, to by mohlo pak existovat __dios_get_thread_seqid nebo něco takového
10:56 mornfall pak si trace může indent držet v poli (taky třeba za weakptr)
10:58 mornfall a bezthreadový scheduler teda může tuto funkci implementovat jako return 0;
10:59 mornfall (velkej tajem je, jak říct ctx.scheduler() když nevím jakýho typu scheduler je)
11:00 mornfall a jak se dostat k ctx když nechci aby __dios_get_thread_seqid byl syscall
11:03 mornfall tabulka statických fcí kterou jsi před chvílí navrhoval (něco jako vdso hack) by řešila aspoň to, jak schovat to že __dios_trace je ve skutečnosti šablona
11:04 xstill mornfall: v /home/xstill/repo/vmutils mám disky s buildem DIVINE 3.3.3 (+ na https://gitlab.fi.muni.cz/paradise/vmutils jsou skripty, které by měly být schopné buildit VM se 4.0.* a 3.3.*)
11:12 xstill + jsem dolaďuju PDClib testy, posledních 10 padá v printu nebo ve vfs
11:13 xstill a našel jsem druhej out-of-bounds access v kódu do kterýho jsme nesahali
11:27 mornfall dobrý, chtělo by to někam poznačit (pdclib má možná dokonce aj bugtracker)
11:27 mornfall tuším jsem tam někde viděl nějakou jiru
12:54 yaqwsx mornfall: Neříkal jsi zrovna ty, že bugy PDClib nemá cenu reportovat, protože nejsou aktivní?
12:54 yaqwsx mornfall: Ok, pravda, když už šablonuji, můžu šablonovat dříve a vyhnout se run-time overheadu.
12:55 yaqwsx I když tabulce se nevyhneš, pokud chceš mít C DiOS API
12:55 xstill yaqwsx: poslední dobou jsou aktivní
12:55 xstill si myslím, že bude rozumný jim poslat rovnou patch
12:57 yaqwsx Tak by stálo za to poslat rovnou i ten patch, který opravuje printf pro stringy se specifikovanou délkou.
12:58 xstill printf je celkově pořád dost rozbitý
13:13 xstill navíc v upsteamu ty stejné testy prochází, takže jsme něco rozbili my
17:07 xstill mornfall: jak se stavíme k inline asm? Error v loaderu, fault?
17:09 mornfall nevím, kde se vzal?
17:10 xstill tenhle konkrétní byl v pdclibu a jde se ho lehce zbavit, ale jde mi o to co s tím obecně, protože momentálně to reportujeme omylem jako call undefined null pointeru
17:17 mornfall obecně bychom asi neměli předstírat že jsme x86_64 a kdyby někdo nacpal inline assembler bez #ifdef tak to zamítnout v překladači... (a pak se může v klidu vyhazovat výjimka v loaderu)
17:23 xstill na úrovni kompilátoru by to znamenalo napsat vlastní validátor který projde modul, clang zdá se nemá žádný warning na inline asm který by se dal na to zneužít. Ale do loaderu to dám
17:24 mornfall no bez toho aby se opravil překladač vyhazovat v loaderu není moc dobrý
17:24 xstill jak myslíš opravil?
17:25 mornfall no teď tvrdí že je to x86_64 ne?
17:25 mornfall jak jinak by se tam dostal inline assembler?
17:25 xstill tak on musí mít nějakou platformu
17:26 xstill počítám, že  __asm__("" : "=X"(_var)); bude fungovat asi dost všude, protože to není nijak guardovaný platformou
17:27 xstill respektive nevím jestli dokážu nějak clangu vnutit aby fungoval bez definovaný platformy v -triple
17:28 xstill každopádně mi příjde, že vyhodit výjimku v loaderu je dost zásadně lepší než vyhodit "call to undefined pointer" fault
17:29 mornfall to má ten problém, že to co doteď fungovalo bude teď téměř nepoužitelný (viz pomaranc vs openssl)
17:29 xstill no pokud to zakážeme v řekladači tak taky
17:29 mornfall openssl má portable verze skoro všeho třeba
17:29 mornfall skoro všechno má, actually
17:30 mornfall jen musí vědět že je má použít
17:31 xstill pokud ti jde o to abychom nedefinovali příslušná makra jako že jsme x86_64 to se asi zařídit dá
17:33 xstill ale pokud bychom měli __asm__ reportovat jako chybu při kompilaci to moc nepůjde
17:33 xstill nevím teď co přesně chceš
17:36 mornfall no, já bych to napsal na todo a nechal to jak to je
17:36 mornfall triple v clangu se bude muset někdy dořešit tak jako tak
17:37 mornfall a __asm__ který neobsahuje žádný instrukce by bylo smysluplný řešit podle toho co znamená
17:38 xstill nechávat jak to je bych určitě nedělal, ta hláška je těžce matoucí. Minimálně to chce dát lepší fault hlášku. Popřípadě alespoň warning v loaderu.
17:39 mornfall ten fault co to vyrobí neukazuje do zdrojáku kam má?
17:39 mornfall nebo co je na tom těžce matoucího?
17:39 xstill ukazuje, ale v tom zdrojáku je něco těžce jinýho než ten fault tvrdí
17:40 xstill v tomhle případě to navíc třeba bylo v makru a dalo mi dost zabrat než jsem to našel, kdyby mi to řeklo, že volám inline asm tak bych to měl výrazně rychlejš
17:46 mornfall prázdnej inline asm vypadá že by šlo třeba normálně podporovat, mně se jen nechce zrovna teď hrabat do reprezentace programu aby se to dalo rozumně napropagovat
17:46 mornfall můžeš tam dát třeba assert do eval-u
17:50 mornfall (z implement_call by bylo spíš potřeba vyhodit ten CallSite než tam přidávat nějaký kontroly na llvm::* věcech)
17:51 xstill no, úplně trivka to nebude, tohle vygenerovalo v LLVM 'call void asm "", "=*X,~{dirflag},~{fpsr},~{flags}"(i32* %x)'; assert mi nepříjde rozumnej protože pak už vůbec nepůjde poznat kde to je. Dám warning do loaderu a smysluplný fault do evalu, ta kontrola se provádá jen v okamžiku kdy se zjistí, že je pointer nedefinovanej, takže nás to nebude stát nic navíc za normálních okolností.
17:52 mornfall warning v loaderu je celkem k ničemu
17:54 mornfall to že to skončilo jako undefined pointer si myslím že je spíš náhoda
17:54 mornfall podle toho co ten call má za parametry dál
17:56 mornfall nebo ne, nevim jak je přesně ten call na InlineAsm reprezentovanej
17:58 mornfall každopádně bych byl rád, kdyby ta změna byla podle možnosti minimální, zejména pokud je možnost že se InlineAsm mezi 3.7 a 4.0 změnilo
17:58 mornfall (když už je skutečně nevyhnutná)
18:09 xstill je to call, který má jako callee argument něco co je typy InlineAsm, což je přímý potomek llvm::Value, mám skoro podezření, že Program::insert to propadne bez toho aby se s příslušným slotem něco udělalo; jediné co potřebuju v evalu je zavolat isInlineAsm, tahle funkce exstuje v i poslední dokumentaci co je na webu llvm
18:18 mornfall ten pdclib už je hotový?
18:20 xstill skoro, přidal jsem ještě testy co přibyly s tou aktualizací a některé z nich lehly
18:30 xstill celkově bude potřeba uklidit userspace ale to teď dělat nebudu, chtělo by to dohodnout se na tom kam cpát takové věci jako sys/* a opravit signály
18:30 xstill a pak je teda potřeba se podívat na to kdo rozbil ten print
18:30 xstill *printf (a spol)
18:31 xstill OK, zdá se, že mi prošlo všechno co jsem neoznačil za TODO, jdu to zarecordovat
18:33 xstill celkem máme 195 testů + 39 skipnutých, z čeho asi 20 jsou TODO a zbytek jsou prázdné testy
18:34 mornfall ty prázdný by asi bylo smysluplný smazat
18:36 xstill nad tím jsem taky přemýšlel, nicméně při aktualizaci pdclibu to pak znamená, že člověk neví proč tam ta defince testu chybí, zatímco pokud tam ten placeholder je, tak je to jasný, že na ten test nikdo nezapomněl
18:37 divine-next 20 new patches validated [xstill]
18:41 xstill zbytek zarecordován
18:42 mornfall to by šlo řešit přejmenováním na .missing místo .pdc?
18:43 xstill OK, to by asi šlo, mám to doamendovat do toho patche?
18:43 mornfall ideálně
18:43 xstill bude to chvíli trvat, protože musím najít které jsou které
18:43 mornfall jo no
18:43 xstill ok, provedu
18:44 mornfall a ten isInlineAsm nejspíš zesegví když potká invoke na neinicializovanej ukazatel
18:45 xstill jo, to jsem neudělal dobře
18:47 mornfall nějaké funkce se kterými počítáme že jsou definovaný už máme ne? memcpy a podobně?
18:47 xstill jo
18:47 xstill proč?
18:48 xstill memcpy, memmove, memset
18:48 mornfall uvažuju jestli by nebylo lepší to vyřešit v loaderu tím, že by se jako cílová funkce dal nějakej __inline_asm_stub kterej by vyfaultoval (protože se mi moc nepozdává ten neinicializovanej slot, a nevim co jinýho tam dát)
18:48 mornfall zase se mi moc nelíbí vyrábět povinný funkce
18:48 mornfall hlavně když je v runtime takovej zmatek jak teď
18:49 mornfall (mít nějakej "povinnej" .c/.bc jak je typicky crt, tak se to dá přidat tam, spolu s tady těmi pár funkcemi)
18:50 xstill no, to, že se přilinkují memmcpy a spol momentálně řeší cc/compile.cpp:348
18:51 divine-next 3 new patches validated [xstill]
18:53 mornfall to řeší jen rooty ne? furt to očekává že někde v linkovaných knihovnách ty definice budou
18:53 xstill jo to jo
18:54 xstill řeší, že se to přilinkuje
18:55 mornfall jo, uvažuju jen o případu že bych nechtěl libc, jen tady těch pár nezbytných funkcí
18:56 mornfall (otázka je jestli má nějakej smysl nechtít libc)
18:58 mornfall to je asi jen na zamyšlení až se bude reorganizovat ten runtime/
19:02 xstill potenciálně má, akorát pak tohle nejsou nutně jediné funkce (tyhle jsou jen specielní tím, že nemají deklarace v bitkódu). Bylo by potřeba minimálně vysvětlit clangu aby negenerovat pthread_once do inicializátorů statických proměnných a tak podobně (což celkově souvisí s tím, že by mohlo dávat smysl kompilovat bez zapnutých pthreadů)
19:16 xstill hotovo, zarecordováno
19:31 divine-next 1 new patch validated [xstill]
21:09 yaqwsx joined #divine
21:52 mornfall yaqwsx: tak co, vymyslel jsi něco? :)
22:35 divine-buildbot Hey! build divine-next-debug #441 is complete: Failure [finished]
22:50 divine-buildbot Hey! build divine-next-debug #442 is complete: Success [finished]
22:56 yaqwsx mornfall: Dneska nebyl na přemýšlení moc čas, takže ne.

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