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
Unified · Split
| @@ -100,6 +100,11 @@ Instruction Macros · 99 unmodified lines | |||
| 100 | ~~~~~~~~~~~~~~~~~~ | 100 | ~~~~~~~~~~~~~~~~~~ |
| 101 | This section covers ``SYM_FUNC_*`` and ``SYM_CODE_*`` enumerated above. | 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 | * ``SYM_FUNC_START`` and ``SYM_FUNC_START_LOCAL`` are supposed to be **the | 108 | * ``SYM_FUNC_START`` and ``SYM_FUNC_START_LOCAL`` are supposed to be **the |
| 104 | most frequent markings**. They are used for functions with standard calling | 109 | most frequent markings**. They are used for functions with standard calling |
| 105 | conventions -- global and local. Like in C, they both align the functions to | 110 | conventions -- global and local. Like in C, they both align the functions to |
| @@ -10,7 +10,7 @@ · 9 unmodified lines | |||
| 10 | #include <asm/export.h> | 10 | #include <asm/export.h> |
| 11 | 11 | ||
| 12 | /* rdi: arg1 ... normal C conventions. rax is saved/restored. */ | 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 | SYM_FUNC_START_NOALIGN(\name) | 14 | SYM_FUNC_START_NOALIGN(\name) |
| 15 | pushq %rbp | 15 | pushq %rbp |
| 16 | movq %rsp, %rbp | 16 | movq %rsp, %rbp |
| @@ -25,13 +25,8 @@ SYM_FUNC_START_NOALIGN(\name) · 8 unmodified lines | |||
| 25 | pushq %r10 | 25 | pushq %r10 |
| 26 | pushq %r11 | 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 | call \func | 28 | call \func |
| 34 | jmp .L_restore | 29 | jmp __thunk_restore |
| 35 | SYM_FUNC_END(\name) | 30 | SYM_FUNC_END(\name) |
| 36 | _ASM_NOKPROBE(\name) | 31 | _ASM_NOKPROBE(\name) |
| 37 | .endm | 32 | .endm |
| @@ -44,7 +39,7 @@ SYM_FUNC_END(\name) · 6 unmodified lines | |||
| 44 | #endif | 39 | #endif |
| 45 | 40 | ||
| 46 | #ifdef CONFIG_PREEMPTION | 41 | #ifdef CONFIG_PREEMPTION |
| 47 | SYM_CODE_START_LOCAL_NOALIGN(.L_restore) | 42 | SYM_CODE_START_LOCAL_NOALIGN(__thunk_restore) |
| 48 | popq %r11 | 43 | popq %r11 |
| 49 | popq %r10 | 44 | popq %r10 |
| 50 | popq %r9 | 45 | popq %r9 |
| @@ -56,6 +51,6 @@ SYM_CODE_START_LOCAL_NOALIGN(.L_restore) · 5 unmodified lines | |||
| 56 | popq %rdi | 51 | popq %rdi |
| 57 | popq %rbp | 52 | popq %rbp |
| 58 | ret | 53 | ret |
| 59 | _ASM_NOKPROBE(.L_restore) | 54 | _ASM_NOKPROBE(__thunk_restore) |
| 60 | SYM_CODE_END(.L_restore) | 55 | SYM_CODE_END(__thunk_restore) |
| 61 | #endif | 56 | #endif |
| @@ -178,6 +178,11 @@ · 177 unmodified lines | |||
| 178 | * Objtool generates debug info for both FUNC & CODE, but needs special | 178 | * Objtool generates debug info for both FUNC & CODE, but needs special |
| 179 | * annotations for each CODE's start (to describe the actual stack frame). | 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 | * ALIAS -- does not generate debug info -- the aliased function will | 186 | * ALIAS -- does not generate debug info -- the aliased function will |
| 182 | */ | 187 | */ |
| 183 | 188 | ||