diff options
author | Andreas Sandberg <Andreas.Sandberg@ARM.com> | 2014-12-23 09:31:17 -0500 |
---|---|---|
committer | Andreas Sandberg <Andreas.Sandberg@ARM.com> | 2014-12-23 09:31:17 -0500 |
commit | 184fefbb3bbaf93bccd65e73d3d08c7decc16e8a (patch) | |
tree | 0e8eb2625b018079821cddbdf1930144c4b762b7 /src/arch/arm/tlb.cc | |
parent | b33812ba430bba0ab5ff4e6372b47f4b323f0891 (diff) | |
download | gem5-184fefbb3bbaf93bccd65e73d3d08c7decc16e8a.tar.xz |
arm: Raise an alignment fault if a PC has illegal alignment
We currently don't handle unaligned PCs correctly. There is one check
for unaligned PCs in the TLB when running in aarch64 mode, but this
check does not cover cases where the CPU does not do a TLB lookup when
decoding an instruction (e.g., a branch stays within the same cache
line). Additionally, the Decoder class sometimes throws an assertion
for unaligned PCs which breaks speculation.
This changeset introduces a decoder fault bit field in the ExtMachInst
structure. This field can be used to signal a decoder failure. If set,
the decoder generates an internal gem5fault instruction instead of a
normal instruction. This instruction in turns either panics (fault
type PANIC), returns an PCAlignmentFault (fault type UNALIGNED,
aarch64) or PrefetchAbort (fault type UNALIGNED, aarch32).
The patch causes minor changes to the realview64 regressions, and a
stats bump will follow.
Diffstat (limited to 'src/arch/arm/tlb.cc')
-rw-r--r-- | src/arch/arm/tlb.cc | 5 |
1 files changed, 0 insertions, 5 deletions
diff --git a/src/arch/arm/tlb.cc b/src/arch/arm/tlb.cc index c2de9ecbe..75c0d9f5f 100644 --- a/src/arch/arm/tlb.cc +++ b/src/arch/arm/tlb.cc @@ -982,11 +982,6 @@ TLB::translateFs(RequestPtr req, ThreadContext *tc, Mode mode, "flags %#x tranType 0x%x\n", vaddr_tainted, mode, isStage2, scr, sctlr, flags, tranType); - // Generate an alignment fault for unaligned PC - if (aarch64 && is_fetch && (req->getPC() & mask(2))) { - return std::make_shared<PCAlignmentFault>(req->getPC()); - } - // If this is a clrex instruction, provide a PA of 0 with no fault // This will force the monitor to set the tracked address to 0 // a bit of a hack but this effectively clrears this processors monitor |