534,536c534
< Request *ifetch_req = new Request();
< ifetch_req->setThreadContext(cpuId, /* thread ID */ 0);
< Fault fault = setupFetchRequest(ifetch_req);
---
> bool fromRom = isRomMicroPC(thread->readMicroPC());
538,539c536,539
< ifetch_pkt = new Packet(ifetch_req, MemCmd::ReadReq, Packet::Broadcast);
< ifetch_pkt->dataStatic(&inst);
---
> if (!fromRom) {
> Request *ifetch_req = new Request();
> ifetch_req->setThreadContext(cpuId, /* thread ID */ 0);
> Fault fault = setupFetchRequest(ifetch_req);
541,544c541,553
< if (fault == NoFault) {
< if (!icachePort.sendTiming(ifetch_pkt)) {
< // Need to wait for retry
< _status = IcacheRetry;
---
> ifetch_pkt = new Packet(ifetch_req, MemCmd::ReadReq, Packet::Broadcast);
> ifetch_pkt->dataStatic(&inst);
>
> if (fault == NoFault) {
> if (!icachePort.sendTiming(ifetch_pkt)) {
> // Need to wait for retry
> _status = IcacheRetry;
> } else {
> // Need to wait for cache to respond
> _status = IcacheWaitResponse;
> // ownership of packet transferred to memory system
> ifetch_pkt = NULL;
> }
546,549c555,558
< // Need to wait for cache to respond
< _status = IcacheWaitResponse;
< // ownership of packet transferred to memory system
< ifetch_pkt = NULL;
---
> delete ifetch_req;
> delete ifetch_pkt;
> // fetch fault: advance directly to next instruction (fault handler)
> advanceInst(fault);
552,555c561,562
< delete ifetch_req;
< delete ifetch_pkt;
< // fetch fault: advance directly to next instruction (fault handler)
< advanceInst(fault);
---
> _status = IcacheWaitResponse;
> completeIfetch(NULL);
584c591,592
< assert(!pkt->isError());
---
>
> assert(!pkt || !pkt->isError());
593,594c601,604
< delete pkt->req;
< delete pkt;
---
> if (pkt) {
> delete pkt->req;
> delete pkt;
> }
661,662c671,674
< delete pkt->req;
< delete pkt;
---
> if (pkt) {
> delete pkt->req;
> delete pkt;
> }