From 88217ec276be56d531912773045a262da4eb240c Mon Sep 17 00:00:00 2001 From: Fedor Indutny Date: Sun, 20 Jan 2013 18:31:30 +0400 Subject: dtrace: fix generation of v8 constants on freebsd Every constant is certainly 4 bytes now, but freebsd's objdump utility prints out odd byte sequences (5-bytes, 6-bytes and even 9-bytes long) for v8's data section. We can safely ignore all upper bytes, because all constants that we're using are just `int`s. Since on all supported platforms `int` is 32bit long (and anyway v8's constants are 32bit too), we ignore all higher bits if they were read. --- tools/genv8constants.py | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) (limited to 'tools/genv8constants.py') diff --git a/tools/genv8constants.py b/tools/genv8constants.py index 5c034b6fa4..45b4ae3171 100755 --- a/tools/genv8constants.py +++ b/tools/genv8constants.py @@ -17,9 +17,22 @@ if len(sys.argv) != 3: sys.exit(2); outfile = file(sys.argv[1], 'w'); -pipe = subprocess.Popen([ 'objdump', '-z', '-D', sys.argv[2] ], - bufsize=-1, stdout=subprocess.PIPE).stdout; -pattern = re.compile('(00000000|0000000000000000) <(.*)>:'); +try: + pipe = subprocess.Popen([ 'objdump', '-z', '-D', sys.argv[2] ], + bufsize=-1, stdout=subprocess.PIPE).stdout; +except OSError, e: + if e.errno == errno.ENOENT: + print ''' + Node.js compile error: could not find objdump + + Check that GNU binutils are installed and included in PATH + ''' + else: + print 'problem running objdump: ', e.strerror + + sys.exit() + +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 @@ -50,10 +63,12 @@ def out_reset(): 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: - outfile.write("#define %s -0x%x\n" % (curr_sym.upper(), 0x100000000 - curr_val)); + 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(), curr_val)); + outfile.write("#define %s 0x%x\n" % (curr_sym.upper(), wrapped_val)); out_reset(); for line in pipe: @@ -82,8 +97,6 @@ for line in pipe: if match == None: continue; - octets = len(match.group(1)) / 2; - # Print previous symbol out_define(); -- cgit v1.2.3