OpenXiangShan / GEM5

BSD 3-Clause "New" or "Revised" License
54 stars 21 forks source link

cpu-o3: Fix invalid iter de-reference when squashing inst #42

Closed forever043 closed 10 months ago

forever043 commented 11 months ago

Following segmentation fault was reported when running gem5 as library. It was caused by move&de-reference squashIt[tid] iter of std::list after erase() was performed on it. The iter of std::list should not be used after erase().

Program received signal SIGSEGV, Segmentation fault.
gem5::o3::ROB::doSquash (this=0x555555a459c8, tid=0) at build/RISCV/cpu/o3/rob.cc:400
400         if ((*squashIt[tid])->seqNum <= squashedSeqNum[tid]) {
(gdb) bt
#0  gem5::o3::ROB::doSquash (this=0x555555a459c8, tid=0) at build/RISCV/cpu/o3/rob.cc:400
#1  0x00007ffff6ec3829 in gem5::o3::ROB::squash (this=0x555555a459c8, squash_num=8, tid=0) at build/RISCV/cpu/o3/rob.cc:530
#2  0x00007ffff6dcfc4b in gem5::o3::Commit::commit (this=0x555555a449f8) at build/RISCV/cpu/o3/commit.cc:909
#3  0x00007ffff6dce340 in gem5::o3::Commit::tick (this=0x555555a449f8) at build/RISCV/cpu/o3/commit.cc:704
#4  0x00007ffff6df01c2 in gem5::o3::CPU::tick (this=0x555555a40d00) at build/RISCV/cpu/o3/cpu.cc:483
...