libv8 3.11.8.17 → 3.16.14.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (754) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +1 -2
  3. data/Gemfile +1 -1
  4. data/Rakefile +6 -7
  5. data/lib/libv8/version.rb +1 -1
  6. data/vendor/v8/.gitignore +24 -3
  7. data/vendor/v8/AUTHORS +7 -0
  8. data/vendor/v8/ChangeLog +839 -0
  9. data/vendor/v8/DEPS +1 -1
  10. data/vendor/v8/Makefile.android +92 -0
  11. data/vendor/v8/OWNERS +11 -0
  12. data/vendor/v8/PRESUBMIT.py +71 -0
  13. data/vendor/v8/SConstruct +34 -39
  14. data/vendor/v8/build/android.gypi +56 -37
  15. data/vendor/v8/build/common.gypi +112 -30
  16. data/vendor/v8/build/gyp_v8 +1 -1
  17. data/vendor/v8/build/standalone.gypi +15 -11
  18. data/vendor/v8/include/v8-debug.h +9 -1
  19. data/vendor/v8/include/v8-preparser.h +4 -3
  20. data/vendor/v8/include/v8-profiler.h +25 -25
  21. data/vendor/v8/include/v8-testing.h +4 -3
  22. data/vendor/v8/include/v8.h +994 -540
  23. data/vendor/v8/preparser/preparser-process.cc +3 -3
  24. data/vendor/v8/samples/lineprocessor.cc +20 -27
  25. data/vendor/v8/samples/process.cc +18 -14
  26. data/vendor/v8/samples/shell.cc +16 -15
  27. data/vendor/v8/src/SConscript +15 -14
  28. data/vendor/v8/src/accessors.cc +169 -77
  29. data/vendor/v8/src/accessors.h +4 -0
  30. data/vendor/v8/src/allocation-inl.h +2 -2
  31. data/vendor/v8/src/allocation.h +7 -7
  32. data/vendor/v8/src/api.cc +810 -497
  33. data/vendor/v8/src/api.h +85 -60
  34. data/vendor/v8/src/arm/assembler-arm-inl.h +179 -22
  35. data/vendor/v8/src/arm/assembler-arm.cc +633 -264
  36. data/vendor/v8/src/arm/assembler-arm.h +264 -197
  37. data/vendor/v8/src/arm/builtins-arm.cc +117 -27
  38. data/vendor/v8/src/arm/code-stubs-arm.cc +1241 -700
  39. data/vendor/v8/src/arm/code-stubs-arm.h +35 -138
  40. data/vendor/v8/src/arm/codegen-arm.cc +285 -16
  41. data/vendor/v8/src/arm/codegen-arm.h +22 -0
  42. data/vendor/v8/src/arm/constants-arm.cc +5 -3
  43. data/vendor/v8/src/arm/constants-arm.h +24 -11
  44. data/vendor/v8/src/arm/debug-arm.cc +3 -3
  45. data/vendor/v8/src/arm/deoptimizer-arm.cc +382 -92
  46. data/vendor/v8/src/arm/disasm-arm.cc +61 -12
  47. data/vendor/v8/src/arm/frames-arm.h +0 -14
  48. data/vendor/v8/src/arm/full-codegen-arm.cc +332 -304
  49. data/vendor/v8/src/arm/ic-arm.cc +180 -259
  50. data/vendor/v8/src/arm/lithium-arm.cc +364 -316
  51. data/vendor/v8/src/arm/lithium-arm.h +512 -275
  52. data/vendor/v8/src/arm/lithium-codegen-arm.cc +1768 -809
  53. data/vendor/v8/src/arm/lithium-codegen-arm.h +97 -35
  54. data/vendor/v8/src/arm/lithium-gap-resolver-arm.cc +12 -5
  55. data/vendor/v8/src/arm/macro-assembler-arm.cc +439 -228
  56. data/vendor/v8/src/arm/macro-assembler-arm.h +116 -70
  57. data/vendor/v8/src/arm/regexp-macro-assembler-arm.cc +54 -44
  58. data/vendor/v8/src/arm/regexp-macro-assembler-arm.h +3 -10
  59. data/vendor/v8/src/arm/simulator-arm.cc +272 -238
  60. data/vendor/v8/src/arm/simulator-arm.h +38 -8
  61. data/vendor/v8/src/arm/stub-cache-arm.cc +522 -895
  62. data/vendor/v8/src/array.js +101 -70
  63. data/vendor/v8/src/assembler.cc +270 -19
  64. data/vendor/v8/src/assembler.h +110 -15
  65. data/vendor/v8/src/ast.cc +79 -69
  66. data/vendor/v8/src/ast.h +255 -301
  67. data/vendor/v8/src/atomicops.h +7 -1
  68. data/vendor/v8/src/atomicops_internals_tsan.h +335 -0
  69. data/vendor/v8/src/bootstrapper.cc +481 -418
  70. data/vendor/v8/src/bootstrapper.h +4 -4
  71. data/vendor/v8/src/builtins.cc +498 -311
  72. data/vendor/v8/src/builtins.h +75 -47
  73. data/vendor/v8/src/checks.cc +2 -1
  74. data/vendor/v8/src/checks.h +8 -0
  75. data/vendor/v8/src/code-stubs-hydrogen.cc +253 -0
  76. data/vendor/v8/src/code-stubs.cc +249 -84
  77. data/vendor/v8/src/code-stubs.h +501 -169
  78. data/vendor/v8/src/codegen.cc +36 -18
  79. data/vendor/v8/src/codegen.h +25 -3
  80. data/vendor/v8/src/collection.js +54 -17
  81. data/vendor/v8/src/compilation-cache.cc +24 -16
  82. data/vendor/v8/src/compilation-cache.h +15 -6
  83. data/vendor/v8/src/compiler.cc +497 -195
  84. data/vendor/v8/src/compiler.h +246 -38
  85. data/vendor/v8/src/contexts.cc +64 -24
  86. data/vendor/v8/src/contexts.h +60 -29
  87. data/vendor/v8/src/conversions-inl.h +24 -14
  88. data/vendor/v8/src/conversions.h +7 -4
  89. data/vendor/v8/src/counters.cc +21 -12
  90. data/vendor/v8/src/counters.h +44 -16
  91. data/vendor/v8/src/cpu-profiler.h +1 -1
  92. data/vendor/v8/src/d8-debug.cc +2 -2
  93. data/vendor/v8/src/d8-readline.cc +13 -2
  94. data/vendor/v8/src/d8.cc +681 -273
  95. data/vendor/v8/src/d8.gyp +4 -4
  96. data/vendor/v8/src/d8.h +38 -18
  97. data/vendor/v8/src/d8.js +0 -617
  98. data/vendor/v8/src/data-flow.h +55 -0
  99. data/vendor/v8/src/date.js +1 -42
  100. data/vendor/v8/src/dateparser-inl.h +5 -1
  101. data/vendor/v8/src/debug-agent.cc +10 -15
  102. data/vendor/v8/src/debug-debugger.js +147 -149
  103. data/vendor/v8/src/debug.cc +323 -164
  104. data/vendor/v8/src/debug.h +26 -14
  105. data/vendor/v8/src/deoptimizer.cc +765 -290
  106. data/vendor/v8/src/deoptimizer.h +130 -28
  107. data/vendor/v8/src/disassembler.cc +10 -4
  108. data/vendor/v8/src/elements-kind.cc +7 -2
  109. data/vendor/v8/src/elements-kind.h +19 -0
  110. data/vendor/v8/src/elements.cc +607 -285
  111. data/vendor/v8/src/elements.h +36 -13
  112. data/vendor/v8/src/execution.cc +52 -31
  113. data/vendor/v8/src/execution.h +4 -4
  114. data/vendor/v8/src/extensions/externalize-string-extension.cc +5 -4
  115. data/vendor/v8/src/extensions/gc-extension.cc +5 -1
  116. data/vendor/v8/src/extensions/statistics-extension.cc +153 -0
  117. data/vendor/v8/src/{inspector.h → extensions/statistics-extension.h} +12 -23
  118. data/vendor/v8/src/factory.cc +101 -134
  119. data/vendor/v8/src/factory.h +36 -31
  120. data/vendor/v8/src/flag-definitions.h +102 -25
  121. data/vendor/v8/src/flags.cc +9 -5
  122. data/vendor/v8/src/frames-inl.h +10 -0
  123. data/vendor/v8/src/frames.cc +116 -26
  124. data/vendor/v8/src/frames.h +96 -12
  125. data/vendor/v8/src/full-codegen.cc +219 -74
  126. data/vendor/v8/src/full-codegen.h +63 -21
  127. data/vendor/v8/src/func-name-inferrer.cc +8 -7
  128. data/vendor/v8/src/func-name-inferrer.h +5 -3
  129. data/vendor/v8/src/gdb-jit.cc +71 -57
  130. data/vendor/v8/src/global-handles.cc +230 -101
  131. data/vendor/v8/src/global-handles.h +26 -27
  132. data/vendor/v8/src/globals.h +17 -19
  133. data/vendor/v8/src/handles-inl.h +59 -12
  134. data/vendor/v8/src/handles.cc +180 -200
  135. data/vendor/v8/src/handles.h +80 -11
  136. data/vendor/v8/src/hashmap.h +60 -40
  137. data/vendor/v8/src/heap-inl.h +107 -45
  138. data/vendor/v8/src/heap-profiler.cc +38 -19
  139. data/vendor/v8/src/heap-profiler.h +24 -14
  140. data/vendor/v8/src/heap.cc +1123 -738
  141. data/vendor/v8/src/heap.h +385 -146
  142. data/vendor/v8/src/hydrogen-instructions.cc +700 -217
  143. data/vendor/v8/src/hydrogen-instructions.h +1158 -472
  144. data/vendor/v8/src/hydrogen.cc +3319 -1662
  145. data/vendor/v8/src/hydrogen.h +411 -170
  146. data/vendor/v8/src/ia32/assembler-ia32-inl.h +46 -16
  147. data/vendor/v8/src/ia32/assembler-ia32.cc +131 -61
  148. data/vendor/v8/src/ia32/assembler-ia32.h +115 -57
  149. data/vendor/v8/src/ia32/builtins-ia32.cc +99 -5
  150. data/vendor/v8/src/ia32/code-stubs-ia32.cc +787 -495
  151. data/vendor/v8/src/ia32/code-stubs-ia32.h +10 -100
  152. data/vendor/v8/src/ia32/codegen-ia32.cc +227 -23
  153. data/vendor/v8/src/ia32/codegen-ia32.h +14 -0
  154. data/vendor/v8/src/ia32/deoptimizer-ia32.cc +428 -87
  155. data/vendor/v8/src/ia32/disasm-ia32.cc +28 -1
  156. data/vendor/v8/src/ia32/frames-ia32.h +6 -16
  157. data/vendor/v8/src/ia32/full-codegen-ia32.cc +280 -272
  158. data/vendor/v8/src/ia32/ic-ia32.cc +150 -250
  159. data/vendor/v8/src/ia32/lithium-codegen-ia32.cc +1600 -517
  160. data/vendor/v8/src/ia32/lithium-codegen-ia32.h +90 -24
  161. data/vendor/v8/src/ia32/lithium-gap-resolver-ia32.cc +10 -6
  162. data/vendor/v8/src/ia32/lithium-gap-resolver-ia32.h +2 -2
  163. data/vendor/v8/src/ia32/lithium-ia32.cc +405 -302
  164. data/vendor/v8/src/ia32/lithium-ia32.h +526 -271
  165. data/vendor/v8/src/ia32/macro-assembler-ia32.cc +378 -119
  166. data/vendor/v8/src/ia32/macro-assembler-ia32.h +62 -28
  167. data/vendor/v8/src/ia32/regexp-macro-assembler-ia32.cc +43 -30
  168. data/vendor/v8/src/ia32/regexp-macro-assembler-ia32.h +2 -10
  169. data/vendor/v8/src/ia32/stub-cache-ia32.cc +492 -678
  170. data/vendor/v8/src/ic-inl.h +9 -4
  171. data/vendor/v8/src/ic.cc +836 -923
  172. data/vendor/v8/src/ic.h +228 -247
  173. data/vendor/v8/src/incremental-marking-inl.h +26 -30
  174. data/vendor/v8/src/incremental-marking.cc +276 -248
  175. data/vendor/v8/src/incremental-marking.h +29 -37
  176. data/vendor/v8/src/interface.cc +34 -25
  177. data/vendor/v8/src/interface.h +69 -25
  178. data/vendor/v8/src/interpreter-irregexp.cc +2 -2
  179. data/vendor/v8/src/isolate.cc +382 -76
  180. data/vendor/v8/src/isolate.h +109 -56
  181. data/vendor/v8/src/json-parser.h +217 -104
  182. data/vendor/v8/src/json-stringifier.h +745 -0
  183. data/vendor/v8/src/json.js +10 -132
  184. data/vendor/v8/src/jsregexp-inl.h +106 -0
  185. data/vendor/v8/src/jsregexp.cc +517 -285
  186. data/vendor/v8/src/jsregexp.h +145 -117
  187. data/vendor/v8/src/list-inl.h +35 -22
  188. data/vendor/v8/src/list.h +46 -19
  189. data/vendor/v8/src/lithium-allocator-inl.h +22 -2
  190. data/vendor/v8/src/lithium-allocator.cc +85 -70
  191. data/vendor/v8/src/lithium-allocator.h +21 -39
  192. data/vendor/v8/src/lithium.cc +259 -5
  193. data/vendor/v8/src/lithium.h +131 -32
  194. data/vendor/v8/src/liveedit-debugger.js +52 -3
  195. data/vendor/v8/src/liveedit.cc +393 -113
  196. data/vendor/v8/src/liveedit.h +7 -3
  197. data/vendor/v8/src/log-utils.cc +4 -2
  198. data/vendor/v8/src/log.cc +170 -140
  199. data/vendor/v8/src/log.h +62 -11
  200. data/vendor/v8/src/macro-assembler.h +17 -0
  201. data/vendor/v8/src/macros.py +2 -0
  202. data/vendor/v8/src/mark-compact-inl.h +3 -23
  203. data/vendor/v8/src/mark-compact.cc +801 -830
  204. data/vendor/v8/src/mark-compact.h +154 -47
  205. data/vendor/v8/src/marking-thread.cc +85 -0
  206. data/vendor/v8/src/{inspector.cc → marking-thread.h} +32 -24
  207. data/vendor/v8/src/math.js +12 -18
  208. data/vendor/v8/src/messages.cc +18 -8
  209. data/vendor/v8/src/messages.js +314 -261
  210. data/vendor/v8/src/mips/assembler-mips-inl.h +58 -6
  211. data/vendor/v8/src/mips/assembler-mips.cc +92 -75
  212. data/vendor/v8/src/mips/assembler-mips.h +54 -60
  213. data/vendor/v8/src/mips/builtins-mips.cc +116 -17
  214. data/vendor/v8/src/mips/code-stubs-mips.cc +919 -556
  215. data/vendor/v8/src/mips/code-stubs-mips.h +22 -131
  216. data/vendor/v8/src/mips/codegen-mips.cc +281 -6
  217. data/vendor/v8/src/mips/codegen-mips.h +22 -0
  218. data/vendor/v8/src/mips/constants-mips.cc +2 -0
  219. data/vendor/v8/src/mips/constants-mips.h +12 -2
  220. data/vendor/v8/src/mips/deoptimizer-mips.cc +286 -50
  221. data/vendor/v8/src/mips/disasm-mips.cc +13 -0
  222. data/vendor/v8/src/mips/full-codegen-mips.cc +297 -284
  223. data/vendor/v8/src/mips/ic-mips.cc +182 -263
  224. data/vendor/v8/src/mips/lithium-codegen-mips.cc +1208 -556
  225. data/vendor/v8/src/mips/lithium-codegen-mips.h +72 -19
  226. data/vendor/v8/src/mips/lithium-gap-resolver-mips.cc +9 -2
  227. data/vendor/v8/src/mips/lithium-mips.cc +290 -302
  228. data/vendor/v8/src/mips/lithium-mips.h +463 -266
  229. data/vendor/v8/src/mips/macro-assembler-mips.cc +208 -115
  230. data/vendor/v8/src/mips/macro-assembler-mips.h +67 -24
  231. data/vendor/v8/src/mips/regexp-macro-assembler-mips.cc +40 -25
  232. data/vendor/v8/src/mips/regexp-macro-assembler-mips.h +3 -9
  233. data/vendor/v8/src/mips/simulator-mips.cc +112 -40
  234. data/vendor/v8/src/mips/simulator-mips.h +5 -0
  235. data/vendor/v8/src/mips/stub-cache-mips.cc +502 -884
  236. data/vendor/v8/src/mirror-debugger.js +157 -30
  237. data/vendor/v8/src/mksnapshot.cc +88 -14
  238. data/vendor/v8/src/object-observe.js +235 -0
  239. data/vendor/v8/src/objects-debug.cc +178 -176
  240. data/vendor/v8/src/objects-inl.h +1333 -486
  241. data/vendor/v8/src/objects-printer.cc +125 -43
  242. data/vendor/v8/src/objects-visiting-inl.h +578 -6
  243. data/vendor/v8/src/objects-visiting.cc +2 -2
  244. data/vendor/v8/src/objects-visiting.h +172 -79
  245. data/vendor/v8/src/objects.cc +3533 -2885
  246. data/vendor/v8/src/objects.h +1352 -1131
  247. data/vendor/v8/src/optimizing-compiler-thread.cc +152 -0
  248. data/vendor/v8/src/optimizing-compiler-thread.h +111 -0
  249. data/vendor/v8/src/parser.cc +390 -500
  250. data/vendor/v8/src/parser.h +45 -33
  251. data/vendor/v8/src/platform-cygwin.cc +10 -21
  252. data/vendor/v8/src/platform-freebsd.cc +36 -41
  253. data/vendor/v8/src/platform-linux.cc +160 -124
  254. data/vendor/v8/src/platform-macos.cc +30 -27
  255. data/vendor/v8/src/platform-nullos.cc +17 -1
  256. data/vendor/v8/src/platform-openbsd.cc +19 -50
  257. data/vendor/v8/src/platform-posix.cc +14 -0
  258. data/vendor/v8/src/platform-solaris.cc +20 -53
  259. data/vendor/v8/src/platform-win32.cc +49 -26
  260. data/vendor/v8/src/platform.h +40 -1
  261. data/vendor/v8/src/preparser.cc +8 -5
  262. data/vendor/v8/src/preparser.h +2 -2
  263. data/vendor/v8/src/prettyprinter.cc +16 -0
  264. data/vendor/v8/src/prettyprinter.h +2 -0
  265. data/vendor/v8/src/profile-generator-inl.h +1 -0
  266. data/vendor/v8/src/profile-generator.cc +209 -147
  267. data/vendor/v8/src/profile-generator.h +15 -12
  268. data/vendor/v8/src/property-details.h +46 -31
  269. data/vendor/v8/src/property.cc +27 -46
  270. data/vendor/v8/src/property.h +163 -83
  271. data/vendor/v8/src/proxy.js +7 -2
  272. data/vendor/v8/src/regexp-macro-assembler-irregexp.cc +4 -13
  273. data/vendor/v8/src/regexp-macro-assembler-irregexp.h +1 -2
  274. data/vendor/v8/src/regexp-macro-assembler-tracer.cc +1 -11
  275. data/vendor/v8/src/regexp-macro-assembler-tracer.h +0 -1
  276. data/vendor/v8/src/regexp-macro-assembler.cc +31 -14
  277. data/vendor/v8/src/regexp-macro-assembler.h +14 -11
  278. data/vendor/v8/src/regexp-stack.cc +1 -0
  279. data/vendor/v8/src/regexp.js +9 -8
  280. data/vendor/v8/src/rewriter.cc +18 -7
  281. data/vendor/v8/src/runtime-profiler.cc +52 -43
  282. data/vendor/v8/src/runtime-profiler.h +0 -25
  283. data/vendor/v8/src/runtime.cc +2006 -2023
  284. data/vendor/v8/src/runtime.h +56 -49
  285. data/vendor/v8/src/safepoint-table.cc +12 -18
  286. data/vendor/v8/src/safepoint-table.h +11 -8
  287. data/vendor/v8/src/scanner.cc +1 -0
  288. data/vendor/v8/src/scanner.h +4 -10
  289. data/vendor/v8/src/scopeinfo.cc +35 -9
  290. data/vendor/v8/src/scopeinfo.h +64 -3
  291. data/vendor/v8/src/scopes.cc +251 -156
  292. data/vendor/v8/src/scopes.h +61 -27
  293. data/vendor/v8/src/serialize.cc +348 -396
  294. data/vendor/v8/src/serialize.h +125 -114
  295. data/vendor/v8/src/small-pointer-list.h +11 -11
  296. data/vendor/v8/src/{smart-array-pointer.h → smart-pointers.h} +64 -15
  297. data/vendor/v8/src/snapshot-common.cc +64 -15
  298. data/vendor/v8/src/snapshot-empty.cc +7 -1
  299. data/vendor/v8/src/snapshot.h +9 -2
  300. data/vendor/v8/src/spaces-inl.h +17 -0
  301. data/vendor/v8/src/spaces.cc +477 -183
  302. data/vendor/v8/src/spaces.h +238 -58
  303. data/vendor/v8/src/splay-tree-inl.h +8 -7
  304. data/vendor/v8/src/splay-tree.h +24 -10
  305. data/vendor/v8/src/store-buffer.cc +12 -5
  306. data/vendor/v8/src/store-buffer.h +2 -4
  307. data/vendor/v8/src/string-search.h +22 -6
  308. data/vendor/v8/src/string-stream.cc +11 -8
  309. data/vendor/v8/src/string.js +47 -15
  310. data/vendor/v8/src/stub-cache.cc +461 -224
  311. data/vendor/v8/src/stub-cache.h +164 -102
  312. data/vendor/v8/src/sweeper-thread.cc +105 -0
  313. data/vendor/v8/src/sweeper-thread.h +81 -0
  314. data/vendor/v8/src/token.h +1 -0
  315. data/vendor/v8/src/transitions-inl.h +220 -0
  316. data/vendor/v8/src/transitions.cc +160 -0
  317. data/vendor/v8/src/transitions.h +207 -0
  318. data/vendor/v8/src/type-info.cc +182 -181
  319. data/vendor/v8/src/type-info.h +31 -19
  320. data/vendor/v8/src/unicode-inl.h +62 -106
  321. data/vendor/v8/src/unicode.cc +57 -67
  322. data/vendor/v8/src/unicode.h +45 -91
  323. data/vendor/v8/src/uri.js +57 -29
  324. data/vendor/v8/src/utils.h +105 -5
  325. data/vendor/v8/src/v8-counters.cc +54 -11
  326. data/vendor/v8/src/v8-counters.h +134 -19
  327. data/vendor/v8/src/v8.cc +29 -29
  328. data/vendor/v8/src/v8.h +1 -0
  329. data/vendor/v8/src/v8conversions.cc +26 -22
  330. data/vendor/v8/src/v8globals.h +56 -43
  331. data/vendor/v8/src/v8natives.js +83 -30
  332. data/vendor/v8/src/v8threads.cc +42 -21
  333. data/vendor/v8/src/v8threads.h +4 -1
  334. data/vendor/v8/src/v8utils.cc +9 -93
  335. data/vendor/v8/src/v8utils.h +37 -33
  336. data/vendor/v8/src/variables.cc +6 -3
  337. data/vendor/v8/src/variables.h +6 -13
  338. data/vendor/v8/src/version.cc +2 -2
  339. data/vendor/v8/src/vm-state-inl.h +11 -0
  340. data/vendor/v8/src/x64/assembler-x64-inl.h +39 -8
  341. data/vendor/v8/src/x64/assembler-x64.cc +78 -64
  342. data/vendor/v8/src/x64/assembler-x64.h +38 -33
  343. data/vendor/v8/src/x64/builtins-x64.cc +105 -7
  344. data/vendor/v8/src/x64/code-stubs-x64.cc +790 -413
  345. data/vendor/v8/src/x64/code-stubs-x64.h +10 -106
  346. data/vendor/v8/src/x64/codegen-x64.cc +210 -8
  347. data/vendor/v8/src/x64/codegen-x64.h +20 -1
  348. data/vendor/v8/src/x64/deoptimizer-x64.cc +336 -75
  349. data/vendor/v8/src/x64/disasm-x64.cc +15 -0
  350. data/vendor/v8/src/x64/frames-x64.h +0 -14
  351. data/vendor/v8/src/x64/full-codegen-x64.cc +293 -270
  352. data/vendor/v8/src/x64/ic-x64.cc +153 -251
  353. data/vendor/v8/src/x64/lithium-codegen-x64.cc +1379 -531
  354. data/vendor/v8/src/x64/lithium-codegen-x64.h +67 -23
  355. data/vendor/v8/src/x64/lithium-gap-resolver-x64.cc +2 -2
  356. data/vendor/v8/src/x64/lithium-x64.cc +349 -289
  357. data/vendor/v8/src/x64/lithium-x64.h +460 -250
  358. data/vendor/v8/src/x64/macro-assembler-x64.cc +350 -177
  359. data/vendor/v8/src/x64/macro-assembler-x64.h +67 -49
  360. data/vendor/v8/src/x64/regexp-macro-assembler-x64.cc +46 -33
  361. data/vendor/v8/src/x64/regexp-macro-assembler-x64.h +2 -3
  362. data/vendor/v8/src/x64/stub-cache-x64.cc +484 -653
  363. data/vendor/v8/src/zone-inl.h +9 -27
  364. data/vendor/v8/src/zone.cc +5 -5
  365. data/vendor/v8/src/zone.h +53 -27
  366. data/vendor/v8/test/benchmarks/testcfg.py +5 -0
  367. data/vendor/v8/test/cctest/cctest.cc +4 -0
  368. data/vendor/v8/test/cctest/cctest.gyp +3 -1
  369. data/vendor/v8/test/cctest/cctest.h +57 -9
  370. data/vendor/v8/test/cctest/cctest.status +15 -15
  371. data/vendor/v8/test/cctest/test-accessors.cc +26 -0
  372. data/vendor/v8/test/cctest/test-alloc.cc +22 -30
  373. data/vendor/v8/test/cctest/test-api.cc +1943 -314
  374. data/vendor/v8/test/cctest/test-assembler-arm.cc +133 -13
  375. data/vendor/v8/test/cctest/test-assembler-ia32.cc +1 -1
  376. data/vendor/v8/test/cctest/test-assembler-mips.cc +12 -0
  377. data/vendor/v8/test/cctest/test-ast.cc +4 -2
  378. data/vendor/v8/test/cctest/test-compiler.cc +61 -29
  379. data/vendor/v8/test/cctest/test-dataflow.cc +2 -2
  380. data/vendor/v8/test/cctest/test-debug.cc +212 -33
  381. data/vendor/v8/test/cctest/test-decls.cc +257 -11
  382. data/vendor/v8/test/cctest/test-dictionary.cc +24 -10
  383. data/vendor/v8/test/cctest/test-disasm-arm.cc +118 -1
  384. data/vendor/v8/test/cctest/test-disasm-ia32.cc +3 -2
  385. data/vendor/v8/test/cctest/test-flags.cc +14 -1
  386. data/vendor/v8/test/cctest/test-func-name-inference.cc +7 -4
  387. data/vendor/v8/test/cctest/test-global-object.cc +51 -0
  388. data/vendor/v8/test/cctest/test-hashing.cc +32 -23
  389. data/vendor/v8/test/cctest/test-heap-profiler.cc +131 -77
  390. data/vendor/v8/test/cctest/test-heap.cc +1084 -143
  391. data/vendor/v8/test/cctest/test-list.cc +1 -1
  392. data/vendor/v8/test/cctest/test-liveedit.cc +3 -2
  393. data/vendor/v8/test/cctest/test-lockers.cc +12 -13
  394. data/vendor/v8/test/cctest/test-log.cc +10 -8
  395. data/vendor/v8/test/cctest/test-macro-assembler-x64.cc +2 -2
  396. data/vendor/v8/test/cctest/test-mark-compact.cc +44 -22
  397. data/vendor/v8/test/cctest/test-object-observe.cc +434 -0
  398. data/vendor/v8/test/cctest/test-parsing.cc +86 -39
  399. data/vendor/v8/test/cctest/test-platform-linux.cc +6 -0
  400. data/vendor/v8/test/cctest/test-platform-win32.cc +7 -0
  401. data/vendor/v8/test/cctest/test-random.cc +5 -4
  402. data/vendor/v8/test/cctest/test-regexp.cc +137 -101
  403. data/vendor/v8/test/cctest/test-serialize.cc +150 -230
  404. data/vendor/v8/test/cctest/test-sockets.cc +1 -1
  405. data/vendor/v8/test/cctest/test-spaces.cc +139 -0
  406. data/vendor/v8/test/cctest/test-strings.cc +736 -74
  407. data/vendor/v8/test/cctest/test-thread-termination.cc +10 -11
  408. data/vendor/v8/test/cctest/test-threads.cc +4 -4
  409. data/vendor/v8/test/cctest/test-utils.cc +16 -0
  410. data/vendor/v8/test/cctest/test-weakmaps.cc +7 -3
  411. data/vendor/v8/test/cctest/testcfg.py +64 -5
  412. data/vendor/v8/test/es5conform/testcfg.py +5 -0
  413. data/vendor/v8/test/message/message.status +1 -1
  414. data/vendor/v8/test/message/overwritten-builtins.out +3 -0
  415. data/vendor/v8/test/message/testcfg.py +89 -8
  416. data/vendor/v8/test/message/try-catch-finally-no-message.out +26 -26
  417. data/vendor/v8/test/mjsunit/accessor-map-sharing.js +18 -2
  418. data/vendor/v8/test/mjsunit/allocation-site-info.js +126 -0
  419. data/vendor/v8/test/mjsunit/array-bounds-check-removal.js +62 -1
  420. data/vendor/v8/test/mjsunit/array-iteration.js +1 -1
  421. data/vendor/v8/test/mjsunit/array-literal-transitions.js +2 -0
  422. data/vendor/v8/test/mjsunit/array-natives-elements.js +317 -0
  423. data/vendor/v8/test/mjsunit/array-reduce.js +8 -8
  424. data/vendor/v8/test/mjsunit/array-slice.js +12 -0
  425. data/vendor/v8/test/mjsunit/array-store-and-grow.js +4 -1
  426. data/vendor/v8/test/mjsunit/assert-opt-and-deopt.js +1 -1
  427. data/vendor/v8/test/mjsunit/bugs/bug-2337.js +53 -0
  428. data/vendor/v8/test/mjsunit/compare-known-objects-slow.js +69 -0
  429. data/vendor/v8/test/mjsunit/compiler/alloc-object-huge.js +3 -1
  430. data/vendor/v8/test/mjsunit/compiler/inline-accessors.js +368 -0
  431. data/vendor/v8/test/mjsunit/compiler/inline-arguments.js +87 -1
  432. data/vendor/v8/test/mjsunit/compiler/inline-closures.js +49 -0
  433. data/vendor/v8/test/mjsunit/compiler/inline-construct.js +55 -43
  434. data/vendor/v8/test/mjsunit/compiler/inline-literals.js +39 -0
  435. data/vendor/v8/test/mjsunit/compiler/multiply-add.js +69 -0
  436. data/vendor/v8/test/mjsunit/compiler/optimized-closures.js +57 -0
  437. data/vendor/v8/test/mjsunit/compiler/parallel-proto-change.js +44 -0
  438. data/vendor/v8/test/mjsunit/compiler/property-static.js +69 -0
  439. data/vendor/v8/test/mjsunit/compiler/proto-chain-constant.js +55 -0
  440. data/vendor/v8/test/mjsunit/compiler/proto-chain-load.js +44 -0
  441. data/vendor/v8/test/mjsunit/compiler/regress-gvn.js +3 -2
  442. data/vendor/v8/test/mjsunit/compiler/regress-or.js +6 -2
  443. data/vendor/v8/test/mjsunit/compiler/rotate.js +224 -0
  444. data/vendor/v8/test/mjsunit/compiler/uint32.js +173 -0
  445. data/vendor/v8/test/mjsunit/count-based-osr.js +2 -1
  446. data/vendor/v8/test/mjsunit/d8-os.js +3 -3
  447. data/vendor/v8/test/mjsunit/date-parse.js +3 -0
  448. data/vendor/v8/test/mjsunit/date.js +22 -0
  449. data/vendor/v8/test/mjsunit/debug-break-inline.js +1 -0
  450. data/vendor/v8/test/mjsunit/debug-evaluate-locals-optimized-double.js +22 -12
  451. data/vendor/v8/test/mjsunit/debug-evaluate-locals-optimized.js +21 -10
  452. data/vendor/v8/test/mjsunit/debug-liveedit-compile-error.js +60 -0
  453. data/vendor/v8/test/mjsunit/debug-liveedit-double-call.js +142 -0
  454. data/vendor/v8/test/mjsunit/debug-liveedit-literals.js +94 -0
  455. data/vendor/v8/test/mjsunit/debug-liveedit-restart-frame.js +153 -0
  456. data/vendor/v8/test/mjsunit/debug-multiple-breakpoints.js +1 -1
  457. data/vendor/v8/test/mjsunit/debug-script-breakpoints-closure.js +67 -0
  458. data/vendor/v8/test/mjsunit/debug-script-breakpoints-nested.js +82 -0
  459. data/vendor/v8/test/mjsunit/debug-script.js +4 -2
  460. data/vendor/v8/test/mjsunit/debug-set-variable-value.js +308 -0
  461. data/vendor/v8/test/mjsunit/debug-stepout-scope-part1.js +190 -0
  462. data/vendor/v8/test/mjsunit/debug-stepout-scope-part2.js +83 -0
  463. data/vendor/v8/test/mjsunit/debug-stepout-scope-part3.js +80 -0
  464. data/vendor/v8/test/mjsunit/debug-stepout-scope-part4.js +80 -0
  465. data/vendor/v8/test/mjsunit/debug-stepout-scope-part5.js +77 -0
  466. data/vendor/v8/test/mjsunit/debug-stepout-scope-part6.js +79 -0
  467. data/vendor/v8/test/mjsunit/debug-stepout-scope-part7.js +79 -0
  468. data/vendor/v8/test/mjsunit/{debug-stepout-scope.js → debug-stepout-scope-part8.js} +0 -189
  469. data/vendor/v8/test/mjsunit/delete-non-configurable.js +74 -0
  470. data/vendor/v8/test/mjsunit/deopt-minus-zero.js +56 -0
  471. data/vendor/v8/test/mjsunit/elements-kind.js +6 -4
  472. data/vendor/v8/test/mjsunit/elements-length-no-holey.js +33 -0
  473. data/vendor/v8/test/mjsunit/elements-transition-hoisting.js +46 -19
  474. data/vendor/v8/test/mjsunit/error-accessors.js +54 -0
  475. data/vendor/v8/test/mjsunit/error-constructors.js +1 -14
  476. data/vendor/v8/test/mjsunit/error-tostring.js +8 -0
  477. data/vendor/v8/test/mjsunit/eval-stack-trace.js +204 -0
  478. data/vendor/v8/test/mjsunit/external-array.js +364 -1
  479. data/vendor/v8/test/mjsunit/fast-array-length.js +37 -0
  480. data/vendor/v8/test/mjsunit/fast-non-keyed.js +113 -0
  481. data/vendor/v8/test/mjsunit/fast-prototype.js +117 -0
  482. data/vendor/v8/test/mjsunit/function-call.js +14 -18
  483. data/vendor/v8/test/mjsunit/fuzz-natives-part1.js +230 -0
  484. data/vendor/v8/test/mjsunit/fuzz-natives-part2.js +229 -0
  485. data/vendor/v8/test/mjsunit/fuzz-natives-part3.js +229 -0
  486. data/vendor/v8/test/mjsunit/{fuzz-natives.js → fuzz-natives-part4.js} +12 -2
  487. data/vendor/v8/test/mjsunit/generated-transition-stub.js +218 -0
  488. data/vendor/v8/test/mjsunit/greedy.js +1 -1
  489. data/vendor/v8/test/mjsunit/harmony/block-conflicts.js +2 -1
  490. data/vendor/v8/test/mjsunit/harmony/block-let-crankshaft.js +1 -1
  491. data/vendor/v8/test/mjsunit/harmony/collections.js +69 -11
  492. data/vendor/v8/test/mjsunit/harmony/debug-blockscopes.js +2 -2
  493. data/vendor/v8/test/mjsunit/harmony/module-linking.js +180 -3
  494. data/vendor/v8/test/mjsunit/harmony/module-parsing.js +31 -0
  495. data/vendor/v8/test/mjsunit/harmony/module-recompile.js +87 -0
  496. data/vendor/v8/test/mjsunit/harmony/module-resolution.js +15 -2
  497. data/vendor/v8/test/mjsunit/harmony/object-observe.js +1056 -0
  498. data/vendor/v8/test/mjsunit/harmony/proxies-json.js +178 -0
  499. data/vendor/v8/test/mjsunit/harmony/proxies.js +25 -10
  500. data/vendor/v8/test/mjsunit/json-parser-recursive.js +33 -0
  501. data/vendor/v8/test/mjsunit/json-stringify-recursive.js +52 -0
  502. data/vendor/v8/test/mjsunit/json.js +38 -2
  503. data/vendor/v8/test/mjsunit/json2.js +153 -0
  504. data/vendor/v8/test/mjsunit/limit-locals.js +5 -4
  505. data/vendor/v8/test/mjsunit/manual-parallel-recompile.js +79 -0
  506. data/vendor/v8/test/mjsunit/math-exp-precision.js +64 -0
  507. data/vendor/v8/test/mjsunit/math-floor-negative.js +59 -0
  508. data/vendor/v8/test/mjsunit/math-floor-of-div-minus-zero.js +41 -0
  509. data/vendor/v8/test/mjsunit/math-floor-of-div-nosudiv.js +288 -0
  510. data/vendor/v8/test/mjsunit/math-floor-of-div.js +81 -9
  511. data/vendor/v8/test/mjsunit/{math-floor.js → math-floor-part1.js} +1 -72
  512. data/vendor/v8/test/mjsunit/math-floor-part2.js +76 -0
  513. data/vendor/v8/test/mjsunit/math-floor-part3.js +78 -0
  514. data/vendor/v8/test/mjsunit/math-floor-part4.js +76 -0
  515. data/vendor/v8/test/mjsunit/mirror-object.js +43 -9
  516. data/vendor/v8/test/mjsunit/mjsunit.js +1 -1
  517. data/vendor/v8/test/mjsunit/mjsunit.status +52 -27
  518. data/vendor/v8/test/mjsunit/mul-exhaustive-part1.js +491 -0
  519. data/vendor/v8/test/mjsunit/mul-exhaustive-part10.js +470 -0
  520. data/vendor/v8/test/mjsunit/mul-exhaustive-part2.js +525 -0
  521. data/vendor/v8/test/mjsunit/mul-exhaustive-part3.js +532 -0
  522. data/vendor/v8/test/mjsunit/mul-exhaustive-part4.js +509 -0
  523. data/vendor/v8/test/mjsunit/mul-exhaustive-part5.js +505 -0
  524. data/vendor/v8/test/mjsunit/mul-exhaustive-part6.js +554 -0
  525. data/vendor/v8/test/mjsunit/mul-exhaustive-part7.js +497 -0
  526. data/vendor/v8/test/mjsunit/mul-exhaustive-part8.js +526 -0
  527. data/vendor/v8/test/mjsunit/mul-exhaustive-part9.js +533 -0
  528. data/vendor/v8/test/mjsunit/new-function.js +34 -0
  529. data/vendor/v8/test/mjsunit/numops-fuzz-part1.js +1172 -0
  530. data/vendor/v8/test/mjsunit/numops-fuzz-part2.js +1178 -0
  531. data/vendor/v8/test/mjsunit/numops-fuzz-part3.js +1178 -0
  532. data/vendor/v8/test/mjsunit/numops-fuzz-part4.js +1177 -0
  533. data/vendor/v8/test/mjsunit/object-define-property.js +107 -2
  534. data/vendor/v8/test/mjsunit/override-read-only-property.js +6 -4
  535. data/vendor/v8/test/mjsunit/packed-elements.js +2 -2
  536. data/vendor/v8/test/mjsunit/parse-int-float.js +4 -4
  537. data/vendor/v8/test/mjsunit/pixel-array-rounding.js +1 -1
  538. data/vendor/v8/test/mjsunit/readonly.js +228 -0
  539. data/vendor/v8/test/mjsunit/regexp-capture-3.js +16 -18
  540. data/vendor/v8/test/mjsunit/regexp-capture.js +2 -0
  541. data/vendor/v8/test/mjsunit/regexp-global.js +122 -0
  542. data/vendor/v8/test/mjsunit/regexp-results-cache.js +78 -0
  543. data/vendor/v8/test/mjsunit/regress/regress-1117.js +12 -3
  544. data/vendor/v8/test/mjsunit/regress/regress-1118.js +1 -1
  545. data/vendor/v8/test/mjsunit/regress/regress-115100.js +36 -0
  546. data/vendor/v8/test/mjsunit/regress/regress-1199637.js +1 -3
  547. data/vendor/v8/test/mjsunit/regress/regress-121407.js +1 -1
  548. data/vendor/v8/test/mjsunit/regress/regress-131923.js +30 -0
  549. data/vendor/v8/test/mjsunit/regress/regress-131994.js +70 -0
  550. data/vendor/v8/test/mjsunit/regress/regress-133211.js +35 -0
  551. data/vendor/v8/test/mjsunit/regress/regress-133211b.js +39 -0
  552. data/vendor/v8/test/mjsunit/regress/regress-136048.js +34 -0
  553. data/vendor/v8/test/mjsunit/regress/regress-137768.js +73 -0
  554. data/vendor/v8/test/mjsunit/regress/regress-143967.js +34 -0
  555. data/vendor/v8/test/mjsunit/regress/regress-145201.js +107 -0
  556. data/vendor/v8/test/mjsunit/regress/regress-147497.js +45 -0
  557. data/vendor/v8/test/mjsunit/regress/regress-148378.js +38 -0
  558. data/vendor/v8/test/mjsunit/regress/regress-1563.js +1 -1
  559. data/vendor/v8/test/mjsunit/regress/regress-1591.js +48 -0
  560. data/vendor/v8/test/mjsunit/regress/regress-164442.js +45 -0
  561. data/vendor/v8/test/mjsunit/regress/regress-165637.js +61 -0
  562. data/vendor/v8/test/mjsunit/regress/regress-166379.js +39 -0
  563. data/vendor/v8/test/mjsunit/regress/regress-166553.js +33 -0
  564. data/vendor/v8/test/mjsunit/regress/regress-1692.js +1 -1
  565. data/vendor/v8/test/mjsunit/regress/regress-171641.js +40 -0
  566. data/vendor/v8/test/mjsunit/regress/regress-1980.js +1 -1
  567. data/vendor/v8/test/mjsunit/regress/regress-2073.js +99 -0
  568. data/vendor/v8/test/mjsunit/regress/regress-2119.js +36 -0
  569. data/vendor/v8/test/mjsunit/regress/regress-2156.js +39 -0
  570. data/vendor/v8/test/mjsunit/regress/regress-2163.js +70 -0
  571. data/vendor/v8/test/mjsunit/regress/regress-2170.js +58 -0
  572. data/vendor/v8/test/mjsunit/regress/regress-2172.js +35 -0
  573. data/vendor/v8/test/mjsunit/regress/regress-2185-2.js +145 -0
  574. data/vendor/v8/test/mjsunit/regress/regress-2185.js +38 -0
  575. data/vendor/v8/test/mjsunit/regress/regress-2186.js +49 -0
  576. data/vendor/v8/test/mjsunit/regress/regress-2193.js +58 -0
  577. data/vendor/v8/test/mjsunit/regress/regress-2219.js +32 -0
  578. data/vendor/v8/test/mjsunit/regress/regress-2225.js +65 -0
  579. data/vendor/v8/test/mjsunit/regress/regress-2226.js +36 -0
  580. data/vendor/v8/test/mjsunit/regress/regress-2234.js +41 -0
  581. data/vendor/v8/test/mjsunit/regress/regress-2243.js +31 -0
  582. data/vendor/v8/test/mjsunit/regress/regress-2249.js +33 -0
  583. data/vendor/v8/test/mjsunit/regress/regress-2250.js +68 -0
  584. data/vendor/v8/test/mjsunit/regress/regress-2261.js +113 -0
  585. data/vendor/v8/test/mjsunit/regress/regress-2263.js +30 -0
  586. data/vendor/v8/test/mjsunit/regress/regress-2284.js +32 -0
  587. data/vendor/v8/test/mjsunit/regress/regress-2285.js +32 -0
  588. data/vendor/v8/test/mjsunit/regress/regress-2286.js +32 -0
  589. data/vendor/v8/test/mjsunit/regress/regress-2289.js +34 -0
  590. data/vendor/v8/test/mjsunit/regress/regress-2291.js +36 -0
  591. data/vendor/v8/test/mjsunit/regress/regress-2294.js +70 -0
  592. data/vendor/v8/test/mjsunit/regress/regress-2296.js +40 -0
  593. data/vendor/v8/test/mjsunit/regress/regress-2315.js +40 -0
  594. data/vendor/v8/test/mjsunit/regress/regress-2318.js +66 -0
  595. data/vendor/v8/test/mjsunit/regress/regress-2322.js +36 -0
  596. data/vendor/v8/test/mjsunit/regress/regress-2326.js +54 -0
  597. data/vendor/v8/test/mjsunit/regress/regress-2336.js +53 -0
  598. data/vendor/v8/test/mjsunit/regress/regress-2339.js +59 -0
  599. data/vendor/v8/test/mjsunit/regress/regress-2346.js +123 -0
  600. data/vendor/v8/test/mjsunit/regress/regress-2373.js +29 -0
  601. data/vendor/v8/test/mjsunit/regress/regress-2374.js +33 -0
  602. data/vendor/v8/test/mjsunit/regress/regress-2398.js +41 -0
  603. data/vendor/v8/test/mjsunit/regress/regress-2410.js +36 -0
  604. data/vendor/v8/test/mjsunit/regress/regress-2416.js +75 -0
  605. data/vendor/v8/test/mjsunit/regress/regress-2419.js +37 -0
  606. data/vendor/v8/test/mjsunit/regress/regress-2433.js +36 -0
  607. data/vendor/v8/test/mjsunit/regress/regress-2437.js +156 -0
  608. data/vendor/v8/test/mjsunit/regress/regress-2438.js +52 -0
  609. data/vendor/v8/test/mjsunit/regress/regress-2443.js +129 -0
  610. data/vendor/v8/test/mjsunit/regress/regress-2444.js +120 -0
  611. data/vendor/v8/test/mjsunit/regress/regress-2489.js +50 -0
  612. data/vendor/v8/test/mjsunit/regress/regress-2499.js +40 -0
  613. data/vendor/v8/test/mjsunit/regress/regress-334.js +1 -1
  614. data/vendor/v8/test/mjsunit/regress/regress-492.js +39 -1
  615. data/vendor/v8/test/mjsunit/regress/regress-builtin-array-op.js +38 -0
  616. data/vendor/v8/test/mjsunit/regress/regress-cnlt-elements.js +43 -0
  617. data/vendor/v8/test/mjsunit/regress/regress-cnlt-enum-indices.js +45 -0
  618. data/vendor/v8/test/mjsunit/regress/regress-cntl-descriptors-enum.js +46 -0
  619. data/vendor/v8/test/mjsunit/regress/regress-convert-enum.js +60 -0
  620. data/vendor/v8/test/mjsunit/regress/regress-convert-enum2.js +46 -0
  621. data/vendor/v8/test/mjsunit/regress/regress-convert-transition.js +40 -0
  622. data/vendor/v8/test/mjsunit/regress/regress-crbug-119926.js +3 -1
  623. data/vendor/v8/test/mjsunit/regress/regress-crbug-125148.js +90 -0
  624. data/vendor/v8/test/mjsunit/regress/regress-crbug-134055.js +63 -0
  625. data/vendor/v8/test/mjsunit/regress/regress-crbug-134609.js +59 -0
  626. data/vendor/v8/test/mjsunit/regress/regress-crbug-135008.js +45 -0
  627. data/vendor/v8/test/mjsunit/regress/regress-crbug-135066.js +55 -0
  628. data/vendor/v8/test/mjsunit/regress/regress-crbug-137689.js +47 -0
  629. data/vendor/v8/test/mjsunit/regress/regress-crbug-138887.js +48 -0
  630. data/vendor/v8/test/mjsunit/regress/regress-crbug-140083.js +44 -0
  631. data/vendor/v8/test/mjsunit/regress/regress-crbug-142087.js +38 -0
  632. data/vendor/v8/test/mjsunit/regress/regress-crbug-142218.js +44 -0
  633. data/vendor/v8/test/mjsunit/regress/regress-crbug-145961.js +39 -0
  634. data/vendor/v8/test/mjsunit/regress/regress-crbug-146910.js +33 -0
  635. data/vendor/v8/test/mjsunit/regress/regress-crbug-147475.js +48 -0
  636. data/vendor/v8/test/mjsunit/regress/regress-crbug-148376.js +35 -0
  637. data/vendor/v8/test/mjsunit/regress/regress-crbug-150545.js +53 -0
  638. data/vendor/v8/test/mjsunit/regress/regress-crbug-150729.js +39 -0
  639. data/vendor/v8/test/mjsunit/regress/regress-crbug-157019.js +54 -0
  640. data/vendor/v8/test/mjsunit/regress/regress-crbug-157520.js +38 -0
  641. data/vendor/v8/test/mjsunit/regress/regress-crbug-158185.js +39 -0
  642. data/vendor/v8/test/mjsunit/regress/regress-crbug-160010.js +35 -0
  643. data/vendor/v8/test/mjsunit/regress/regress-crbug-162085.js +71 -0
  644. data/vendor/v8/test/mjsunit/regress/regress-crbug-168545.js +34 -0
  645. data/vendor/v8/test/mjsunit/regress/regress-crbug-170856.js +33 -0
  646. data/vendor/v8/test/mjsunit/regress/regress-crbug-172345.js +34 -0
  647. data/vendor/v8/test/mjsunit/regress/regress-crbug-173974.js +36 -0
  648. data/vendor/v8/test/mjsunit/regress/regress-crbug-18639.js +9 -5
  649. data/vendor/v8/test/mjsunit/regress/regress-debug-code-recompilation.js +2 -1
  650. data/vendor/v8/test/mjsunit/regress/regress-deep-proto.js +45 -0
  651. data/vendor/v8/test/mjsunit/regress/regress-delete-empty-double.js +40 -0
  652. data/vendor/v8/test/mjsunit/regress/regress-iteration-order.js +42 -0
  653. data/vendor/v8/test/mjsunit/regress/regress-json-stringify-gc.js +41 -0
  654. data/vendor/v8/test/mjsunit/regress/regress-latin-1.js +78 -0
  655. data/vendor/v8/test/mjsunit/regress/regress-load-elements.js +49 -0
  656. data/vendor/v8/test/mjsunit/regress/regress-observe-empty-double-array.js +38 -0
  657. data/vendor/v8/test/mjsunit/regress/regress-undefined-store-keyed-fast-element.js +37 -0
  658. data/vendor/v8/test/mjsunit/shift-for-integer-div.js +59 -0
  659. data/vendor/v8/test/mjsunit/stack-traces-gc.js +119 -0
  660. data/vendor/v8/test/mjsunit/stack-traces-overflow.js +122 -0
  661. data/vendor/v8/test/mjsunit/stack-traces.js +39 -1
  662. data/vendor/v8/test/mjsunit/str-to-num.js +7 -2
  663. data/vendor/v8/test/mjsunit/strict-mode.js +36 -11
  664. data/vendor/v8/test/mjsunit/string-charcodeat.js +3 -0
  665. data/vendor/v8/test/mjsunit/string-natives.js +72 -0
  666. data/vendor/v8/test/mjsunit/string-split.js +17 -0
  667. data/vendor/v8/test/mjsunit/testcfg.py +76 -6
  668. data/vendor/v8/test/mjsunit/tools/tickprocessor.js +4 -1
  669. data/vendor/v8/test/mjsunit/try-finally-continue.js +72 -0
  670. data/vendor/v8/test/mjsunit/typed-array-slice.js +61 -0
  671. data/vendor/v8/test/mjsunit/unbox-double-arrays.js +2 -0
  672. data/vendor/v8/test/mjsunit/uri.js +12 -0
  673. data/vendor/v8/test/mjsunit/with-readonly.js +4 -2
  674. data/vendor/v8/test/mozilla/mozilla.status +19 -113
  675. data/vendor/v8/test/mozilla/testcfg.py +122 -3
  676. data/vendor/v8/test/preparser/preparser.status +5 -0
  677. data/vendor/v8/test/preparser/strict-identifiers.pyt +1 -1
  678. data/vendor/v8/test/preparser/testcfg.py +101 -5
  679. data/vendor/v8/test/sputnik/sputnik.status +1 -1
  680. data/vendor/v8/test/sputnik/testcfg.py +5 -0
  681. data/vendor/v8/test/test262/README +2 -2
  682. data/vendor/v8/test/test262/test262.status +13 -36
  683. data/vendor/v8/test/test262/testcfg.py +102 -8
  684. data/vendor/v8/tools/android-build.sh +0 -0
  685. data/vendor/v8/tools/android-ll-prof.sh +69 -0
  686. data/vendor/v8/tools/android-run.py +109 -0
  687. data/vendor/v8/tools/android-sync.sh +105 -0
  688. data/vendor/v8/tools/bash-completion.sh +0 -0
  689. data/vendor/v8/tools/check-static-initializers.sh +0 -0
  690. data/vendor/v8/tools/common-includes.sh +15 -22
  691. data/vendor/v8/tools/disasm.py +4 -4
  692. data/vendor/v8/tools/fuzz-harness.sh +0 -0
  693. data/vendor/v8/tools/gen-postmortem-metadata.py +6 -8
  694. data/vendor/v8/tools/grokdump.py +404 -129
  695. data/vendor/v8/tools/gyp/v8.gyp +105 -43
  696. data/vendor/v8/tools/linux-tick-processor +5 -5
  697. data/vendor/v8/tools/ll_prof.py +75 -15
  698. data/vendor/v8/tools/merge-to-branch.sh +2 -2
  699. data/vendor/v8/tools/plot-timer-events +70 -0
  700. data/vendor/v8/tools/plot-timer-events.js +510 -0
  701. data/vendor/v8/tools/presubmit.py +1 -0
  702. data/vendor/v8/tools/push-to-trunk.sh +14 -4
  703. data/vendor/v8/tools/run-llprof.sh +69 -0
  704. data/vendor/v8/tools/run-tests.py +372 -0
  705. data/vendor/v8/tools/run-valgrind.py +1 -1
  706. data/vendor/v8/tools/status-file-converter.py +39 -0
  707. data/vendor/v8/tools/test-server.py +224 -0
  708. data/vendor/v8/tools/test-wrapper-gypbuild.py +13 -16
  709. data/vendor/v8/tools/test.py +10 -19
  710. data/vendor/v8/tools/testrunner/README +174 -0
  711. data/vendor/v8/tools/testrunner/__init__.py +26 -0
  712. data/vendor/v8/tools/testrunner/local/__init__.py +26 -0
  713. data/vendor/v8/tools/testrunner/local/commands.py +153 -0
  714. data/vendor/v8/tools/testrunner/local/execution.py +182 -0
  715. data/vendor/v8/tools/testrunner/local/old_statusfile.py +460 -0
  716. data/vendor/v8/tools/testrunner/local/progress.py +238 -0
  717. data/vendor/v8/tools/testrunner/local/statusfile.py +145 -0
  718. data/vendor/v8/tools/testrunner/local/testsuite.py +187 -0
  719. data/vendor/v8/tools/testrunner/local/utils.py +108 -0
  720. data/vendor/v8/tools/testrunner/local/verbose.py +99 -0
  721. data/vendor/v8/tools/testrunner/network/__init__.py +26 -0
  722. data/vendor/v8/tools/testrunner/network/distro.py +90 -0
  723. data/vendor/v8/tools/testrunner/network/endpoint.py +124 -0
  724. data/vendor/v8/tools/testrunner/network/network_execution.py +253 -0
  725. data/vendor/v8/tools/testrunner/network/perfdata.py +120 -0
  726. data/vendor/v8/tools/testrunner/objects/__init__.py +26 -0
  727. data/vendor/v8/tools/testrunner/objects/context.py +50 -0
  728. data/vendor/v8/tools/testrunner/objects/output.py +60 -0
  729. data/vendor/v8/tools/testrunner/objects/peer.py +80 -0
  730. data/vendor/v8/tools/testrunner/objects/testcase.py +83 -0
  731. data/vendor/v8/tools/testrunner/objects/workpacket.py +90 -0
  732. data/vendor/v8/tools/testrunner/server/__init__.py +26 -0
  733. data/vendor/v8/tools/testrunner/server/compression.py +111 -0
  734. data/vendor/v8/tools/testrunner/server/constants.py +51 -0
  735. data/vendor/v8/tools/testrunner/server/daemon.py +147 -0
  736. data/vendor/v8/tools/testrunner/server/local_handler.py +119 -0
  737. data/vendor/v8/tools/testrunner/server/main.py +245 -0
  738. data/vendor/v8/tools/testrunner/server/presence_handler.py +120 -0
  739. data/vendor/v8/tools/testrunner/server/signatures.py +63 -0
  740. data/vendor/v8/tools/testrunner/server/status_handler.py +112 -0
  741. data/vendor/v8/tools/testrunner/server/work_handler.py +150 -0
  742. data/vendor/v8/tools/tick-processor.html +168 -0
  743. data/vendor/v8/tools/tickprocessor-driver.js +5 -3
  744. data/vendor/v8/tools/tickprocessor.js +58 -15
  745. metadata +534 -30
  746. data/patches/add-freebsd9-and-freebsd10-to-gyp-GetFlavor.patch +0 -11
  747. data/patches/do-not-imply-vfp3-and-armv7.patch +0 -44
  748. data/patches/fPIC-on-x64.patch +0 -14
  749. data/vendor/v8/src/liveobjectlist-inl.h +0 -126
  750. data/vendor/v8/src/liveobjectlist.cc +0 -2631
  751. data/vendor/v8/src/liveobjectlist.h +0 -319
  752. data/vendor/v8/test/mjsunit/mul-exhaustive.js +0 -4629
  753. data/vendor/v8/test/mjsunit/numops-fuzz.js +0 -4609
  754. data/vendor/v8/test/mjsunit/regress/regress-1969.js +0 -5045
