Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: vitamin 15. 03. 2013, 19:55:20
-
Dobry den,
Potreboval by som pomoct s implementaciou garbage colektoru.
Moj jazyk je podobny s C# (triedy su referencne typy odvodene od bazovej triedy 'object' a su alkovne na heape).
Frontend mam naprogramovany v c++ a ako backend pouzivam llvm 3.1, program spustam cez JIT (lli).
GC by mal byt inkrementalny, nemusi byt thread safe.
Postupujem podla tohto: http://llvm.org/docs/GarbageCollection.html#getting-started
Write a runtime library or find an existing one which implements a GC heap:
1. Implement a memory allocator.
2. Design a binary interface for the stack map, used to identify references within a stack frame on the machine stack.*
3. Implement a stack crawler to discover functions on the call stack.*
4. Implement a registry for global roots.
5. Design a binary interface for type maps, used to identify references within heap objects.
6. Implement a collection routine bringing together all of the above.
bod 1: pouzivam malloc a zatial funguje ok.
Dalej nechampem ak implementovat stack map a co to vlastne je?
-
Jak se to implementuje nevím, ale patrně je to mechanismus jak se LLVM dozví o živých referencích v rámci stacku, stack obvykle tvoří lokální proměnné ve funkcích a metodách + jejich parametry a návratové hodnoty (mimo jiné).
-
Co je to stack map?
Viac info na prvom odkaze tu:
http://lmgtfy.com/?q=stack+map+gc&l=1
(u mna to je stranka: http://penberg.blogspot.sk/2009/07/garbage-collection-and-jit.html)
Okrem toho, cosi pisu aj dalej na tej tvojej stranke:
http://llvm.org/docs/GarbageCollection.html#computing-stack-maps
A co tak sa inspirovat niecim podobnym:
http://vmkit.llvm.org/
PO prestudovani ich zdrojakov, nie je hned vsetko jasnejsie? :-)
-
Aha, a este na konci toho "Getting started" je rovno povedane:
To help with several of these tasks (those indicated with a *), LLVM includes a highly portable, built-in ShadowStack code generator. It is compiled into llc and works even with the interpreter and C backends.
A co je oznacene hviezdickou? Veci okolo stacku (2., 3.)...
Takze sa treba pozriet na ten ShadowStack
-
Tak uz som si daco vyhladal. Stack map je zrejme zoznam vsetky rootov v danom frame (funkcii). Pouziva sa na vecsinu gc algoritmov. Co sa tyka shadow stacku tak ten nefunguje pri JIT kompilacii.
Nasiel som toto: http://llvm.org/releases/2.5/docs/GarbageCollection.html#plugin
Je tam asi vsetko co potrebujem, dnes to skusim pridat do kompilatoru. Zatial dik.