Revert "sunos: unbreak build after v8 downgrade"
authorFedor Indutny <fedor.indutny@gmail.com>
Tue, 26 Feb 2013 07:57:12 +0000 (07:57 +0000)
committerFedor Indutny <fedor.indutny@gmail.com>
Tue, 26 Feb 2013 07:57:12 +0000 (07:57 +0000)
This reverts commit f80f3c5f62a3955636c1af1872ef9539a0b01cb0.

node.gyp
src/v8abbr.h
src/v8ustack.d
tools/genv8constants.py

index d8ea443..b07a1e0 100644 (file)
--- a/node.gyp
+++ b/node.gyp
           #
           'sources': [
             'src/node_dtrace.cc',
-            'src/node_dtrace_provider.cc'
+            'src/node_dtrace_provider.cc',
+            'src/node_dtrace_ustack.cc',
           ],
-          'conditions': [ [
-            'target_arch=="ia32"', {
-              'sources': [ 'src/node_dtrace_ustack.cc' ]
-            }
-          ] ],
         } ],
         [ 'node_use_systemtap=="true"', {
           'defines': [ 'HAVE_SYSTEMTAP=1', 'STAP_SDT_V1=1' ],
       'target_name': 'node_dtrace_ustack',
       'type': 'none',
       'conditions': [
-        [ 'node_use_dtrace=="true" and target_arch=="ia32"', {
+        [ 'node_use_dtrace=="true"', {
           'actions': [
             {
               'action_name': 'node_dtrace_ustack_constants',
               'outputs': [
                 '<(PRODUCT_DIR)/obj.target/node/src/node_dtrace_ustack.o'
               ],
-              'action': [
-                'dtrace', '-32', '-I<(SHARED_INTERMEDIATE_DIR)', '-Isrc',
-                '-C', '-G', '-s', 'src/v8ustack.d', '-o', '<@(_outputs)',
+              'conditions': [
+                [ 'target_arch=="ia32"', {
+                  'action': [
+                    'dtrace', '-32', '-I<(SHARED_INTERMEDIATE_DIR)', '-Isrc',
+                    '-C', '-G', '-s', 'src/v8ustack.d', '-o', '<@(_outputs)',
+                  ]
+                } ],
+                [ 'target_arch=="x64"', {
+                  'action': [
+                    'dtrace', '-64', '-I<(SHARED_INTERMEDIATE_DIR)', '-Isrc',
+                    '-C', '-G', '-s', 'src/v8ustack.d', '-o', '<@(_outputs)',
+                  ]
+                } ],
               ]
             }
           ]
index ac4a169..95ddb6a 100644 (file)
@@ -7,9 +7,9 @@
 #define V8_ABBR_H
 
 /* Frame pointer offsets */
-#define V8_OFF_FP_FUNC              ((uint32_t)V8DBG_OFF_FP_FUNCTION)
-#define V8_OFF_FP_CONTEXT           ((uint32_t)V8DBG_OFF_FP_CONTEXT)
-#define V8_OFF_FP_MARKER            ((uint32_t)V8DBG_OFF_FP_MARKER)
+#define V8_OFF_FP_FUNC              V8DBG_OFF_FP_FUNCTION
+#define V8_OFF_FP_CONTEXT           V8DBG_OFF_FP_CONTEXT
+#define V8_OFF_FP_MARKER            V8DBG_OFF_FP_MARKER
 
 /* Stack frame types */
 #define V8_FT_ENTRY                 V8DBG_FRAMETYPE_ENTRYFRAME
@@ -22,9 +22,9 @@
 #define V8_FT_ADAPTOR               V8DBG_FRAMETYPE_ARGUMENTSADAPTORFRAME
 
 /* Identification masks and tags */
-#define V8_SmiTagMask               V8DBG_SMITAGMASK
-#define V8_SmiTag                   V8DBG_SMITAG
-#define V8_SmiValueShift            V8_SmiTagMask
+#define V8_SmiTagMask               (V8DBG_SMITAGMASK)
+#define V8_SmiTag                   (V8DBG_SMITAG)
+#define V8_SmiValueShift            (V8DBG_SMISHIFTSIZE + V8DBG_SMITAGMASK)
 
 #define V8_HeapObjectTagMask        V8DBG_HEAPOBJECTTAGMASK
 #define V8_HeapObjectTag            V8DBG_HEAPOBJECTTAG
@@ -45,7 +45,7 @@
 #define V8_IT_CODE                  V8DBG_TYPE_CODE__CODE_TYPE
 
 /* Node-specific offsets */
-#define NODE_OFF_EXTSTR_DATA        0x4
+#define NODE_OFF_EXTSTR_DATA        sizeof(void*)
 
 /* Heap class->field offsets */
 #define V8_OFF_HEAP(off)            ((off) - 1)
@@ -67,7 +67,7 @@
 #define V8_OFF_STR_LENGTH \
     V8_OFF_HEAP(V8DBG_CLASS_STRING__LENGTH__SMI)
 #define V8_OFF_STR_CHARS  \
-    V8_OFF_HEAP(V8DBG_CLASS_SEQASCIISTRING__CHARS__CHAR)
+    V8_OFF_HEAP(V8DBG_CLASS_SEQONEBYTESTRING__CHARS__CHAR)
 #define V8_OFF_CONSSTR_CAR  \
     V8_OFF_HEAP(V8DBG_CLASS_CONSSTRING__FIRST__STRING)
 #define V8_OFF_CONSSTR_CDR  \
index 27e9034..d643f8f 100644 (file)
 #include <v8abbr.h>
 
 /*
- * V8 represents small integers (SMI) using the upper 31 bits of a 32-bit
+ * V8 represents small integers (SMI) using the upper 31 bits of a 32/64-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
@@ -32,7 +34,8 @@
 /*
  * 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)
 /*
  * 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        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        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), 10000); \
-       APPEND_DGT((i), 1000);  \
-       APPEND_DGT((i), 100);   \
-       APPEND_DGT((i), 10);    \
-       APPEND_DGT((i), 1);
+    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)
 
 /*
  * The following macros are used to output ASCII SeqStrings, ConsStrings, and
  *
  *     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));   \
+    len = SMI_VALUE(COPYIN_PTR(str + V8_OFF_STR_LENGTH));      \
+    this->map = V8_MAP_PTR(COPYIN_PTR(str + V8_OFF_HEAPOBJ_MAP));      \
     attrs = COPYIN_UINT8(this->map + V8_OFF_MAP_ATTRS);
 
 /*
  * 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_UINT32(str + V8_OFF_EXTSTR_RSRC);               \
-       this->dataptr = COPYIN_UINT32(this->resource +  NODE_OFF_EXTSTR_DATA);  \
+    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);      \
        copyinto(this->dataptr, len, this->buf + this->off);                    \
        this->off += len;                                                       \
-}
+    }
 
 /*
  * Recall that each ConsString points to two other strings which are
@@ -144,7 +184,7 @@ dtrace:helper:ustack:                                                               \
  *              s0                       s7
  *            /    \                  /     \
  *           /      \                /       \           <--  2nd expansion
- *          /        \              /         \  
+ *          /        \              /         \
  *        s1          s4          s8           s11
  *       /  \        /  \        /  \          /  \      <--  3rd expansion
  *     s2    s3    s5    s6    s9    s10    s12    s13
@@ -157,27 +197,27 @@ dtrace:helper:ustack:                                                             \
  * 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;                                \
+    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;        \
                                                                        \
-       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->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->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
@@ -185,61 +225,61 @@ dtrace:helper:ustack:                                                     \
  * 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_UINT32(str + V8_OFF_CONSSTR_CAR);                  \
+       s1s = COPYIN_PTR(str + V8_OFF_CONSSTR_CAR);     \
        LOAD_STRFIELDS(s1s, s1l, s1a)                                   \
                                                                        \
-       s2s = COPYIN_UINT32(str + V8_OFF_CONSSTR_CDR);                  \
+       s2s = COPYIN_PTR(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)          \
 
 
 /*
@@ -248,8 +288,8 @@ dtrace:helper:ustack:                                                       \
  * 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
@@ -261,26 +301,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 = 0;
-       this->marker = 0;
-       this->func = 0; 
-       this->shared = 0;
-       this->map = 0;
+       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->attrs = 0;
-       this->funcnamestr = 0;
+       this->funcnamestr = (off_t) 0;
        this->funcnamelen = 0;
        this->funcnameattrs = 0;
-       this->script = 0;
-       this->scriptnamestr = 0;
+       this->script = (off_t) 0;
+       this->scriptnamestr = (off_t) 0;
        this->scriptnamelen = 0;
        this->scriptnameattrs = 0;
-       this->position = 0;     
-       this->line_ends = 0;    
+       this->position = 0;
+       this->line_ends = (off_t) 0;
        this->le_attrs = 0;
 
        /* binary search fields */
@@ -295,27 +335,15 @@ dtrace:helper:ustack:
  */
 dtrace:helper:ustack:
 {
-       this->ctx = COPYIN_UINT32(this->fp + V8_OFF_FP_CONTEXT);
+       this->ctx = COPYIN_PTR(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');
+       APPEND_CHR8('<','<',' ','a','d','a','p','t');
+       APPEND_CHR8('o','r',' ','>','>','\0','\0','\0');
        stringof(this->buf);
 }
 
@@ -325,7 +353,7 @@ dtrace:helper:ustack:
 dtrace:helper:ustack:
 /!this->done/
 {
-       this->marker = COPYIN_UINT32(this->fp + V8_OFF_FP_MARKER);
+       this->marker = COPYIN_PTR(this->fp + V8_OFF_FP_MARKER);
 }
 
 dtrace:helper:ustack:
@@ -333,18 +361,8 @@ dtrace:helper:ustack:
  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');
+       APPEND_CHR8('<','<',' ','e','n','t','r','y');
+       APPEND_CHR4(' ','>','>','\0');
        stringof(this->buf);
 }
 
@@ -353,27 +371,9 @@ dtrace:helper:ustack:
  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_CHR8('<','<',' ','e','n','t','r','y');
+       APPEND_CHR8('_','c','o','n','s','t','r','u');
+       APPEND_CHR4('t',' ','>','>');
        APPEND_CHR('\0');
        stringof(this->buf);
 }
@@ -383,17 +383,8 @@ dtrace:helper:ustack:
  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');
+       APPEND_CHR8('<','<',' ','e','x','i','t',' ');
+       APPEND_CHR4('>','>','\0','\0');
        stringof(this->buf);
 }
 
@@ -402,21 +393,8 @@ dtrace:helper:ustack:
  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');
+       APPEND_CHR8('<','<',' ','i','n','t','e','r');
+       APPEND_CHR8('n','a','l',' ','>','>','\0','\0');
        stringof(this->buf);
 }
 
@@ -425,24 +403,9 @@ dtrace:helper:ustack:
  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');
+       APPEND_CHR8('<','<',' ','c','o','n','s','t');
+       APPEND_CHR8('r','u','c','t','o','r',' ','>');
+       APPEND_CHR4('>','\0','\0','\0');
        stringof(this->buf);
 }
 
@@ -454,8 +417,8 @@ 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->func = COPYIN_PTR(this->fp + V8_OFF_FP_FUNC);
+       this->map = V8_MAP_PTR(COPYIN_PTR(this->func + V8_OFF_HEAPOBJ_MAP));
        this->attrs = COPYIN_UINT8(this->map + V8_OFF_MAP_ATTRS);
 }
 
@@ -463,27 +426,10 @@ 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);    
+       APPEND_CHR8('<','<',' ','i','n','t','e','r');
+       APPEND_CHR8('n','a','l',' ','c','o','d','e');
+       APPEND_CHR4(' ','>','>','\0');
+       stringof(this->buf);
 }
 
 /*
@@ -497,8 +443,8 @@ dtrace:helper:ustack:
        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);
+       this->shared = COPYIN_PTR(this->func + V8_OFF_FUNC_SHARED);
+       this->funcnamestr = COPYIN_PTR(this->shared + V8_OFF_SHARED_NAME);
        LOAD_STRFIELDS(this->funcnamestr, this->funcnamelen,
            this->funcnameattrs);
 }
@@ -511,18 +457,11 @@ dtrace:helper:ustack:
         * 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_CHR8('(','a','n','o','n',')',' ','a');
        APPEND_CHR('s');
        APPEND_CHR(' ');
 
-       this->funcnamestr = COPYIN_UINT32(this->shared + V8_OFF_SHARED_INFERRED);
+       this->funcnamestr = COPYIN_PTR(this->shared + V8_OFF_SHARED_INFERRED);
        LOAD_STRFIELDS(this->funcnamestr, this->funcnamelen,
            this->funcnameattrs);
 }
@@ -531,10 +470,7 @@ dtrace:helper:ustack:
 /!this->done && this->funcnamelen == 0/
 {
        APPEND_CHR('(');
-       APPEND_CHR('a');
-       APPEND_CHR('n');
-       APPEND_CHR('o');
-       APPEND_CHR('n');
+       APPEND_CHR4('a','n','o','n');
        APPEND_CHR(')');
 }
 
@@ -546,16 +482,19 @@ 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);
+       this->script = COPYIN_PTR(this->shared + V8_OFF_SHARED_SCRIPT);
+       this->scriptnamestr = COPYIN_PTR(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_CHR4(' ','a','t',' ');
+}
+
+dtrace:helper:ustack:
+/!this->done && this->scriptnamelen == 0/
+{
+       APPEND_CHR8('<','u','n','k','n','o','w','n');
+       APPEND_CHR('>');
 }
 
 APPEND_V8STR(this->scriptnamestr, this->scriptnamelen, this->scriptnameattrs)
@@ -567,9 +506,8 @@ 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->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->le_attrs = COPYIN_UINT8(this->map + V8_OFF_MAP_ATTRS);
 }
 
@@ -581,14 +519,7 @@ 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_CHR(' ');
-       APPEND_CHR('p');
-       APPEND_CHR('o');
-       APPEND_CHR('s');
-       APPEND_CHR('i');
-       APPEND_CHR('t');
-       APPEND_CHR('i');
-       APPEND_CHR('o');
+       APPEND_CHR8(' ','p','o','s','i','t','i','o');
        APPEND_CHR('n');
        APPEND_CHR(' ');
        APPEND_NUM(this->position);
@@ -607,11 +538,11 @@ 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_line = this->position <
+       SMI_VALUE(COPYIN_PTR(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;
+       SMI_VALUE(COPYIN_PTR(this->line_ends + V8_OFF_FA_SIZE)) - 1;
 }
 
 /*
@@ -620,27 +551,29 @@ 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 > COPYIN_UINT32(this->line_ends + V8_OFF_FA_DATA +     \
-    this->ii * sizeof (uint32_t))/                                     \
-{                                                                      \
+    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)))/    \
+    {  \
        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))/                               \
-{                                                                      \
+    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)))/      \
+    {  \
        this->bsearch_max = this->ii - 1;                               \
-}
+    }
 
 BSEARCH_LOOP
 BSEARCH_LOOP
@@ -668,13 +601,12 @@ dtrace:helper:ustack:
 /!this->done/
 {
        APPEND_CHR(' ');
-       APPEND_CHR('l');
-       APPEND_CHR('i');
-       APPEND_CHR('n');
-       APPEND_CHR('e');
+       APPEND_CHR4('l','i','n','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: */
index 571b3e3..45b4ae3 100755 (executable)
@@ -32,8 +32,10 @@ except OSError, e:
 
   sys.exit()
 
-pattern = re.compile('00000000 <(v8dbg_.*)>:');
-numpattern = re.compile('[0-9a-fA-F]{2}');
+pattern = re.compile('([0-9a-fA-F]{8}|[0-9a-fA-F]{16}) <(.*)>:');
+v8dbg = re.compile('^v8dbg.*$')
+numpattern = re.compile('^[0-9a-fA-F]{2} $');
+octets = 4
 
 outfile.write("""
 /*
@@ -46,13 +48,29 @@ outfile.write("""
 #ifndef V8_CONSTANTS_H
 #define V8_CONSTANTS_H
 
-#if defined(__i386)
 """);
 
 curr_sym = None;
 curr_val = 0;
 curr_octet = 0;
 
+def out_reset():
+  global curr_sym, curr_val, curr_octet
+  curr_sym = None;
+  curr_val = 0;
+  curr_octet = 0;
+
+def out_define():
+  global curr_sym, curr_val, curr_octet, outfile, octets
+  if curr_sym != None:
+    wrapped_val = curr_val & 0xffffffff;
+    if curr_val & 0x80000000 != 0:
+      wrapped_val = 0x100000000 - wrapped_val;
+      outfile.write("#define %s -0x%x\n" % (curr_sym.upper(), wrapped_val));
+    else:
+      outfile.write("#define %s 0x%x\n" % (curr_sym.upper(), wrapped_val));
+  out_reset();
+
 for line in pipe:
   if curr_sym != None:
     #
@@ -65,32 +83,32 @@ for line in pipe:
     for i in range (0, 3):
       # 6-character margin, 2-characters + 1 space for each field
       idx = 6 + i * 3;
-      octetstr = line[idx:idx+2]
+      octetstr = line[idx:idx+3]
       if not numpattern.match(octetstr):
         break;
 
+      if curr_octet > octets:
+        break;
+
       curr_val += int('0x%s' % octetstr, 16) << (curr_octet * 8);
       curr_octet += 1;
 
-    if curr_octet < 4:
-      continue;
-
-    outfile.write("#define %s 0x%x\n" % (curr_sym.upper(), curr_val));
-    curr_sym = None;
-    curr_val = 0;
-    curr_octet = 0;
-    continue;
-
   match = pattern.match(line)
   if match == None:
     continue;
 
-  curr_sym = match.group(1);
+  # Print previous symbol
+  out_define();
+
+  v8match = v8dbg.match(match.group(2));
+  if v8match != None:
+    out_reset();
+    curr_sym = match.group(2);
+
+# Print last symbol
+out_define();
 
 outfile.write("""
-#else
-#error "only i386 is supported for DTrace ustack helper"
-#endif
 
 #endif /* V8_CONSTANTS_H */
 """);