Merge V8 5.2.361.47  DO NOT MERGE

https://chromium.googlesource.com/v8/v8/+/5.2.361.47

FPIIM-449

Change-Id: Ibec421b85a9b88cb3a432ada642e469fe7e78346
(cherry picked from commit bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8)
diff --git a/tools/dump-cpp.py b/tools/dump-cpp.py
new file mode 100644
index 0000000..b7bb32e
--- /dev/null
+++ b/tools/dump-cpp.py
@@ -0,0 +1,74 @@
+#!/usr/bin/env python
+# Copyright 2016 the V8 project authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# This script executes dumpcpp.js, collects all dumped C++ symbols,
+# and merges them back into v8 log.
+
+import os
+import platform
+import re
+import subprocess
+import sys
+
+def is_file_executable(fPath):
+  return os.path.isfile(fPath) and os.access(fPath, os.X_OK)
+
+if __name__ == '__main__':
+  JS_FILES = ['splaytree.js', 'codemap.js', 'csvparser.js', 'consarray.js',
+              'profile.js', 'logreader.js', 'tickprocessor.js', 'SourceMap.js',
+              'dumpcpp.js']
+  tools_path = os.path.dirname(os.path.realpath(__file__))
+  on_windows = platform.system() == 'Windows'
+  JS_FILES = [os.path.join(tools_path, f) for f in JS_FILES]
+
+  args = []
+  log_file = 'v8.log'
+  debug = False
+  for arg in sys.argv[1:]:
+    if arg == '--debug':
+      debug = True
+      continue
+    args.append(arg)
+    if not arg.startswith('-'):
+      log_file = arg
+
+  if on_windows:
+    args.append('--windows')
+
+  with open(log_file, 'r') as f:
+    lines = f.readlines()
+
+  d8_line = re.search(',\"(.*d8)', ''.join(lines))
+  if d8_line:
+    d8_exec = d8_line.group(1)
+    if not is_file_executable(d8_exec):
+      print 'd8 binary path found in {} is not executable.'.format(log_file)
+      sys.exit(-1)
+  else:
+    print 'No d8 binary path found in {}.'.format(log_file)
+    sys.exit(-1)
+
+  args = [d8_exec] + JS_FILES + ['--'] + args
+
+  with open(log_file) as f:
+    sp = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE,
+                          stdin=f)
+    out, err = sp.communicate()
+  if debug:
+    print err
+  if sp.returncode != 0:
+    print out
+    exit(-1)
+
+  if on_windows and out:
+    out = re.sub('\r+\n', '\n', out)
+
+  is_written = not bool(out)
+  with open(log_file, 'w') as f:
+    for line in lines:
+      if not is_written and line.startswith('tick'):
+        f.write(out)
+        is_written = True
+      f.write(line)