diff --git a/src/cpu/minor/lsq.cc b/src/cpu/minor/lsq.cc index fca580085..75dbb804a 100644 --- a/src/cpu/minor/lsq.cc +++ b/src/cpu/minor/lsq.cc @@ -1558,7 +1558,7 @@ makePacketForRequest(Request &request, bool isLoad, if (isLoad) ret->allocate(); else - ret->dataDynamicArray(data); + ret->dataDynamic(data); return ret; } diff --git a/src/cpu/o3/fetch_impl.hh b/src/cpu/o3/fetch_impl.hh index 47a64a9bf..d3b0b3ac5 100644 --- a/src/cpu/o3/fetch_impl.hh +++ b/src/cpu/o3/fetch_impl.hh @@ -669,7 +669,7 @@ DefaultFetch::finishTranslation(const Fault &fault, RequestPtr mem_req) // Build packet here. PacketPtr data_pkt = new Packet(mem_req, MemCmd::ReadReq); - data_pkt->dataDynamicArray(new uint8_t[fetchBufferSize]); + data_pkt->dataDynamic(new uint8_t[fetchBufferSize]); fetchBufferPC[tid] = fetchBufferBlockPC; fetchBufferValid[tid] = false; diff --git a/src/cpu/simple/timing.cc b/src/cpu/simple/timing.cc index 2d0ab330e..c2bcdee63 100644 --- a/src/cpu/simple/timing.cc +++ b/src/cpu/simple/timing.cc @@ -271,7 +271,7 @@ TimingSimpleCPU::sendData(RequestPtr req, uint8_t *data, uint64_t *res, { PacketPtr pkt; buildPacket(pkt, req, read); - pkt->dataDynamicArray(data); + pkt->dataDynamic(data); if (req->getFlags().isSet(Request::NO_ACCESS)) { assert(!dcache_pkt); pkt->makeResponse(); @@ -379,7 +379,7 @@ TimingSimpleCPU::buildSplitPacket(PacketPtr &pkt1, PacketPtr &pkt2, req->setPhys(req1->getPaddr(), req->getSize(), req1->getFlags(), dataMasterId()); PacketPtr pkt = new Packet(req, pkt1->cmd.responseCommand()); - pkt->dataDynamicArray(data); + pkt->dataDynamic(data); pkt1->dataStatic(data); pkt2->dataStatic(data + req1->getSize()); diff --git a/src/cpu/testers/directedtest/InvalidateGenerator.cc b/src/cpu/testers/directedtest/InvalidateGenerator.cc index 84a90844f..61c3f5972 100644 --- a/src/cpu/testers/directedtest/InvalidateGenerator.cc +++ b/src/cpu/testers/directedtest/InvalidateGenerator.cc @@ -76,9 +76,7 @@ InvalidateGenerator::initiate() } else { panic("initiate was unexpectedly called\n"); } - uint8_t* dummyData = new uint8_t; - *dummyData = 0; - pkt->dataDynamic(dummyData); + pkt->allocate(); if (port->sendTimingReq(pkt)) { DPRINTF(DirectedTest, "initiating request - successful\n"); diff --git a/src/cpu/testers/directedtest/SeriesRequestGenerator.cc b/src/cpu/testers/directedtest/SeriesRequestGenerator.cc index 80523280b..2356fb47a 100644 --- a/src/cpu/testers/directedtest/SeriesRequestGenerator.cc +++ b/src/cpu/testers/directedtest/SeriesRequestGenerator.cc @@ -69,9 +69,7 @@ SeriesRequestGenerator::initiate() } PacketPtr pkt = new Packet(req, cmd); - uint8_t* dummyData = new uint8_t; - *dummyData = 0; - pkt->dataDynamic(dummyData); + pkt->allocate(); if (port->sendTimingReq(pkt)) { DPRINTF(DirectedTest, "initiating request - successful\n"); diff --git a/src/cpu/testers/memtest/memtest.cc b/src/cpu/testers/memtest/memtest.cc index 082737f8a..53c01b7f7 100644 --- a/src/cpu/testers/memtest/memtest.cc +++ b/src/cpu/testers/memtest/memtest.cc @@ -327,7 +327,7 @@ MemTest::tick() blockAddr(req->getPaddr()), *result); PacketPtr pkt = new Packet(req, MemCmd::ReadReq); - pkt->dataDynamicArray(new uint8_t[req->getSize()]); + pkt->dataDynamic(new uint8_t[req->getSize()]); MemTestSenderState *state = new MemTestSenderState(result); pkt->senderState = state; @@ -349,7 +349,7 @@ MemTest::tick() PacketPtr pkt = new Packet(req, MemCmd::WriteReq); uint8_t *pkt_data = new uint8_t[req->getSize()]; - pkt->dataDynamicArray(pkt_data); + pkt->dataDynamic(pkt_data); memcpy(pkt_data, &data, req->getSize()); MemTestSenderState *state = new MemTestSenderState(result); pkt->senderState = state; diff --git a/src/cpu/testers/networktest/networktest.cc b/src/cpu/testers/networktest/networktest.cc index 94dedf648..8ad32d140 100644 --- a/src/cpu/testers/networktest/networktest.cc +++ b/src/cpu/testers/networktest/networktest.cc @@ -261,7 +261,7 @@ NetworkTest::generatePkt() destination, req->getPaddr()); PacketPtr pkt = new Packet(req, requestType); - pkt->dataDynamicArray(new uint8_t[req->getSize()]); + pkt->dataDynamic(new uint8_t[req->getSize()]); pkt->senderState = NULL; sendPkt(pkt); diff --git a/src/cpu/testers/rubytest/Check.cc b/src/cpu/testers/rubytest/Check.cc index 19d0623c0..b320ca61d 100644 --- a/src/cpu/testers/rubytest/Check.cc +++ b/src/cpu/testers/rubytest/Check.cc @@ -113,7 +113,7 @@ Check::initiatePrefetch() // despite the oddity of the 0 size (questionable if this should // even be allowed), a prefetch is still a read and as such needs // a place to store the result - uint8_t *data = new uint8_t; + uint8_t *data = new uint8_t[1]; pkt->dataDynamic(data); // push the subblock onto the sender state. The sequencer will @@ -192,7 +192,7 @@ Check::initiateAction() // } PacketPtr pkt = new Packet(req, cmd); - uint8_t *writeData = new uint8_t; + uint8_t *writeData = new uint8_t[1]; *writeData = m_value + m_store_count; pkt->dataDynamic(writeData); @@ -246,7 +246,7 @@ Check::initiateCheck() req->setThreadContext(index, 0); PacketPtr pkt = new Packet(req, MemCmd::ReadReq); uint8_t *dataArray = new uint8_t[CHECK_SIZE]; - pkt->dataDynamicArray(dataArray); + pkt->dataDynamic(dataArray); // push the subblock onto the sender state. The sequencer will // update the subblock on the return diff --git a/src/cpu/testers/traffic_gen/generators.cc b/src/cpu/testers/traffic_gen/generators.cc index 5e19384bc..f0cf14206 100644 --- a/src/cpu/testers/traffic_gen/generators.cc +++ b/src/cpu/testers/traffic_gen/generators.cc @@ -62,7 +62,7 @@ BaseGen::getPacket(Addr addr, unsigned size, const MemCmd& cmd, PacketPtr pkt = new Packet(req, cmd); uint8_t* pkt_data = new uint8_t[req->getSize()]; - pkt->dataDynamicArray(pkt_data); + pkt->dataDynamic(pkt_data); if (cmd.isWrite()) { memset(pkt_data, 0xA, req->getSize()); diff --git a/src/mem/packet.hh b/src/mem/packet.hh index e8fb00680..19423db58 100644 --- a/src/mem/packet.hh +++ b/src/mem/packet.hh @@ -247,11 +247,9 @@ class Packet : public Printable /// when the packet is destroyed? static const FlagsType STATIC_DATA = 0x00001000; /// The data pointer points to a value that should be freed when - /// the packet is destroyed. + /// the packet is destroyed. The pointer is assumed to be pointing + /// to an array, and delete [] is consequently called static const FlagsType DYNAMIC_DATA = 0x00002000; - /// the data pointer points to an array (thus delete []) needs to - /// be called on it rather than simply delete. - static const FlagsType ARRAY_DATA = 0x00004000; /// suppress the error if this packet encounters a functional /// access failure. static const FlagsType SUPPRESS_FUNC_ERROR = 0x00008000; @@ -813,7 +811,7 @@ class Packet : public Printable void dataStatic(T *p) { - assert(flags.noneSet(STATIC_DATA|DYNAMIC_DATA|ARRAY_DATA)); + assert(flags.noneSet(STATIC_DATA|DYNAMIC_DATA)); data = (PacketDataPtr)p; flags.set(STATIC_DATA); } @@ -830,7 +828,7 @@ class Packet : public Printable void dataStaticConst(const T *p) { - assert(flags.noneSet(STATIC_DATA|DYNAMIC_DATA|ARRAY_DATA)); + assert(flags.noneSet(STATIC_DATA|DYNAMIC_DATA)); data = const_cast(p); flags.set(STATIC_DATA); } @@ -841,22 +839,9 @@ class Packet : public Printable */ template void - dataDynamicArray(T *p) - { - assert(flags.noneSet(STATIC_DATA|DYNAMIC_DATA|ARRAY_DATA)); - data = (PacketDataPtr)p; - flags.set(DYNAMIC_DATA|ARRAY_DATA); - } - - /** - * set the data pointer to a value that should have delete called - * on it. - */ - template - void dataDynamic(T *p) { - assert(flags.noneSet(STATIC_DATA|DYNAMIC_DATA|ARRAY_DATA)); + assert(flags.noneSet(STATIC_DATA|DYNAMIC_DATA)); data = (PacketDataPtr)p; flags.set(DYNAMIC_DATA); } @@ -938,12 +923,10 @@ class Packet : public Printable void deleteData() { - if (flags.isSet(ARRAY_DATA)) + if (flags.isSet(DYNAMIC_DATA)) delete [] data; - else if (flags.isSet(DYNAMIC_DATA)) - delete data; - flags.clear(STATIC_DATA|DYNAMIC_DATA|ARRAY_DATA); + flags.clear(STATIC_DATA|DYNAMIC_DATA); data = NULL; } @@ -952,7 +935,7 @@ class Packet : public Printable allocate() { assert(flags.noneSet(STATIC_DATA|DYNAMIC_DATA)); - flags.set(DYNAMIC_DATA|ARRAY_DATA); + flags.set(DYNAMIC_DATA); data = new uint8_t[getSize()]; }