OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/runtime/runtime-utils.h" | 5 #include "src/runtime/runtime-utils.h" |
6 | 6 |
7 #include "src/arguments.h" | 7 #include "src/arguments.h" |
8 #include "src/debug/debug-evaluate.h" | 8 #include "src/debug/debug-evaluate.h" |
9 #include "src/debug/debug-frames.h" | 9 #include "src/debug/debug-frames.h" |
10 #include "src/debug/debug-scopes.h" | 10 #include "src/debug/debug-scopes.h" |
(...skipping 534 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
545 if (it.is_wasm()) { | 545 if (it.is_wasm()) { |
546 // Create the details array (no dynamic information for wasm). | 546 // Create the details array (no dynamic information for wasm). |
547 Handle<FixedArray> details = | 547 Handle<FixedArray> details = |
548 isolate->factory()->NewFixedArray(kFrameDetailsFirstDynamicIndex); | 548 isolate->factory()->NewFixedArray(kFrameDetailsFirstDynamicIndex); |
549 | 549 |
550 // Add the frame id. | 550 // Add the frame id. |
551 details->set(kFrameDetailsFrameIdIndex, *frame_id); | 551 details->set(kFrameDetailsFrameIdIndex, *frame_id); |
552 | 552 |
553 // Add the function name. | 553 // Add the function name. |
554 Handle<Object> wasm_instance(it.wasm_frame()->wasm_instance(), isolate); | 554 Handle<Object> wasm_instance(it.wasm_frame()->wasm_instance(), isolate); |
| 555 Handle<wasm::WasmCompiledModule> compiled_module( |
| 556 wasm::GetCompiledModule(*wasm_instance), isolate); |
555 int func_index = it.wasm_frame()->function_index(); | 557 int func_index = it.wasm_frame()->function_index(); |
556 Handle<String> func_name = | 558 Handle<String> func_name = |
557 wasm::GetWasmFunctionName(isolate, wasm_instance, func_index); | 559 wasm::GetWasmFunctionName(isolate, compiled_module, func_index); |
558 details->set(kFrameDetailsFunctionIndex, *func_name); | 560 details->set(kFrameDetailsFunctionIndex, *func_name); |
559 | 561 |
560 // Add the script wrapper | 562 // Add the script wrapper |
561 Handle<Object> script_wrapper = | 563 Handle<Object> script_wrapper = |
562 Script::GetWrapper(frame_inspector.GetScript()); | 564 Script::GetWrapper(frame_inspector.GetScript()); |
563 details->set(kFrameDetailsScriptIndex, *script_wrapper); | 565 details->set(kFrameDetailsScriptIndex, *script_wrapper); |
564 | 566 |
565 // Add the arguments count. | 567 // Add the arguments count. |
566 details->set(kFrameDetailsArgumentCountIndex, Smi::kZero); | 568 details->set(kFrameDetailsArgumentCountIndex, Smi::kZero); |
567 | 569 |
568 // Add the locals count | 570 // Add the locals count |
569 details->set(kFrameDetailsLocalCountIndex, Smi::kZero); | 571 details->set(kFrameDetailsLocalCountIndex, Smi::kZero); |
570 | 572 |
571 // Add the source position. | 573 // Add the source position. |
| 574 // For wasm, it is function-local, so translate it to a module-relative |
| 575 // position, such that together with the script it uniquely identifies the |
| 576 // position. |
| 577 Handle<Object> positionValue; |
572 if (position != kNoSourcePosition) { | 578 if (position != kNoSourcePosition) { |
573 details->set(kFrameDetailsSourcePositionIndex, Smi::FromInt(position)); | 579 int translated_position = position; |
| 580 if (!wasm::WasmIsAsmJs(*wasm_instance, isolate)) { |
| 581 Handle<wasm::WasmCompiledModule> compiled_module( |
| 582 wasm::GetCompiledModule(JSObject::cast(*wasm_instance)), isolate); |
| 583 translated_position += |
| 584 wasm::GetFunctionCodeOffset(compiled_module, func_index); |
| 585 } |
| 586 details->set(kFrameDetailsSourcePositionIndex, |
| 587 Smi::FromInt(translated_position)); |
574 } | 588 } |
575 | 589 |
576 // Add the constructor information. | 590 // Add the constructor information. |
577 details->set(kFrameDetailsConstructCallIndex, heap->ToBoolean(false)); | 591 details->set(kFrameDetailsConstructCallIndex, heap->ToBoolean(false)); |
578 | 592 |
579 // Add the at return information. | 593 // Add the at return information. |
580 details->set(kFrameDetailsAtReturnIndex, heap->ToBoolean(false)); | 594 details->set(kFrameDetailsAtReturnIndex, heap->ToBoolean(false)); |
581 | 595 |
582 // Add flags to indicate information on whether this frame is | 596 // Add flags to indicate information on whether this frame is |
583 // bit 0: invoked in the debugger context. | 597 // bit 0: invoked in the debugger context. |
(...skipping 1306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1890 SealHandleScope shs(isolate); | 1904 SealHandleScope shs(isolate); |
1891 return Smi::FromInt(isolate->debug()->is_active()); | 1905 return Smi::FromInt(isolate->debug()->is_active()); |
1892 } | 1906 } |
1893 | 1907 |
1894 | 1908 |
1895 RUNTIME_FUNCTION(Runtime_DebugBreakInOptimizedCode) { | 1909 RUNTIME_FUNCTION(Runtime_DebugBreakInOptimizedCode) { |
1896 UNIMPLEMENTED(); | 1910 UNIMPLEMENTED(); |
1897 return NULL; | 1911 return NULL; |
1898 } | 1912 } |
1899 | 1913 |
1900 // TODO(5530): Remove once uses in debug.js are gone. | |
1901 RUNTIME_FUNCTION(Runtime_GetWasmFunctionOffsetTable) { | |
1902 DCHECK(args.length() == 1); | |
1903 HandleScope scope(isolate); | |
1904 CONVERT_ARG_CHECKED(JSValue, script_val, 0); | |
1905 | |
1906 CHECK(script_val->value()->IsScript()); | |
1907 Handle<Script> script = Handle<Script>(Script::cast(script_val->value())); | |
1908 | |
1909 Handle<wasm::WasmDebugInfo> debug_info = | |
1910 wasm::GetDebugInfo(handle(script->wasm_instance(), isolate)); | |
1911 Handle<FixedArray> elements = wasm::WasmDebugInfo::GetFunctionOffsetTable( | |
1912 debug_info, script->wasm_function_index()); | |
1913 return *isolate->factory()->NewJSArrayWithElements(elements); | |
1914 } | |
1915 | |
1916 // TODO(5530): Remove once uses in debug.js are gone. | |
1917 RUNTIME_FUNCTION(Runtime_DisassembleWasmFunction) { | |
1918 DCHECK(args.length() == 1); | |
1919 HandleScope scope(isolate); | |
1920 CONVERT_ARG_CHECKED(JSValue, script_val, 0); | |
1921 | |
1922 CHECK(script_val->value()->IsScript()); | |
1923 Handle<Script> script = Handle<Script>(Script::cast(script_val->value())); | |
1924 | |
1925 Handle<wasm::WasmDebugInfo> debug_info = | |
1926 wasm::GetDebugInfo(handle(script->wasm_instance(), isolate)); | |
1927 return *wasm::WasmDebugInfo::DisassembleFunction( | |
1928 debug_info, script->wasm_function_index()); | |
1929 } | |
1930 | |
1931 } // namespace internal | 1914 } // namespace internal |
1932 } // namespace v8 | 1915 } // namespace v8 |
OLD | NEW |