Adds a dynamic stack alignment to functions under the interrupt call convention on x86-32. This fixes the issue where the stack can be misaligned on entry, since x86-32 makes no guarantees about the stack pointer position when the interrupt service routine is called. The alignment is done by overriding X86RegisterInfo::shouldRealignStack, and by setting the correct alignment in X86FrameLowering::calculateMaxStackAlign. This forces the interrupt handler to be dynamically aligned, generating the appropriate `and` instruction in the prologue and `lea` in the epilogue. The `no-realign-stack` attribute can be used as an opt-out. Fixes #26851 Reviewed By: pengfei Differential Revision: https://reviews.llvm.org/D151400
157 KiB
157 KiB