OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2010 The Native Client Authors. All rights reserved. | 2 * Copyright 2010 The Native Client Authors. All rights reserved. |
3 * Use of this source code is governed by a BSD-style license that can | 3 * Use of this source code is governed by a BSD-style license that can |
4 * be found in the LICENSE file. | 4 * be found in the LICENSE file. |
5 */ | 5 */ |
6 | 6 |
7 #include <string.h> | 7 #include <string.h> |
8 #include <stdlib.h> | 8 #include <stdlib.h> |
9 #include <stdio.h> | 9 #include <stdio.h> |
10 | 10 |
(...skipping 24 matching lines...) Expand all Loading... |
35 Target::Target(const Abi* abi) | 35 Target::Target(const Abi* abi) |
36 : abi_(abi), | 36 : abi_(abi), |
37 mutex_(NULL), | 37 mutex_(NULL), |
38 sig_start_(NULL), | 38 sig_start_(NULL), |
39 sig_done_(NULL), | 39 sig_done_(NULL), |
40 send_done_(false), | 40 send_done_(false), |
41 ctx_(NULL), | 41 ctx_(NULL), |
42 cur_signal_(-1), | 42 cur_signal_(-1), |
43 sig_thread_(0), | 43 sig_thread_(0), |
44 run_thread_(-1), | 44 run_thread_(-1), |
45 reg_thread_(-1), | 45 reg_thread_(-1) { |
46 mem_base_(0) { | |
47 if (NULL == abi_) abi_ = Abi::Get(); | 46 if (NULL == abi_) abi_ = Abi::Get(); |
48 } | 47 } |
49 | 48 |
50 Target::~Target() { | 49 Target::~Target() { |
51 Destroy(); | 50 Destroy(); |
52 } | 51 } |
53 | 52 |
54 bool Target::Init() { | 53 bool Target::Init() { |
55 string targ_xml = "l<target><architecture>"; | 54 string targ_xml = "l<target><architecture>"; |
56 | 55 |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
115 | 114 |
116 bool Target::RemoveTemporaryBreakpoints() { | 115 bool Target::RemoveTemporaryBreakpoints() { |
117 const Abi::BPDef *bp = abi_->GetBreakpointDef(); | 116 const Abi::BPDef *bp = abi_->GetBreakpointDef(); |
118 | 117 |
119 // Iterate through the map, removing breakpoints | 118 // Iterate through the map, removing breakpoints |
120 while (!breakMap_.empty()) { | 119 while (!breakMap_.empty()) { |
121 // Copy the key/value locally | 120 // Copy the key/value locally |
122 BreakMap_t::iterator cur = breakMap_.begin(); | 121 BreakMap_t::iterator cur = breakMap_.begin(); |
123 uint64_t addr = cur->first; | 122 uint64_t addr = cur->first; |
124 uint8_t *data = cur->second; | 123 uint8_t *data = cur->second; |
125 | 124 |
126 // Then remove it from the map | 125 // Then remove it from the map |
127 breakMap_.erase(cur); | 126 breakMap_.erase(cur); |
128 | 127 |
129 // Copy back the old code, and free the data | 128 // Copy back the old code, and free the data |
130 IPlatform::SetMemory(addr, bp->size_, data); | 129 IPlatform::SetMemory(addr, bp->size_, data); |
131 delete[] data; | 130 delete[] data; |
132 } | 131 } |
133 | 132 |
134 return true; | 133 return true; |
135 } | 134 } |
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
431 // IN : $maaaa,llll | 430 // IN : $maaaa,llll |
432 // OUT: $xx..xx | 431 // OUT: $xx..xx |
433 case 'm': { | 432 case 'm': { |
434 uint64_t addr; | 433 uint64_t addr; |
435 uint64_t wlen; | 434 uint64_t wlen; |
436 uint32_t len; | 435 uint32_t len; |
437 if (!pktIn->GetNumberSep(&addr, 0)) { | 436 if (!pktIn->GetNumberSep(&addr, 0)) { |
438 err = BAD_FORMAT; | 437 err = BAD_FORMAT; |
439 break; | 438 break; |
440 } | 439 } |
441 if (addr < mem_base_) { | 440 |
442 addr += mem_base_; | |
443 } | |
444 if (!pktIn->GetNumberSep(&wlen, 0)) { | 441 if (!pktIn->GetNumberSep(&wlen, 0)) { |
445 err = BAD_FORMAT; | 442 err = BAD_FORMAT; |
446 break; | 443 break; |
447 } | 444 } |
448 | 445 |
449 len = static_cast<uint32_t>(wlen); | 446 len = static_cast<uint32_t>(wlen); |
450 uint8_t *block = new uint8_t[len]; | 447 uint8_t *block = new uint8_t[len]; |
451 if (!port::IPlatform::GetMemory(addr, len, block)) err = FAILED; | 448 if (!port::IPlatform::GetMemory(addr, len, block)) err = FAILED; |
452 | 449 |
453 pktOut->AddBlock(block, len); | 450 pktOut->AddBlock(block, len); |
454 break; | 451 break; |
455 } | 452 } |
456 | 453 |
457 // IN : $Maaaa,llll:xx..xx | 454 // IN : $Maaaa,llll:xx..xx |
458 // OUT: $OK | 455 // OUT: $OK |
459 case 'M': { | 456 case 'M': { |
460 uint64_t addr; | 457 uint64_t addr; |
461 uint64_t wlen; | 458 uint64_t wlen; |
462 uint32_t len; | 459 uint32_t len; |
463 | 460 |
464 if (!pktIn->GetNumberSep(&addr, 0)) { | 461 if (!pktIn->GetNumberSep(&addr, 0)) { |
465 err = BAD_FORMAT; | 462 err = BAD_FORMAT; |
466 break; | 463 break; |
467 } | 464 } |
468 if (addr < mem_base_) { | |
469 addr += mem_base_; | |
470 } | |
471 | |
472 if (!pktIn->GetNumberSep(&wlen, 0)) { | 465 if (!pktIn->GetNumberSep(&wlen, 0)) { |
473 err = BAD_FORMAT; | 466 err = BAD_FORMAT; |
474 break; | 467 break; |
475 } | 468 } |
476 | 469 |
477 len = static_cast<uint32_t>(wlen); | 470 len = static_cast<uint32_t>(wlen); |
478 uint8_t *block = new uint8_t[len]; | 471 uint8_t *block = new uint8_t[len]; |
479 pktIn->GetBlock(block, len); | 472 pktIn->GetBlock(block, len); |
480 | 473 |
481 if (!port::IPlatform::SetMemory(addr, len, block)) err = FAILED; | 474 if (!port::IPlatform::SetMemory(addr, len, block)) err = FAILED; |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
634 | 627 |
635 return NULL; | 628 return NULL; |
636 } | 629 } |
637 | 630 |
638 | 631 |
639 } // namespace gdb_rsp | 632 } // namespace gdb_rsp |
640 | 633 |
641 | 634 |
642 | 635 |
643 | 636 |
OLD | NEW |