| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 "vm/disassembler.h" | 5 #include "vm/disassembler.h" |
| 6 | 6 |
| 7 #include "vm/globals.h" // Needed here to get TARGET_ARCH_IA32. | 7 #include "vm/globals.h" // Needed here to get TARGET_ARCH_IA32. |
| 8 #if defined(TARGET_ARCH_IA32) | 8 #if defined(TARGET_ARCH_IA32) |
| 9 #include "platform/utils.h" | 9 #include "platform/utils.h" |
| 10 #include "vm/allocation.h" | 10 #include "vm/allocation.h" |
| (...skipping 319 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 330 char* buffer_; // Decode instructions into this buffer. | 330 char* buffer_; // Decode instructions into this buffer. |
| 331 intptr_t buffer_size_; // The size of the buffer_. | 331 intptr_t buffer_size_; // The size of the buffer_. |
| 332 intptr_t buffer_pos_; // Current character position in the buffer_. | 332 intptr_t buffer_pos_; // Current character position in the buffer_. |
| 333 | 333 |
| 334 DISALLOW_COPY_AND_ASSIGN(X86Decoder); | 334 DISALLOW_COPY_AND_ASSIGN(X86Decoder); |
| 335 }; | 335 }; |
| 336 | 336 |
| 337 | 337 |
| 338 void X86Decoder::PrintInt(int value) { | 338 void X86Decoder::PrintInt(int value) { |
| 339 char int_buffer[16]; | 339 char int_buffer[16]; |
| 340 OS::SNPrint(int_buffer, sizeof(int_buffer), "0x%x", value); | 340 OS::SNPrint(int_buffer, sizeof(int_buffer), "%#x", value); |
| 341 Print(int_buffer); | 341 Print(int_buffer); |
| 342 } | 342 } |
| 343 | 343 |
| 344 | 344 |
| 345 // Append the int value (printed in hex) to the output buffer. | 345 // Append the int value (printed in hex) to the output buffer. |
| 346 void X86Decoder::PrintHex(int value) { | 346 void X86Decoder::PrintHex(int value) { |
| 347 char hex_buffer[16]; | 347 char hex_buffer[16]; |
| 348 OS::SNPrint(hex_buffer, sizeof(hex_buffer), "0x%x", value); | 348 OS::SNPrint(hex_buffer, sizeof(hex_buffer), "%#x", value); |
| 349 Print(hex_buffer); | 349 Print(hex_buffer); |
| 350 } | 350 } |
| 351 | 351 |
| 352 | 352 |
| 353 // Append the str to the output buffer. | 353 // Append the str to the output buffer. |
| 354 void X86Decoder::Print(const char* str) { | 354 void X86Decoder::Print(const char* str) { |
| 355 char cur = *str++; | 355 char cur = *str++; |
| 356 while (cur != '\0' && (buffer_pos_ < (buffer_size_ - 1))) { | 356 while (cur != '\0' && (buffer_pos_ < (buffer_size_ - 1))) { |
| 357 buffer_[buffer_pos_++] = cur; | 357 buffer_[buffer_pos_++] = cur; |
| 358 cur = *str++; | 358 cur = *str++; |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 411 intptr_t len = OS::SNPrint(NULL, 0, format, full_class_name) + 1; | 411 intptr_t len = OS::SNPrint(NULL, 0, format, full_class_name) + 1; |
| 412 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); | 412 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); |
| 413 OS::SNPrint(chars, len, format, full_class_name); | 413 OS::SNPrint(chars, len, format, full_class_name); |
| 414 return chars; | 414 return chars; |
| 415 } | 415 } |
| 416 | 416 |
| 417 | 417 |
| 418 void X86Decoder::PrintAddress(uword addr) { | 418 void X86Decoder::PrintAddress(uword addr) { |
| 419 NoGCScope no_gc; | 419 NoGCScope no_gc; |
| 420 char addr_buffer[32]; | 420 char addr_buffer[32]; |
| 421 OS::SNPrint(addr_buffer, sizeof(addr_buffer), "%p", addr); | 421 OS::SNPrint(addr_buffer, sizeof(addr_buffer), "%#"Px"", addr); |
| 422 Print(addr_buffer); | 422 Print(addr_buffer); |
| 423 // Try to print as heap object or stub name | 423 // Try to print as heap object or stub name |
| 424 if (!Isolate::Current()->heap()->CodeContains(addr) && | 424 if (!Isolate::Current()->heap()->CodeContains(addr) && |
| 425 Isolate::Current()->heap()->Contains(addr - kHeapObjectTag)) { | 425 Isolate::Current()->heap()->Contains(addr - kHeapObjectTag)) { |
| 426 Object& obj = Object::Handle(reinterpret_cast<RawObject*>(addr)); | 426 Object& obj = Object::Handle(reinterpret_cast<RawObject*>(addr)); |
| 427 if (obj.IsArray()) { | 427 if (obj.IsArray()) { |
| 428 const Array& arr = Array::CheckedHandle(obj.raw()); | 428 const Array& arr = Array::CheckedHandle(obj.raw()); |
| 429 intptr_t len = arr.Length(); | 429 intptr_t len = arr.Length(); |
| 430 if (len > 5) len = 5; // Print a max of 5 elements. | 430 if (len > 5) len = 5; // Print a max of 5 elements. |
| 431 Print(" Array["); | 431 Print(" Array["); |
| (...skipping 1141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1573 } | 1573 } |
| 1574 case 0xF7: | 1574 case 0xF7: |
| 1575 data += F7Instruction(data); | 1575 data += F7Instruction(data); |
| 1576 break; | 1576 break; |
| 1577 | 1577 |
| 1578 case 0xC8: | 1578 case 0xC8: |
| 1579 data += DecodeEnter(data); | 1579 data += DecodeEnter(data); |
| 1580 break; | 1580 break; |
| 1581 | 1581 |
| 1582 default: | 1582 default: |
| 1583 OS::Print("Unknown case 0x%x\n", *data); | 1583 OS::Print("Unknown case %#x\n", *data); |
| 1584 UNIMPLEMENTED(); | 1584 UNIMPLEMENTED(); |
| 1585 } | 1585 } |
| 1586 } | 1586 } |
| 1587 | 1587 |
| 1588 int instr_len = data - reinterpret_cast<uint8_t*>(pc); | 1588 int instr_len = data - reinterpret_cast<uint8_t*>(pc); |
| 1589 ASSERT(instr_len > 0); // Ensure progress. | 1589 ASSERT(instr_len > 0); // Ensure progress. |
| 1590 | 1590 |
| 1591 return instr_len; | 1591 return instr_len; |
| 1592 } | 1592 } |
| 1593 | 1593 |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1639 human_buffer, | 1639 human_buffer, |
| 1640 sizeof(human_buffer), | 1640 sizeof(human_buffer), |
| 1641 pc); | 1641 pc); |
| 1642 pc += instruction_length; | 1642 pc += instruction_length; |
| 1643 } | 1643 } |
| 1644 } | 1644 } |
| 1645 | 1645 |
| 1646 } // namespace dart | 1646 } // namespace dart |
| 1647 | 1647 |
| 1648 #endif // defined TARGET_ARCH_IA32 | 1648 #endif // defined TARGET_ARCH_IA32 |
| OLD | NEW |