From d14c2a358352ec40fb7c8236f21df8419876a5e6 Mon Sep 17 00:00:00 2001 From: Pankaj Raghav Date: Tue, 16 May 2023 21:37:49 +0200 Subject: [PATCH] Kernel: Move handle_interrupt out-of-line in PCIIRQHandler Upgrade to GCC 13.1.0 triggered an UBSAN in PCIIRQHandler. Moving the handle_interrupt() function out-of-line fixes this issue. --- Kernel/Interrupts/PCIIRQHandler.cpp | 5 +++++ Kernel/Interrupts/PCIIRQHandler.h | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Kernel/Interrupts/PCIIRQHandler.cpp b/Kernel/Interrupts/PCIIRQHandler.cpp index ada63ecc0f..d70caae5a7 100644 --- a/Kernel/Interrupts/PCIIRQHandler.cpp +++ b/Kernel/Interrupts/PCIIRQHandler.cpp @@ -63,4 +63,9 @@ void PCIIRQHandler::disable_irq() device.disable_interrupt(interrupt_number()); } +bool PCIIRQHandler::handle_interrupt(RegisterState const& regs) +{ + return handle_irq(regs); +} + } diff --git a/Kernel/Interrupts/PCIIRQHandler.h b/Kernel/Interrupts/PCIIRQHandler.h index f167b88d3d..a06138f12d 100644 --- a/Kernel/Interrupts/PCIIRQHandler.h +++ b/Kernel/Interrupts/PCIIRQHandler.h @@ -18,7 +18,7 @@ class PCIIRQHandler : public GenericInterruptHandler { public: virtual ~PCIIRQHandler() = default; - virtual bool handle_interrupt(RegisterState const& regs) override { return handle_irq(regs); } + virtual bool handle_interrupt(RegisterState const& regs) override; virtual bool handle_irq(RegisterState const&) = 0; void enable_irq();