| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 <stdarg.h> | 5 #include <stdarg.h> |
| 6 #include <stdlib.h> | 6 #include <stdlib.h> |
| 7 #include <cmath> | 7 #include <cmath> |
| 8 | 8 |
| 9 #if V8_TARGET_ARCH_ARM | 9 #if V8_TARGET_ARCH_ARM |
| 10 | 10 |
| (...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 425 PrintF("Z flag: %d; ", sim_->z_flag_); | 425 PrintF("Z flag: %d; ", sim_->z_flag_); |
| 426 PrintF("C flag: %d; ", sim_->c_flag_); | 426 PrintF("C flag: %d; ", sim_->c_flag_); |
| 427 PrintF("V flag: %d\n", sim_->v_flag_); | 427 PrintF("V flag: %d\n", sim_->v_flag_); |
| 428 PrintF("INVALID OP flag: %d; ", sim_->inv_op_vfp_flag_); | 428 PrintF("INVALID OP flag: %d; ", sim_->inv_op_vfp_flag_); |
| 429 PrintF("DIV BY ZERO flag: %d; ", sim_->div_zero_vfp_flag_); | 429 PrintF("DIV BY ZERO flag: %d; ", sim_->div_zero_vfp_flag_); |
| 430 PrintF("OVERFLOW flag: %d; ", sim_->overflow_vfp_flag_); | 430 PrintF("OVERFLOW flag: %d; ", sim_->overflow_vfp_flag_); |
| 431 PrintF("UNDERFLOW flag: %d; ", sim_->underflow_vfp_flag_); | 431 PrintF("UNDERFLOW flag: %d; ", sim_->underflow_vfp_flag_); |
| 432 PrintF("INEXACT flag: %d;\n", sim_->inexact_vfp_flag_); | 432 PrintF("INEXACT flag: %d;\n", sim_->inexact_vfp_flag_); |
| 433 } else if (strcmp(cmd, "stop") == 0) { | 433 } else if (strcmp(cmd, "stop") == 0) { |
| 434 int32_t value; | 434 int32_t value; |
| 435 intptr_t stop_pc = sim_->get_pc() - 2 * Instruction::kInstrSize; | 435 intptr_t stop_pc = sim_->get_pc() - Instruction::kInstrSize; |
| 436 Instruction* stop_instr = reinterpret_cast<Instruction*>(stop_pc); | 436 Instruction* stop_instr = reinterpret_cast<Instruction*>(stop_pc); |
| 437 Instruction* msg_address = | |
| 438 reinterpret_cast<Instruction*>(stop_pc + Instruction::kInstrSize); | |
| 439 if ((argc == 2) && (strcmp(arg1, "unstop") == 0)) { | 437 if ((argc == 2) && (strcmp(arg1, "unstop") == 0)) { |
| 440 // Remove the current stop. | 438 // Remove the current stop. |
| 441 if (sim_->isStopInstruction(stop_instr)) { | 439 if (sim_->isStopInstruction(stop_instr)) { |
| 442 stop_instr->SetInstructionBits(kNopInstr); | 440 stop_instr->SetInstructionBits(kNopInstr); |
| 443 msg_address->SetInstructionBits(kNopInstr); | |
| 444 } else { | 441 } else { |
| 445 PrintF("Not at debugger stop.\n"); | 442 PrintF("Not at debugger stop.\n"); |
| 446 } | 443 } |
| 447 } else if (argc == 3) { | 444 } else if (argc == 3) { |
| 448 // Print information about all/the specified breakpoint(s). | 445 // Print information about all/the specified breakpoint(s). |
| 449 if (strcmp(arg1, "info") == 0) { | 446 if (strcmp(arg1, "info") == 0) { |
| 450 if (strcmp(arg2, "all") == 0) { | 447 if (strcmp(arg2, "all") == 0) { |
| 451 PrintF("Stop information:\n"); | 448 PrintF("Stop information:\n"); |
| 452 for (uint32_t i = 0; i < sim_->kNumOfWatchedStops; i++) { | 449 for (uint32_t i = 0; i < sim_->kNumOfWatchedStops; i++) { |
| 453 sim_->PrintStopInfo(i); | 450 sim_->PrintStopInfo(i); |
| (...skipping 5210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5664 } | 5661 } |
| 5665 case 7: { | 5662 case 7: { |
| 5666 DecodeType7(instr); | 5663 DecodeType7(instr); |
| 5667 break; | 5664 break; |
| 5668 } | 5665 } |
| 5669 default: { | 5666 default: { |
| 5670 UNIMPLEMENTED(); | 5667 UNIMPLEMENTED(); |
| 5671 break; | 5668 break; |
| 5672 } | 5669 } |
| 5673 } | 5670 } |
| 5674 // If the instruction is a non taken conditional stop, we need to skip the | |
| 5675 // inlined message address. | |
| 5676 } else if (instr->IsStop()) { | |
| 5677 set_pc(get_pc() + 2 * Instruction::kInstrSize); | |
| 5678 } | 5671 } |
| 5679 if (!pc_modified_) { | 5672 if (!pc_modified_) { |
| 5680 set_register(pc, reinterpret_cast<int32_t>(instr) | 5673 set_register(pc, reinterpret_cast<int32_t>(instr) |
| 5681 + Instruction::kInstrSize); | 5674 + Instruction::kInstrSize); |
| 5682 } | 5675 } |
| 5683 } | 5676 } |
| 5684 | 5677 |
| 5685 | 5678 |
| 5686 void Simulator::Execute() { | 5679 void Simulator::Execute() { |
| 5687 // Get the PC to simulate. Cannot use the accessor here as we need the | 5680 // Get the PC to simulate. Cannot use the accessor here as we need the |
| (...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6059 processor->prev_ = nullptr; | 6052 processor->prev_ = nullptr; |
| 6060 processor->next_ = nullptr; | 6053 processor->next_ = nullptr; |
| 6061 } | 6054 } |
| 6062 | 6055 |
| 6063 } // namespace internal | 6056 } // namespace internal |
| 6064 } // namespace v8 | 6057 } // namespace v8 |
| 6065 | 6058 |
| 6066 #endif // USE_SIMULATOR | 6059 #endif // USE_SIMULATOR |
| 6067 | 6060 |
| 6068 #endif // V8_TARGET_ARCH_ARM | 6061 #endif // V8_TARGET_ARCH_ARM |
| OLD | NEW |