changeset 72890a571a7b in /z/repo/gem5 details: http://repo.gem5.org/gem5?cmd=changeset;node=72890a571a7b description: dev: Avoid invalid sized reads in PL390 with DPRINTF enabled
The first DPRINTF() in PL390::writeDistributor always read a uint32_t, though a packet may have only been 1 or 2 bytes. This caused an assertion in packet->get(). diffstat: src/dev/arm/gic_pl390.cc | 19 ++++++++++++++++++- 1 files changed, 18 insertions(+), 1 deletions(-) diffs (30 lines): diff -r 82a4fa2d19a0 -r 72890a571a7b src/dev/arm/gic_pl390.cc --- a/src/dev/arm/gic_pl390.cc Wed Sep 03 07:42:25 2014 -0400 +++ b/src/dev/arm/gic_pl390.cc Wed Sep 03 07:42:27 2014 -0400 @@ -395,8 +395,25 @@ assert(pkt->req->hasContextId()); int ctx_id = pkt->req->contextId(); + uint32_t pkt_data M5_VAR_USED; + switch (pkt->getSize()) + { + case 1: + pkt_data = pkt->get<uint8_t>(); + break; + case 2: + pkt_data = pkt->get<uint16_t>(); + break; + case 4: + pkt_data = pkt->get<uint32_t>(); + break; + default: + panic("Invalid size when writing to priority regs in Gic: %d\n", + pkt->getSize()); + } + DPRINTF(GIC, "gic distributor write register %#x size %#x value %#x \n", - daddr, pkt->getSize(), pkt->get<uint32_t>()); + daddr, pkt->getSize(), pkt_data); if (daddr >= ICDISER_ST && daddr < ICDISER_ED + 4) { assert((daddr-ICDISER_ST) >> 2 < 32); _______________________________________________ gem5-dev mailing list gem5-dev@gem5.org http://m5sim.org/mailman/listinfo/gem5-dev