]> git.baikalelectronics.ru Git - kernel.git/commitdiff
x86/entry: Build thunk_$(BITS) only if CONFIG_PREEMPTION=y
authorAndrea Righi <andrea.righi@canonical.com>
Thu, 14 Jul 2022 07:49:15 +0000 (09:49 +0200)
committerIngo Molnar <mingo@kernel.org>
Thu, 4 Aug 2022 10:23:50 +0000 (12:23 +0200)
With CONFIG_PREEMPTION disabled, arch/x86/entry/thunk_$(BITS).o becomes
an empty object file.

With some old versions of binutils (i.e., 2.35.90.20210113-1ubuntu1) the
GNU assembler doesn't generate a symbol table for empty object files and
objtool fails with the following error when a valid symbol table cannot
be found:

  arch/x86/entry/thunk_64.o: warning: objtool: missing symbol table

To prevent this from happening, build thunk_$(BITS).o only if
CONFIG_PREEMPTION is enabled.

BugLink: https://bugs.launchpad.net/bugs/1911359
Fixes: 116d2e7cf800 ("x86/entry: Remove the TRACE_IRQS cruft")
Signed-off-by: Andrea Righi <andrea.righi@canonical.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Link: https://lore.kernel.org/r/Ys/Ke7EWjcX+ZlXO@arighi-desktop
arch/x86/entry/Makefile
arch/x86/entry/thunk_32.S
arch/x86/entry/thunk_64.S
arch/x86/um/Makefile

index eeadbd7d92cc55e0b44163278525826a083940e5..ca2fe186994b0a653a525583e18b90b0715f3fa7 100644 (file)
@@ -11,12 +11,13 @@ CFLAGS_REMOVE_common.o              = $(CC_FLAGS_FTRACE)
 
 CFLAGS_common.o                        += -fno-stack-protector
 
-obj-y                          := entry.o entry_$(BITS).o thunk_$(BITS).o syscall_$(BITS).o
+obj-y                          := entry.o entry_$(BITS).o syscall_$(BITS).o
 obj-y                          += common.o
 
 obj-y                          += vdso/
 obj-y                          += vsyscall/
 
+obj-$(CONFIG_PREEMPTION)       += thunk_$(BITS).o
 obj-$(CONFIG_IA32_EMULATION)   += entry_64_compat.o syscall_32.o
 obj-$(CONFIG_X86_X32_ABI)      += syscall_x32.o
 
index 7591bab060f700a506571dccfa1adb8232995325..ff6e7003da9744a343895ff9a63a23076a7f21d2 100644 (file)
@@ -29,10 +29,8 @@ SYM_CODE_START_NOALIGN(\name)
 SYM_CODE_END(\name)
        .endm
 
-#ifdef CONFIG_PREEMPTION
        THUNK preempt_schedule_thunk, preempt_schedule
        THUNK preempt_schedule_notrace_thunk, preempt_schedule_notrace
        EXPORT_SYMBOL(preempt_schedule_thunk)
        EXPORT_SYMBOL(preempt_schedule_notrace_thunk)
-#endif
 
index 505b488fcc655b47945f0aeece64983736ae34c5..f38b07d2768bbfc186bf5df4963768166dc738f8 100644 (file)
@@ -31,14 +31,11 @@ SYM_FUNC_END(\name)
        _ASM_NOKPROBE(\name)
        .endm
 
-#ifdef CONFIG_PREEMPTION
        THUNK preempt_schedule_thunk, preempt_schedule
        THUNK preempt_schedule_notrace_thunk, preempt_schedule_notrace
        EXPORT_SYMBOL(preempt_schedule_thunk)
        EXPORT_SYMBOL(preempt_schedule_notrace_thunk)
-#endif
 
-#ifdef CONFIG_PREEMPTION
 SYM_CODE_START_LOCAL_NOALIGN(__thunk_restore)
        popq %r11
        popq %r10
@@ -53,4 +50,3 @@ SYM_CODE_START_LOCAL_NOALIGN(__thunk_restore)
        RET
        _ASM_NOKPROBE(__thunk_restore)
 SYM_CODE_END(__thunk_restore)
-#endif
index ba5789c3580945508f5c1963913643de1e3b74db..a8cde4e8ab1149102f442ecd721a3caa966230c8 100644 (file)
@@ -28,7 +28,8 @@ else
 
 obj-y += syscalls_64.o vdso/
 
-subarch-y = ../lib/csum-partial_64.o ../lib/memcpy_64.o ../entry/thunk_64.o
+subarch-y = ../lib/csum-partial_64.o ../lib/memcpy_64.o
+subarch-$(CONFIG_PREEMPTION) += ../entry/thunk_64.o
 
 endif