From 61bbb9be06417ec07dda124a839d1862189d743c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Lindqvist?= Date: Fri, 2 Sep 2016 07:51:42 +0200 Subject: [PATCH] tools.image-analyzer.*: new word for removing the tag bits --- .../data-heap-reader/data-heap-reader.factor | 2 +- .../gc-info/gc-info-tests.factor | 23 +++++++++++-------- .../image-analyzer/graphviz/graphviz.factor | 10 ++++---- .../references/references.factor | 13 +++++++---- extra/tools/image-analyzer/utils/utils.factor | 9 +++++--- 5 files changed, 34 insertions(+), 23 deletions(-) diff --git a/extra/tools/image-analyzer/data-heap-reader/data-heap-reader.factor b/extra/tools/image-analyzer/data-heap-reader/data-heap-reader.factor index 57140d41de..f6fe607241 100644 --- a/extra/tools/image-analyzer/data-heap-reader/data-heap-reader.factor +++ b/extra/tools/image-analyzer/data-heap-reader/data-heap-reader.factor @@ -71,7 +71,7 @@ GENERIC: read-payload ( rel-base struct -- tuple ) 0 swap seek-past-padding { } ; : layout-address ( rel-base tuple -- address ) - layout>> 15 unmask - neg ; + layout>> untag - neg ; M: array-payload read-payload ( rel-base object -- payload ) nip read-array-payload ; diff --git a/extra/tools/image-analyzer/gc-info/gc-info-tests.factor b/extra/tools/image-analyzer/gc-info/gc-info-tests.factor index e28b55f3fc..9c9faa7aed 100644 --- a/extra/tools/image-analyzer/gc-info/gc-info-tests.factor +++ b/extra/tools/image-analyzer/gc-info/gc-info-tests.factor @@ -26,13 +26,15 @@ QUALIFIED: opencl [ gc-map-needed? ] filter ; : tally-gc-maps ( gc-maps -- seq/f ) - [ f ] [ { - [ [ scrub-d>> length ] map supremum ] - [ [ scrub-r>> length ] map supremum ] - [ [ gc-root-offsets ] map largest-spill-slot ] - [ [ derived-root-offsets ] map [ keys ] map largest-spill-slot ] - [ length ] - } cleave 5 narray ] if-empty ; + [ f ] [ + { + [ [ scrub-d>> length ] map supremum ] + [ [ scrub-r>> length ] map supremum ] + [ [ gc-root-offsets ] map largest-spill-slot ] + [ [ derived-root-offsets ] map [ keys ] map largest-spill-slot ] + [ length ] + } cleave 5 narray + ] if-empty ; ! Like word>gc-info but uses the compiler : word>gc-info-expected ( word -- seq/f ) @@ -87,7 +89,6 @@ QUALIFIED: opencl [ [ word>gc-info-expected ] [ word>gc-info ] bi same-gc-info? ] reject ] unit-test - ! Originally from llvm.types, but llvm moved to unmaintained TYPEDEF: void* LLVMTypeRef TYPEDEF: void* LLVMTypeHandleRef @@ -102,7 +103,7 @@ FUNCTION: void LLVMDisposeTypeHandle ( LLVMTypeHandleRef TypeHandle ) ! base-pointer-groups { t } [ - \ resolve-types +\ resolve-types [ base-pointer-groups-expected ] [ base-pointer-groups-decoded ] bi = ] unit-test @@ -147,3 +148,7 @@ FUNCTION: void LLVMDisposeTypeHandle ( LLVMTypeHandleRef TypeHandle ) { t } [ \ opencl:cl-queue-kernel deterministic-gc-info? ] unit-test + + + +! TODO: try on 32 bit \ feedback-format: diff --git a/extra/tools/image-analyzer/graphviz/graphviz.factor b/extra/tools/image-analyzer/graphviz/graphviz.factor index 7e1625235c..1f50fb7cdd 100644 --- a/extra/tools/image-analyzer/graphviz/graphviz.factor +++ b/extra/tools/image-analyzer/graphviz/graphviz.factor @@ -1,9 +1,9 @@ -! Copyright (C) 2013 Björn Lindqvist +! Copyright (C) 2015 - 2016 Björn Lindqvist ! See http://factorcode.org/license.txt for BSD license USING: accessors alien.strings assocs classes fry graphviz -graphviz.attributes graphviz.notation math.bitwise sequences -sets system tools.image-analyzer.references tools.image-analyzer.vm -vocabs.parser ; +graphviz.attributes graphviz.notation math.bitwise sequences sets +system tools.image-analyzer.references tools.image-analyzer.utils +tools.image-analyzer.vm vocabs.parser ; IN: tools.image-analyzer.graphviz FROM: arrays => 1array 2array ; FROM: byte-arrays => >byte-array ; @@ -63,7 +63,7 @@ CONSTANT: node-colors { : add-root-node ( graph ptr index -- graph ) over 15 mask 1 <= [ 2drop ] [ - [ swap 15 unmask add-edge ] keep add + [ swap untag add-edge ] keep add ] if ; : add-root-nodes ( graph image -- graph ) diff --git a/extra/tools/image-analyzer/references/references.factor b/extra/tools/image-analyzer/references/references.factor index b5be4c3447..f20fe77787 100644 --- a/extra/tools/image-analyzer/references/references.factor +++ b/extra/tools/image-analyzer/references/references.factor @@ -1,18 +1,21 @@ -! Copyright (C) 2013 Björn Lindqvist +! Copyright (C) 2015 Björn Lindqvist ! See http://factorcode.org/license.txt for BSD license ! ! Tools to follow references in the loaded image. USING: accessors arrays byte-arrays fry kernel layouts math -math.bitwise math.order sequences sets slots.syntax -tools.image-analyzer.relocations ; +math.bitwise sequences slots.syntax tools.image-analyzer.relocations +tools.image-analyzer.utils ; IN: tools.image-analyzer.references QUALIFIED-WITH: tools.image-analyzer.vm vm ! Edges in the heap GENERIC: pointers ( heap heap-node struct -- seq ) +: find-heap-node* ( heap untagged-ptr -- node ) + '[ address>> _ = ] find nip ; + : find-heap-node ( heap ptr -- node ) - 15 unmask '[ address>> _ = ] find nip ; + untag find-heap-node* ; : load-relocations ( heap code-block -- seq ) relocation>> find-heap-node payload>> >byte-array byte-array>relocations @@ -47,4 +50,4 @@ M: object pointers ( heap heap-node struct -- seq ) 3drop { } ; : collect-pointers ( heap heap-node -- seq ) - dup object>> pointers [ 1 <= ] reject [ 15 unmask ] map ; + dup object>> pointers [ 1 <= ] reject [ untag ] map ; diff --git a/extra/tools/image-analyzer/utils/utils.factor b/extra/tools/image-analyzer/utils/utils.factor index ddb39b1017..d59d0f962d 100644 --- a/extra/tools/image-analyzer/utils/utils.factor +++ b/extra/tools/image-analyzer/utils/utils.factor @@ -1,8 +1,11 @@ -USING: accessors alien alien.c-types alien.data arrays bit-arrays classes -continuations destructors fry io io.streams.throwing kernel locals -math namespaces sequences words ; +USING: accessors alien alien.c-types alien.data arrays bit-arrays +classes continuations destructors fry io io.streams.throwing kernel +locals math math.bitwise namespaces sequences words ; IN: tools.image-analyzer.utils +: untag ( ptr -- ptr' ) + 15 unmask ; + : class-heap-size ( instance -- n ) class-of heap-size ;