compiler.codegen.relocation bit-arrays accessors classes.struct
tools.test kernel math sequences alien.c-types
specialized-arrays boxes compiler.cfg.instructions system
-cpu.architecture ;
+cpu.architecture vm ;
SPECIALIZED-ARRAY: uint
IN: compiler.codegen.gc-maps.tests
-STRUCT: gc-info
-{ scrub-d-count uint }
-{ scrub-r-count uint }
-{ gc-root-count uint }
-{ derived-root-count uint }
-{ return-address-count uint } ;
-
SINGLETON: fake-cpu
fake-cpu \ cpu set
! Return addresses
uint-array{ 100 } underlying>> %
- ! GC info footer - 16 bytes
+ ! GC info footer - 20 bytes
S{ gc-info
{ scrub-d-count 5 }
{ scrub-r-count 2 }
HELP: vm-field-offset
{ $values { "field" string } { "offset" number } }
{ $description "Gets the offset in bytes to the named virtual machine field." } ;
+
+HELP: gc-info
+{ $class-description "A struct that defines the sizes of the garbage collection maps for a word. It has the following slots:"
+ { $table
+ { { $slot "scrub-d-count" } "Number of datastack scrub bits per callsite." }
+ { { $slot "scrub-r-count" } "Number of retainstack scrub bits per callsite." }
+ { { $slot "gc-root-count" } "Number of gc root bits per callsite." }
+ { { $slot "derived-root-count" } "Number of derived roots per callsite." }
+ { { $slot "return-address-count" } "Number of gc callsites." }
+ }
+} ;
{ pic-tag-count cell }
{ pic-tuple-count cell } ;
+
+STRUCT: gc-info
+ { scrub-d-count uint read-only }
+ { scrub-r-count uint read-only }
+ { gc-root-count uint read-only }
+ { derived-root-count uint read-only }
+ { return-address-count uint read-only } ;
ARTICLE: "tools.gc-decode" "GC maps decoder"
"A vocab that disassembles words gc maps. It's useful to have when debugging garbage collection issues." ;
-HELP: gc-info
-{ $class-description "A struct that defines the sizes of the garbage collection maps for a word. It has the following slots:"
- { $table
- { { $slot "scrub-d-count" } "Number of datastack scrub bits per callsite." }
- { { $slot "scrub-r-count" } "Number of retainstack scrub bits per callsite." }
- { { $slot "gc-root-count" } "Number of gc root bits per callsite." }
- { { $slot "derived-root-count" } "Number of derived roots per callsite." }
- { { $slot "return-address-count" } "Number of gc callsites." }
- }
-} ;
-
HELP: word>gc-info
{ $values { "word" word } { "gc-info" gc-info } }
{ $description "Gets the gc-info struct for a word." } ;
-USING: bit-arrays classes.struct tools.gc-decode tools.test ;
+USING: bit-arrays classes.struct tools.gc-decode tools.test vm ;
QUALIFIED: effects
QUALIFIED: llvm.types
QUALIFIED: unix.process
USING: accessors alien alien.c-types alien.data arrays assocs bit-arrays
bit-arrays.private classes.struct fry grouping kernel math math.statistics
-sequences sequences.repeating words ;
+sequences sequences.repeating vm words ;
IN: tools.gc-decode
! Utils
[ heap-size * [ >c-ptr alien-address ] dip - <alien> ] 2keep
c-direct-array-constructor execute( alien len -- seq ) ;
-STRUCT: gc-info
- { scrub-d-count uint read-only }
- { scrub-r-count uint read-only }
- { gc-root-count uint read-only }
- { derived-root-count uint read-only }
- { return-address-count uint read-only } ;
-
: bit-counts ( gc-info -- counts )
struct-slot-values 3 head ;