dtrace: fix style in ustack helper

This commit is contained in:
Fedor Indutny 2013-01-07 22:53:50 +04:00
parent 3b715edda9
commit 13296e4b13

View File

@ -17,8 +17,10 @@
* 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
@ -26,106 +28,106 @@
* pointer (which are normally 01) are used to record GC state. Of course, we
* have no idea if we're in GC or not, so we must always normalize the pointer.
*/
#define V8_MAP_PTR(ptr) \
#define V8_MAP_PTR(ptr) \
((ptr & ~V8_HeapObjectTagMask) | V8_HeapObjectTag)
/*
* 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) \
#define V8_STRENC_ASCII(type) \
(((type) & V8_StringEncodingMask) == V8_AsciiStringTag)
#define V8_STRREP_SEQ(type) \
#define V8_STRREP_SEQ(type) \
(((type) & V8_StringRepresentationMask) == V8_SeqStringTag)
#define V8_STRREP_CONS(type) \
#define V8_STRREP_CONS(type) \
(((type) & V8_StringRepresentationMask) == V8_ConsStringTag)
#define V8_STRREP_EXT(type) \
#define V8_STRREP_EXT(type) \
(((type) & V8_StringRepresentationMask) == V8_ExternalStringTag)
/*
* String type predicates
*/
#define ASCII_SEQSTR(value) \
#define ASCII_SEQSTR(value) \
(V8_TYPE_STRING(value) && V8_STRENC_ASCII(value) && V8_STRREP_SEQ(value))
#define ASCII_CONSSTR(value) \
#define ASCII_CONSSTR(value) \
(V8_TYPE_STRING(value) && V8_STRENC_ASCII(value) && V8_STRREP_CONS(value))
#define ASCII_EXTSTR(value) \
#define ASCII_EXTSTR(value) \
(V8_TYPE_STRING(value) && V8_STRENC_ASCII(value) && V8_STRREP_EXT(value))
/*
* 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_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_CHR(c) (this->buf[this->off++] = (c))
#define APPEND_DGT(i, d) \
(((i) / (d)) ? APPEND_CHR('0' + ((i)/(d) % 10)) : 0)
#define APPEND_DGT(i, d) \
(((i) / (d)) ? APPEND_CHR('0' + ((i)/(d) % 10)) : 0)
#define APPEND_NUM(i) \
APPEND_DGT((i), 10000); \
APPEND_DGT((i), 1000); \
APPEND_DGT((i), 100); \
APPEND_DGT((i), 10); \
APPEND_DGT((i), 1);
#define APPEND_NUM(i) \
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
* Node.js ExternalStrings. To represent each string, we use three fields:
*
* "str": a pointer to the string itself
* "str": a pointer to the string itself
*
* "len": the string length
* "len": the string length
*
* "attrs": the type identifier for the string, which indicates the
* encoding and representation. We're only interested in ASCII
* encoded strings whose representation is one of:
* "attrs": the type identifier for the string, which indicates the
* encoding and representation. We're only interested in ASCII
* encoded strings whose representation is one of:
*
* SeqString stored directly as a char array inside the object
* SeqString stored directly as a char array inside the object
*
* ConsString pointer to two strings that should be concatenated
* ConsString pointer to two strings that should be concatenated
*
* ExternalString pointer to a char* outside the V8 heap
* 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_UINT32(str + V8_OFF_STR_LENGTH)); \
this->map = V8_MAP_PTR(COPYIN_UINT32(str + V8_OFF_HEAPOBJ_MAP)); \
#define LOAD_STRFIELDS(str, len, attrs) \
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);
/*
* Print out the given SeqString, or do nothing if the string is not an ASCII
* SeqString.
*/
#define APPEND_SEQSTR(str, len, 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; \
}
#define APPEND_SEQSTR(str, len, 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_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; \
}
#define APPEND_NODESTR(str, len, attrs) \
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
@ -140,11 +142,11 @@ dtrace:helper:ustack: \
*
* +---- str ----+
* / \ <-- 1st expansion
* / \
* / \
* s0 s7
* / \ / \
* / \ / \
* / \ / \ <-- 2nd expansion
* / \ / \
* / \ / \
* s1 s4 s8 s11
* / \ / \ / \ / \ <-- 3rd expansion
* s2 s3 s5 s6 s9 s10 s12 s13
@ -156,90 +158,90 @@ dtrace:helper:ustack: \
* all non-zero-length strings in order (including both internal nodes and
* leafs in the tree above) to get the final output.
*/
#define EXPAND_START() \
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 = 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; \
}
#define EXPAND_START() \
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 = 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
* strings "s1" (represented by "s1s", "s1l", and "s1a") and "s2" (represented
* 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)/ \
{ \
len = 0; \
\
s1s = COPYIN_UINT32(str + V8_OFF_CONSSTR_CAR); \
LOAD_STRFIELDS(s1s, s1l, s1a) \
\
s2s = COPYIN_UINT32(str + V8_OFF_CONSSTR_CDR); \
LOAD_STRFIELDS(s2s, s2l, s2a) \
}
#define EXPAND_STR(str, len, attrs, s1s, s1l, s1a, s2s, s2l, s2a) \
dtrace:helper:ustack: \
/!this->done && len > 0 && ASCII_CONSSTR(attrs)/ \
{ \
len = 0; \
\
s1s = COPYIN_UINT32(str + V8_OFF_CONSSTR_CAR); \
LOAD_STRFIELDS(s1s, s1l, s1a) \
\
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) \
\
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) \
#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) \
\
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) \
/*
@ -247,9 +249,9 @@ dtrace:helper:ustack: \
* APPEND_CONSSTR implicitly handles SeqStrings as the degenerate case of an
* expanded ConsString.
*/
#define APPEND_V8STR(str, len, attrs) \
APPEND_CONSSTR(str, len, attrs) \
APPEND_NODESTR(str, len, attrs)
#define APPEND_V8STR(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
@ -257,36 +259,36 @@ dtrace:helper:ustack: \
*/
dtrace:helper:ustack:
{
/* input */
this->fp = arg1;
/* input */
this->fp = arg1;
/* output/flow control */
this->buf = (char *)alloca(128);
this->off = 0;
this->done = 0;
/* output/flow control */
this->buf = (char*) alloca(128);
this->off = 0;
this->done = 0;
/* program state */
this->ctx = 0;
this->marker = 0;
this->func = 0;
this->shared = 0;
this->map = 0;
this->attrs = 0;
this->funcnamestr = 0;
this->funcnamelen = 0;
this->funcnameattrs = 0;
this->script = 0;
this->scriptnamestr = 0;
this->scriptnamelen = 0;
this->scriptnameattrs = 0;
this->position = 0;
this->line_ends = 0;
this->le_attrs = 0;
/* program state */
this->ctx = 0;
this->marker = 0;
this->func = 0;
this->shared = 0;
this->map = 0;
this->attrs = 0;
this->funcnamestr = 0;
this->funcnamelen = 0;
this->funcnameattrs = 0;
this->script = 0;
this->scriptnamestr = 0;
this->scriptnamelen = 0;
this->scriptnameattrs = 0;
this->position = 0;
this->line_ends = 0;
this->le_attrs = 0;
/* binary search fields */
this->bsearch_min = 0;
this->bsearch_max = 0;
this->ii = 0;
/* binary search fields */
this->bsearch_min = 0;
this->bsearch_max = 0;
this->ii = 0;
}
/*
@ -295,28 +297,28 @@ dtrace:helper:ustack:
*/
dtrace:helper:ustack:
{
this->ctx = COPYIN_UINT32(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_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);
this->done = 1;
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);
}
/*
@ -325,125 +327,125 @@ dtrace:helper:ustack:
dtrace:helper:ustack:
/!this->done/
{
this->marker = COPYIN_UINT32(this->fp + V8_OFF_FP_MARKER);
this->marker = COPYIN_UINT32(this->fp + V8_OFF_FP_MARKER);
}
dtrace:helper:ustack:
/!this->done && IS_SMI(this->marker) &&
SMI_VALUE(this->marker) == V8_FT_ENTRY/
{
this->done = 1;
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);
this->done = 1;
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);
}
dtrace:helper:ustack:
/!this->done && IS_SMI(this->marker) &&
SMI_VALUE(this->marker) == V8_FT_ENTRYCONSTRUCT/
{
this->done = 1;
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);
this->done = 1;
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);
}
dtrace:helper:ustack:
/!this->done && IS_SMI(this->marker) &&
SMI_VALUE(this->marker) == V8_FT_EXIT/
{
this->done = 1;
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);
this->done = 1;
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);
}
dtrace:helper:ustack:
/!this->done && IS_SMI(this->marker) &&
SMI_VALUE(this->marker) == V8_FT_INTERNAL/
{
this->done = 1;
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);
this->done = 1;
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);
}
dtrace:helper:ustack:
/!this->done && IS_SMI(this->marker) &&
SMI_VALUE(this->marker) == V8_FT_CONSTRUCT/
{
this->done = 1;
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);
this->done = 1;
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);
}
/*
@ -454,36 +456,36 @@ dtrace:helper:ustack:
dtrace:helper:ustack:
/!this->done/
{
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);
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);
}
dtrace:helper:ustack:
/!this->done && this->attrs == V8_IT_CODE/
{
this->done = 1;
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);
this->done = 1;
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);
}
/*
@ -494,48 +496,48 @@ dtrace:helper:ustack:
dtrace:helper:ustack:
/!this->done/
{
this->map = 0;
this->attrs = 0;
this->map = 0;
this->attrs = 0;
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);
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);
}
dtrace:helper:ustack:
/!this->done && this->funcnamelen == 0/
{
/*
* This is an anonymous function, but if it was invoked as a method of
* some object then V8 will have computed an inferred name that we can
* include in the stack trace.
*/
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 is an anonymous function, but if it was invoked as a method of
* some object then V8 will have computed an inferred name that we can
* include in the stack trace.
*/
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_UINT32(this->shared + V8_OFF_SHARED_INFERRED);
LOAD_STRFIELDS(this->funcnamestr, this->funcnamelen,
this->funcnameattrs);
this->funcnamestr = COPYIN_UINT32(this->shared + V8_OFF_SHARED_INFERRED);
LOAD_STRFIELDS(this->funcnamestr, this->funcnamelen,
this->funcnameattrs);
}
dtrace:helper:ustack:
/!this->done && this->funcnamelen == 0/
{
APPEND_CHR('(');
APPEND_CHR('a');
APPEND_CHR('n');
APPEND_CHR('o');
APPEND_CHR('n');
APPEND_CHR(')');
APPEND_CHR('(');
APPEND_CHR('a');
APPEND_CHR('n');
APPEND_CHR('o');
APPEND_CHR('n');
APPEND_CHR(')');
}
APPEND_V8STR(this->funcnamestr, this->funcnamelen, this->funcnameattrs)
@ -546,16 +548,15 @@ APPEND_V8STR(this->funcnamestr, this->funcnamelen, this->funcnameattrs)
dtrace:helper:ustack:
/!this->done/
{
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);
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_CHR(' ');
APPEND_CHR('a');
APPEND_CHR('t');
APPEND_CHR(' ');
APPEND_CHR(' ');
APPEND_CHR('a');
APPEND_CHR('t');
APPEND_CHR(' ');
}
APPEND_V8STR(this->scriptnamestr, this->scriptnamelen, this->scriptnameattrs)
@ -566,35 +567,34 @@ APPEND_V8STR(this->scriptnamestr, this->scriptnamelen, this->scriptnameattrs)
dtrace:helper:ustack:
/!this->done/
{
this->position = COPYIN_UINT32(this->shared + V8_OFF_SHARED_FUNTOK);
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);
this->position = COPYIN_UINT32(this->shared + V8_OFF_SHARED_FUNTOK);
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);
}
dtrace:helper:ustack:
/!this->done && this->le_attrs != V8_IT_FIXEDARRAY/
{
/*
* If the line number array was not a valid FixedArray, it's probably
* 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_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);
APPEND_CHR('\0');
this->done = 1;
stringof(this->buf);
/*
* If the line number array was not a valid FixedArray, it's probably
* 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_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);
APPEND_CHR('\0');
this->done = 1;
stringof(this->buf);
}
/*
@ -606,12 +606,12 @@ dtrace:helper:ustack:
dtrace:helper:ustack:
/!this->done/
{
/* initialize binary search */
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_UINT32(this->line_ends + V8_OFF_FA_SIZE)) - 1;
/* initialize binary search */
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_UINT32(this->line_ends + V8_OFF_FA_SIZE)) - 1;
}
/*
@ -619,28 +619,28 @@ dtrace:helper:ustack:
* iterations. That's enough to precisely identify the line number in files up
* to 32768 lines of code.
*/
#define BSEARCH_LOOP \
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 > 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 <= COPYIN_UINT32(this->line_ends + V8_OFF_FA_DATA + \
(this->ii - 1) * sizeof (uint32_t))/ \
{ \
this->bsearch_max = this->ii - 1; \
}
#define BSEARCH_LOOP \
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 > 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 <= 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
@ -661,20 +661,20 @@ BSEARCH_LOOP
dtrace:helper:ustack:
/!this->done && !this->bsearch_line/
{
this->bsearch_line = this->ii + 1;
this->bsearch_line = this->ii + 1;
}
dtrace:helper:ustack:
/!this->done/
{
APPEND_CHR(' ');
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);
APPEND_CHR(' ');
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);
}