paravirt depends on a custom calling convention (callee saved), but expects this from a static inline function that it then forces to be outlined. This is problematic because different compilers or flags can then add a stack guard that violates the calling conventions. Uses extern inline with the out-of-line definition in assembly to prevent compilers from adding stack guards to the outlined version. Other parts of the codebase overwrite KBUILD_CFLAGS, which is *extremely problematic* for extern inline, as the sematics are completely the opposite depending on what C standard is used. http://blahg.josefsipek.net/?p=529 Nick Desaulniers (3): efi: use -std=gnu89 for proper extern inline semantics x86/build: use -std=gnu89 for proper extern inline semantics x86: paravirt: make native_save_fl extern inline arch/x86/boot/compressed/Makefile | 2 +- arch/x86/include/asm/irqflags.h | 2 +- arch/x86/kernel/Makefile | 1 + arch/x86/kernel/irqflags.S | 26 ++++++++++++++++++++++++++ drivers/firmware/efi/libstub/Makefile | 2 +- 5 files changed, 30 insertions(+), 3 deletions(-) create mode 100644 arch/x86/kernel/irqflags.S -- 2.17.0.921.gf22659ad46-goog -- To unsubscribe from this list: send the line "unsubscribe linux-efi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html