Skip to content

Commit f5a376e

Browse files
committed
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
2 parents 17b756d + 0bab9cb commit f5a376e

File tree

3 files changed

+15
-10
lines changed

3 files changed

+15
-10
lines changed

Documentation/asm-annotations.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,11 @@ Instruction Macros
100100
~~~~~~~~~~~~~~~~~~
101101
This section covers ``SYM_FUNC_*`` and ``SYM_CODE_*`` enumerated above.
102102

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+
103108
* ``SYM_FUNC_START`` and ``SYM_FUNC_START_LOCAL`` are supposed to be **the
104109
most frequent markings**. They are used for functions with standard calling
105110
conventions -- global and local. Like in C, they both align the functions to

arch/x86/entry/thunk_64.S

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#include <asm/export.h>
1111

1212
/* 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
1414
SYM_FUNC_START_NOALIGN(\name)
1515
pushq %rbp
1616
movq %rsp, %rbp
@@ -25,13 +25,8 @@ SYM_FUNC_START_NOALIGN(\name)
2525
pushq %r10
2626
pushq %r11
2727

28-
.if \put_ret_addr_in_rdi
29-
/* 8(%rbp) is return addr on stack */
30-
movq 8(%rbp), %rdi
31-
.endif
32-
3328
call \func
34-
jmp .L_restore
29+
jmp __thunk_restore
3530
SYM_FUNC_END(\name)
3631
_ASM_NOKPROBE(\name)
3732
.endm
@@ -44,7 +39,7 @@ SYM_FUNC_END(\name)
4439
#endif
4540

4641
#ifdef CONFIG_PREEMPTION
47-
SYM_CODE_START_LOCAL_NOALIGN(.L_restore)
42+
SYM_CODE_START_LOCAL_NOALIGN(__thunk_restore)
4843
popq %r11
4944
popq %r10
5045
popq %r9
@@ -56,6 +51,6 @@ SYM_CODE_START_LOCAL_NOALIGN(.L_restore)
5651
popq %rdi
5752
popq %rbp
5853
ret
59-
_ASM_NOKPROBE(.L_restore)
60-
SYM_CODE_END(.L_restore)
54+
_ASM_NOKPROBE(__thunk_restore)
55+
SYM_CODE_END(__thunk_restore)
6156
#endif

include/linux/linkage.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,11 @@
178178
* Objtool generates debug info for both FUNC & CODE, but needs special
179179
* annotations for each CODE's start (to describe the actual stack frame).
180180
*
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+
*
181186
* ALIAS -- does not generate debug info -- the aliased function will
182187
*/
183188

0 commit comments

Comments
 (0)