The only way to solve this is to example the stack pointer at runtime
and mask off bits in it to align the stack, which isn't currently
supported as an option in gcc.
Well, not for C, but see gcc/ada/decl.c:make_aligning_type, which does
just that.