Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(666)

Side by Side Diff: src/arm64/simulator-arm64.cc

Issue 226503004: ARM64: Put all simulator trace on the same stream. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/arm64/simulator-arm64.h ('k') | src/v8utils.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 TEXT_COLOUR clr_fpreg_name = FLAG_log_colour ? COLOUR(BOLD(ORANGE)) : ""; 73 TEXT_COLOUR clr_fpreg_name = FLAG_log_colour ? COLOUR(BOLD(ORANGE)) : "";
74 TEXT_COLOUR clr_fpreg_value = FLAG_log_colour ? COLOUR(BOLD(PURPLE)) : ""; 74 TEXT_COLOUR clr_fpreg_value = FLAG_log_colour ? COLOUR(BOLD(PURPLE)) : "";
75 TEXT_COLOUR clr_memory_value = FLAG_log_colour ? COLOUR(BOLD(GREEN)) : ""; 75 TEXT_COLOUR clr_memory_value = FLAG_log_colour ? COLOUR(BOLD(GREEN)) : "";
76 TEXT_COLOUR clr_memory_address = FLAG_log_colour ? COLOUR(GREEN) : ""; 76 TEXT_COLOUR clr_memory_address = FLAG_log_colour ? COLOUR(GREEN) : "";
77 TEXT_COLOUR clr_debug_number = FLAG_log_colour ? COLOUR(BOLD(ORANGE)) : ""; 77 TEXT_COLOUR clr_debug_number = FLAG_log_colour ? COLOUR(BOLD(ORANGE)) : "";
78 TEXT_COLOUR clr_debug_message = FLAG_log_colour ? COLOUR(ORANGE) : ""; 78 TEXT_COLOUR clr_debug_message = FLAG_log_colour ? COLOUR(ORANGE) : "";
79 TEXT_COLOUR clr_printf = FLAG_log_colour ? COLOUR(GREEN) : ""; 79 TEXT_COLOUR clr_printf = FLAG_log_colour ? COLOUR(GREEN) : "";
80 80
81 81
82 // This is basically the same as PrintF, with a guard for FLAG_trace_sim. 82 // This is basically the same as PrintF, with a guard for FLAG_trace_sim.
83 void PRINTF_CHECKING TraceSim(const char* format, ...) { 83 void Simulator::TraceSim(const char* format, ...) {
84 if (FLAG_trace_sim) { 84 if (FLAG_trace_sim) {
85 va_list arguments; 85 va_list arguments;
86 va_start(arguments, format); 86 va_start(arguments, format);
87 OS::VPrint(format, arguments); 87 OS::VFPrint(stream_, format, arguments);
88 va_end(arguments); 88 va_end(arguments);
89 } 89 }
90 } 90 }
91 91
92 92
93 const Instruction* Simulator::kEndOfSimAddress = NULL; 93 const Instruction* Simulator::kEndOfSimAddress = NULL;
94 94
95 95
96 void SimSystemRegister::SetBits(int msb, int lsb, uint32_t bits) { 96 void SimSystemRegister::SetBits(int msb, int lsb, uint32_t bits) {
97 int width = msb - lsb + 1; 97 int width = msb - lsb + 1;
(...skipping 896 matching lines...) Expand 10 before | Expand all | Expand 10 after
994 nzcv().SetRawValue(FPEqualFlag); 994 nzcv().SetRawValue(FPEqualFlag);
995 } else { 995 } else {
996 UNREACHABLE(); 996 UNREACHABLE();
997 } 997 }
998 } 998 }
999 999
1000 1000
1001 void Simulator::SetBreakpoint(Instruction* location) { 1001 void Simulator::SetBreakpoint(Instruction* location) {
1002 for (unsigned i = 0; i < breakpoints_.size(); i++) { 1002 for (unsigned i = 0; i < breakpoints_.size(); i++) {
1003 if (breakpoints_.at(i).location == location) { 1003 if (breakpoints_.at(i).location == location) {
1004 PrintF("Existing breakpoint at %p was %s\n", 1004 PrintF(stream_,
1005 "Existing breakpoint at %p was %s\n",
1005 reinterpret_cast<void*>(location), 1006 reinterpret_cast<void*>(location),
1006 breakpoints_.at(i).enabled ? "disabled" : "enabled"); 1007 breakpoints_.at(i).enabled ? "disabled" : "enabled");
1007 breakpoints_.at(i).enabled = !breakpoints_.at(i).enabled; 1008 breakpoints_.at(i).enabled = !breakpoints_.at(i).enabled;
1008 return; 1009 return;
1009 } 1010 }
1010 } 1011 }
1011 Breakpoint new_breakpoint = {location, true}; 1012 Breakpoint new_breakpoint = {location, true};
1012 breakpoints_.push_back(new_breakpoint); 1013 breakpoints_.push_back(new_breakpoint);
1013 PrintF("Set a breakpoint at %p\n", reinterpret_cast<void*>(location)); 1014 PrintF(stream_,
1015 "Set a breakpoint at %p\n", reinterpret_cast<void*>(location));
1014 } 1016 }
1015 1017
1016 1018
1017 void Simulator::ListBreakpoints() { 1019 void Simulator::ListBreakpoints() {
1018 PrintF("Breakpoints:\n"); 1020 PrintF(stream_, "Breakpoints:\n");
1019 for (unsigned i = 0; i < breakpoints_.size(); i++) { 1021 for (unsigned i = 0; i < breakpoints_.size(); i++) {
1020 PrintF("%p : %s\n", 1022 PrintF(stream_, "%p : %s\n",
1021 reinterpret_cast<void*>(breakpoints_.at(i).location), 1023 reinterpret_cast<void*>(breakpoints_.at(i).location),
1022 breakpoints_.at(i).enabled ? "enabled" : "disabled"); 1024 breakpoints_.at(i).enabled ? "enabled" : "disabled");
1023 } 1025 }
1024 } 1026 }
1025 1027
1026 1028
1027 void Simulator::CheckBreakpoints() { 1029 void Simulator::CheckBreakpoints() {
1028 bool hit_a_breakpoint = false; 1030 bool hit_a_breakpoint = false;
1029 for (unsigned i = 0; i < breakpoints_.size(); i++) { 1031 for (unsigned i = 0; i < breakpoints_.size(); i++) {
1030 if ((breakpoints_.at(i).location == pc_) && 1032 if ((breakpoints_.at(i).location == pc_) &&
1031 breakpoints_.at(i).enabled) { 1033 breakpoints_.at(i).enabled) {
1032 hit_a_breakpoint = true; 1034 hit_a_breakpoint = true;
1033 // Disable this breakpoint. 1035 // Disable this breakpoint.
1034 breakpoints_.at(i).enabled = false; 1036 breakpoints_.at(i).enabled = false;
1035 } 1037 }
1036 } 1038 }
1037 if (hit_a_breakpoint) { 1039 if (hit_a_breakpoint) {
1038 PrintF("Hit and disabled a breakpoint at %p.\n", 1040 PrintF(stream_, "Hit and disabled a breakpoint at %p.\n",
1039 reinterpret_cast<void*>(pc_)); 1041 reinterpret_cast<void*>(pc_));
1040 Debug(); 1042 Debug();
1041 } 1043 }
1042 } 1044 }
1043 1045
1044 1046
1045 void Simulator::CheckBreakNext() { 1047 void Simulator::CheckBreakNext() {
1046 // If the current instruction is a BL, insert a breakpoint just after it. 1048 // If the current instruction is a BL, insert a breakpoint just after it.
1047 if (break_on_next_ && pc_->IsBranchAndLinkToRegister()) { 1049 if (break_on_next_ && pc_->IsBranchAndLinkToRegister()) {
1048 SetBreakpoint(pc_->following()); 1050 SetBreakpoint(pc_->following());
(...skipping 2125 matching lines...) Expand 10 before | Expand all | Expand 10 after
3174 } else { 3176 } else {
3175 return SScanF(desc, "%" SCNu64, 3177 return SScanF(desc, "%" SCNu64,
3176 reinterpret_cast<uint64_t*>(value)) == 1; 3178 reinterpret_cast<uint64_t*>(value)) == 1;
3177 } 3179 }
3178 } 3180 }
3179 3181
3180 3182
3181 bool Simulator::PrintValue(const char* desc) { 3183 bool Simulator::PrintValue(const char* desc) {
3182 if (strcmp(desc, "csp") == 0) { 3184 if (strcmp(desc, "csp") == 0) {
3183 ASSERT(CodeFromName(desc) == static_cast<int>(kSPRegInternalCode)); 3185 ASSERT(CodeFromName(desc) == static_cast<int>(kSPRegInternalCode));
3184 PrintF("%s csp:%s 0x%016" PRIx64 "%s\n", 3186 PrintF(stream_, "%s csp:%s 0x%016" PRIx64 "%s\n",
3185 clr_reg_name, clr_reg_value, xreg(31, Reg31IsStackPointer), clr_normal); 3187 clr_reg_name, clr_reg_value, xreg(31, Reg31IsStackPointer), clr_normal);
3186 return true; 3188 return true;
3187 } else if (strcmp(desc, "wcsp") == 0) { 3189 } else if (strcmp(desc, "wcsp") == 0) {
3188 ASSERT(CodeFromName(desc) == static_cast<int>(kSPRegInternalCode)); 3190 ASSERT(CodeFromName(desc) == static_cast<int>(kSPRegInternalCode));
3189 PrintF("%s wcsp:%s 0x%08" PRIx32 "%s\n", 3191 PrintF(stream_, "%s wcsp:%s 0x%08" PRIx32 "%s\n",
3190 clr_reg_name, clr_reg_value, wreg(31, Reg31IsStackPointer), clr_normal); 3192 clr_reg_name, clr_reg_value, wreg(31, Reg31IsStackPointer), clr_normal);
3191 return true; 3193 return true;
3192 } 3194 }
3193 3195
3194 int i = CodeFromName(desc); 3196 int i = CodeFromName(desc);
3195 STATIC_ASSERT(kNumberOfRegisters == kNumberOfFPRegisters); 3197 STATIC_ASSERT(kNumberOfRegisters == kNumberOfFPRegisters);
3196 if (i < 0 || static_cast<unsigned>(i) >= kNumberOfFPRegisters) return false; 3198 if (i < 0 || static_cast<unsigned>(i) >= kNumberOfFPRegisters) return false;
3197 3199
3198 if (desc[0] == 'v') { 3200 if (desc[0] == 'v') {
3199 PrintF("%s %s:%s 0x%016" PRIx64 "%s (%s%s:%s %g%s %s:%s %g%s)\n", 3201 PrintF(stream_, "%s %s:%s 0x%016" PRIx64 "%s (%s%s:%s %g%s %s:%s %g%s)\n",
3200 clr_fpreg_name, VRegNameForCode(i), 3202 clr_fpreg_name, VRegNameForCode(i),
3201 clr_fpreg_value, double_to_rawbits(dreg(i)), 3203 clr_fpreg_value, double_to_rawbits(dreg(i)),
3202 clr_normal, 3204 clr_normal,
3203 clr_fpreg_name, DRegNameForCode(i), 3205 clr_fpreg_name, DRegNameForCode(i),
3204 clr_fpreg_value, dreg(i), 3206 clr_fpreg_value, dreg(i),
3205 clr_fpreg_name, SRegNameForCode(i), 3207 clr_fpreg_name, SRegNameForCode(i),
3206 clr_fpreg_value, sreg(i), 3208 clr_fpreg_value, sreg(i),
3207 clr_normal); 3209 clr_normal);
3208 return true; 3210 return true;
3209 } else if (desc[0] == 'd') { 3211 } else if (desc[0] == 'd') {
3210 PrintF("%s %s:%s %g%s\n", 3212 PrintF(stream_, "%s %s:%s %g%s\n",
3211 clr_fpreg_name, DRegNameForCode(i), 3213 clr_fpreg_name, DRegNameForCode(i),
3212 clr_fpreg_value, dreg(i), 3214 clr_fpreg_value, dreg(i),
3213 clr_normal); 3215 clr_normal);
3214 return true; 3216 return true;
3215 } else if (desc[0] == 's') { 3217 } else if (desc[0] == 's') {
3216 PrintF("%s %s:%s %g%s\n", 3218 PrintF(stream_, "%s %s:%s %g%s\n",
3217 clr_fpreg_name, SRegNameForCode(i), 3219 clr_fpreg_name, SRegNameForCode(i),
3218 clr_fpreg_value, sreg(i), 3220 clr_fpreg_value, sreg(i),
3219 clr_normal); 3221 clr_normal);
3220 return true; 3222 return true;
3221 } else if (desc[0] == 'w') { 3223 } else if (desc[0] == 'w') {
3222 PrintF("%s %s:%s 0x%08" PRIx32 "%s\n", 3224 PrintF(stream_, "%s %s:%s 0x%08" PRIx32 "%s\n",
3223 clr_reg_name, WRegNameForCode(i), clr_reg_value, wreg(i), clr_normal); 3225 clr_reg_name, WRegNameForCode(i), clr_reg_value, wreg(i), clr_normal);
3224 return true; 3226 return true;
3225 } else { 3227 } else {
3226 // X register names have a wide variety of starting characters, but anything 3228 // X register names have a wide variety of starting characters, but anything
3227 // else will be an X register. 3229 // else will be an X register.
3228 PrintF("%s %s:%s 0x%016" PRIx64 "%s\n", 3230 PrintF(stream_, "%s %s:%s 0x%016" PRIx64 "%s\n",
3229 clr_reg_name, XRegNameForCode(i), clr_reg_value, xreg(i), clr_normal); 3231 clr_reg_name, XRegNameForCode(i), clr_reg_value, xreg(i), clr_normal);
3230 return true; 3232 return true;
3231 } 3233 }
3232 } 3234 }
3233 3235
3234 3236
3235 void Simulator::Debug() { 3237 void Simulator::Debug() {
3236 #define COMMAND_SIZE 63 3238 #define COMMAND_SIZE 63
3237 #define ARG_SIZE 255 3239 #define ARG_SIZE 255
3238 3240
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after
3537 sizeof(parameters)); 3539 sizeof(parameters));
3538 char const *message = 3540 char const *message =
3539 reinterpret_cast<char const*>( 3541 reinterpret_cast<char const*>(
3540 pc_->InstructionAtOffset(kDebugMessageOffset)); 3542 pc_->InstructionAtOffset(kDebugMessageOffset));
3541 3543
3542 // Always print something when we hit a debug point that breaks. 3544 // Always print something when we hit a debug point that breaks.
3543 // We are going to break, so printing something is not an issue in 3545 // We are going to break, so printing something is not an issue in
3544 // terms of speed. 3546 // terms of speed.
3545 if (FLAG_trace_sim_messages || FLAG_trace_sim || (parameters & BREAK)) { 3547 if (FLAG_trace_sim_messages || FLAG_trace_sim || (parameters & BREAK)) {
3546 if (message != NULL) { 3548 if (message != NULL) {
3547 PrintF("%sDebugger hit %d: %s%s%s\n", 3549 PrintF(stream_,
3550 "%sDebugger hit %d: %s%s%s\n",
3548 clr_debug_number, 3551 clr_debug_number,
3549 code, 3552 code,
3550 clr_debug_message, 3553 clr_debug_message,
3551 message, 3554 message,
3552 clr_normal); 3555 clr_normal);
3553 } else { 3556 } else {
3554 PrintF("%sDebugger hit %d.%s\n", 3557 PrintF(stream_,
3558 "%sDebugger hit %d.%s\n",
3555 clr_debug_number, 3559 clr_debug_number,
3556 code, 3560 code,
3557 clr_normal); 3561 clr_normal);
3558 } 3562 }
3559 } 3563 }
3560 3564
3561 // Other options. 3565 // Other options.
3562 switch (parameters & kDebuggerTracingDirectivesMask) { 3566 switch (parameters & kDebuggerTracingDirectivesMask) {
3563 case TRACE_ENABLE: 3567 case TRACE_ENABLE:
3564 set_log_parameters(log_parameters() | parameters); 3568 set_log_parameters(log_parameters() | parameters);
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
3651 default: 3655 default:
3652 UNIMPLEMENTED(); 3656 UNIMPLEMENTED();
3653 } 3657 }
3654 } 3658 }
3655 3659
3656 #endif // USE_SIMULATOR 3660 #endif // USE_SIMULATOR
3657 3661
3658 } } // namespace v8::internal 3662 } } // namespace v8::internal
3659 3663
3660 #endif // V8_TARGET_ARCH_ARM64 3664 #endif // V8_TARGET_ARCH_ARM64
OLDNEW
« no previous file with comments | « src/arm64/simulator-arm64.h ('k') | src/v8utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698