File without changes
@@ -0,0 +1,69 @@
1
+ #!/bin/bash
2
+ # Copyright 2012 the V8 project authors. All rights reserved.
3
+ # Redistribution and use in source and binary forms, with or without
4
+ # modification, are permitted provided that the following conditions are
5
+ # met:
6
+ #
7
+ # * Redistributions of source code must retain the above copyright
8
+ # notice, this list of conditions and the following disclaimer.
9
+ # * Redistributions in binary form must reproduce the above
10
+ # copyright notice, this list of conditions and the following
11
+ # disclaimer in the documentation and/or other materials provided
12
+ # with the distribution.
13
+ # * Neither the name of Google Inc. nor the names of its
14
+ # contributors may be used to endorse or promote products derived
15
+ # from this software without specific prior written permission.
16
+ #
17
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19
+ # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20
+ # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21
+ # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22
+ # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23
+ # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24
+ # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25
+ # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+
29
+ # Runs d8 with the given arguments on the device under 'perf' and
30
+ # processes the profiler trace and v8 logs using ll_prof.py.
31
+ #
32
+ # Usage:
33
+ # > ./tools/android-ll-prof.sh (debug|release) "args to d8" "args to ll_prof.py"
34
+ #
35
+ # The script creates deploy directory deploy/data/local/tmp/v8, copies there
36
+ # the d8 binary either from out/android_arm.release or out/android_arm.debug,
37
+ # and then sync the deploy directory with /data/local/tmp/v8 on the device.
38
+ # You can put JS files in the deploy directory before running the script.
39
+ # Note: $ANDROID_NDK_ROOT must be set.
40
+
41
+ MODE=$1
42
+ RUN_ARGS=$2
43
+ LL_PROF_ARGS=$3
44
+
45
+ BASE=`cd $(dirname "$0")/..; pwd`
46
+ DEPLOY="$BASE/deploy"
47
+
48
+ set +e
49
+ mkdir -p "$DEPLOY/data/local/tmp/v8"
50
+
51
+ cp "$BASE/out/android_arm.$MODE/d8" "$DEPLOY/data/local/tmp/v8/d8"
52
+
53
+ adb -p "$DEPLOY" sync data
54
+
55
+ adb shell "cd /data/local/tmp/v8;\
56
+ perf record -R -e cycles -c 10000 -f -i \
57
+ ./d8 --ll_prof --gc-fake-mmap=/data/local/tmp/__v8_gc__ $RUN_ARGS"
58
+
59
+ adb pull /data/local/tmp/v8/v8.log .
60
+ adb pull /data/local/tmp/v8/v8.log.ll .
61
+ adb pull /data/perf.data .
62
+
63
+ ARCH=arm-linux-androideabi-4.6
64
+ TOOLCHAIN="${ANDROID_NDK_ROOT}/toolchains/$ARCH/prebuilt/linux-x86/bin"
65
+
66
+ $BASE/tools/ll_prof.py --host-root="$BASE/deploy" \
67
+ --gc-fake-mmap=/data/local/tmp/__v8_gc__ \
68
+ --objdump="$TOOLCHAIN/arm-linux-androideabi-objdump" \
69
+ $LL_PROF_ARGS
@@ -0,0 +1,109 @@
1
+ #!/usr/bin/env python
2
+ #
3
+ # Copyright 2012 the V8 project authors. All rights reserved.
4
+ # Redistribution and use in source and binary forms, with or without
5
+ # modification, are permitted provided that the following conditions are
6
+ # met:
7
+ #
8
+ # * Redistributions of source code must retain the above copyright
9
+ # notice, this list of conditions and the following disclaimer.
10
+ # * Redistributions in binary form must reproduce the above
11
+ # copyright notice, this list of conditions and the following
12
+ # disclaimer in the documentation and/or other materials provided
13
+ # with the distribution.
14
+ # * Neither the name of Google Inc. nor the names of its
15
+ # contributors may be used to endorse or promote products derived
16
+ # from this software without specific prior written permission.
17
+ #
18
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20
+ # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21
+ # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22
+ # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
+ # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24
+ # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25
+ # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26
+ # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27
+ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
+
30
+ # This script executes the passed command line on Android device
31
+ # using 'adb shell' command. Unfortunately, 'adb shell' always
32
+ # returns exit code 0, ignoring the exit code of executed command.
33
+ # Since we need to return non-zero exit code if the command failed,
34
+ # we augment the passed command line with exit code checking statement
35
+ # and output special error string in case of non-zero exit code.
36
+ # Then we parse the output of 'adb shell' and look for that error string.
37
+
38
+ import os
39
+ from os.path import join, dirname, abspath
40
+ import subprocess
41
+ import sys
42
+ import tempfile
43
+
44
+ def Check(output, errors):
45
+ failed = any([s.startswith('/system/bin/sh:') or s.startswith('ANDROID')
46
+ for s in output.split('\n')])
47
+ return 1 if failed else 0
48
+
49
+ def Execute(cmdline):
50
+ (fd_out, outname) = tempfile.mkstemp()
51
+ (fd_err, errname) = tempfile.mkstemp()
52
+ process = subprocess.Popen(
53
+ args=cmdline,
54
+ shell=True,
55
+ stdout=fd_out,
56
+ stderr=fd_err,
57
+ )
58
+ exit_code = process.wait()
59
+ os.close(fd_out)
60
+ os.close(fd_err)
61
+ output = file(outname).read()
62
+ errors = file(errname).read()
63
+ os.unlink(outname)
64
+ os.unlink(errname)
65
+ sys.stdout.write(output)
66
+ sys.stderr.write(errors)
67
+ return exit_code or Check(output, errors)
68
+
69
+ def Escape(arg):
70
+ def ShouldEscape():
71
+ for x in arg:
72
+ if not x.isalnum() and x != '-' and x != '_':
73
+ return True
74
+ return False
75
+
76
+ return arg if not ShouldEscape() else '"%s"' % (arg.replace('"', '\\"'))
77
+
78
+ def WriteToTemporaryFile(data):
79
+ (fd, fname) = tempfile.mkstemp()
80
+ os.close(fd)
81
+ tmp_file = open(fname, "w")
82
+ tmp_file.write(data)
83
+ tmp_file.close()
84
+ return fname
85
+
86
+ def Main():
87
+ if (len(sys.argv) == 1):
88
+ print("Usage: %s <command-to-run-on-device>" % sys.argv[0])
89
+ return 1
90
+ workspace = abspath(join(dirname(sys.argv[0]), '..'))
91
+ android_workspace = os.getenv("ANDROID_V8", "/data/local/v8")
92
+ args = [Escape(arg) for arg in sys.argv[1:]]
93
+ script = (" ".join(args) + "\n"
94
+ "case $? in\n"
95
+ " 0) ;;\n"
96
+ " *) echo \"ANDROID: Error returned by test\";;\n"
97
+ "esac\n")
98
+ script = script.replace(workspace, android_workspace)
99
+ script_file = WriteToTemporaryFile(script)
100
+ android_script_file = android_workspace + "/" + script_file
101
+ command = ("adb push '%s' %s;" % (script_file, android_script_file) +
102
+ "adb shell 'sh %s';" % android_script_file +
103
+ "adb shell 'rm %s'" % android_script_file)
104
+ error_code = Execute(command)
105
+ os.unlink(script_file)
106
+ return error_code
107
+
108
+ if __name__ == '__main__':
109
+ sys.exit(Main())
@@ -0,0 +1,105 @@
1
+ #!/bin/bash
2
+ # Copyright 2012 the V8 project authors. All rights reserved.
3
+ # Redistribution and use in source and binary forms, with or without
4
+ # modification, are permitted provided that the following conditions are
5
+ # met:
6
+ #
7
+ # * Redistributions of source code must retain the above copyright
8
+ # notice, this list of conditions and the following disclaimer.
9
+ # * Redistributions in binary form must reproduce the above
10
+ # copyright notice, this list of conditions and the following
11
+ # disclaimer in the documentation and/or other materials provided
12
+ # with the distribution.
13
+ # * Neither the name of Google Inc. nor the names of its
14
+ # contributors may be used to endorse or promote products derived
15
+ # from this software without specific prior written permission.
16
+ #
17
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
+ # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19
+ # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20
+ # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21
+ # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22
+ # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23
+ # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24
+ # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25
+ # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
+
29
+ # This script pushes android binaries and test data to the device.
30
+ # The first argument can be either "android.release" or "android.debug".
31
+ # The second argument is a relative path to the output directory with binaries.
32
+ # The third argument is the absolute path to the V8 directory on the host.
33
+ # The fourth argument is the absolute path to the V8 directory on the device.
34
+
35
+ if [ ${#@} -lt 4 ] ; then
36
+ echo "$0: Error: need 4 arguments"
37
+ exit 1
38
+ fi
39
+
40
+ ARCH_MODE=$1
41
+ OUTDIR=$2
42
+ HOST_V8=$3
43
+ ANDROID_V8=$4
44
+
45
+ function LINUX_MD5 {
46
+ local HASH=$(md5sum $1)
47
+ echo ${HASH%% *}
48
+ }
49
+
50
+ function DARWIN_MD5 {
51
+ local HASH=$(md5 $1)
52
+ echo ${HASH} | cut -f2 -d "=" | cut -f2 -d " "
53
+ }
54
+
55
+ host_os=$(uname -s)
56
+ case "${host_os}" in
57
+ "Linux")
58
+ MD5=LINUX_MD5
59
+ ;;
60
+ "Darwin")
61
+ MD5=DARWIN_MD5
62
+ ;;
63
+ *)
64
+ echo "$0: Host platform ${host_os} is not supported" >& 2
65
+ exit 1
66
+ esac
67
+
68
+ function sync_file {
69
+ local FILE=$1
70
+ local ANDROID_HASH=$(adb shell "md5 \"$ANDROID_V8/$FILE\"")
71
+ local HOST_HASH=$($MD5 "$HOST_V8/$FILE")
72
+ if [ "${ANDROID_HASH%% *}" != "${HOST_HASH}" ]; then
73
+ adb push "$HOST_V8/$FILE" "$ANDROID_V8/$FILE" &> /dev/null
74
+ fi
75
+ echo -n "."
76
+ }
77
+
78
+ function sync_dir {
79
+ local DIR=$1
80
+ echo -n "sync to $ANDROID_V8/$DIR"
81
+ for FILE in $(find "$HOST_V8/$DIR" -not -path "*.svn*" -type f); do
82
+ local RELATIVE_FILE=${FILE:${#HOST_V8}}
83
+ sync_file "$RELATIVE_FILE"
84
+ done
85
+ echo ""
86
+ }
87
+
88
+ echo -n "sync to $ANDROID_V8/$OUTDIR/$ARCH_MODE"
89
+ sync_file "$OUTDIR/$ARCH_MODE/cctest"
90
+ sync_file "$OUTDIR/$ARCH_MODE/d8"
91
+ sync_file "$OUTDIR/$ARCH_MODE/preparser"
92
+ echo ""
93
+ echo -n "sync to $ANDROID_V8/tools"
94
+ sync_file tools/consarray.js
95
+ sync_file tools/codemap.js
96
+ sync_file tools/csvparser.js
97
+ sync_file tools/profile.js
98
+ sync_file tools/splaytree.js
99
+ sync_file tools/profile_view.js
100
+ sync_file tools/logreader.js
101
+ sync_file tools/tickprocessor.js
102
+ echo ""
103
+ sync_dir test/message
104
+ sync_dir test/mjsunit
105
+ sync_dir test/preparser
File without changes
File without changes
@@ -36,9 +36,7 @@ TEMP_BRANCH=$BRANCHNAME-temporary-branch-created-by-script
36
36
  VERSION_FILE="src/version.cc"
37
37
  CHANGELOG_ENTRY_FILE="$PERSISTFILE_BASENAME-changelog-entry"
38
38
  PATCH_FILE="$PERSISTFILE_BASENAME-patch"
39
- PATCH_OUTPUT_FILE="$PERSISTFILE_BASENAME-patch-output"
40
39
  COMMITMSG_FILE="$PERSISTFILE_BASENAME-commitmsg"
41
- TOUCHED_FILES_FILE="$PERSISTFILE_BASENAME-touched-files"
42
40
  TRUNK_REVISION_FILE="$PERSISTFILE_BASENAME-trunkrevision"
43
41
  START_STEP=0
44
42
  CURRENT_STEP=0
@@ -180,26 +178,21 @@ the uploaded CL."
180
178
  done
181
179
  }
182
180
 
183
- # Takes a file containing the patch to apply as first argument.
184
- apply_patch() {
185
- patch $REVERSE_PATCH -p1 < "$1" > "$PATCH_OUTPUT_FILE" || \
186
- { cat "$PATCH_OUTPUT_FILE" && die "Applying the patch failed."; }
187
- tee < "$PATCH_OUTPUT_FILE" >(grep "patching file" \
188
- | awk '{print $NF}' >> "$TOUCHED_FILES_FILE")
189
- rm "$PATCH_OUTPUT_FILE"
181
+ wait_for_resolving_conflicts() {
182
+ echo "Applying the patch \"$1\" failed. Either type \"ABORT<Return>\", or \
183
+ resolve the conflicts, stage *all* touched files with 'git add', and \
184
+ type \"RESOLVED<Return>\""
185
+ unset ANSWER
186
+ while [ "$ANSWER" != "RESOLVED" ] ; do
187
+ [[ "$ANSWER" == "ABORT" ]] && die "Applying the patch failed."
188
+ [[ -n "$ANSWER" ]] && echo "That was not 'RESOLVED' or 'ABORT'."
189
+ echo -n "> "
190
+ read ANSWER
191
+ done
190
192
  }
191
193
 
192
- stage_files() {
193
- # Stage added and modified files.
194
- TOUCHED_FILES=$(cat "$TOUCHED_FILES_FILE")
195
- for FILE in $TOUCHED_FILES ; do
196
- git add "$FILE"
197
- done
198
- # Stage deleted files.
199
- DELETED_FILES=$(git status -s -uno --porcelain | grep "^ D" \
200
- | awk '{print $NF}')
201
- for FILE in $DELETED_FILES ; do
202
- git rm "$FILE"
203
- done
204
- rm -f "$TOUCHED_FILES_FILE"
194
+ # Takes a file containing the patch to apply as first argument.
195
+ apply_patch() {
196
+ git apply --index --reject $REVERSE_PATCH "$1" || \
197
+ wait_for_resolving_conflicts "$1";
205
198
  }
@@ -53,12 +53,12 @@ _ARCH_MAP = {
53
53
  }
54
54
 
55
55
 
56
- def GetDisasmLines(filename, offset, size, arch, inplace):
56
+ def GetDisasmLines(filename, offset, size, arch, inplace, arch_flags=""):
57
57
  tmp_name = None
58
58
  if not inplace:
59
59
  # Create a temporary file containing a copy of the code.
60
60
  assert arch in _ARCH_MAP, "Unsupported architecture '%s'" % arch
61
- arch_flags = _ARCH_MAP[arch]
61
+ arch_flags = arch_flags + " " + _ARCH_MAP[arch]
62
62
  tmp_name = tempfile.mktemp(".v8code")
63
63
  command = "dd if=%s of=%s bs=1 count=%d skip=%d && " \
64
64
  "%s %s -D -b binary %s %s" % (
@@ -66,8 +66,8 @@ def GetDisasmLines(filename, offset, size, arch, inplace):
66
66
  OBJDUMP_BIN, ' '.join(_COMMON_DISASM_OPTIONS), arch_flags,
67
67
  tmp_name)
68
68
  else:
69
- command = "%s %s --start-address=%d --stop-address=%d -d %s " % (
70
- OBJDUMP_BIN, ' '.join(_COMMON_DISASM_OPTIONS),
69
+ command = "%s %s %s --start-address=%d --stop-address=%d -d %s " % (
70
+ OBJDUMP_BIN, ' '.join(_COMMON_DISASM_OPTIONS), arch_flags,
71
71
  offset,
72
72
  offset + size,
73
73
  filename)
File without changes
@@ -61,7 +61,7 @@ consts_misc = [
61
61
 
62
62
  { 'name': 'StringEncodingMask', 'value': 'kStringEncodingMask' },
63
63
  { 'name': 'TwoByteStringTag', 'value': 'kTwoByteStringTag' },
64
- { 'name': 'AsciiStringTag', 'value': 'kAsciiStringTag' },
64
+ { 'name': 'AsciiStringTag', 'value': 'kOneByteStringTag' },
65
65
 
66
66
  { 'name': 'StringRepresentationMask',
67
67
  'value': 'kStringRepresentationMask' },
@@ -76,16 +76,15 @@ consts_misc = [
76
76
  { 'name': 'SmiTag', 'value': 'kSmiTag' },
77
77
  { 'name': 'SmiTagMask', 'value': 'kSmiTagMask' },
78
78
  { 'name': 'SmiValueShift', 'value': 'kSmiTagSize' },
79
+ { 'name': 'SmiShiftSize', 'value': 'kSmiShiftSize' },
79
80
  { 'name': 'PointerSizeLog2', 'value': 'kPointerSizeLog2' },
80
81
 
81
- { 'name': 'prop_idx_content',
82
- 'value': 'DescriptorArray::kContentArrayIndex' },
83
82
  { 'name': 'prop_idx_first',
84
83
  'value': 'DescriptorArray::kFirstIndex' },
85
84
  { 'name': 'prop_type_field',
86
85
  'value': 'FIELD' },
87
86
  { 'name': 'prop_type_first_phantom',
88
- 'value': 'MAP_TRANSITION' },
87
+ 'value': 'TRANSITION' },
89
88
  { 'name': 'prop_type_mask',
90
89
  'value': 'PropertyDetails::TypeField::kMask' },
91
90
 
@@ -107,14 +106,13 @@ extras_accessors = [
107
106
  'JSObject, elements, Object, kElementsOffset',
108
107
  'FixedArray, data, uintptr_t, kHeaderSize',
109
108
  'Map, instance_attributes, int, kInstanceAttributesOffset',
110
- 'Map, instance_descriptors, int, kInstanceDescriptorsOrBitField3Offset',
111
109
  'Map, inobject_properties, int, kInObjectPropertiesOffset',
112
110
  'Map, instance_size, int, kInstanceSizeOffset',
113
111
  'HeapNumber, value, double, kValueOffset',
114
112
  'ConsString, first, String, kFirstOffset',
115
113
  'ConsString, second, String, kSecondOffset',
116
114
  'ExternalString, resource, Object, kResourceOffset',
117
- 'SeqAsciiString, chars, char, kHeaderSize',
115
+ 'SeqOneByteString, chars, char, kHeaderSize',
118
116
  'SharedFunctionInfo, code, Code, kCodeOffset',
119
117
  'Code, instruction_start, uintptr_t, kHeaderSize',
120
118
  'Code, instruction_size, int, kInstructionSizeOffset',
@@ -128,7 +126,7 @@ extras_accessors = [
128
126
  expected_classes = [
129
127
  'ConsString', 'FixedArray', 'HeapNumber', 'JSArray', 'JSFunction',
130
128
  'JSObject', 'JSRegExp', 'JSValue', 'Map', 'Oddball', 'Script',
131
- 'SeqAsciiString', 'SharedFunctionInfo'
129
+ 'SeqOneByteString', 'SharedFunctionInfo'
132
130
  ];
133
131
 
134
132
 
@@ -293,7 +291,7 @@ def load_objects():
293
291
  cctype.find('Sliced') == -1):
294
292
  if (cctype.find('Ascii') != -1):
295
293
  cctype = re.sub('AsciiString$',
296
- 'SeqAsciiString', cctype);
294
+ 'SeqOneByteString', cctype);
297
295
  else:
298
296
  cctype = re.sub('String$',
299
297
  'SeqString', cctype);
@@ -27,17 +27,18 @@
27
27
  # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
28
  # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
29
 
30
+ import bisect
30
31
  import cmd
32
+ import codecs
31
33
  import ctypes
34
+ import disasm
32
35
  import mmap
33
36
  import optparse
34
37
  import os
35
- import disasm
36
- import sys
37
- import types
38
- import codecs
39
38
  import re
40
39
  import struct
40
+ import sys
41
+ import types
41
42
 
42
43
 
43
44
  USAGE="""usage: %prog [OPTIONS] [DUMP-FILE]
@@ -180,6 +181,11 @@ MINIDUMP_LOCATION_DESCRIPTOR = Descriptor([
180
181
  ("rva", ctypes.c_uint32)
181
182
  ])
182
183
 
184
+ MINIDUMP_STRING = Descriptor([
185
+ ("length", ctypes.c_uint32),
186
+ ("buffer", lambda t: ctypes.c_uint8 * (t.length + 2))
187
+ ])
188
+
183
189
  MINIDUMP_DIRECTORY = Descriptor([
184
190
  ("stream_type", ctypes.c_uint32),
185
191
  ("location", MINIDUMP_LOCATION_DESCRIPTOR.ctype)
@@ -290,6 +296,42 @@ MINIDUMP_CONTEXT_X86 = Descriptor([
290
296
  MD_CONTEXT_X86_EXTENDED_REGISTERS))
291
297
  ])
292
298
 
299
+ MD_CONTEXT_ARM = 0x40000000
300
+ MD_CONTEXT_ARM_INTEGER = (MD_CONTEXT_ARM | 0x00000002)
301
+ MD_CONTEXT_ARM_FLOATING_POINT = (MD_CONTEXT_ARM | 0x00000004)
302
+ MD_FLOATINGSAVEAREA_ARM_FPR_COUNT = 32
303
+ MD_FLOATINGSAVEAREA_ARM_FPEXTRA_COUNT = 8
304
+
305
+ MINIDUMP_FLOATING_SAVE_AREA_ARM = Descriptor([
306
+ ("fpscr", ctypes.c_uint64),
307
+ ("regs", ctypes.c_uint64 * MD_FLOATINGSAVEAREA_ARM_FPR_COUNT),
308
+ ("extra", ctypes.c_uint64 * MD_FLOATINGSAVEAREA_ARM_FPEXTRA_COUNT)
309
+ ])
310
+
311
+ MINIDUMP_CONTEXT_ARM = Descriptor([
312
+ ("context_flags", ctypes.c_uint32),
313
+ # MD_CONTEXT_ARM_INTEGER.
314
+ ("r0", EnableOnFlag(ctypes.c_uint32, MD_CONTEXT_ARM_INTEGER)),
315
+ ("r1", EnableOnFlag(ctypes.c_uint32, MD_CONTEXT_ARM_INTEGER)),
316
+ ("r2", EnableOnFlag(ctypes.c_uint32, MD_CONTEXT_ARM_INTEGER)),
317
+ ("r3", EnableOnFlag(ctypes.c_uint32, MD_CONTEXT_ARM_INTEGER)),
318
+ ("r4", EnableOnFlag(ctypes.c_uint32, MD_CONTEXT_ARM_INTEGER)),
319
+ ("r5", EnableOnFlag(ctypes.c_uint32, MD_CONTEXT_ARM_INTEGER)),
320
+ ("r6", EnableOnFlag(ctypes.c_uint32, MD_CONTEXT_ARM_INTEGER)),
321
+ ("r7", EnableOnFlag(ctypes.c_uint32, MD_CONTEXT_ARM_INTEGER)),
322
+ ("r8", EnableOnFlag(ctypes.c_uint32, MD_CONTEXT_ARM_INTEGER)),
323
+ ("r9", EnableOnFlag(ctypes.c_uint32, MD_CONTEXT_ARM_INTEGER)),
324
+ ("r10", EnableOnFlag(ctypes.c_uint32, MD_CONTEXT_ARM_INTEGER)),
325
+ ("r11", EnableOnFlag(ctypes.c_uint32, MD_CONTEXT_ARM_INTEGER)),
326
+ ("r12", EnableOnFlag(ctypes.c_uint32, MD_CONTEXT_ARM_INTEGER)),
327
+ ("sp", EnableOnFlag(ctypes.c_uint32, MD_CONTEXT_ARM_INTEGER)),
328
+ ("lr", EnableOnFlag(ctypes.c_uint32, MD_CONTEXT_ARM_INTEGER)),
329
+ ("pc", EnableOnFlag(ctypes.c_uint32, MD_CONTEXT_ARM_INTEGER)),
330
+ ("cpsr", ctypes.c_uint32),
331
+ ("float_save", EnableOnFlag(MINIDUMP_FLOATING_SAVE_AREA_ARM.ctype,
332
+ MD_CONTEXT_ARM_FLOATING_POINT))
333
+ ])
334
+
293
335
  MD_CONTEXT_AMD64 = 0x00100000
294
336
  MD_CONTEXT_AMD64_CONTROL = (MD_CONTEXT_AMD64 | 0x00000001)
295
337
  MD_CONTEXT_AMD64_INTEGER = (MD_CONTEXT_AMD64 | 0x00000002)
@@ -400,13 +442,46 @@ MINIDUMP_THREAD_LIST = Descriptor([
400
442
  ("threads", lambda t: MINIDUMP_THREAD.ctype * t.thread_count)
401
443
  ])
402
444
 
445
+ MINIDUMP_RAW_MODULE = Descriptor([
446
+ ("base_of_image", ctypes.c_uint64),
447
+ ("size_of_image", ctypes.c_uint32),
448
+ ("checksum", ctypes.c_uint32),
449
+ ("time_date_stamp", ctypes.c_uint32),
450
+ ("module_name_rva", ctypes.c_uint32),
451
+ ("version_info", ctypes.c_uint32 * 13),
452
+ ("cv_record", MINIDUMP_LOCATION_DESCRIPTOR.ctype),
453
+ ("misc_record", MINIDUMP_LOCATION_DESCRIPTOR.ctype),
454
+ ("reserved0", ctypes.c_uint32 * 2),
455
+ ("reserved1", ctypes.c_uint32 * 2)
456
+ ])
457
+
458
+ MINIDUMP_MODULE_LIST = Descriptor([
459
+ ("number_of_modules", ctypes.c_uint32),
460
+ ("modules", lambda t: MINIDUMP_RAW_MODULE.ctype * t.number_of_modules)
461
+ ])
462
+
403
463
  MINIDUMP_RAW_SYSTEM_INFO = Descriptor([
404
464
  ("processor_architecture", ctypes.c_uint16)
405
465
  ])
406
466
 
407
467
  MD_CPU_ARCHITECTURE_X86 = 0
468
+ MD_CPU_ARCHITECTURE_ARM = 5
408
469
  MD_CPU_ARCHITECTURE_AMD64 = 9
409
470
 
471
+ class FuncSymbol:
472
+ def __init__(self, start, size, name):
473
+ self.start = start
474
+ self.end = self.start + size
475
+ self.name = name
476
+
477
+ def __cmp__(self, other):
478
+ if isinstance(other, FuncSymbol):
479
+ return self.start - other.start
480
+ return self.start - other
481
+
482
+ def Covers(self, addr):
483
+ return (self.start <= addr) and (addr < self.end)
484
+
410
485
  class MinidumpReader(object):
411
486
  """Minidump (.dmp) reader."""
412
487
 
@@ -430,15 +505,22 @@ class MinidumpReader(object):
430
505
  self.exception_context = None
431
506
  self.memory_list = None
432
507
  self.memory_list64 = None
508
+ self.module_list = None
433
509
  self.thread_map = {}
434
510
 
511
+ self.symdir = options.symdir
512
+ self.modules_with_symbols = []
513
+ self.symbols = []
514
+
435
515
  # Find MDRawSystemInfo stream and determine arch.
436
516
  for d in directories:
437
517
  if d.stream_type == MD_SYSTEM_INFO_STREAM:
438
518
  system_info = MINIDUMP_RAW_SYSTEM_INFO.Read(
439
519
  self.minidump, d.location.rva)
440
520
  self.arch = system_info.processor_architecture
441
- assert self.arch in [MD_CPU_ARCHITECTURE_AMD64, MD_CPU_ARCHITECTURE_X86]
521
+ assert self.arch in [MD_CPU_ARCHITECTURE_AMD64,
522
+ MD_CPU_ARCHITECTURE_ARM,
523
+ MD_CPU_ARCHITECTURE_X86]
442
524
  assert not self.arch is None
443
525
 
444
526
  for d in directories:
@@ -453,6 +535,9 @@ class MinidumpReader(object):
453
535
  elif self.arch == MD_CPU_ARCHITECTURE_AMD64:
454
536
  self.exception_context = MINIDUMP_CONTEXT_AMD64.Read(
455
537
  self.minidump, self.exception.thread_context.rva)
538
+ elif self.arch == MD_CPU_ARCHITECTURE_ARM:
539
+ self.exception_context = MINIDUMP_CONTEXT_ARM.Read(
540
+ self.minidump, self.exception.thread_context.rva)
456
541
  DebugPrint(self.exception_context)
457
542
  elif d.stream_type == MD_THREAD_LIST_STREAM:
458
543
  thread_list = MINIDUMP_THREAD_LIST.Read(self.minidump, d.location.rva)
@@ -461,6 +546,11 @@ class MinidumpReader(object):
461
546
  for thread in thread_list.threads:
462
547
  DebugPrint(thread)
463
548
  self.thread_map[thread.id] = thread
549
+ elif d.stream_type == MD_MODULE_LIST_STREAM:
550
+ assert self.module_list is None
551
+ self.module_list = MINIDUMP_MODULE_LIST.Read(
552
+ self.minidump, d.location.rva)
553
+ assert ctypes.sizeof(self.module_list) == d.location.data_size
464
554
  elif d.stream_type == MD_MEMORY_LIST_STREAM:
465
555
  print >>sys.stderr, "Warning: This is not a full minidump!"
466
556
  assert self.memory_list is None
@@ -493,6 +583,8 @@ class MinidumpReader(object):
493
583
  def ReadUIntPtr(self, address):
494
584
  if self.arch == MD_CPU_ARCHITECTURE_AMD64:
495
585
  return self.ReadU64(address)
586
+ elif self.arch == MD_CPU_ARCHITECTURE_ARM:
587
+ return self.ReadU32(address)
496
588
  elif self.arch == MD_CPU_ARCHITECTURE_X86:
497
589
  return self.ReadU32(address)
498
590
 
@@ -503,6 +595,8 @@ class MinidumpReader(object):
503
595
  def _ReadWord(self, location):
504
596
  if self.arch == MD_CPU_ARCHITECTURE_AMD64:
505
597
  return ctypes.c_uint64.from_buffer(self.minidump, location).value
598
+ elif self.arch == MD_CPU_ARCHITECTURE_ARM:
599
+ return ctypes.c_uint32.from_buffer(self.minidump, location).value
506
600
  elif self.arch == MD_CPU_ARCHITECTURE_X86:
507
601
  return ctypes.c_uint32.from_buffer(self.minidump, location).value
508
602
 
@@ -599,18 +693,29 @@ class MinidumpReader(object):
599
693
  return None
600
694
 
601
695
  def GetDisasmLines(self, address, size):
696
+ def CountUndefinedInstructions(lines):
697
+ pattern = "<UNDEFINED>"
698
+ return sum([line.count(pattern) for (ignore, line) in lines])
699
+
602
700
  location = self.FindLocation(address)
603
701
  if location is None: return []
604
702
  arch = None
703
+ possible_objdump_flags = [""]
605
704
  if self.arch == MD_CPU_ARCHITECTURE_X86:
606
705
  arch = "ia32"
706
+ elif self.arch == MD_CPU_ARCHITECTURE_ARM:
707
+ arch = "arm"
708
+ possible_objdump_flags = ["", "--disassembler-options=force-thumb"]
607
709
  elif self.arch == MD_CPU_ARCHITECTURE_AMD64:
608
710
  arch = "x64"
609
- return disasm.GetDisasmLines(self.minidump_name,
610
- location,
611
- size,
612
- arch,
613
- False)
711
+ results = [ disasm.GetDisasmLines(self.minidump_name,
712
+ location,
713
+ size,
714
+ arch,
715
+ False,
716
+ objdump_flags)
717
+ for objdump_flags in possible_objdump_flags ]
718
+ return min(results, key=CountUndefinedInstructions)
614
719
 
615
720
 
616
721
  def Dispose(self):
@@ -620,30 +725,98 @@ class MinidumpReader(object):
620
725
  def ExceptionIP(self):
621
726
  if self.arch == MD_CPU_ARCHITECTURE_AMD64:
622
727
  return self.exception_context.rip
728
+ elif self.arch == MD_CPU_ARCHITECTURE_ARM:
729
+ return self.exception_context.pc
623
730
  elif self.arch == MD_CPU_ARCHITECTURE_X86:
624
731
  return self.exception_context.eip
625
732
 
626
733
  def ExceptionSP(self):
627
734
  if self.arch == MD_CPU_ARCHITECTURE_AMD64:
628
735
  return self.exception_context.rsp
736
+ elif self.arch == MD_CPU_ARCHITECTURE_ARM:
737
+ return self.exception_context.sp
629
738
  elif self.arch == MD_CPU_ARCHITECTURE_X86:
630
739
  return self.exception_context.esp
631
740
 
632
741
  def FormatIntPtr(self, value):
633
742
  if self.arch == MD_CPU_ARCHITECTURE_AMD64:
634
743
  return "%016x" % value
744
+ elif self.arch == MD_CPU_ARCHITECTURE_ARM:
745
+ return "%08x" % value
635
746
  elif self.arch == MD_CPU_ARCHITECTURE_X86:
636
747
  return "%08x" % value
637
748
 
638
749
  def PointerSize(self):
639
750
  if self.arch == MD_CPU_ARCHITECTURE_AMD64:
640
751
  return 8
752
+ elif self.arch == MD_CPU_ARCHITECTURE_ARM:
753
+ return 4
641
754
  elif self.arch == MD_CPU_ARCHITECTURE_X86:
642
755
  return 4
643
756
 
644
757
  def Register(self, name):
645
758
  return self.exception_context.__getattribute__(name)
646
759
 
760
+ def ReadMinidumpString(self, rva):
761
+ string = bytearray(MINIDUMP_STRING.Read(self.minidump, rva).buffer)
762
+ string = string.decode("utf16")
763
+ return string[0:len(string) - 1]
764
+
765
+ # Load FUNC records from a BreakPad symbol file
766
+ #
767
+ # http://code.google.com/p/google-breakpad/wiki/SymbolFiles
768
+ #
769
+ def _LoadSymbolsFrom(self, symfile, baseaddr):
770
+ print "Loading symbols from %s" % (symfile)
771
+ funcs = []
772
+ with open(symfile) as f:
773
+ for line in f:
774
+ result = re.match(
775
+ r"^FUNC ([a-f0-9]+) ([a-f0-9]+) ([a-f0-9]+) (.*)$", line)
776
+ if result is not None:
777
+ start = int(result.group(1), 16)
778
+ size = int(result.group(2), 16)
779
+ name = result.group(4).rstrip()
780
+ bisect.insort_left(self.symbols,
781
+ FuncSymbol(baseaddr + start, size, name))
782
+ print " ... done"
783
+
784
+ def TryLoadSymbolsFor(self, modulename, module):
785
+ try:
786
+ symfile = os.path.join(self.symdir,
787
+ modulename.replace('.', '_') + ".pdb.sym")
788
+ self._LoadSymbolsFrom(symfile, module.base_of_image)
789
+ self.modules_with_symbols.append(module)
790
+ except Exception as e:
791
+ print " ... failure (%s)" % (e)
792
+
793
+ # Returns true if address is covered by some module that has loaded symbols.
794
+ def _IsInModuleWithSymbols(self, addr):
795
+ for module in self.modules_with_symbols:
796
+ start = module.base_of_image
797
+ end = start + module.size_of_image
798
+ if (start <= addr) and (addr < end):
799
+ return True
800
+ return False
801
+
802
+ # Find symbol covering the given address and return its name in format
803
+ # <symbol name>+<offset from the start>
804
+ def FindSymbol(self, addr):
805
+ if not self._IsInModuleWithSymbols(addr):
806
+ return None
807
+
808
+ i = bisect.bisect_left(self.symbols, addr)
809
+ symbol = None
810
+ if (0 < i) and self.symbols[i - 1].Covers(addr):
811
+ symbol = self.symbols[i - 1]
812
+ elif (i < len(self.symbols)) and self.symbols[i].Covers(addr):
813
+ symbol = self.symbols[i]
814
+ else:
815
+ return None
816
+ diff = addr - symbol.start
817
+ return "%s+0x%x" % (symbol.name, diff)
818
+
819
+
647
820
 
648
821
  # List of V8 instance types. Obtained by adding the code below to any .cc file.
649
822
  #
@@ -705,31 +878,32 @@ INSTANCE_TYPES = {
705
878
  153: "OBJECT_TEMPLATE_INFO_TYPE",
706
879
  154: "SIGNATURE_INFO_TYPE",
707
880
  155: "TYPE_SWITCH_INFO_TYPE",
708
- 156: "SCRIPT_TYPE",
709
- 157: "CODE_CACHE_TYPE",
710
- 158: "POLYMORPHIC_CODE_CACHE_TYPE",
711
- 159: "TYPE_FEEDBACK_INFO_TYPE",
712
- 160: "ALIASED_ARGUMENTS_ENTRY_TYPE",
713
- 163: "FIXED_ARRAY_TYPE",
881
+ 156: "ALLOCATION_SITE_INFO_TYPE",
882
+ 157: "SCRIPT_TYPE",
883
+ 158: "CODE_CACHE_TYPE",
884
+ 159: "POLYMORPHIC_CODE_CACHE_TYPE",
885
+ 160: "TYPE_FEEDBACK_INFO_TYPE",
886
+ 161: "ALIASED_ARGUMENTS_ENTRY_TYPE",
887
+ 164: "FIXED_ARRAY_TYPE",
714
888
  145: "FIXED_DOUBLE_ARRAY_TYPE",
715
- 164: "SHARED_FUNCTION_INFO_TYPE",
716
- 165: "JS_MESSAGE_OBJECT_TYPE",
717
- 168: "JS_VALUE_TYPE",
718
- 169: "JS_DATE_TYPE",
719
- 170: "JS_OBJECT_TYPE",
720
- 171: "JS_CONTEXT_EXTENSION_OBJECT_TYPE",
721
- 172: "JS_MODULE_TYPE",
722
- 173: "JS_GLOBAL_OBJECT_TYPE",
723
- 174: "JS_BUILTINS_OBJECT_TYPE",
724
- 175: "JS_GLOBAL_PROXY_TYPE",
725
- 176: "JS_ARRAY_TYPE",
726
- 167: "JS_PROXY_TYPE",
727
- 179: "JS_WEAK_MAP_TYPE",
728
- 180: "JS_REGEXP_TYPE",
729
- 181: "JS_FUNCTION_TYPE",
730
- 166: "JS_FUNCTION_PROXY_TYPE",
731
- 161: "DEBUG_INFO_TYPE",
732
- 162: "BREAK_POINT_INFO_TYPE",
889
+ 165: "SHARED_FUNCTION_INFO_TYPE",
890
+ 166: "JS_MESSAGE_OBJECT_TYPE",
891
+ 169: "JS_VALUE_TYPE",
892
+ 170: "JS_DATE_TYPE",
893
+ 171: "JS_OBJECT_TYPE",
894
+ 172: "JS_CONTEXT_EXTENSION_OBJECT_TYPE",
895
+ 173: "JS_MODULE_TYPE",
896
+ 174: "JS_GLOBAL_OBJECT_TYPE",
897
+ 175: "JS_BUILTINS_OBJECT_TYPE",
898
+ 176: "JS_GLOBAL_PROXY_TYPE",
899
+ 177: "JS_ARRAY_TYPE",
900
+ 168: "JS_PROXY_TYPE",
901
+ 180: "JS_WEAK_MAP_TYPE",
902
+ 181: "JS_REGEXP_TYPE",
903
+ 182: "JS_FUNCTION_TYPE",
904
+ 167: "JS_FUNCTION_PROXY_TYPE",
905
+ 162: "DEBUG_INFO_TYPE",
906
+ 163: "BREAK_POINT_INFO_TYPE",
733
907
  }
734
908
 
735
909
 
@@ -756,79 +930,83 @@ INSTANCE_TYPES = {
756
930
  # printf("}\n");
757
931
  KNOWN_MAPS = {
758
932
  0x08081: (134, "ByteArrayMap"),
759
- 0x080a1: (128, "MetaMap"),
760
- 0x080c1: (130, "OddballMap"),
761
- 0x080e1: (163, "FixedArrayMap"),
762
- 0x08101: (68, "AsciiSymbolMap"),
763
- 0x08121: (132, "HeapNumberMap"),
764
- 0x08141: (135, "FreeSpaceMap"),
765
- 0x08161: (146, "OnePointerFillerMap"),
766
- 0x08181: (146, "TwoPointerFillerMap"),
767
- 0x081a1: (131, "GlobalPropertyCellMap"),
768
- 0x081c1: (164, "SharedFunctionInfoMap"),
769
- 0x081e1: (4, "AsciiStringMap"),
770
- 0x08201: (163, "GlobalContextMap"),
771
- 0x08221: (129, "CodeMap"),
772
- 0x08241: (163, "ScopeInfoMap"),
773
- 0x08261: (163, "FixedCOWArrayMap"),
774
- 0x08281: (145, "FixedDoubleArrayMap"),
775
- 0x082a1: (163, "HashTableMap"),
776
- 0x082c1: (0, "StringMap"),
777
- 0x082e1: (64, "SymbolMap"),
778
- 0x08301: (1, "ConsStringMap"),
779
- 0x08321: (5, "ConsAsciiStringMap"),
780
- 0x08341: (3, "SlicedStringMap"),
781
- 0x08361: (7, "SlicedAsciiStringMap"),
782
- 0x08381: (65, "ConsSymbolMap"),
783
- 0x083a1: (69, "ConsAsciiSymbolMap"),
784
- 0x083c1: (66, "ExternalSymbolMap"),
785
- 0x083e1: (74, "ExternalSymbolWithAsciiDataMap"),
786
- 0x08401: (70, "ExternalAsciiSymbolMap"),
787
- 0x08421: (2, "ExternalStringMap"),
788
- 0x08441: (10, "ExternalStringWithAsciiDataMap"),
789
- 0x08461: (6, "ExternalAsciiStringMap"),
790
- 0x08481: (82, "ShortExternalSymbolMap"),
791
- 0x084a1: (90, "ShortExternalSymbolWithAsciiDataMap"),
792
- 0x084c1: (86, "ShortExternalAsciiSymbolMap"),
793
- 0x084e1: (18, "ShortExternalStringMap"),
794
- 0x08501: (26, "ShortExternalStringWithAsciiDataMap"),
795
- 0x08521: (22, "ShortExternalAsciiStringMap"),
796
- 0x08541: (0, "UndetectableStringMap"),
797
- 0x08561: (4, "UndetectableAsciiStringMap"),
798
- 0x08581: (144, "ExternalPixelArrayMap"),
799
- 0x085a1: (136, "ExternalByteArrayMap"),
800
- 0x085c1: (137, "ExternalUnsignedByteArrayMap"),
801
- 0x085e1: (138, "ExternalShortArrayMap"),
802
- 0x08601: (139, "ExternalUnsignedShortArrayMap"),
803
- 0x08621: (140, "ExternalIntArrayMap"),
804
- 0x08641: (141, "ExternalUnsignedIntArrayMap"),
805
- 0x08661: (142, "ExternalFloatArrayMap"),
806
- 0x08681: (143, "ExternalDoubleArrayMap"),
807
- 0x086a1: (163, "NonStrictArgumentsElementsMap"),
808
- 0x086c1: (163, "FunctionContextMap"),
809
- 0x086e1: (163, "CatchContextMap"),
810
- 0x08701: (163, "WithContextMap"),
811
- 0x08721: (163, "BlockContextMap"),
812
- 0x08741: (163, "ModuleContextMap"),
813
- 0x08761: (165, "JSMessageObjectMap"),
814
- 0x08781: (133, "ForeignMap"),
815
- 0x087a1: (170, "NeanderMap"),
816
- 0x087c1: (158, "PolymorphicCodeCacheMap"),
817
- 0x087e1: (156, "ScriptMap"),
818
- 0x08801: (147, "AccessorInfoMap"),
819
- 0x08821: (148, "AccessorPairMap"),
820
- 0x08841: (149, "AccessCheckInfoMap"),
821
- 0x08861: (150, "InterceptorInfoMap"),
822
- 0x08881: (151, "CallHandlerInfoMap"),
823
- 0x088a1: (152, "FunctionTemplateInfoMap"),
824
- 0x088c1: (153, "ObjectTemplateInfoMap"),
825
- 0x088e1: (154, "SignatureInfoMap"),
826
- 0x08901: (155, "TypeSwitchInfoMap"),
827
- 0x08921: (157, "CodeCacheMap"),
828
- 0x08941: (159, "TypeFeedbackInfoMap"),
829
- 0x08961: (160, "AliasedArgumentsEntryMap"),
830
- 0x08981: (161, "DebugInfoMap"),
831
- 0x089a1: (162, "BreakPointInfoMap"),
933
+ 0x080a9: (128, "MetaMap"),
934
+ 0x080d1: (130, "OddballMap"),
935
+ 0x080f9: (68, "AsciiSymbolMap"),
936
+ 0x08121: (164, "FixedArrayMap"),
937
+ 0x08149: (132, "HeapNumberMap"),
938
+ 0x08171: (135, "FreeSpaceMap"),
939
+ 0x08199: (146, "OnePointerFillerMap"),
940
+ 0x081c1: (146, "TwoPointerFillerMap"),
941
+ 0x081e9: (131, "GlobalPropertyCellMap"),
942
+ 0x08211: (165, "SharedFunctionInfoMap"),
943
+ 0x08239: (4, "AsciiStringMap"),
944
+ 0x08261: (164, "NativeContextMap"),
945
+ 0x08289: (129, "CodeMap"),
946
+ 0x082b1: (164, "ScopeInfoMap"),
947
+ 0x082d9: (164, "FixedCOWArrayMap"),
948
+ 0x08301: (145, "FixedDoubleArrayMap"),
949
+ 0x08329: (164, "HashTableMap"),
950
+ 0x08351: (0, "StringMap"),
951
+ 0x08379: (64, "SymbolMap"),
952
+ 0x083a1: (1, "ConsStringMap"),
953
+ 0x083c9: (5, "ConsAsciiStringMap"),
954
+ 0x083f1: (3, "SlicedStringMap"),
955
+ 0x08419: (7, "SlicedAsciiStringMap"),
956
+ 0x08441: (65, "ConsSymbolMap"),
957
+ 0x08469: (69, "ConsAsciiSymbolMap"),
958
+ 0x08491: (66, "ExternalSymbolMap"),
959
+ 0x084b9: (74, "ExternalSymbolWithAsciiDataMap"),
960
+ 0x084e1: (70, "ExternalAsciiSymbolMap"),
961
+ 0x08509: (2, "ExternalStringMap"),
962
+ 0x08531: (10, "ExternalStringWithAsciiDataMap"),
963
+ 0x08559: (6, "ExternalAsciiStringMap"),
964
+ 0x08581: (82, "ShortExternalSymbolMap"),
965
+ 0x085a9: (90, "ShortExternalSymbolWithAsciiDataMap"),
966
+ 0x085d1: (86, "ShortExternalAsciiSymbolMap"),
967
+ 0x085f9: (18, "ShortExternalStringMap"),
968
+ 0x08621: (26, "ShortExternalStringWithAsciiDataMap"),
969
+ 0x08649: (22, "ShortExternalAsciiStringMap"),
970
+ 0x08671: (0, "UndetectableStringMap"),
971
+ 0x08699: (4, "UndetectableAsciiStringMap"),
972
+ 0x086c1: (144, "ExternalPixelArrayMap"),
973
+ 0x086e9: (136, "ExternalByteArrayMap"),
974
+ 0x08711: (137, "ExternalUnsignedByteArrayMap"),
975
+ 0x08739: (138, "ExternalShortArrayMap"),
976
+ 0x08761: (139, "ExternalUnsignedShortArrayMap"),
977
+ 0x08789: (140, "ExternalIntArrayMap"),
978
+ 0x087b1: (141, "ExternalUnsignedIntArrayMap"),
979
+ 0x087d9: (142, "ExternalFloatArrayMap"),
980
+ 0x08801: (143, "ExternalDoubleArrayMap"),
981
+ 0x08829: (164, "NonStrictArgumentsElementsMap"),
982
+ 0x08851: (164, "FunctionContextMap"),
983
+ 0x08879: (164, "CatchContextMap"),
984
+ 0x088a1: (164, "WithContextMap"),
985
+ 0x088c9: (164, "BlockContextMap"),
986
+ 0x088f1: (164, "ModuleContextMap"),
987
+ 0x08919: (164, "GlobalContextMap"),
988
+ 0x08941: (166, "JSMessageObjectMap"),
989
+ 0x08969: (133, "ForeignMap"),
990
+ 0x08991: (171, "NeanderMap"),
991
+ 0x089b9: (156, "AllocationSiteInfoMap"),
992
+ 0x089e1: (159, "PolymorphicCodeCacheMap"),
993
+ 0x08a09: (157, "ScriptMap"),
994
+ 0x08a31: (171, ""),
995
+ 0x08a59: (171, "ExternalMap"),
996
+ 0x08a81: (147, "AccessorInfoMap"),
997
+ 0x08aa9: (148, "AccessorPairMap"),
998
+ 0x08ad1: (149, "AccessCheckInfoMap"),
999
+ 0x08af9: (150, "InterceptorInfoMap"),
1000
+ 0x08b21: (151, "CallHandlerInfoMap"),
1001
+ 0x08b49: (152, "FunctionTemplateInfoMap"),
1002
+ 0x08b71: (153, "ObjectTemplateInfoMap"),
1003
+ 0x08b99: (154, "SignatureInfoMap"),
1004
+ 0x08bc1: (155, "TypeSwitchInfoMap"),
1005
+ 0x08be9: (158, "CodeCacheMap"),
1006
+ 0x08c11: (160, "TypeFeedbackInfoMap"),
1007
+ 0x08c39: (161, "AliasedArgumentsEntryMap"),
1008
+ 0x08c61: (162, "DebugInfoMap"),
1009
+ 0x08c89: (163, "BreakPointInfoMap"),
832
1010
  }
833
1011
 
834
1012
 
@@ -1051,12 +1229,30 @@ class ConsString(String):
1051
1229
 
1052
1230
 
1053
1231
  class Oddball(HeapObject):
1232
+ # Should match declarations in objects.h
1233
+ KINDS = [
1234
+ "False",
1235
+ "True",
1236
+ "TheHole",
1237
+ "Null",
1238
+ "ArgumentMarker",
1239
+ "Undefined",
1240
+ "Other"
1241
+ ]
1242
+
1054
1243
  def ToStringOffset(self):
1055
1244
  return self.heap.PointerSize()
1056
1245
 
1246
+ def ToNumberOffset(self):
1247
+ return self.ToStringOffset() + self.heap.PointerSize()
1248
+
1249
+ def KindOffset(self):
1250
+ return self.ToNumberOffset() + self.heap.PointerSize()
1251
+
1057
1252
  def __init__(self, heap, map, address):
1058
1253
  HeapObject.__init__(self, heap, map, address)
1059
1254
  self.to_string = self.ObjectField(self.ToStringOffset())
1255
+ self.kind = self.SmiField(self.KindOffset())
1060
1256
 
1061
1257
  def Print(self, p):
1062
1258
  p.Print(str(self))
@@ -1065,7 +1261,10 @@ class Oddball(HeapObject):
1065
1261
  if self.to_string:
1066
1262
  return "Oddball(%08x, <%s>)" % (self.address, self.to_string.GetChars())
1067
1263
  else:
1068
- return "Oddball(%08x, kind=%s)" % (self.address, "???")
1264
+ kind = "???"
1265
+ if 0 <= self.kind < len(Oddball.KINDS):
1266
+ kind = Oddball.KINDS[self.kind]
1267
+ return "Oddball(%08x, kind=%s)" % (self.address, kind)
1069
1268
 
1070
1269
 
1071
1270
  class FixedArray(HeapObject):
@@ -1086,7 +1285,13 @@ class FixedArray(HeapObject):
1086
1285
  base_offset = self.ElementsOffset()
1087
1286
  for i in xrange(self.length):
1088
1287
  offset = base_offset + 4 * i
1089
- p.Print("[%08d] = %s" % (i, self.ObjectField(offset)))
1288
+ try:
1289
+ p.Print("[%08d] = %s" % (i, self.ObjectField(offset)))
1290
+ except TypeError:
1291
+ p.Dedent()
1292
+ p.Print("...")
1293
+ p.Print("}")
1294
+ return
1090
1295
  p.Dedent()
1091
1296
  p.Print("}")
1092
1297
 
@@ -1324,6 +1529,8 @@ class V8Heap(object):
1324
1529
  def MapAlignmentMask(self):
1325
1530
  if self.reader.arch == MD_CPU_ARCHITECTURE_AMD64:
1326
1531
  return (1 << 4) - 1
1532
+ elif self.reader.arch == MD_CPU_ARCHITECTURE_ARM:
1533
+ return (1 << 4) - 1
1327
1534
  elif self.reader.arch == MD_CPU_ARCHITECTURE_X86:
1328
1535
  return (1 << 5) - 1
1329
1536
 
@@ -1394,7 +1601,7 @@ class InspectionPadawan(object):
1394
1601
  if known_map:
1395
1602
  return known_map
1396
1603
  found_obj = self.heap.FindObject(tagged_address)
1397
- if found_obj: return found_ob
1604
+ if found_obj: return found_obj
1398
1605
  address = tagged_address - 1
1399
1606
  if self.reader.IsValidAddress(address):
1400
1607
  map_tagged_address = self.reader.ReadUIntPtr(address)
@@ -1451,6 +1658,24 @@ class InspectionShell(cmd.Cmd):
1451
1658
  self.padawan = InspectionPadawan(reader, heap)
1452
1659
  self.prompt = "(grok) "
1453
1660
 
1661
+ def do_da(self, address):
1662
+ """
1663
+ Print ASCII string starting at specified address.
1664
+ """
1665
+ address = int(address, 16)
1666
+ string = ""
1667
+ while self.reader.IsValidAddress(address):
1668
+ code = self.reader.ReadU8(address)
1669
+ if code < 128:
1670
+ string += chr(code)
1671
+ else:
1672
+ break
1673
+ address += 1
1674
+ if string == "":
1675
+ print "Not an ASCII string at %s" % self.reader.FormatIntPtr(address)
1676
+ else:
1677
+ print "%s\n" % string
1678
+
1454
1679
  def do_dd(self, address):
1455
1680
  """
1456
1681
  Interpret memory at the given address (if available) as a sequence
@@ -1462,6 +1687,9 @@ class InspectionShell(cmd.Cmd):
1462
1687
  for slot in xrange(start,
1463
1688
  start + self.reader.PointerSize() * 10,
1464
1689
  self.reader.PointerSize()):
1690
+ if not self.reader.IsValidAddress(slot):
1691
+ print "Address is not contained within the minidump!"
1692
+ return
1465
1693
  maybe_address = self.reader.ReadUIntPtr(slot)
1466
1694
  heap_object = self.padawan.SenseObject(maybe_address)
1467
1695
  print "%s: %s %s" % (self.reader.FormatIntPtr(slot),
@@ -1507,23 +1735,23 @@ class InspectionShell(cmd.Cmd):
1507
1735
  """
1508
1736
  self.padawan.PrintKnowledge()
1509
1737
 
1510
- def do_km(self, address):
1738
+ def do_kd(self, address):
1511
1739
  """
1512
1740
  Teach V8 heap layout information to the inspector. Set the first
1513
- map-space page by passing any pointer into that page.
1741
+ data-space page by passing any pointer into that page.
1514
1742
  """
1515
1743
  address = int(address, 16)
1516
1744
  page_address = address & ~self.heap.PageAlignmentMask()
1517
- self.padawan.known_first_map_page = page_address
1745
+ self.padawan.known_first_data_page = page_address
1518
1746
 
1519
- def do_kd(self, address):
1747
+ def do_km(self, address):
1520
1748
  """
1521
1749
  Teach V8 heap layout information to the inspector. Set the first
1522
- data-space page by passing any pointer into that page.
1750
+ map-space page by passing any pointer into that page.
1523
1751
  """
1524
1752
  address = int(address, 16)
1525
1753
  page_address = address & ~self.heap.PageAlignmentMask()
1526
- self.padawan.known_first_data_page = page_address
1754
+ self.padawan.known_first_map_page = page_address
1527
1755
 
1528
1756
  def do_kp(self, address):
1529
1757
  """
@@ -1534,6 +1762,17 @@ class InspectionShell(cmd.Cmd):
1534
1762
  page_address = address & ~self.heap.PageAlignmentMask()
1535
1763
  self.padawan.known_first_pointer_page = page_address
1536
1764
 
1765
+ def do_list(self, smth):
1766
+ """
1767
+ List all available memory regions.
1768
+ """
1769
+ def print_region(reader, start, size, location):
1770
+ print " %s - %s (%d bytes)" % (reader.FormatIntPtr(start),
1771
+ reader.FormatIntPtr(start + size),
1772
+ size)
1773
+ print "Available memory regions:"
1774
+ self.reader.ForEachMemoryRegion(print_region)
1775
+
1537
1776
  def do_s(self, word):
1538
1777
  """
1539
1778
  Search for a given word in available memory regions. The given word
@@ -1557,27 +1796,37 @@ class InspectionShell(cmd.Cmd):
1557
1796
  """
1558
1797
  raise NotImplementedError
1559
1798
 
1560
- def do_list(self, smth):
1799
+ def do_u(self, args):
1561
1800
  """
1562
- List all available memory regions.
1801
+ u 0x<address> 0x<size>
1802
+ Unassemble memory in the region [address, address + size)
1563
1803
  """
1564
- def print_region(reader, start, size, location):
1565
- print " %s - %s (%d bytes)" % (reader.FormatIntPtr(start),
1566
- reader.FormatIntPtr(start + size),
1567
- size)
1568
- print "Available memory regions:"
1569
- self.reader.ForEachMemoryRegion(print_region)
1570
-
1804
+ args = args.split(' ')
1805
+ start = int(args[0], 16)
1806
+ size = int(args[1], 16)
1807
+ lines = self.reader.GetDisasmLines(start, size)
1808
+ for line in lines:
1809
+ print FormatDisasmLine(start, self.heap, line)
1810
+ print
1571
1811
 
1572
1812
  EIP_PROXIMITY = 64
1573
1813
 
1574
1814
  CONTEXT_FOR_ARCH = {
1575
1815
  MD_CPU_ARCHITECTURE_AMD64:
1576
- ['rax', 'rbx', 'rcx', 'rdx', 'rdi', 'rsi', 'rbp', 'rsp', 'rip'],
1816
+ ['rax', 'rbx', 'rcx', 'rdx', 'rdi', 'rsi', 'rbp', 'rsp', 'rip',
1817
+ 'r8', 'r9', 'r10', 'r11', 'r12', 'r13', 'r14', 'r15'],
1818
+ MD_CPU_ARCHITECTURE_ARM:
1819
+ ['r0', 'r1', 'r2', 'r3', 'r4', 'r5', 'r6', 'r7', 'r8', 'r9',
1820
+ 'r10', 'r11', 'r12', 'sp', 'lr', 'pc'],
1577
1821
  MD_CPU_ARCHITECTURE_X86:
1578
1822
  ['eax', 'ebx', 'ecx', 'edx', 'edi', 'esi', 'ebp', 'esp', 'eip']
1579
1823
  }
1580
1824
 
1825
+ KNOWN_MODULES = {'chrome.exe', 'chrome.dll'}
1826
+
1827
+ def GetModuleName(reader, module):
1828
+ name = reader.ReadMinidumpString(module.module_name_rva)
1829
+ return str(os.path.basename(str(name).replace("\\", "/")))
1581
1830
 
1582
1831
  def AnalyzeMinidump(options, minidump_name):
1583
1832
  reader = MinidumpReader(options, minidump_name)
@@ -1594,7 +1843,18 @@ def AnalyzeMinidump(options, minidump_name):
1594
1843
  for r in CONTEXT_FOR_ARCH[reader.arch]:
1595
1844
  print " %s: %s" % (r, reader.FormatIntPtr(reader.Register(r)))
1596
1845
  # TODO(vitalyr): decode eflags.
1597
- print " eflags: %s" % bin(reader.exception_context.eflags)[2:]
1846
+ if reader.arch == MD_CPU_ARCHITECTURE_ARM:
1847
+ print " cpsr: %s" % bin(reader.exception_context.cpsr)[2:]
1848
+ else:
1849
+ print " eflags: %s" % bin(reader.exception_context.eflags)[2:]
1850
+
1851
+ print
1852
+ print " modules:"
1853
+ for module in reader.module_list.modules:
1854
+ name = GetModuleName(reader, module)
1855
+ if name in KNOWN_MODULES:
1856
+ print " %s at %08X" % (name, module.base_of_image)
1857
+ reader.TryLoadSymbolsFor(name, module)
1598
1858
  print
1599
1859
 
1600
1860
  stack_top = reader.ExceptionSP()
@@ -1608,6 +1868,9 @@ def AnalyzeMinidump(options, minidump_name):
1608
1868
  heap = V8Heap(reader, stack_map)
1609
1869
 
1610
1870
  print "Disassembly around exception.eip:"
1871
+ eip_symbol = reader.FindSymbol(reader.ExceptionIP())
1872
+ if eip_symbol is not None:
1873
+ print eip_symbol
1611
1874
  disasm_start = reader.ExceptionIP() - EIP_PROXIMITY
1612
1875
  disasm_bytes = 2 * EIP_PROXIMITY
1613
1876
  if (options.full):
@@ -1636,8 +1899,10 @@ def AnalyzeMinidump(options, minidump_name):
1636
1899
  for slot in xrange(stack_top, stack_bottom, reader.PointerSize()):
1637
1900
  maybe_address = reader.ReadUIntPtr(slot)
1638
1901
  heap_object = heap.FindObject(maybe_address)
1639
- print "%s: %s" % (reader.FormatIntPtr(slot),
1640
- reader.FormatIntPtr(maybe_address))
1902
+ maybe_symbol = reader.FindSymbol(maybe_address)
1903
+ print "%s: %s %s" % (reader.FormatIntPtr(slot),
1904
+ reader.FormatIntPtr(maybe_address),
1905
+ maybe_symbol or "")
1641
1906
  if heap_object:
1642
1907
  heap_object.Print(Printer())
1643
1908
  print
@@ -1651,7 +1916,17 @@ if __name__ == "__main__":
1651
1916
  help="start an interactive inspector shell")
1652
1917
  parser.add_option("-f", "--full", dest="full", action="store_true",
1653
1918
  help="dump all information contained in the minidump")
1919
+ parser.add_option("--symdir", dest="symdir", default=".",
1920
+ help="directory containing *.pdb.sym file with symbols")
1921
+ parser.add_option("--objdump",
1922
+ default="/usr/bin/objdump",
1923
+ help="objdump tool to use [default: %default]")
1654
1924
  options, args = parser.parse_args()
1925
+ if os.path.exists(options.objdump):
1926
+ disasm.OBJDUMP_BIN = options.objdump
1927
+ OBJDUMP_BIN = options.objdump
1928
+ else:
1929
+ print "Cannot find %s, falling back to default objdump" % options.objdump
1655
1930
  if len(args) != 1:
1656
1931
  parser.print_help()
1657
1932
  sys.exit(1)