diff options
Diffstat (limited to 'src/arch/arm/interrupts.hh')
-rw-r--r-- | src/arch/arm/interrupts.hh | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/src/arch/arm/interrupts.hh b/src/arch/arm/interrupts.hh index 8e6c2b261..f93ea5c8f 100644 --- a/src/arch/arm/interrupts.hh +++ b/src/arch/arm/interrupts.hh @@ -244,22 +244,23 @@ class Interrupts : public SimObject if (interrupts[INT_IRQ] && take_irq) - return new Interrupt; + return std::make_shared<Interrupt>(); if ((interrupts[INT_VIRT_IRQ] || hcr.vi) && allowVIrq) - return new VirtualInterrupt; + return std::make_shared<VirtualInterrupt>(); if (interrupts[INT_FIQ] && take_fiq) - return new FastInterrupt; + return std::make_shared<FastInterrupt>(); if ((interrupts[INT_VIRT_FIQ] || hcr.vf) && allowVFiq) - return new VirtualFastInterrupt; + return std::make_shared<VirtualFastInterrupt>(); if (interrupts[INT_ABT] && take_ea) - return new SystemError; + return std::make_shared<SystemError>(); if (hcr.va && allowVAbort) - return new VirtualDataAbort(0, TlbEntry::DomainType::NoAccess, false, - ArmFault::AsynchronousExternalAbort); + return std::make_shared<VirtualDataAbort>( + 0, TlbEntry::DomainType::NoAccess, false, + ArmFault::AsynchronousExternalAbort); if (interrupts[INT_RST]) - return new Reset; + return std::make_shared<Reset>(); if (interrupts[INT_SEV]) - return new ArmSev; + return std::make_shared<ArmSev>(); panic("intStatus and interrupts not in sync\n"); } |