1538a1539,1558
> Fault
> TableWalker::generateLongDescFault(ArmFault::FaultSource src)
> {
> if (currState->isFetch) {
> return std::make_shared<PrefetchAbort>(
> currState->vaddr_tainted,
> src + currState->longDesc.lookupLevel,
> isStage2,
> ArmFault::LpaeTran);
> } else {
> return std::make_shared<DataAbort>(
> currState->vaddr_tainted,
> TlbEntry::DomainType::NoAccess,
> currState->isWrite,
> src + currState->longDesc.lookupLevel,
> isStage2,
> ArmFault::LpaeTran);
> }
> }
>
1584,1597c1604,1605
< if (currState->isFetch)
< currState->fault = std::make_shared<PrefetchAbort>(
< currState->vaddr_tainted,
< ArmFault::TranslationLL + currState->longDesc.lookupLevel,
< isStage2,
< ArmFault::LpaeTran);
< else
< currState->fault = std::make_shared<DataAbort>(
< currState->vaddr_tainted,
< TlbEntry::DomainType::NoAccess,
< currState->isWrite,
< ArmFault::TranslationLL + currState->longDesc.lookupLevel,
< isStage2,
< ArmFault::LpaeTran);
---
>
> currState->fault = generateLongDescFault(ArmFault::TranslationLL);
1598a1607
>
1602,1603c1611
< bool fault = false;
< bool aff = false;
---
> auto fault_source = ArmFault::FaultSourceInvalid;
1609c1617
< fault = true;
---
>
1611a1620,1621
> fault_source = ArmFault::AddressSizeLL;
>
1614c1624
< fault = true;
---
>
1617c1627
< aff = true;
---
> fault_source = ArmFault::AccessFlagLL;
1619,1634c1629,1631
< if (fault) {
< if (currState->isFetch)
< currState->fault = std::make_shared<PrefetchAbort>(
< currState->vaddr_tainted,
< (aff ? ArmFault::AccessFlagLL : ArmFault::AddressSizeLL) +
< currState->longDesc.lookupLevel,
< isStage2,
< ArmFault::LpaeTran);
< else
< currState->fault = std::make_shared<DataAbort>(
< currState->vaddr_tainted,
< TlbEntry::DomainType::NoAccess, currState->isWrite,
< (aff ? ArmFault::AccessFlagLL : ArmFault::AddressSizeLL) +
< currState->longDesc.lookupLevel,
< isStage2,
< ArmFault::LpaeTran);
---
>
> if (fault_source != ArmFault::FaultSourceInvalid) {
> currState->fault = generateLongDescFault(fault_source);
1669,1683c1666,1668
< if (currState->isFetch)
< currState->fault = std::make_shared<PrefetchAbort>(
< currState->vaddr_tainted,
< ArmFault::AddressSizeLL
< + currState->longDesc.lookupLevel,
< isStage2,
< ArmFault::LpaeTran);
< else
< currState->fault = std::make_shared<DataAbort>(
< currState->vaddr_tainted,
< TlbEntry::DomainType::NoAccess, currState->isWrite,
< ArmFault::AddressSizeLL
< + currState->longDesc.lookupLevel,
< isStage2,
< ArmFault::LpaeTran);
---
>
> currState->fault = generateLongDescFault(
> ArmFault::AddressSizeLL);