vm: add the gc-info struct

db4
Björn Lindqvist 2014-08-25 19:34:46 +02:00 committed by Doug Coleman
parent 9b35de2b10
commit 3a6c14765d
6 changed files with 22 additions and 29 deletions

View File

@ -2,17 +2,10 @@ USING: namespaces byte-arrays make compiler.codegen.gc-maps
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
@ -63,7 +56,7 @@ M: fake-cpu gc-root-offset ;
! 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 }

View File

@ -20,3 +20,14 @@ HELP: vm
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." }
}
} ;

View File

@ -91,3 +91,10 @@ STRUCT: dispatch-statistics
{ 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 } ;

View File

@ -4,17 +4,6 @@ IN: tools.gc-decode
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." } ;

View File

@ -1,4 +1,4 @@
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

View File

@ -1,6 +1,6 @@
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
@ -20,13 +20,6 @@ IN: tools.gc-decode
[ 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 ;