mem, sim-se: Fixed seg-fault in EmulationPageTable::remap
authorRico Amslinger <rico.amslinger@informatik.uni-augsburg.de>
Tue, 13 Feb 2018 14:34:43 +0000 (15:34 +0100)
committerRico Amslinger <rico.amslinger@informatik.uni-augsburg.de>
Wed, 14 Feb 2018 09:52:38 +0000 (09:52 +0000)
When moving a memory region the target region should be unmapped.
The assertion does reflect this, but the following line accesses
the invalid pointer regardless. This commit replaces the pointer
access with an emplace.

Change-Id: I85f9be4e6c223eab447c75043e593ed3f90017e1
Reviewed-on: https://gem5-review.googlesource.com/8261
Reviewed-by: Gabe Black <gabeblack@google.com>
Reviewed-by: Brandon Potter <Brandon.Potter@amd.com>
Maintainer: Gabe Black <gabeblack@google.com>

src/mem/page_table.cc

index 8a11ada76040b94b9043d58237d057d68a96b7ca..cd342256019c0232aeac7209a3475d2edb6c3489 100644 (file)
@@ -87,7 +87,7 @@ EmulationPageTable::remap(Addr vaddr, int64_t size, Addr new_vaddr)
         auto old_it = pTable.find(vaddr);
         assert(old_it != pTable.end() && new_it == pTable.end());
 
-        new_it->second = old_it->second;
+        pTable.emplace(new_vaddr, old_it->second);
         pTable.erase(old_it);
         size -= pageSize;
         vaddr += pageSize;