1/* 2 * Copyright 2014 Google, Inc. 3 * Copyright (c) 2002-2005 The Regents of The University of Michigan 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions are 8 * met: redistributions of source code must retain the above copyright --- 127 unchanged lines hidden (view full) --- 136#include "debug/GDBAll.hh" 137#include "mem/port.hh" 138#include "mem/fs_translating_port_proxy.hh" 139#include "mem/se_translating_port_proxy.hh" 140#include "sim/full_system.hh" 141#include "sim/system.hh" 142 143using namespace std; |
144using namespace TheISA; 145 146#ifndef NDEBUG 147vector<BaseRemoteGDB *> debuggers; 148 149void 150debugger() 151{ --- 90 unchanged lines hidden (view full) --- 242 243BaseRemoteGDB::InputEvent::InputEvent(BaseRemoteGDB *g, int fd, int e) 244 : PollEvent(fd, e), gdb(g) 245{} 246 247void 248BaseRemoteGDB::InputEvent::process(int revent) 249{ |
250 if (revent & POLLIN) { 251 gdb->trapEvent.type(SIGILL); |
252 gdb->scheduleInstCommitEvent(&gdb->trapEvent, 0); |
253 } else if (revent & POLLNVAL) { |
254 gdb->descheduleInstCommitEvent(&gdb->trapEvent); |
255 gdb->detach(); 256 } 257} 258 259void 260BaseRemoteGDB::TrapEvent::process() 261{ 262 gdb->trap(_type); --- 262 unchanged lines hidden (view full) --- 525 return true; 526} 527 528PCEventQueue *BaseRemoteGDB::getPcEventQueue() 529{ 530 return &system->pcEventQueue; 531} 532 |
533EventQueue * 534BaseRemoteGDB::getComInstEventQueue() 535{ 536 BaseCPU *cpu = context->getCpuPtr(); 537 return cpu->comInstEventQueue[context->threadId()]; 538} 539 540void 541BaseRemoteGDB::scheduleInstCommitEvent(Event *ev, int delta) 542{ 543 EventQueue *eq = getComInstEventQueue(); 544 // Here "ticks" aren't simulator ticks which measure time, they're 545 // instructions committed by the CPU. 546 eq->schedule(ev, eq->getCurTick() + delta); 547} 548 549void 550BaseRemoteGDB::descheduleInstCommitEvent(Event *ev) 551{ 552 if (ev->scheduled()) 553 getComInstEventQueue()->deschedule(ev); 554} 555 |
556bool 557BaseRemoteGDB::checkBpLen(size_t len) 558{ 559 return len == sizeof(MachInst); 560} 561 562BaseRemoteGDB::HardBreakpoint::HardBreakpoint(BaseRemoteGDB *_gdb, Addr pc) 563 : PCEvent(_gdb->getPcEventQueue(), "HardBreakpoint Event", pc), --- 497 unchanged lines hidden --- |