| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include <math.h> // for isnan. | 5 #include <math.h> // for isnan. |
| 6 #include <setjmp.h> | 6 #include <setjmp.h> |
| 7 #include <stdlib.h> | 7 #include <stdlib.h> |
| 8 | 8 |
| 9 #include "vm/globals.h" | 9 #include "vm/globals.h" |
| 10 #if defined(TARGET_ARCH_MIPS) | 10 #if defined(TARGET_ARCH_MIPS) |
| (...skipping 483 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 494 #undef ARG_SIZE | 494 #undef ARG_SIZE |
| 495 | 495 |
| 496 #undef STR | 496 #undef STR |
| 497 #undef XSTR | 497 #undef XSTR |
| 498 } | 498 } |
| 499 | 499 |
| 500 | 500 |
| 501 char* SimulatorDebugger::ReadLine(const char* prompt) { | 501 char* SimulatorDebugger::ReadLine(const char* prompt) { |
| 502 char* result = NULL; | 502 char* result = NULL; |
| 503 char line_buf[256]; | 503 char line_buf[256]; |
| 504 int offset = 0; | 504 intptr_t offset = 0; |
| 505 bool keep_going = true; | 505 bool keep_going = true; |
| 506 OS::Print("%s", prompt); | 506 OS::Print("%s", prompt); |
| 507 while (keep_going) { | 507 while (keep_going) { |
| 508 if (fgets(line_buf, sizeof(line_buf), stdin) == NULL) { | 508 if (fgets(line_buf, sizeof(line_buf), stdin) == NULL) { |
| 509 // fgets got an error. Just give up. | 509 // fgets got an error. Just give up. |
| 510 if (result != NULL) { | 510 if (result != NULL) { |
| 511 delete[] result; | 511 delete[] result; |
| 512 } | 512 } |
| 513 return NULL; | 513 return NULL; |
| 514 } | 514 } |
| 515 int len = strlen(line_buf); | 515 intptr_t len = strlen(line_buf); |
| 516 if (len > 1 && | 516 if (len > 1 && |
| 517 line_buf[len - 2] == '\\' && | 517 line_buf[len - 2] == '\\' && |
| 518 line_buf[len - 1] == '\n') { | 518 line_buf[len - 1] == '\n') { |
| 519 // When we read a line that ends with a "\" we remove the escape and | 519 // When we read a line that ends with a "\" we remove the escape and |
| 520 // append the remainder. | 520 // append the remainder. |
| 521 line_buf[len - 2] = '\n'; | 521 line_buf[len - 2] = '\n'; |
| 522 line_buf[len - 1] = 0; | 522 line_buf[len - 1] = 0; |
| 523 len -= 1; | 523 len -= 1; |
| 524 } else if ((len > 0) && (line_buf[len - 1] == '\n')) { | 524 } else if ((len > 0) && (line_buf[len - 1] == '\n')) { |
| 525 // Since we read a new line we are done reading the line. This | 525 // Since we read a new line we are done reading the line. This |
| 526 // will exit the loop after copying this buffer into the result. | 526 // will exit the loop after copying this buffer into the result. |
| 527 keep_going = false; | 527 keep_going = false; |
| 528 } | 528 } |
| 529 if (result == NULL) { | 529 if (result == NULL) { |
| 530 // Allocate the initial result and make room for the terminating '\0' | 530 // Allocate the initial result and make room for the terminating '\0' |
| 531 result = new char[len + 1]; | 531 result = new char[len + 1]; |
| 532 if (result == NULL) { | 532 if (result == NULL) { |
| 533 // OOM, so cannot readline anymore. | 533 // OOM, so cannot readline anymore. |
| 534 return NULL; | 534 return NULL; |
| 535 } | 535 } |
| 536 } else { | 536 } else { |
| 537 // Allocate a new result with enough room for the new addition. | 537 // Allocate a new result with enough room for the new addition. |
| 538 int new_len = offset + len + 1; | 538 intptr_t new_len = offset + len + 1; |
| 539 char* new_result = new char[new_len]; | 539 char* new_result = new char[new_len]; |
| 540 if (new_result == NULL) { | 540 if (new_result == NULL) { |
| 541 // OOM, free the buffer allocated so far and return NULL. | 541 // OOM, free the buffer allocated so far and return NULL. |
| 542 delete[] result; | 542 delete[] result; |
| 543 return NULL; | 543 return NULL; |
| 544 } else { | 544 } else { |
| 545 // Copy the existing input into the new array and set the new | 545 // Copy the existing input into the new array and set the new |
| 546 // array as the result. | 546 // array as the result. |
| 547 memmove(new_result, result, offset); | 547 memmove(new_result, result, offset); |
| 548 delete[] result; | 548 delete[] result; |
| (...skipping 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 881 uint16_t Simulator::ReadHU(uword addr, Instr* instr) { | 881 uint16_t Simulator::ReadHU(uword addr, Instr* instr) { |
| 882 if ((addr & 1) == 0) { | 882 if ((addr & 1) == 0) { |
| 883 uint16_t* ptr = reinterpret_cast<uint16_t*>(addr); | 883 uint16_t* ptr = reinterpret_cast<uint16_t*>(addr); |
| 884 return *ptr; | 884 return *ptr; |
| 885 } | 885 } |
| 886 UnalignedAccess("unsigned halfword read", addr, instr); | 886 UnalignedAccess("unsigned halfword read", addr, instr); |
| 887 return 0; | 887 return 0; |
| 888 } | 888 } |
| 889 | 889 |
| 890 | 890 |
| 891 int Simulator::ReadW(uword addr, Instr* instr) { | 891 intptr_t Simulator::ReadW(uword addr, Instr* instr) { |
| 892 if ((addr & 3) == 0) { | 892 if ((addr & 3) == 0) { |
| 893 intptr_t* ptr = reinterpret_cast<intptr_t*>(addr); | 893 intptr_t* ptr = reinterpret_cast<intptr_t*>(addr); |
| 894 return *ptr; | 894 return *ptr; |
| 895 } | 895 } |
| 896 UnalignedAccess("read", addr, instr); | 896 UnalignedAccess("read", addr, instr); |
| 897 return 0; | 897 return 0; |
| 898 } | 898 } |
| 899 | 899 |
| 900 | 900 |
| 901 void Simulator::WriteB(uword addr, uint8_t value) { | 901 void Simulator::WriteB(uword addr, uint8_t value) { |
| 902 uint8_t* ptr = reinterpret_cast<uint8_t*>(addr); | 902 uint8_t* ptr = reinterpret_cast<uint8_t*>(addr); |
| 903 *ptr = value; | 903 *ptr = value; |
| 904 } | 904 } |
| 905 | 905 |
| 906 | 906 |
| 907 void Simulator::WriteH(uword addr, uint16_t value, Instr* instr) { | 907 void Simulator::WriteH(uword addr, uint16_t value, Instr* instr) { |
| 908 if ((addr & 1) == 0) { | 908 if ((addr & 1) == 0) { |
| 909 uint16_t* ptr = reinterpret_cast<uint16_t*>(addr); | 909 uint16_t* ptr = reinterpret_cast<uint16_t*>(addr); |
| 910 *ptr = value; | 910 *ptr = value; |
| 911 return; | 911 return; |
| 912 } | 912 } |
| 913 UnalignedAccess("halfword write", addr, instr); | 913 UnalignedAccess("halfword write", addr, instr); |
| 914 } | 914 } |
| 915 | 915 |
| 916 | 916 |
| 917 void Simulator::WriteW(uword addr, int value, Instr* instr) { | 917 void Simulator::WriteW(uword addr, intptr_t value, Instr* instr) { |
| 918 if ((addr & 3) == 0) { | 918 if ((addr & 3) == 0) { |
| 919 intptr_t* ptr = reinterpret_cast<intptr_t*>(addr); | 919 intptr_t* ptr = reinterpret_cast<intptr_t*>(addr); |
| 920 *ptr = value; | 920 *ptr = value; |
| 921 return; | 921 return; |
| 922 } | 922 } |
| 923 UnalignedAccess("write", addr, instr); | 923 UnalignedAccess("write", addr, instr); |
| 924 } | 924 } |
| 925 | 925 |
| 926 | 926 |
| 927 double Simulator::ReadD(uword addr, Instr* instr) { | 927 double Simulator::ReadD(uword addr, Instr* instr) { |
| (...skipping 1317 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2245 set_register(kExceptionObjectReg, bit_cast<int32_t>(raw_exception)); | 2245 set_register(kExceptionObjectReg, bit_cast<int32_t>(raw_exception)); |
| 2246 set_register(kStackTraceObjectReg, bit_cast<int32_t>(raw_stacktrace)); | 2246 set_register(kStackTraceObjectReg, bit_cast<int32_t>(raw_stacktrace)); |
| 2247 buf->Longjmp(); | 2247 buf->Longjmp(); |
| 2248 } | 2248 } |
| 2249 | 2249 |
| 2250 } // namespace dart | 2250 } // namespace dart |
| 2251 | 2251 |
| 2252 #endif // !defined(HOST_ARCH_MIPS) | 2252 #endif // !defined(HOST_ARCH_MIPS) |
| 2253 | 2253 |
| 2254 #endif // defined TARGET_ARCH_MIPS | 2254 #endif // defined TARGET_ARCH_MIPS |
| OLD | NEW |