summaryrefslogtreecommitdiff
path: root/Kernel/Interrupts
diff options
context:
space:
mode:
authorPankaj Raghav <dev@pankajraghav.com>2023-05-16 21:37:49 +0200
committerAndrew Kaster <andrewdkaster@gmail.com>2023-05-21 18:01:29 -0600
commitd14c2a358352ec40fb7c8236f21df8419876a5e6 (patch)
tree0d01fbeee96f6617f6679709083387035b631c14 /Kernel/Interrupts
parentff70418ffc0148c1a26b0ac54dd692e842561ac4 (diff)
downloadserenity-d14c2a358352ec40fb7c8236f21df8419876a5e6.zip
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.
Diffstat (limited to 'Kernel/Interrupts')
-rw-r--r--Kernel/Interrupts/PCIIRQHandler.cpp5
-rw-r--r--Kernel/Interrupts/PCIIRQHandler.h2
2 files changed, 6 insertions, 1 deletions
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();