Message ID | 20180605170532.170361-3-ndesaulniers@google.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Tue, Jun 5, 2018 at 7:05 PM, Nick Desaulniers <ndesaulniers@google.com> wrote: > > The semantics of extern inline has changed since gnu89. This means that > folks using GCC versions >= 5.1 may see symbol redefinition errors at > link time for subdirs that override KBUILD_CFLAGS (making the C standard > used implicit) regardless of this patch. This has been cleaned up > earlier in the patch set, but is left as a note in the commit message > for future travelers. I think the keyword you are missing is __attribute__((gnu_inline)) which forces the gnu89 behavior on all compiler versions. It's been supported since gcc-4.2, so it should not cause problems on any compiler that is able to build an x86 kernel. Arnd -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Tue, Jun 5, 2018 at 11:28 PM, Arnd Bergmann <arnd@arndb.de> wrote: > On Tue, Jun 5, 2018 at 7:05 PM, Nick Desaulniers > <ndesaulniers@google.com> wrote: >> >> The semantics of extern inline has changed since gnu89. This means that >> folks using GCC versions >= 5.1 may see symbol redefinition errors at >> link time for subdirs that override KBUILD_CFLAGS (making the C standard >> used implicit) regardless of this patch. This has been cleaned up >> earlier in the patch set, but is left as a note in the commit message >> for future travelers. > > I think the keyword you are missing is > > __attribute__((gnu_inline)) > > which forces the gnu89 behavior on all compiler versions. It's been supported > since gcc-4.2, so it should not cause problems on any compiler that is able > to build an x86 kernel. Nevermind, I just saw you already posted that. Arnd -- To unsubscribe from this list: send the line "unsubscribe linux-kbuild" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Tue, Jun 5, 2018 at 2:31 PM Arnd Bergmann <arnd@arndb.de> wrote: > > On Tue, Jun 5, 2018 at 11:28 PM, Arnd Bergmann <arnd@arndb.de> wrote: > > On Tue, Jun 5, 2018 at 7:05 PM, Nick Desaulniers > > <ndesaulniers@google.com> wrote: > >> > >> The semantics of extern inline has changed since gnu89. This means that > >> folks using GCC versions >= 5.1 may see symbol redefinition errors at > >> link time for subdirs that override KBUILD_CFLAGS (making the C standard > >> used implicit) regardless of this patch. This has been cleaned up > >> earlier in the patch set, but is left as a note in the commit message > >> for future travelers. > > > > I think the keyword you are missing is > > > > __attribute__((gnu_inline)) > > > > which forces the gnu89 behavior on all compiler versions. It's been supported > > since gcc-4.2, so it should not cause problems on any compiler that is able > > to build an x86 kernel. > > Nevermind, I just saw you already posted that. > > Arnd That's ok, I appreciate you taking the time to review. Your point made me consider adding the function attribute to just native_save_fl() in this patch, but it seems that that lone function attribute is not used outside of compiler-gcc.h, so it would be good to change all users of inline in one place.
diff --git a/arch/x86/include/asm/irqflags.h b/arch/x86/include/asm/irqflags.h index 89f08955fff7..c4fc17220df9 100644 --- a/arch/x86/include/asm/irqflags.h +++ b/arch/x86/include/asm/irqflags.h @@ -13,7 +13,7 @@ * Interrupt control: */ -static inline unsigned long native_save_fl(void) +extern inline unsigned long native_save_fl(void) { unsigned long flags; diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile index 02d6f5cf4e70..8824d01c0c35 100644 --- a/arch/x86/kernel/Makefile +++ b/arch/x86/kernel/Makefile @@ -61,6 +61,7 @@ obj-y += alternative.o i8253.o hw_breakpoint.o obj-y += tsc.o tsc_msr.o io_delay.o rtc.o obj-y += pci-iommu_table.o obj-y += resource.o +obj-y += irqflags.o obj-y += process.o obj-y += fpu/ diff --git a/arch/x86/kernel/irqflags.S b/arch/x86/kernel/irqflags.S new file mode 100644 index 000000000000..937bd08c3f79 --- /dev/null +++ b/arch/x86/kernel/irqflags.S @@ -0,0 +1,26 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +#include <asm/asm.h> +#include <asm/export.h> +#include <linux/linkage.h> + +/* + * unsigned long native_save_fl(void) + */ +ENTRY(native_save_fl) + pushf + pop %_ASM_AX + ret +ENDPROC(native_save_fl) +EXPORT_SYMBOL(native_save_fl) + +/* + * void native_restore_fl(unsigned long flags) + * %rdi: flags + */ +ENTRY(native_restore_fl) + push %_ASM_DI + popf + ret +ENDPROC(native_restore_fl) +EXPORT_SYMBOL(native_restore_fl)