forked from nodejs/node-v0.x-archive
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ustack helper should derive constants dynamically
- Loading branch information
Dave Pacheco
committed
Mar 31, 2012
1 parent
1d44295
commit 69d9235
Showing
5 changed files
with
210 additions
and
93 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
/* | ||
* This header defines short names for V8 constants for use by the ustack | ||
* helper. | ||
*/ | ||
|
||
#ifndef V8_ABBR_H | ||
#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) | ||
|
||
/* Stack frame types */ | ||
#define V8_FT_ENTRY V8DBG_FRAMETYPE_ENTRYFRAME | ||
#define V8_FT_ENTRYCONSTRUCT V8DBG_FRAMETYPE_ENTRYCONSTRUCTFRAME | ||
#define V8_FT_EXIT V8DBG_FRAMETYPE_EXITFRAME | ||
#define V8_FT_JAVASCRIPT V8DBG_FRAMETYPE_JAVASCRIPTFRAME | ||
#define V8_FT_OPTIMIZED V8DBG_FRAMETYPE_OPTIMIZEDFRAME | ||
#define V8_FT_INTERNAL V8DBG_FRAMETYPE_INTERNALFRAME | ||
#define V8_FT_CONSTRUCT V8DBG_FRAMETYPE_CONSTRUCTFRAME | ||
#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_HeapObjectTagMask V8DBG_HEAPOBJECTTAGMASK | ||
#define V8_HeapObjectTag V8DBG_HEAPOBJECTTAG | ||
|
||
#define V8_IsNotStringMask V8DBG_ISNOTSTRINGMASK | ||
#define V8_StringTag V8DBG_STRINGTAG | ||
|
||
#define V8_StringEncodingMask V8DBG_STRINGENCODINGMASK | ||
#define V8_AsciiStringTag V8DBG_ASCIISTRINGTAG | ||
|
||
#define V8_StringRepresentationMask V8DBG_STRINGREPRESENTATIONMASK | ||
#define V8_SeqStringTag V8DBG_SEQSTRINGTAG | ||
#define V8_ConsStringTag V8DBG_CONSSTRINGTAG | ||
#define V8_ExternalStringTag V8DBG_EXTERNALSTRINGTAG | ||
|
||
/* Instance types */ | ||
#define V8_IT_FIXEDARRAY V8DBG_TYPE_FIXEDARRAY__FIXED_ARRAY_TYPE | ||
#define V8_IT_CODE V8DBG_TYPE_CODE__CODE_TYPE | ||
|
||
/* Node-specific offsets */ | ||
#define NODE_OFF_EXTSTR_DATA 0x4 | ||
|
||
/* Heap class->field offsets */ | ||
#define V8_OFF_HEAP(off) ((off) - 1) | ||
|
||
#define V8_OFF_FUNC_SHARED \ | ||
V8_OFF_HEAP(V8DBG_CLASS_JSFUNCTION__SHARED__SHAREDFUNCTIONINFO) | ||
#define V8_OFF_SHARED_NAME \ | ||
V8_OFF_HEAP(V8DBG_CLASS_SHAREDFUNCTIONINFO__NAME__OBJECT) | ||
#define V8_OFF_SHARED_INFERRED \ | ||
V8_OFF_HEAP(V8DBG_CLASS_SHAREDFUNCTIONINFO__INFERRED_NAME__STRING) | ||
#define V8_OFF_SHARED_SCRIPT \ | ||
V8_OFF_HEAP(V8DBG_CLASS_SHAREDFUNCTIONINFO__SCRIPT__OBJECT) | ||
#define V8_OFF_SHARED_FUNTOK \ | ||
V8_OFF_HEAP(V8DBG_CLASS_SHAREDFUNCTIONINFO__FUNCTION_TOKEN_POSITION__SMI) | ||
#define V8_OFF_SCRIPT_NAME \ | ||
V8_OFF_HEAP(V8DBG_CLASS_SCRIPT__NAME__OBJECT) | ||
#define V8_OFF_SCRIPT_LENDS \ | ||
V8_OFF_HEAP(V8DBG_CLASS_SCRIPT__LINE_ENDS__OBJECT) | ||
#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) | ||
#define V8_OFF_CONSSTR_CAR \ | ||
V8_OFF_HEAP(V8DBG_CLASS_CONSSTRING__FIRST__STRING) | ||
#define V8_OFF_CONSSTR_CDR \ | ||
V8_OFF_HEAP(V8DBG_CLASS_CONSSTRING__SECOND__STRING) | ||
#define V8_OFF_EXTSTR_RSRC \ | ||
V8_OFF_HEAP(V8DBG_CLASS_EXTERNALSTRING__RESOURCE__OBJECT) | ||
#define V8_OFF_FA_SIZE \ | ||
V8_OFF_HEAP(V8DBG_CLASS_FIXEDARRAYBASE__LENGTH__SMI) | ||
#define V8_OFF_FA_DATA \ | ||
V8_OFF_HEAP(V8DBG_CLASS_FIXEDARRAY__DATA__UINTPTR_T) | ||
#define V8_OFF_HEAPOBJ_MAP \ | ||
V8_OFF_HEAP(V8DBG_CLASS_HEAPOBJECT__MAP__MAP) | ||
#define V8_OFF_MAP_ATTRS \ | ||
V8_OFF_HEAP(V8DBG_CLASS_MAP__INSTANCE_ATTRIBUTES__INT) | ||
|
||
#endif /* V8_ABBR_H */ |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
#!/usr/bin/env python | ||
|
||
# | ||
# genv8constants.py output_file libv8_base.a | ||
# | ||
# Emits v8dbg constants stored in libv8_base.a in a format suitable for the V8 | ||
# ustack helper. | ||
# | ||
|
||
import re | ||
import subprocess | ||
import sys | ||
|
||
if len(sys.argv) != 3: | ||
print "usage: objsym.py outfile libv8_base.a" | ||
sys.exit(2); | ||
|
||
outfile = file(sys.argv[1], 'w'); | ||
pipe = subprocess.Popen([ 'objdump', '-z', '-D', sys.argv[2] ], | ||
stdout=subprocess.PIPE).stdout; | ||
pattern = re.compile('00000000 <(v8dbg_.*)>:'); | ||
numpattern = re.compile('[0-9a-fA-F]{2}'); | ||
|
||
outfile.write(""" | ||
/* | ||
* File automatically generated by genv8constants. Do not edit. | ||
* | ||
* The following offsets are dynamically from libv8_base.a. See src/v8ustack.d | ||
* for details on how these values are used. | ||
*/ | ||
#ifndef V8_CONSTANTS_H | ||
#define V8_CONSTANTS_H | ||
#if defined(__i386) | ||
"""); | ||
|
||
curr_sym = None; | ||
curr_val = 0; | ||
curr_octet = 0; | ||
|
||
for line in pipe: | ||
if curr_sym != None: | ||
# | ||
# This bit of code has nasty knowledge of the objdump text output | ||
# format, but this is the most obvious robust approach. We could almost | ||
# rely on looking at numbered fields, but some instructions look very | ||
# much like hex numbers (e.g., "adc"), and we don't want to risk picking | ||
# those up by mistake, so we look at character-based columns intead. | ||
# | ||
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] | ||
if not numpattern.match(octetstr): | ||
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); | ||
|
||
outfile.write(""" | ||
#else | ||
#error "only i386 is supported for DTrace ustack helper" | ||
#endif | ||
#endif /* V8_CONSTANTS_H */ | ||
"""); |