@ -14,13 +14,11 @@
# include < v8abbr . h >
/ *
* V8 represents small integers ( SMI ) using the upper 31 bits of a 32 / 64 - bit
* V8 represents small integers ( SMI ) using the upper 31 bits of a 32 - bit
* value . To extract the actual integer value , we must shift it over .
* /
# define IS_SMI ( value ) \
( ( value & V8_SmiTagMask ) = = V8_SmiTag )
# define SMI_VALUE ( value ) \
( ( uint32_t ) ( ( value ) > > V8_SmiValueShift ) )
# define IS_SMI ( value ) ( ( value & V8_SmiTagMask ) = = V8_SmiTag )
# define SMI_VALUE ( value ) ( ( uint32_t ) ( value ) > > V8_SmiValueShift )
/ *
* Heap objects usually start off with a Map pointer , itself another heap
@ -34,8 +32,7 @@
/ *
* Determine the encoding and representation of a V8 string .
* /
# define V8_TYPE_STRING ( type ) \
( ( ( type ) & V8_IsNotStringMask ) = = V8_StringTag )
# define V8_TYPE_STRING ( type ) ( ( ( type ) & V8_IsNotStringMask ) = = V8_StringTag )
# define V8_STRENC_ASCII ( type ) \
( ( ( type ) & V8_StringEncodingMask ) = = V8_AsciiStringTag )
@ -62,57 +59,20 @@
/ *
* General helper macros
* /
# define COPYIN_UINT8 ( addr ) ( * ( uint8_t * ) copyin ( ( addr ) , sizeof ( uint8_t ) ) )
# define COPYIN_UINT32 ( addr ) ( * ( uint32_t * ) copyin ( ( addr ) , sizeof ( uint32_t ) ) )
# define COPYIN_UINT64 ( addr ) ( * ( uint64_t * ) copyin ( ( addr ) , sizeof ( uint64_t ) ) )
# if defined ( __i386 )
# define COPYIN_PTR ( addr ) COPYIN_UINT32 ( addr )
# define off_t uint32_t
# define APPEND_PTR ( p ) APPEND_PTR_32 ( p )
# else
# define COPYIN_PTR ( addr ) COPYIN_UINT64 ( addr )
# define off_t uint64_t
# define APPEND_PTR ( p ) APPEND_PTR_64 ( p )
# endif
# define COPYIN_UINT8 ( addr ) ( * ( uint8_t * ) copyin ( ( addr ) , sizeof ( uint8_t ) ) )
# define COPYIN_UINT32 ( addr ) ( * ( uint32_t * ) copyin ( ( addr ) , sizeof ( uint32_t ) ) )
# define APPEND_CHR ( c ) ( this - > buf [ this - > off + + ] = ( c ) )
# define APPEND_CHR4 ( s0 , s1 , s2 , s3 ) \
APPEND_CHR ( s0 ) ; \
APPEND_CHR ( s1 ) ; \
APPEND_CHR ( s2 ) ; \
APPEND_CHR ( s3 ) ;
# define APPEND_CHR8 ( s0 , s1 , s2 , s3 , s4 , s5 , s6 , s7 ) \
APPEND_CHR4 ( s0 , s1 , s2 , s3 ) \
APPEND_CHR4 ( s4 , s5 , s6 , s7 )
# define APPEND_DGT ( i , d ) \
( ( ( i ) / ( d ) ) ? APPEND_CHR ( '0' + ( ( i ) / ( d ) % 10 ) ) : 0 )
( ( ( i ) / ( d ) ) ? APPEND_CHR ( '0' + ( ( i ) / ( d ) % 10 ) ) : 0 )
# define APPEND_NUM ( i ) \
APPEND_DGT ( ( i ) , 100000 ) ; \
APPEND_DGT ( ( i ) , 10000 ) ; \
APPEND_DGT ( ( i ) , 1000 ) ; \
APPEND_DGT ( ( i ) , 100 ) ; \
APPEND_DGT ( ( i ) , 10 ) ; \
APPEND_DGT ( ( i ) , 1 ) ;
# define APPEND_HEX ( d ) \
APPEND_CHR ( ( d ) < 10 ? '0' + ( d ) : 'a' - 10 + ( d ) )
# define APPEND_PTR_32 ( p ) \
APPEND_HEX ( ( p > > 28 ) & 0xf ) ; \
APPEND_HEX ( ( p > > 24 ) & 0xf ) ; \
APPEND_HEX ( ( p > > 20 ) & 0xf ) ; \
APPEND_HEX ( ( p > > 16 ) & 0xf ) ; \
APPEND_HEX ( ( p > > 12 ) & 0xf ) ; \
APPEND_HEX ( ( p > > 8 ) & 0xf ) ; \
APPEND_HEX ( ( p > > 4 ) & 0xf ) ; \
APPEND_HEX ( ( p ) & 0xf ) ;
# define APPEND_PTR_64 ( p ) \
APPEND_PTR_32 ( p > > 32 ) \
APPEND_PTR_32 ( p )
APPEND_DGT ( ( i ) , 10000 ) ; \
APPEND_DGT ( ( i ) , 1000 ) ; \
APPEND_DGT ( ( i ) , 100 ) ; \
APPEND_DGT ( ( i ) , 10 ) ; \
APPEND_DGT ( ( i ) , 1 ) ;
/ *
* The following macros are used to output ASCII SeqStrings , ConsStrings , and
@ -132,13 +92,13 @@
*
* ExternalString pointer to a char * outside the V8 heap
* /
/ *
* Load "len" and "attrs" for the given "str" .
* /
# define LOAD_STRFIELDS ( str , len , attrs ) \
len = SMI_VALUE ( COPYIN_PTR ( str + V8_OFF_STR_LENGTH ) ) ; \
this - > map = V8_MAP_PTR ( COPYIN_PTR ( str + V8_OFF_HEAPOBJ_MAP ) ) ; \
len = SMI_VALUE ( COPYIN_UINT32 ( str + V8_OFF_STR_LENGTH ) ) ; \
this - > map = V8_MAP_PTR ( COPYIN_UINT32 ( str + V8_OFF_HEAPOBJ_MAP ) ) ; \
attrs = COPYIN_UINT8 ( this - > map + V8_OFF_MAP_ATTRS ) ;
/ *
@ -146,26 +106,26 @@
* SeqString .
* /
# define APPEND_SEQSTR ( str , len , attrs ) \
dtrace : helper : ustack : \
/ ! this - > done & & len > 0 & & ASCII_SEQSTR ( attrs ) / \
{ \
dtrace: helper : ustack : \
/ ! this - > done & & len > 0 & & ASCII_SEQSTR ( attrs ) / \
{ \
copyinto ( str + V8_OFF_STR_CHARS , len , this - > buf + this - > off ) ; \
this - > off + = len ; \
}
}
/ *
* Print out the given Node . js ExternalString , or do nothing if the string is
* not an ASCII ExternalString .
* /
# define APPEND_NODESTR ( str , len , attrs ) \
dtrace : helper : ustack : \
/ ! this - > done & & len > 0 & & ASCII_EXTSTR ( attrs ) / \
{ \
this - > resource = COPYIN_PTR ( str + V8_OFF_EXTSTR_RSRC ) ; \
this - > dataptr = COPYIN_PTR ( this - > resource + NODE_OFF_EXTSTR_DATA ) ; \
dtrace: helper : ustack : \
/ ! this - > done & & len > 0 & & ASCII_EXTSTR ( attrs ) / \
{ \
this - > resource = COPYIN_UINT32 ( str + V8_OFF_EXTSTR_RSRC ) ; \
this - > dataptr = COPYIN_UINT32 ( this - > resource + NODE_OFF_EXTSTR_DATA ) ; \
copyinto ( this - > dataptr , len , this - > buf + this - > off ) ; \
this - > off + = len ; \
}
}
/ *
* Recall that each ConsString points to two other strings which are
@ -184,7 +144,7 @@
* s0 s7
* / \ / \
* / \ / \ < - - 2 nd expansion
* / \ / \
* / \ / \
* s1 s4 s8 s11
* / \ / \ / \ / \ < - - 3 rd expansion
* s2 s3 s5 s6 s9 s10 s12 s13
@ -197,27 +157,27 @@
* leafs in the tree above ) to get the final output .
* /
# define EXPAND_START ( ) \
dtrace : helper : ustack : \
/ ! this - > done / \
{ \
this - > s0str = this - > s1str = this - > s2str = ( off_t ) 0 ; \
this - > s3str = this - > s4str = this - > s5str = ( off_t ) 0 ; \
this - > s6str = this - > s7str = this - > s8str = ( off_t ) 0 ; \
this - > s9str = this - > s10str = this - > s11str = ( off_t ) 0 ; \
this - > s12str = this - > s13str = ( off_t ) 0 ; \
dtrace: helper : ustack : \
/ ! this - > done / \
{ \
this - > s0str = this - > s1str = this - > s2str = 0 ; \
this - > s3str = this - > s4str = this - > s5str = 0 ; \
this - > s6str = this - > s7str = this - > s8str = 0 ; \
this - > s9str = this - > s10str = this - > s11str = 0 ; \
this - > s12str = this - > s13str = 0 ; \
\
this - > s0len = this - > s1len = this - > s2len = ( off_t ) 0 ; \
this - > s3len = this - > s4len = this - > s5len = ( off_t ) 0 ; \
this - > s6len = this - > s7len = this - > s8len = ( off_t ) 0 ; \
this - > s9len = this - > s10len = this - > s11len = ( off_t ) 0 ; \
this - > s12len = this - > s13len = ( off_t ) 0 ; \
this - > s0len = this - > s1len = this - > s2len = 0 ; \
this - > s3len = this - > s4len = this - > s5len = 0 ; \
this - > s6len = this - > s7len = this - > s8len = 0 ; \
this - > s9len = this - > s10len = this - > s11len = 0 ; \
this - > s12len = this - > s13len = 0 ; \
\
this - > s0attrs = this - > s1attrs = this - > s2attrs = 0 ; \
this - > s3attrs = this - > s4attrs = this - > s5attrs = 0 ; \
this - > s6attrs = this - > s7attrs = this - > s8attrs = 0 ; \
this - > s9attrs = this - > s10attrs = this - > s11attrs = 0 ; \
this - > s12attrs = this - > s13attrs = 0 ; \
}
}
/ *
* Expand the ConsString "str" ( represented by "str" , "len" , and "attrs" ) into
@ -225,61 +185,61 @@
* by "s2s" , "s2l" , "s2a" ) . If "str" is not a ConsString , do nothing .
* /
# define EXPAND_STR ( str , len , attrs , s1s , s1l , s1a , s2s , s2l , s2a ) \
dtrace : helper : ustack : \
/ ! this - > done & & len > 0 & & ASCII_CONSSTR ( attrs ) / \
{ \
dtrace: helper : ustack : \
/ ! this - > done & & len > 0 & & ASCII_CONSSTR ( attrs ) / \
{ \
len = 0 ; \
\
s1s = COPYIN_PTR ( str + V8_OFF_CONSSTR_CAR ) ; \
s1s = COPYIN_UINT32 ( str + V8_OFF_CONSSTR_CAR ) ; \
LOAD_STRFIELDS ( s1s , s1l , s1a ) \
\
s2s = COPYIN_PTR ( str + V8_OFF_CONSSTR_CDR ) ; \
s2s = COPYIN_UINT32 ( str + V8_OFF_CONSSTR_CDR ) ; \
LOAD_STRFIELDS ( s2s , s2l , s2a ) \
}
}
/ *
* Print out a ConsString by expanding it up to three levels and printing out
* the resulting SeqStrings .
* /
# define APPEND_CONSSTR ( str , len , attrs ) \
EXPAND_START ( ) \
EXPAND_STR ( str , len , attrs , \
this - > s0str , this - > s0len , this - > s0attrs , \
this - > s7str , this - > s7len , this - > s7attrs ) \
EXPAND_STR ( this - > s0str , this - > s0len , this - > s0attrs , \
this - > s1str , this - > s1len , this - > s1attrs , \
this - > s4str , this - > s4len , this - > s4attrs ) \
EXPAND_STR ( this - > s1str , this - > s1len , this - > s1attrs , \
this - > s2str , this - > s2len , this - > s2attrs , \
this - > s3str , this - > s3len , this - > s3attrs ) \
EXPAND_STR ( this - > s4str , this - > s4len , this - > s4attrs , \
this - > s5str , this - > s5len , this - > s5attrs , \
this - > s6str , this - > s6len , this - > s6attrs ) \
EXPAND_STR ( this - > s7str , this - > s7len , this - > s7attrs , \
this - > s8str , this - > s8len , this - > s8attrs , \
this - > s11str , this - > s11len , this - > s11attrs ) \
EXPAND_STR ( this - > s8str , this - > s8len , this - > s8attrs , \
this - > s9str , this - > s9len , this - > s9attrs , \
this - > s10str , this - > s10len , this - > s10attrs ) \
EXPAND_STR ( this - > s11str , this - > s11len , this - > s11attrs , \
this - > s12str , this - > s12len , this - > s12attrs , \
this - > s13str , this - > s13len , this - > s13attrs ) \
EXPAND_START ( ) \
EXPAND_STR ( str , len , attrs , \
this - > s0str , this - > s0len , this - > s0attrs , \
this - > s7str , this - > s7len , this - > s7attrs ) \
EXPAND_STR ( this - > s0str , this - > s0len , this - > s0attrs , \
this - > s1str , this - > s1len , this - > s1attrs , \
this - > s4str , this - > s4len , this - > s4attrs ) \
EXPAND_STR ( this - > s1str , this - > s1len , this - > s1attrs , \
this - > s2str , this - > s2len , this - > s2attrs , \
this - > s3str , this - > s3len , this - > s3attrs ) \
EXPAND_STR ( this - > s4str , this - > s4len , this - > s4attrs , \
this - > s5str , this - > s5len , this - > s5attrs , \
this - > s6str , this - > s6len , this - > s6attrs ) \
EXPAND_STR ( this - > s7str , this - > s7len , this - > s7attrs , \
this - > s8str , this - > s8len , this - > s8attrs , \
this - > s11str , this - > s11len , this - > s11attrs ) \
EXPAND_STR ( this - > s8str , this - > s8len , this - > s8attrs , \
this - > s9str , this - > s9len , this - > s9attrs , \
this - > s10str , this - > s10len , this - > s10attrs ) \
EXPAND_STR ( this - > s11str , this - > s11len , this - > s11attrs , \
this - > s12str , this - > s12len , this - > s12attrs , \
this - > s13str , this - > s13len , this - > s13attrs ) \
\
APPEND_SEQSTR ( str , len , attrs ) \
APPEND_SEQSTR ( this - > s0str , this - > s0len , this - > s0attrs ) \
APPEND_SEQSTR ( this - > s1str , this - > s1len , this - > s1attrs ) \
APPEND_SEQSTR ( this - > s2str , this - > s2len , this - > s2attrs ) \
APPEND_SEQSTR ( this - > s3str , this - > s3len , this - > s3attrs ) \
APPEND_SEQSTR ( this - > s4str , this - > s4len , this - > s4attrs ) \
APPEND_SEQSTR ( this - > s5str , this - > s5len , this - > s5attrs ) \
APPEND_SEQSTR ( this - > s6str , this - > s6len , this - > s6attrs ) \
APPEND_SEQSTR ( this - > s7str , this - > s7len , this - > s7attrs ) \
APPEND_SEQSTR ( this - > s8str , this - > s8len , this - > s8attrs ) \
APPEND_SEQSTR ( this - > s9str , this - > s9len , this - > s9attrs ) \
APPEND_SEQSTR ( this - > s10str , this - > s10len , this - > s10attrs ) \
APPEND_SEQSTR ( this - > s11str , this - > s11len , this - > s11attrs ) \
APPEND_SEQSTR ( this - > s12str , this - > s12len , this - > s12attrs ) \
APPEND_SEQSTR ( this - > s13str , this - > s13len , this - > s13attrs ) \
APPEND_SEQSTR ( str , len , attrs ) \
APPEND_SEQSTR ( this - > s0str , this - > s0len , this - > s0attrs ) \
APPEND_SEQSTR ( this - > s1str , this - > s1len , this - > s1attrs ) \
APPEND_SEQSTR ( this - > s2str , this - > s2len , this - > s2attrs ) \
APPEND_SEQSTR ( this - > s3str , this - > s3len , this - > s3attrs ) \
APPEND_SEQSTR ( this - > s4str , this - > s4len , this - > s4attrs ) \
APPEND_SEQSTR ( this - > s5str , this - > s5len , this - > s5attrs ) \
APPEND_SEQSTR ( this - > s6str , this - > s6len , this - > s6attrs ) \
APPEND_SEQSTR ( this - > s7str , this - > s7len , this - > s7attrs ) \
APPEND_SEQSTR ( this - > s8str , this - > s8len , this - > s8attrs ) \
APPEND_SEQSTR ( this - > s9str , this - > s9len , this - > s9attrs ) \
APPEND_SEQSTR ( this - > s10str , this - > s10len , this - > s10attrs ) \
APPEND_SEQSTR ( this - > s11str , this - > s11len , this - > s11attrs ) \
APPEND_SEQSTR ( this - > s12str , this - > s12len , this - > s12attrs ) \
APPEND_SEQSTR ( this - > s13str , this - > s13len , this - > s13attrs ) \
/ *
@ -288,8 +248,8 @@
* expanded ConsString .
* /
# define APPEND_V8STR ( str , len , attrs ) \
APPEND_CONSSTR ( str , len , attrs ) \
APPEND_NODESTR ( str , len , attrs )
APPEND_CONSSTR ( str , len , attrs ) \
APPEND_NODESTR ( str , len , attrs )
/ *
* In this first clause we initialize all variables . We must explicitly clear
@ -301,26 +261,26 @@ dtrace:helper:ustack:
this - > fp = arg1 ;
/* output/flow control */
this - > buf = ( char * ) alloca ( 128 ) ;
this - > buf = ( char * ) alloca ( 128 ) ;
this - > off = 0 ;
this - > done = 0 ;
/* program state */
this - > ctx = ( off_t ) 0 ;
this - > marker = ( off_t ) 0 ;
this - > func = ( off_t ) 0 ;
this - > shared = ( off_t ) 0 ;
this - > map = ( off_t ) 0 ;
this - > ctx = 0 ;
this - > marker = 0 ;
this - > func = 0 ;
this - > shared = 0 ;
this - > map = 0 ;
this - > attrs = 0 ;
this - > funcnamestr = ( off_t ) 0 ;
this - > funcnamestr = 0 ;
this - > funcnamelen = 0 ;
this - > funcnameattrs = 0 ;
this - > script = ( off_t ) 0 ;
this - > scriptnamestr = ( off_t ) 0 ;
this - > script = 0 ;
this - > scriptnamestr = 0 ;
this - > scriptnamelen = 0 ;
this - > scriptnameattrs = 0 ;
this - > position = 0 ;
this - > line_ends = ( off_t ) 0 ;
this - > position = 0 ;
this - > line_ends = 0 ;
this - > le_attrs = 0 ;
/* binary search fields */
@ -335,15 +295,27 @@ dtrace:helper:ustack:
* /
dtrace: helper : ustack :
{
this - > ctx = COPYIN_PTR ( this - > fp + V8_OFF_FP_CONTEXT ) ;
this - > ctx = COPYIN_UINT32 ( this - > fp + V8_OFF_FP_CONTEXT ) ;
}
dtrace: helper : ustack :
/ IS_SMI ( this - > ctx ) & & SMI_VALUE ( this - > ctx ) = = V8_FT_ADAPTOR /
{
this - > done = 1 ;
APPEND_CHR8 ( '<' , '<' , ' ' , 'a' , 'd' , 'a' , 'p' , 't' ) ;
APPEND_CHR8 ( 'o' , 'r' , ' ' , '>' , '>' , '\0' , '\0' , '\0' ) ;
APPEND_CHR ( '<' ) ;
APPEND_CHR ( '<' ) ;
APPEND_CHR ( ' ' ) ;
APPEND_CHR ( 'a' ) ;
APPEND_CHR ( 'd' ) ;
APPEND_CHR ( 'a' ) ;
APPEND_CHR ( 'p' ) ;
APPEND_CHR ( 't' ) ;
APPEND_CHR ( 'o' ) ;
APPEND_CHR ( 'r' ) ;
APPEND_CHR ( ' ' ) ;
APPEND_CHR ( '>' ) ;
APPEND_CHR ( '>' ) ;
APPEND_CHR ( '\0' ) ;
stringof ( this - > buf ) ;
}
@ -353,7 +325,7 @@ dtrace:helper:ustack:
dtrace: helper : ustack :
/ ! this - > done /
{
this - > marker = COPYIN_PTR ( this - > fp + V8_OFF_FP_MARKER ) ;
this - > marker = COPYIN_UINT32 ( this - > fp + V8_OFF_FP_MARKER ) ;
}
dtrace: helper : ustack :
@ -361,8 +333,18 @@ dtrace:helper:ustack:
SMI_VALUE ( this - > marker ) = = V8_FT_ENTRY /
{
this - > done = 1 ;
APPEND_CHR8 ( '<' , '<' , ' ' , 'e' , 'n' , 't' , 'r' , 'y' ) ;
APPEND_CHR4 ( ' ' , '>' , '>' , '\0' ) ;
APPEND_CHR ( '<' ) ;
APPEND_CHR ( '<' ) ;
APPEND_CHR ( ' ' ) ;
APPEND_CHR ( 'e' ) ;
APPEND_CHR ( 'n' ) ;
APPEND_CHR ( 't' ) ;
APPEND_CHR ( 'r' ) ;
APPEND_CHR ( 'y' ) ;
APPEND_CHR ( ' ' ) ;
APPEND_CHR ( '>' ) ;
APPEND_CHR ( '>' ) ;
APPEND_CHR ( '\0' ) ;
stringof ( this - > buf ) ;
}
@ -371,9 +353,27 @@ dtrace:helper:ustack:
SMI_VALUE ( this - > marker ) = = V8_FT_ENTRYCONSTRUCT /
{
this - > done = 1 ;
APPEND_CHR8 ( '<' , '<' , ' ' , 'e' , 'n' , 't' , 'r' , 'y' ) ;
APPEND_CHR8 ( '_' , 'c' , 'o' , 'n' , 's' , 't' , 'r' , 'u' ) ;
APPEND_CHR4 ( 't' , ' ' , '>' , '>' ) ;
APPEND_CHR ( '<' ) ;
APPEND_CHR ( '<' ) ;
APPEND_CHR ( ' ' ) ;
APPEND_CHR ( 'e' ) ;
APPEND_CHR ( 'n' ) ;
APPEND_CHR ( 't' ) ;
APPEND_CHR ( 'r' ) ;
APPEND_CHR ( 'y' ) ;
APPEND_CHR ( '_' ) ;
APPEND_CHR ( 'c' ) ;
APPEND_CHR ( 'o' ) ;
APPEND_CHR ( 'n' ) ;
APPEND_CHR ( 's' ) ;
APPEND_CHR ( 't' ) ;
APPEND_CHR ( 'r' ) ;
APPEND_CHR ( 'u' ) ;
APPEND_CHR ( 'c' ) ;
APPEND_CHR ( 't' ) ;
APPEND_CHR ( ' ' ) ;
APPEND_CHR ( '>' ) ;
APPEND_CHR ( '>' ) ;
APPEND_CHR ( '\0' ) ;
stringof ( this - > buf ) ;
}
@ -383,8 +383,17 @@ dtrace:helper:ustack:
SMI_VALUE ( this - > marker ) = = V8_FT_EXIT /
{
this - > done = 1 ;
APPEND_CHR8 ( '<' , '<' , ' ' , 'e' , 'x' , 'i' , 't' , ' ' ) ;
APPEND_CHR4 ( '>' , '>' , '\0' , '\0' ) ;
APPEND_CHR ( '<' ) ;
APPEND_CHR ( '<' ) ;
APPEND_CHR ( ' ' ) ;
APPEND_CHR ( 'e' ) ;
APPEND_CHR ( 'x' ) ;
APPEND_CHR ( 'i' ) ;
APPEND_CHR ( 't' ) ;
APPEND_CHR ( ' ' ) ;
APPEND_CHR ( '>' ) ;
APPEND_CHR ( '>' ) ;
APPEND_CHR ( '\0' ) ;
stringof ( this - > buf ) ;
}
@ -393,8 +402,21 @@ dtrace:helper:ustack:
SMI_VALUE ( this - > marker ) = = V8_FT_INTERNAL /
{
this - > done = 1 ;
APPEND_CHR8 ( '<' , '<' , ' ' , 'i' , 'n' , 't' , 'e' , 'r' ) ;
APPEND_CHR8 ( 'n' , 'a' , 'l' , ' ' , '>' , '>' , '\0' , '\0' ) ;
APPEND_CHR ( '<' ) ;
APPEND_CHR ( '<' ) ;
APPEND_CHR ( ' ' ) ;
APPEND_CHR ( 'i' ) ;
APPEND_CHR ( 'n' ) ;
APPEND_CHR ( 't' ) ;
APPEND_CHR ( 'e' ) ;
APPEND_CHR ( 'r' ) ;
APPEND_CHR ( 'n' ) ;
APPEND_CHR ( 'a' ) ;
APPEND_CHR ( 'l' ) ;
APPEND_CHR ( ' ' ) ;
APPEND_CHR ( '>' ) ;
APPEND_CHR ( '>' ) ;
APPEND_CHR ( '\0' ) ;
stringof ( this - > buf ) ;
}
@ -403,9 +425,24 @@ dtrace:helper:ustack:
SMI_VALUE ( this - > marker ) = = V8_FT_CONSTRUCT /
{
this - > done = 1 ;
APPEND_CHR8 ( '<' , '<' , ' ' , 'c' , 'o' , 'n' , 's' , 't' ) ;
APPEND_CHR8 ( 'r' , 'u' , 'c' , 't' , 'o' , 'r' , ' ' , '>' ) ;
APPEND_CHR4 ( '>' , '\0' , '\0' , '\0' ) ;
APPEND_CHR ( '<' ) ;
APPEND_CHR ( '<' ) ;
APPEND_CHR ( ' ' ) ;
APPEND_CHR ( 'c' ) ;
APPEND_CHR ( 'o' ) ;
APPEND_CHR ( 'n' ) ;
APPEND_CHR ( 's' ) ;
APPEND_CHR ( 't' ) ;
APPEND_CHR ( 'r' ) ;
APPEND_CHR ( 'u' ) ;
APPEND_CHR ( 'c' ) ;
APPEND_CHR ( 't' ) ;
APPEND_CHR ( 'o' ) ;
APPEND_CHR ( 'r' ) ;
APPEND_CHR ( ' ' ) ;
APPEND_CHR ( '>' ) ;
APPEND_CHR ( '>' ) ;
APPEND_CHR ( '\0' ) ;
stringof ( this - > buf ) ;
}
@ -417,8 +454,8 @@ dtrace:helper:ustack:
dtrace: helper : ustack :
/ ! this - > done /
{
this - > func = COPYIN_PTR ( this - > fp + V8_OFF_FP_FUNC ) ;
this - > map = V8_MAP_PTR ( COPYIN_PTR ( this - > func + V8_OFF_HEAPOBJ_MAP ) ) ;
this - > func = COPYIN_UINT32 ( this - > fp + V8_OFF_FP_FUNC ) ;
this - > map = V8_MAP_PTR ( COPYIN_UINT32 ( this - > func + V8_OFF_HEAPOBJ_MAP ) ) ;
this - > attrs = COPYIN_UINT8 ( this - > map + V8_OFF_MAP_ATTRS ) ;
}
@ -426,10 +463,27 @@ dtrace:helper:ustack:
/ ! this - > done & & this - > attrs = = V8_IT_CODE /
{
this - > done = 1 ;
APPEND_CHR8 ( '<' , '<' , ' ' , 'i' , 'n' , 't' , 'e' , 'r' ) ;
APPEND_CHR8 ( 'n' , 'a' , 'l' , ' ' , 'c' , 'o' , 'd' , 'e' ) ;
APPEND_CHR4 ( ' ' , '>' , '>' , '\0' ) ;
stringof ( this - > buf ) ;
APPEND_CHR ( '<' ) ;
APPEND_CHR ( '<' ) ;
APPEND_CHR ( ' ' ) ;
APPEND_CHR ( 'i' ) ;
APPEND_CHR ( 'n' ) ;
APPEND_CHR ( 't' ) ;
APPEND_CHR ( 'e' ) ;
APPEND_CHR ( 'r' ) ;
APPEND_CHR ( 'n' ) ;
APPEND_CHR ( 'a' ) ;
APPEND_CHR ( 'l' ) ;
APPEND_CHR ( ' ' ) ;
APPEND_CHR ( 'c' ) ;
APPEND_CHR ( 'o' ) ;
APPEND_CHR ( 'd' ) ;
APPEND_CHR ( 'e' ) ;
APPEND_CHR ( ' ' ) ;
APPEND_CHR ( '>' ) ;
APPEND_CHR ( '>' ) ;
APPEND_CHR ( '\0' ) ;
stringof ( this - > buf ) ;
}
/ *
@ -443,8 +497,8 @@ dtrace:helper:ustack:
this - > map = 0 ;
this - > attrs = 0 ;
this - > shared = COPYIN_PTR ( this - > func + V8_OFF_FUNC_SHARED ) ;
this - > funcnamestr = COPYIN_PTR ( this - > shared + V8_OFF_SHARED_NAME ) ;
this - > shared = COPYIN_UINT32 ( this - > func + V8_OFF_FUNC_SHARED ) ;
this - > funcnamestr = COPYIN_UINT32 ( this - > shared + V8_OFF_SHARED_NAME ) ;
LOAD_STRFIELDS ( this - > funcnamestr , this - > funcnamelen ,
this - > funcnameattrs ) ;
}
@ -457,11 +511,18 @@ dtrace:helper:ustack:
* some object then V8 will have computed an inferred name that we can
* include in the stack trace .
* /
APPEND_CHR8 ( '(' , 'a' , 'n' , 'o' , 'n' , ')' , ' ' , 'a' ) ;
APPEND_CHR ( '(' ) ;
APPEND_CHR ( 'a' ) ;
APPEND_CHR ( 'n' ) ;
APPEND_CHR ( 'o' ) ;
APPEND_CHR ( 'n' ) ;
APPEND_CHR ( ')' ) ;
APPEND_CHR ( ' ' ) ;
APPEND_CHR ( 'a' ) ;
APPEND_CHR ( 's' ) ;
APPEND_CHR ( ' ' ) ;
this - > funcnamestr = COPYIN_PTR ( this - > shared + V8_OFF_SHARED_INFERRED ) ;
this - > funcnamestr = COPYIN_UINT32 ( this - > shared + V8_OFF_SHARED_INFERRED ) ;
LOAD_STRFIELDS ( this - > funcnamestr , this - > funcnamelen ,
this - > funcnameattrs ) ;
}
@ -470,7 +531,10 @@ dtrace:helper:ustack:
/ ! this - > done & & this - > funcnamelen = = 0 /
{
APPEND_CHR ( '(' ) ;
APPEND_CHR4 ( 'a' , 'n' , 'o' , 'n' ) ;
APPEND_CHR ( 'a' ) ;
APPEND_CHR ( 'n' ) ;
APPEND_CHR ( 'o' ) ;
APPEND_CHR ( 'n' ) ;
APPEND_CHR ( ')' ) ;
}
@ -482,19 +546,16 @@ APPEND_V8STR(this->funcnamestr, this->funcnamelen, this->funcnameattrs)
dtrace: helper : ustack :
/ ! this - > done /
{
this - > script = COPYIN_PTR ( this - > shared + V8_OFF_SHARED_SCRIPT ) ;
this - > scriptnamestr = COPYIN_PTR ( this - > script + V8_OFF_SCRIPT_NAME ) ;
this - > script = COPYIN_UINT32 ( this - > shared + V8_OFF_SHARED_SCRIPT ) ;
this - > scriptnamestr = COPYIN_UINT32 ( this - > script +
V8_OFF_SCRIPT_NAME ) ;
LOAD_STRFIELDS ( this - > scriptnamestr , this - > scriptnamelen ,
this - > scriptnameattrs ) ;
APPEND_CHR4 ( ' ' , 'a' , 't' , ' ' ) ;
}
dtrace: helper : ustack :
/ ! this - > done & & this - > scriptnamelen = = 0 /
{
APPEND_CHR8 ( '<' , 'u' , 'n' , 'k' , 'n' , 'o' , 'w' , 'n' ) ;
APPEND_CHR ( '>' ) ;
APPEND_CHR ( ' ' ) ;
APPEND_CHR ( 'a' ) ;
APPEND_CHR ( 't' ) ;
APPEND_CHR ( ' ' ) ;
}
APPEND_V8STR ( this - > scriptnamestr , this - > scriptnamelen , this - > scriptnameattrs )
@ -506,8 +567,9 @@ dtrace:helper:ustack:
/ ! this - > done /
{
this - > position = COPYIN_UINT32 ( this - > shared + V8_OFF_SHARED_FUNTOK ) ;
this - > line_ends = COPYIN_PTR ( this - > script + V8_OFF_SCRIPT_LENDS ) ;
this - > map = V8_MAP_PTR ( COPYIN_PTR ( this - > line_ends + V8_OFF_HEAPOBJ_MAP ) ) ;
this - > line_ends = COPYIN_UINT32 ( this - > script + V8_OFF_SCRIPT_LENDS ) ;
this - > map = V8_MAP_PTR ( COPYIN_UINT32 ( this - > line_ends +
V8_OFF_HEAPOBJ_MAP ) ) ;
this - > le_attrs = COPYIN_UINT8 ( this - > map + V8_OFF_MAP_ATTRS ) ;
}
@ -519,7 +581,14 @@ dtrace:helper:ustack:
* undefined because V8 has not had to compute it yet . In this case we
* just show the raw position and call it a day .
* /
APPEND_CHR8 ( ' ' , 'p' , 'o' , 's' , 'i' , 't' , 'i' , 'o' ) ;
APPEND_CHR ( ' ' ) ;
APPEND_CHR ( 'p' ) ;
APPEND_CHR ( 'o' ) ;
APPEND_CHR ( 's' ) ;
APPEND_CHR ( 'i' ) ;
APPEND_CHR ( 't' ) ;
APPEND_CHR ( 'i' ) ;
APPEND_CHR ( 'o' ) ;
APPEND_CHR ( 'n' ) ;
APPEND_CHR ( ' ' ) ;
APPEND_NUM ( this - > position ) ;
@ -538,11 +607,11 @@ dtrace:helper:ustack:
/ ! this - > done /
{
/* initialize binary search */
this - > bsearch_line = this - > position <
SMI_VALUE ( COPYIN_PTR ( this - > line_ends + V8_OFF_FA_DATA ) ) ? 1 : 0 ;
this - > bsearch_line = this - > position < COPYIN_UINT32 (
this - > line_ends + V8_OFF_FA_DATA ) ? 1 : 0 ;
this - > bsearch_min = 0 ;
this - > bsearch_max = this - > bsearch_line ! = 0 ? 0 :
SMI_VALUE ( COPYIN_PTR ( this - > line_ends + V8_OFF_FA_SIZE ) ) - 1 ;
SMI_VALUE ( COPYIN_UINT32 ( this - > line_ends + V8_OFF_FA_SIZE ) ) - 1 ;
}
/ *
@ -551,29 +620,27 @@ dtrace:helper:ustack:
* to 32768 lines of code .
* /
# define BSEARCH_LOOP \
dtrace : helper : ustack : \
/ ! this - > done & & this - > bsearch_max > = 1 / \
{ \
dtrace: helper : ustack : \
/ ! this - > done & & this - > bsearch_max > = 1 / \
{ \
this - > ii = ( this - > bsearch_min + this - > bsearch_max ) > > 1 ; \
} \
} \
\
dtrace : helper : ustack : \
/ ! this - > done & & this - > bsearch_max > = 1 & & \
this - > position > SMI_VALUE ( \
COPYIN_PTR ( this - > line_ends + V8_OFF_FA_DATA + \
this - > ii * sizeof ( uint32_t ) ) ) / \
{ \
dtrace: helper : ustack : \
/ ! this - > done & & this - > bsearch_max > = 1 & & \
this - > position > COPYIN_UINT32 ( this - > line_ends + V8_OFF_FA_DATA + \
this - > ii * sizeof ( uint32_t ) ) / \
{ \
this - > bsearch_min = this - > ii + 1 ; \
} \
} \
\
dtrace : helper : ustack : \
/ ! this - > done & & this - > bsearch_max > = 1 & & \
this - > position < = SMI_VALUE ( \
COPYIN_PTR ( this - > line_ends + V8_OFF_FA_DATA + \
( this - > ii - 1 ) * sizeof ( uint32_t ) ) ) / \
{ \
dtrace: helper : ustack : \
/ ! this - > done & & this - > bsearch_max > = 1 & & \
this - > position < = COPYIN_UINT32 ( this - > line_ends + V8_OFF_FA_DATA + \
( this - > ii - 1 ) * sizeof ( uint32_t ) ) / \
{ \
this - > bsearch_max = this - > ii - 1 ; \
}
}
BSEARCH_LOOP
BSEARCH_LOOP
@ -601,12 +668,13 @@ dtrace:helper:ustack:
/ ! this - > done /
{
APPEND_CHR ( ' ' ) ;
APPEND_CHR4 ( 'l' , 'i' , 'n' , 'e' ) ;
APPEND_CHR ( 'l' ) ;
APPEND_CHR ( 'i' ) ;
APPEND_CHR ( 'n' ) ;
APPEND_CHR ( 'e' ) ;
APPEND_CHR ( ' ' ) ;
APPEND_NUM ( this - > bsearch_line ) ;
APPEND_CHR ( '\0' ) ;
this - > done = 1 ;
stringof ( this - > buf ) ;
}
/* vim: set tabstop=8 softtabstop=8 shiftwidth=8 noexpandtab: */