lkml.org 
[lkml]   [2022]   [Mar]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip: x86/core] x86: Annotate call_on_stack()
    The following commit has been merged into the x86/core branch of tip:

    Commit-ID: be0075951fde739f14ee2b659e2fd6e2499c46c0
    Gitweb: https://git.kernel.org/tip/be0075951fde739f14ee2b659e2fd6e2499c46c0
    Author: Peter Zijlstra <peterz@infradead.org>
    AuthorDate: Tue, 08 Mar 2022 16:30:50 +01:00
    Committer: Peter Zijlstra <peterz@infradead.org>
    CommitterDate: Tue, 15 Mar 2022 10:32:44 +01:00

    x86: Annotate call_on_stack()

    vmlinux.o: warning: objtool: page_fault_oops()+0x13c: unreachable instruction

    0000 000000000005b460 <page_fault_oops>:
    ...
    0128 5b588: 49 89 23 mov %rsp,(%r11)
    012b 5b58b: 4c 89 dc mov %r11,%rsp
    012e 5b58e: 4c 89 f2 mov %r14,%rdx
    0131 5b591: 48 89 ee mov %rbp,%rsi
    0134 5b594: 4c 89 e7 mov %r12,%rdi
    0137 5b597: e8 00 00 00 00 call 5b59c <page_fault_oops+0x13c> 5b598: R_X86_64_PLT32 handle_stack_overflow-0x4
    013c 5b59c: 5c pop %rsp

    vmlinux.o: warning: objtool: sysvec_reboot()+0x6d: unreachable instruction

    0000 00000000000033f0 <sysvec_reboot>:
    ...
    005d 344d: 4c 89 dc mov %r11,%rsp
    0060 3450: e8 00 00 00 00 call 3455 <sysvec_reboot+0x65> 3451: R_X86_64_PLT32 irq_enter_rcu-0x4
    0065 3455: 48 89 ef mov %rbp,%rdi
    0068 3458: e8 00 00 00 00 call 345d <sysvec_reboot+0x6d> 3459: R_X86_64_PC32 .text+0x47d0c
    006d 345d: e8 00 00 00 00 call 3462 <sysvec_reboot+0x72> 345e: R_X86_64_PLT32 irq_exit_rcu-0x4
    0072 3462: 5c pop %rsp

    Both cases are due to a call_on_stack() calling a __noreturn function.
    Since that's an inline asm, GCC can't do anything about the
    instructions after the CALL. Therefore put in an explicit
    ASM_REACHABLE annotation to make sure objtool and gcc are consistently
    confused about control flow.

    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Acked-by: Josh Poimboeuf <jpoimboe@redhat.com>
    Link: https://lore.kernel.org/r/20220308154319.468805622@infradead.org
    ---
    arch/x86/include/asm/irq_stack.h | 3 ++-
    1 file changed, 2 insertions(+), 1 deletion(-)

    diff --git a/arch/x86/include/asm/irq_stack.h b/arch/x86/include/asm/irq_stack.h
    index ae9d40f..05af249 100644
    --- a/arch/x86/include/asm/irq_stack.h
    +++ b/arch/x86/include/asm/irq_stack.h
    @@ -99,7 +99,8 @@
    }

    #define ASM_CALL_ARG0 \
    - "call %P[__func] \n"
    + "call %P[__func] \n" \
    + ASM_REACHABLE

    #define ASM_CALL_ARG1 \
    "movq %[arg1], %%rdi \n" \
    \
     
     \ /
      Last update: 2022-03-15 11:45    [W:4.082 / U:0.300 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site