124c124
< #include "arch/vtophys.hh"
---
> #include "arch/alpha/kgdb.h"
125a126
> #include "arch/vtophys.hh"
138c139
< using namespace AlphaISA;
---
> using namespace TheISA;
140,152d140
< RemoteGDB::Event::Event(RemoteGDB *g, int fd, int e)
< : PollEvent(fd, e), gdb(g)
< {}
<
< void
< RemoteGDB::Event::process(int revent)
< {
< if (revent & POLLIN)
< gdb->trap(ALPHA_KENTRY_IF);
< else if (revent & POLLNVAL)
< gdb->detach();
< }
<
154,158c142
< : BaseRemoteGDB(_system, c, KGDB_NUMREGS),
< event(NULL)
< {}
<
< RemoteGDB::~RemoteGDB()
---
> : BaseRemoteGDB(_system, c, KGDB_NUMREGS)
160,161c144
< if (event)
< delete event;
---
> memset(gdbregs.regs, 0, gdbregs.size);
272,291d254
< RemoteGDB::setTempBreakpoint(TempBreakpoint &bkpt, Addr addr)
< {
< DPRINTF(GDBMisc, "setTempBreakpoint: addr=%#x\n", addr);
<
< bkpt.address = addr;
< insertHardBreak(addr, 4);
< }
<
< void
< RemoteGDB::clearTempBreakpoint(TempBreakpoint &bkpt)
< {
< DPRINTF(GDBMisc, "setTempBreakpoint: addr=%#x\n",
< bkpt.address);
<
<
< removeHardBreak(bkpt.address, 4);
< bkpt.address = 0;
< }
<
< void
295c258
< takenBkpt.address, notTakenBkpt.address);
---
> takenBkpt, notTakenBkpt);
297c260
< if (takenBkpt.address != 0)
---
> if (takenBkpt != 0)
300c263
< if (notTakenBkpt.address != 0)
---
> if (notTakenBkpt != 0)
325c288
< takenBkpt.address, notTakenBkpt.address);
---
> takenBkpt, notTakenBkpt);
327c290
< setTempBreakpoint(notTakenBkpt, npc);
---
> setTempBreakpoint(notTakenBkpt = npc);
330c293
< setTempBreakpoint(takenBkpt, bpc);
---
> setTempBreakpoint(takenBkpt = bpc);
347,424d309
<
< PCEventQueue *RemoteGDB::getPcEventQueue()
< {
< return &system->pcEventQueue;
< }
<
<
< RemoteGDB::HardBreakpoint::HardBreakpoint(RemoteGDB *_gdb, Addr pc)
< : PCEvent(_gdb->getPcEventQueue(), "HardBreakpoint Event", pc),
< gdb(_gdb), refcount(0)
< {
< DPRINTF(GDBMisc, "creating hardware breakpoint at %#x\n", evpc);
< }
<
< void
< RemoteGDB::HardBreakpoint::process(ThreadContext *tc)
< {
< DPRINTF(GDBMisc, "handling hardware breakpoint at %#x\n", pc());
<
< if (tc == gdb->context)
< gdb->trap(ALPHA_KENTRY_INT);
< }
<
< bool
< RemoteGDB::insertSoftBreak(Addr addr, size_t len)
< {
< if (len != sizeof(MachInst))
< panic("invalid length\n");
<
< return insertHardBreak(addr, len);
< }
<
< bool
< RemoteGDB::removeSoftBreak(Addr addr, size_t len)
< {
< if (len != sizeof(MachInst))
< panic("invalid length\n");
<
< return removeHardBreak(addr, len);
< }
<
< bool
< RemoteGDB::insertHardBreak(Addr addr, size_t len)
< {
< if (len != sizeof(MachInst))
< panic("invalid length\n");
<
< DPRINTF(GDBMisc, "inserting hardware breakpoint at %#x\n", addr);
<
< HardBreakpoint *&bkpt = hardBreakMap[addr];
< if (bkpt == 0)
< bkpt = new HardBreakpoint(this, addr);
<
< bkpt->refcount++;
<
< return true;
< }
<
< bool
< RemoteGDB::removeHardBreak(Addr addr, size_t len)
< {
< if (len != sizeof(MachInst))
< panic("invalid length\n");
<
< DPRINTF(GDBMisc, "removing hardware breakpoint at %#x\n", addr);
<
< break_iter_t i = hardBreakMap.find(addr);
< if (i == hardBreakMap.end())
< return false;
<
< HardBreakpoint *hbp = (*i).second;
< if (--hbp->refcount == 0) {
< delete hbp;
< hardBreakMap.erase(i);
< }
<
< return true;
< }