Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'x86_entry_for_v5.11_rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull x86 fix from Borislav Petkov:
"A single fix for objtool to generate proper unwind info for newer
toolchains which do not generate section symbols anymore. And a
cleanup ontop.

This was originally going to go during the next merge window but
people can already trigger a build error with binutils-2.36 which
doesn't emit section symbols - something which objtool relies on - so
let's expedite it"

* tag 'x86_entry_for_v5.11_rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
x86/entry: Remove put_ret_addr_in_rdi THUNK macro argument
x86/entry: Emit a symbol for register restoring thunk

+15 -10
+5
Documentation/asm-annotations.rst
··· 100 100 ~~~~~~~~~~~~~~~~~~ 101 101 This section covers ``SYM_FUNC_*`` and ``SYM_CODE_*`` enumerated above. 102 102 103 + ``objtool`` requires that all code must be contained in an ELF symbol. Symbol 104 + names that have a ``.L`` prefix do not emit symbol table entries. ``.L`` 105 + prefixed symbols can be used within a code region, but should be avoided for 106 + denoting a range of code via ``SYM_*_START/END`` annotations. 107 + 103 108 * ``SYM_FUNC_START`` and ``SYM_FUNC_START_LOCAL`` are supposed to be **the 104 109 most frequent markings**. They are used for functions with standard calling 105 110 conventions -- global and local. Like in C, they both align the functions to
+5 -10
arch/x86/entry/thunk_64.S
··· 10 10 #include <asm/export.h> 11 11 12 12 /* rdi: arg1 ... normal C conventions. rax is saved/restored. */ 13 - .macro THUNK name, func, put_ret_addr_in_rdi=0 13 + .macro THUNK name, func 14 14 SYM_FUNC_START_NOALIGN(\name) 15 15 pushq %rbp 16 16 movq %rsp, %rbp ··· 25 25 pushq %r10 26 26 pushq %r11 27 27 28 - .if \put_ret_addr_in_rdi 29 - /* 8(%rbp) is return addr on stack */ 30 - movq 8(%rbp), %rdi 31 - .endif 32 - 33 28 call \func 34 - jmp .L_restore 29 + jmp __thunk_restore 35 30 SYM_FUNC_END(\name) 36 31 _ASM_NOKPROBE(\name) 37 32 .endm ··· 39 44 #endif 40 45 41 46 #ifdef CONFIG_PREEMPTION 42 - SYM_CODE_START_LOCAL_NOALIGN(.L_restore) 47 + SYM_CODE_START_LOCAL_NOALIGN(__thunk_restore) 43 48 popq %r11 44 49 popq %r10 45 50 popq %r9 ··· 51 56 popq %rdi 52 57 popq %rbp 53 58 ret 54 - _ASM_NOKPROBE(.L_restore) 55 - SYM_CODE_END(.L_restore) 59 + _ASM_NOKPROBE(__thunk_restore) 60 + SYM_CODE_END(__thunk_restore) 56 61 #endif
+5
include/linux/linkage.h
··· 178 178 * Objtool generates debug info for both FUNC & CODE, but needs special 179 179 * annotations for each CODE's start (to describe the actual stack frame). 180 180 * 181 + * Objtool requires that all code must be contained in an ELF symbol. Symbol 182 + * names that have a .L prefix do not emit symbol table entries. .L 183 + * prefixed symbols can be used within a code region, but should be avoided for 184 + * denoting a range of code via ``SYM_*_START/END`` annotations. 185 + * 181 186 * ALIAS -- does not generate debug info -- the aliased function will 182 187 */ 183 188