OLD | NEW |
1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 941 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
952 if (is_topmost) output_frame->SetRegister(fp_reg.code(), fp_value); | 952 if (is_topmost) output_frame->SetRegister(fp_reg.code(), fp_value); |
953 if (trace_scope_ != NULL) { | 953 if (trace_scope_ != NULL) { |
954 PrintF(trace_scope_->file(), | 954 PrintF(trace_scope_->file(), |
955 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" | 955 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" |
956 V8PRIxPTR " ; caller's fp\n", | 956 V8PRIxPTR " ; caller's fp\n", |
957 fp_value, output_offset, value); | 957 fp_value, output_offset, value); |
958 } | 958 } |
959 ASSERT(!is_bottommost || !has_alignment_padding_ || | 959 ASSERT(!is_bottommost || !has_alignment_padding_ || |
960 (fp_value & kPointerSize) != 0); | 960 (fp_value & kPointerSize) != 0); |
961 | 961 |
| 962 if (FLAG_enable_ool_constant_pool) { |
| 963 // For the bottommost output frame the constant pool pointer can be gotten |
| 964 // from the input frame. For subsequent output frames, it can be gotten from |
| 965 // the function's code. |
| 966 Register constant_pool_reg = |
| 967 JavaScriptFrame::constant_pool_pointer_register(); |
| 968 output_offset -= kPointerSize; |
| 969 input_offset -= kPointerSize; |
| 970 if (is_bottommost) { |
| 971 value = input_->GetFrameSlot(input_offset); |
| 972 } else { |
| 973 value = reinterpret_cast<intptr_t>( |
| 974 function->shared()->code()->constant_pool()); |
| 975 } |
| 976 output_frame->SetFrameSlot(output_offset, value); |
| 977 output_frame->SetConstantPool(value); |
| 978 if (is_topmost) output_frame->SetRegister(constant_pool_reg.code(), value); |
| 979 if (trace_scope_) { |
| 980 PrintF(" 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" |
| 981 V8PRIxPTR "; constant_pool\n", |
| 982 top_address + output_offset, output_offset, value); |
| 983 } |
| 984 } |
| 985 |
962 // For the bottommost output frame the context can be gotten from the input | 986 // For the bottommost output frame the context can be gotten from the input |
963 // frame. For all subsequent output frames it can be gotten from the function | 987 // frame. For all subsequent output frames it can be gotten from the function |
964 // so long as we don't inline functions that need local contexts. | 988 // so long as we don't inline functions that need local contexts. |
965 Register context_reg = JavaScriptFrame::context_register(); | 989 Register context_reg = JavaScriptFrame::context_register(); |
966 output_offset -= kPointerSize; | 990 output_offset -= kPointerSize; |
967 input_offset -= kPointerSize; | 991 input_offset -= kPointerSize; |
968 if (is_bottommost) { | 992 if (is_bottommost) { |
969 value = input_->GetFrameSlot(input_offset); | 993 value = input_->GetFrameSlot(input_offset); |
970 } else { | 994 } else { |
971 value = reinterpret_cast<intptr_t>(function->context()); | 995 value = reinterpret_cast<intptr_t>(function->context()); |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1087 output_frame->SetCallerFp(output_offset, value); | 1111 output_frame->SetCallerFp(output_offset, value); |
1088 intptr_t fp_value = top_address + output_offset; | 1112 intptr_t fp_value = top_address + output_offset; |
1089 output_frame->SetFp(fp_value); | 1113 output_frame->SetFp(fp_value); |
1090 if (trace_scope_ != NULL) { | 1114 if (trace_scope_ != NULL) { |
1091 PrintF(trace_scope_->file(), | 1115 PrintF(trace_scope_->file(), |
1092 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" | 1116 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" |
1093 V8PRIxPTR " ; caller's fp\n", | 1117 V8PRIxPTR " ; caller's fp\n", |
1094 fp_value, output_offset, value); | 1118 fp_value, output_offset, value); |
1095 } | 1119 } |
1096 | 1120 |
| 1121 if (FLAG_enable_ool_constant_pool) { |
| 1122 // A marker value is used in place of the constant pool. |
| 1123 output_offset -= kPointerSize; |
| 1124 intptr_t constant_pool = reinterpret_cast<intptr_t>( |
| 1125 Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR)); |
| 1126 output_frame->SetFrameSlot(output_offset, constant_pool); |
| 1127 if (trace_scope_) { |
| 1128 PrintF(" 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" |
| 1129 V8PRIxPTR " ; constant_pool (adaptor sentinel)\n", |
| 1130 top_address + output_offset, output_offset, constant_pool); |
| 1131 } |
| 1132 } |
| 1133 |
1097 // A marker value is used in place of the context. | 1134 // A marker value is used in place of the context. |
1098 output_offset -= kPointerSize; | 1135 output_offset -= kPointerSize; |
1099 intptr_t context = reinterpret_cast<intptr_t>( | 1136 intptr_t context = reinterpret_cast<intptr_t>( |
1100 Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR)); | 1137 Smi::FromInt(StackFrame::ARGUMENTS_ADAPTOR)); |
1101 output_frame->SetFrameSlot(output_offset, context); | 1138 output_frame->SetFrameSlot(output_offset, context); |
1102 if (trace_scope_ != NULL) { | 1139 if (trace_scope_ != NULL) { |
1103 PrintF(trace_scope_->file(), | 1140 PrintF(trace_scope_->file(), |
1104 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" | 1141 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" |
1105 V8PRIxPTR " ; context (adaptor sentinel)\n", | 1142 V8PRIxPTR " ; context (adaptor sentinel)\n", |
1106 top_address + output_offset, output_offset, context); | 1143 top_address + output_offset, output_offset, context); |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1204 output_frame->SetCallerFp(output_offset, value); | 1241 output_frame->SetCallerFp(output_offset, value); |
1205 intptr_t fp_value = top_address + output_offset; | 1242 intptr_t fp_value = top_address + output_offset; |
1206 output_frame->SetFp(fp_value); | 1243 output_frame->SetFp(fp_value); |
1207 if (trace_scope_ != NULL) { | 1244 if (trace_scope_ != NULL) { |
1208 PrintF(trace_scope_->file(), | 1245 PrintF(trace_scope_->file(), |
1209 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" | 1246 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" |
1210 V8PRIxPTR " ; caller's fp\n", | 1247 V8PRIxPTR " ; caller's fp\n", |
1211 fp_value, output_offset, value); | 1248 fp_value, output_offset, value); |
1212 } | 1249 } |
1213 | 1250 |
| 1251 if (FLAG_enable_ool_constant_pool) { |
| 1252 // The constant pool pointer can be gotten from the previous frame. |
| 1253 output_offset -= kPointerSize; |
| 1254 value = output_[frame_index - 1]->GetConstantPool(); |
| 1255 output_frame->SetFrameSlot(output_offset, value); |
| 1256 if (trace_scope_) { |
| 1257 PrintF(" 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" |
| 1258 V8PRIxPTR " ; constant pool\n", |
| 1259 top_address + output_offset, output_offset, value); |
| 1260 } |
| 1261 } |
| 1262 |
1214 // The context can be gotten from the previous frame. | 1263 // The context can be gotten from the previous frame. |
1215 output_offset -= kPointerSize; | 1264 output_offset -= kPointerSize; |
1216 value = output_[frame_index - 1]->GetContext(); | 1265 value = output_[frame_index - 1]->GetContext(); |
1217 output_frame->SetFrameSlot(output_offset, value); | 1266 output_frame->SetFrameSlot(output_offset, value); |
1218 if (trace_scope_ != NULL) { | 1267 if (trace_scope_ != NULL) { |
1219 PrintF(trace_scope_->file(), | 1268 PrintF(trace_scope_->file(), |
1220 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" | 1269 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" |
1221 V8PRIxPTR " ; context\n", | 1270 V8PRIxPTR " ; context\n", |
1222 top_address + output_offset, output_offset, value); | 1271 top_address + output_offset, output_offset, value); |
1223 } | 1272 } |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1299 // frame. This means that we have to use a height of 0. | 1348 // frame. This means that we have to use a height of 0. |
1300 unsigned height = 0; | 1349 unsigned height = 0; |
1301 unsigned height_in_bytes = height * kPointerSize; | 1350 unsigned height_in_bytes = height * kPointerSize; |
1302 const char* kind = is_setter_stub_frame ? "setter" : "getter"; | 1351 const char* kind = is_setter_stub_frame ? "setter" : "getter"; |
1303 if (trace_scope_ != NULL) { | 1352 if (trace_scope_ != NULL) { |
1304 PrintF(trace_scope_->file(), | 1353 PrintF(trace_scope_->file(), |
1305 " translating %s stub => height=%u\n", kind, height_in_bytes); | 1354 " translating %s stub => height=%u\n", kind, height_in_bytes); |
1306 } | 1355 } |
1307 | 1356 |
1308 // We need 1 stack entry for the return address and enough entries for the | 1357 // We need 1 stack entry for the return address and enough entries for the |
1309 // StackFrame::INTERNAL (FP, context, frame type and code object - see | 1358 // StackFrame::INTERNAL (FP, context, frame type, code object and constant |
1310 // MacroAssembler::EnterFrame). For a setter stub frame we need one additional | 1359 // pool (if FLAG_enable_ool_constant_pool)- see MacroAssembler::EnterFrame). |
1311 // entry for the implicit return value, see | 1360 // For a setter stub frame we need one additional entry for the implicit |
1312 // StoreStubCompiler::CompileStoreViaSetter. | 1361 // return value, see StoreStubCompiler::CompileStoreViaSetter. |
1313 unsigned fixed_frame_entries = | 1362 unsigned fixed_frame_entries = |
1314 (StandardFrameConstants::kFixedFrameSize / kPointerSize) + 1 + | 1363 (StandardFrameConstants::kFixedFrameSize / kPointerSize) + 1 + |
1315 (is_setter_stub_frame ? 1 : 0); | 1364 (is_setter_stub_frame ? 1 : 0); |
1316 unsigned fixed_frame_size = fixed_frame_entries * kPointerSize; | 1365 unsigned fixed_frame_size = fixed_frame_entries * kPointerSize; |
1317 unsigned output_frame_size = height_in_bytes + fixed_frame_size; | 1366 unsigned output_frame_size = height_in_bytes + fixed_frame_size; |
1318 | 1367 |
1319 // Allocate and store the output frame description. | 1368 // Allocate and store the output frame description. |
1320 FrameDescription* output_frame = | 1369 FrameDescription* output_frame = |
1321 new(output_frame_size) FrameDescription(output_frame_size, accessor); | 1370 new(output_frame_size) FrameDescription(output_frame_size, accessor); |
1322 output_frame->SetFrameType(StackFrame::INTERNAL); | 1371 output_frame->SetFrameType(StackFrame::INTERNAL); |
(...skipping 27 matching lines...) Expand all Loading... |
1350 output_frame->SetCallerFp(output_offset, value); | 1399 output_frame->SetCallerFp(output_offset, value); |
1351 intptr_t fp_value = top_address + output_offset; | 1400 intptr_t fp_value = top_address + output_offset; |
1352 output_frame->SetFp(fp_value); | 1401 output_frame->SetFp(fp_value); |
1353 if (trace_scope_ != NULL) { | 1402 if (trace_scope_ != NULL) { |
1354 PrintF(trace_scope_->file(), | 1403 PrintF(trace_scope_->file(), |
1355 " 0x%08" V8PRIxPTR ": [top + %u] <- 0x%08" V8PRIxPTR | 1404 " 0x%08" V8PRIxPTR ": [top + %u] <- 0x%08" V8PRIxPTR |
1356 " ; caller's fp\n", | 1405 " ; caller's fp\n", |
1357 fp_value, output_offset, value); | 1406 fp_value, output_offset, value); |
1358 } | 1407 } |
1359 | 1408 |
| 1409 if (FLAG_enable_ool_constant_pool) { |
| 1410 // The constant pool pointer can be gotten from the previous frame. |
| 1411 output_offset -= kPointerSize; |
| 1412 value = output_[frame_index - 1]->GetConstantPool(); |
| 1413 output_frame->SetFrameSlot(output_offset, value); |
| 1414 if (trace_scope_) { |
| 1415 PrintF(" 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" |
| 1416 V8PRIxPTR " ; constant pool\n", |
| 1417 top_address + output_offset, output_offset, value); |
| 1418 } |
| 1419 } |
| 1420 |
1360 // The context can be gotten from the previous frame. | 1421 // The context can be gotten from the previous frame. |
1361 output_offset -= kPointerSize; | 1422 output_offset -= kPointerSize; |
1362 value = output_[frame_index - 1]->GetContext(); | 1423 value = output_[frame_index - 1]->GetContext(); |
1363 output_frame->SetFrameSlot(output_offset, value); | 1424 output_frame->SetFrameSlot(output_offset, value); |
1364 if (trace_scope_ != NULL) { | 1425 if (trace_scope_ != NULL) { |
1365 PrintF(trace_scope_->file(), | 1426 PrintF(trace_scope_->file(), |
1366 " 0x%08" V8PRIxPTR ": [top + %u] <- 0x%08" V8PRIxPTR | 1427 " 0x%08" V8PRIxPTR ": [top + %u] <- 0x%08" V8PRIxPTR |
1367 " ; context\n", | 1428 " ; context\n", |
1368 top_address + output_offset, output_offset, value); | 1429 top_address + output_offset, output_offset, value); |
1369 } | 1430 } |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1420 void Deoptimizer::DoComputeCompiledStubFrame(TranslationIterator* iterator, | 1481 void Deoptimizer::DoComputeCompiledStubFrame(TranslationIterator* iterator, |
1421 int frame_index) { | 1482 int frame_index) { |
1422 // | 1483 // |
1423 // FROM TO | 1484 // FROM TO |
1424 // | .... | | .... | | 1485 // | .... | | .... | |
1425 // +-------------------------+ +-------------------------+ | 1486 // +-------------------------+ +-------------------------+ |
1426 // | JSFunction continuation | | JSFunction continuation | | 1487 // | JSFunction continuation | | JSFunction continuation | |
1427 // +-------------------------+ +-------------------------+ | 1488 // +-------------------------+ +-------------------------+ |
1428 // | | saved frame (FP) | | saved frame (FP) | | 1489 // | | saved frame (FP) | | saved frame (FP) | |
1429 // | +=========================+<-fpreg +=========================+<-fpreg | 1490 // | +=========================+<-fpreg +=========================+<-fpreg |
| 1491 // | |constant pool (if ool_cp)| |constant pool (if ool_cp)| |
| 1492 // | +-------------------------+ +-------------------------| |
1430 // | | JSFunction context | | JSFunction context | | 1493 // | | JSFunction context | | JSFunction context | |
1431 // v +-------------------------+ +-------------------------| | 1494 // v +-------------------------+ +-------------------------| |
1432 // | COMPILED_STUB marker | | STUB_FAILURE marker | | 1495 // | COMPILED_STUB marker | | STUB_FAILURE marker | |
1433 // +-------------------------+ +-------------------------+ | 1496 // +-------------------------+ +-------------------------+ |
1434 // | | | caller args.arguments_ | | 1497 // | | | caller args.arguments_ | |
1435 // | ... | +-------------------------+ | 1498 // | ... | +-------------------------+ |
1436 // | | | caller args.length_ | | 1499 // | | | caller args.length_ | |
1437 // |-------------------------|<-spreg +-------------------------+ | 1500 // |-------------------------|<-spreg +-------------------------+ |
1438 // | caller args pointer | | 1501 // | caller args pointer | |
1439 // +-------------------------+ | 1502 // +-------------------------+ |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1508 intptr_t frame_ptr = input_->GetRegister(fp_reg.code()); | 1571 intptr_t frame_ptr = input_->GetRegister(fp_reg.code()); |
1509 output_frame->SetRegister(fp_reg.code(), frame_ptr); | 1572 output_frame->SetRegister(fp_reg.code(), frame_ptr); |
1510 output_frame->SetFp(frame_ptr); | 1573 output_frame->SetFp(frame_ptr); |
1511 if (trace_scope_ != NULL) { | 1574 if (trace_scope_ != NULL) { |
1512 PrintF(trace_scope_->file(), | 1575 PrintF(trace_scope_->file(), |
1513 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" | 1576 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" |
1514 V8PRIxPTR " ; caller's fp\n", | 1577 V8PRIxPTR " ; caller's fp\n", |
1515 top_address + output_frame_offset, output_frame_offset, value); | 1578 top_address + output_frame_offset, output_frame_offset, value); |
1516 } | 1579 } |
1517 | 1580 |
| 1581 if (FLAG_enable_ool_constant_pool) { |
| 1582 // The constant pool pointer can be gotten from the input frame. |
| 1583 Register constant_pool_pointer_register = |
| 1584 StubFailureTrampolineFrame::constant_pool_pointer_register(); |
| 1585 input_frame_offset -= kPointerSize; |
| 1586 value = input_->GetFrameSlot(input_frame_offset); |
| 1587 output_frame->SetRegister(constant_pool_pointer_register.code(), value); |
| 1588 output_frame_offset -= kPointerSize; |
| 1589 output_frame->SetFrameSlot(output_frame_offset, value); |
| 1590 if (trace_scope_) { |
| 1591 PrintF(" 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" |
| 1592 V8PRIxPTR " ; constant_pool_pointer\n", |
| 1593 top_address + output_frame_offset, output_frame_offset, value); |
| 1594 } |
| 1595 } |
| 1596 |
1518 // The context can be gotten from the input frame. | 1597 // The context can be gotten from the input frame. |
1519 Register context_reg = StubFailureTrampolineFrame::context_register(); | 1598 Register context_reg = StubFailureTrampolineFrame::context_register(); |
1520 input_frame_offset -= kPointerSize; | 1599 input_frame_offset -= kPointerSize; |
1521 value = input_->GetFrameSlot(input_frame_offset); | 1600 value = input_->GetFrameSlot(input_frame_offset); |
1522 output_frame->SetRegister(context_reg.code(), value); | 1601 output_frame->SetRegister(context_reg.code(), value); |
1523 output_frame_offset -= kPointerSize; | 1602 output_frame_offset -= kPointerSize; |
1524 output_frame->SetFrameSlot(output_frame_offset, value); | 1603 output_frame->SetFrameSlot(output_frame_offset, value); |
1525 if (trace_scope_ != NULL) { | 1604 if (trace_scope_ != NULL) { |
1526 PrintF(trace_scope_->file(), | 1605 PrintF(trace_scope_->file(), |
1527 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" | 1606 " 0x%08" V8PRIxPTR ": [top + %d] <- 0x%08" |
(...skipping 919 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2447 DoTranslateObject(iterator, object_index, i); | 2526 DoTranslateObject(iterator, object_index, i); |
2448 } | 2527 } |
2449 return; | 2528 return; |
2450 } | 2529 } |
2451 } | 2530 } |
2452 } | 2531 } |
2453 | 2532 |
2454 | 2533 |
2455 unsigned Deoptimizer::ComputeInputFrameSize() const { | 2534 unsigned Deoptimizer::ComputeInputFrameSize() const { |
2456 unsigned fixed_size = ComputeFixedSize(function_); | 2535 unsigned fixed_size = ComputeFixedSize(function_); |
2457 // The fp-to-sp delta already takes the context and the function | 2536 // The fp-to-sp delta already takes the context, constant pool pointer and the |
2458 // into account so we have to avoid double counting them. | 2537 // function into account so we have to avoid double counting them. |
2459 unsigned result = fixed_size + fp_to_sp_delta_ - | 2538 unsigned result = fixed_size + fp_to_sp_delta_ - |
2460 StandardFrameConstants::kFixedFrameSizeFromFp; | 2539 StandardFrameConstants::kFixedFrameSizeFromFp; |
2461 #ifdef DEBUG | 2540 #ifdef DEBUG |
2462 if (compiled_code_->kind() == Code::OPTIMIZED_FUNCTION) { | 2541 if (compiled_code_->kind() == Code::OPTIMIZED_FUNCTION) { |
2463 unsigned stack_slots = compiled_code_->stack_slots(); | 2542 unsigned stack_slots = compiled_code_->stack_slots(); |
2464 unsigned outgoing_size = ComputeOutgoingArgumentSize(); | 2543 unsigned outgoing_size = ComputeOutgoingArgumentSize(); |
2465 ASSERT(result == fixed_size + (stack_slots * kPointerSize) + outgoing_size); | 2544 ASSERT(result == fixed_size + (stack_slots * kPointerSize) + outgoing_size); |
2466 } | 2545 } |
2467 #endif | 2546 #endif |
2468 return result; | 2547 return result; |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2573 } | 2652 } |
2574 | 2653 |
2575 | 2654 |
2576 FrameDescription::FrameDescription(uint32_t frame_size, | 2655 FrameDescription::FrameDescription(uint32_t frame_size, |
2577 JSFunction* function) | 2656 JSFunction* function) |
2578 : frame_size_(frame_size), | 2657 : frame_size_(frame_size), |
2579 function_(function), | 2658 function_(function), |
2580 top_(kZapUint32), | 2659 top_(kZapUint32), |
2581 pc_(kZapUint32), | 2660 pc_(kZapUint32), |
2582 fp_(kZapUint32), | 2661 fp_(kZapUint32), |
2583 context_(kZapUint32) { | 2662 context_(kZapUint32), |
| 2663 constant_pool_(kZapUint32) { |
2584 // Zap all the registers. | 2664 // Zap all the registers. |
2585 for (int r = 0; r < Register::kNumRegisters; r++) { | 2665 for (int r = 0; r < Register::kNumRegisters; r++) { |
2586 SetRegister(r, kZapUint32); | 2666 SetRegister(r, kZapUint32); |
2587 } | 2667 } |
2588 | 2668 |
2589 // Zap all the slots. | 2669 // Zap all the slots. |
2590 for (unsigned o = 0; o < frame_size; o += kPointerSize) { | 2670 for (unsigned o = 0; o < frame_size; o += kPointerSize) { |
2591 SetFrameSlot(o, kZapUint32); | 2671 SetFrameSlot(o, kZapUint32); |
2592 } | 2672 } |
2593 } | 2673 } |
(...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3054 | 3134 |
3055 void DeoptimizedFrameInfo::Iterate(ObjectVisitor* v) { | 3135 void DeoptimizedFrameInfo::Iterate(ObjectVisitor* v) { |
3056 v->VisitPointer(BitCast<Object**>(&function_)); | 3136 v->VisitPointer(BitCast<Object**>(&function_)); |
3057 v->VisitPointers(parameters_, parameters_ + parameters_count_); | 3137 v->VisitPointers(parameters_, parameters_ + parameters_count_); |
3058 v->VisitPointers(expression_stack_, expression_stack_ + expression_count_); | 3138 v->VisitPointers(expression_stack_, expression_stack_ + expression_count_); |
3059 } | 3139 } |
3060 | 3140 |
3061 #endif // ENABLE_DEBUGGER_SUPPORT | 3141 #endif // ENABLE_DEBUGGER_SUPPORT |
3062 | 3142 |
3063 } } // namespace v8::internal | 3143 } } // namespace v8::internal |
OLD | NEW |