Stack overflow detection is relatively simple for tasks because the scheduler knows where the task’s stack ends, but relatively difficult for ISRs because [in the Cortex-M case] ISRs use the stack that was used by main() before the scheduler was started. In the generalised case, the kernel doesn’t know where the stack used by main() ends because it is allocated by the C run-time, and there is no commonality between different build systems in how that is done.
However, yours is a specific case, not a generalised case, as you also provide the tools. We can therefore work together to provide a method.
Ports, such as the MIPS and RISC-V ports, give users the option to statically allocate the ISR stack, in which case the kernel does know where it is, which then enables the kernel to check for overflows.