From: Josh Poimboeuf <jpoimboe@kernel.org>
Add CFI_STARTPROC and CFI_ENDPROC annotations to the SYM_FUNC_* macros
so the VDSO asm functions don't need to add them manually. Note this
only affects VDSO, the CFI_* macros are empty for the kernel proper.
[ Jens Remus: Reword commit subject and message as suggested by Josh. ]
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
Signed-off-by: Jens Remus <jremus@linux.ibm.com>
---
arch/x86/entry/vdso/common/vdso-layout.lds.S | 2 +-
.../x86/entry/vdso/vdso64/vgetrandom-chacha.S | 2 --
arch/x86/entry/vdso/vdso64/vsgx.S | 4 ---
arch/x86/include/asm/linkage.h | 33 +++++++++++++++----
arch/x86/include/asm/vdso.h | 1 -
5 files changed, 28 insertions(+), 14 deletions(-)
diff --git a/arch/x86/entry/vdso/common/vdso-layout.lds.S b/arch/x86/entry/vdso/common/vdso-layout.lds.S
index a1e30be3e83d..856b8b9d278c 100644
--- a/arch/x86/entry/vdso/common/vdso-layout.lds.S
+++ b/arch/x86/entry/vdso/common/vdso-layout.lds.S
@@ -1,5 +1,5 @@
/* SPDX-License-Identifier: GPL-2.0 */
-#include <asm/vdso.h>
+#include <asm/page_types.h>
#include <asm/vdso/vsyscall.h>
#include <vdso/datapage.h>
diff --git a/arch/x86/entry/vdso/vdso64/vgetrandom-chacha.S b/arch/x86/entry/vdso/vdso64/vgetrandom-chacha.S
index cc82da9216fb..a33212594731 100644
--- a/arch/x86/entry/vdso/vdso64/vgetrandom-chacha.S
+++ b/arch/x86/entry/vdso/vdso64/vgetrandom-chacha.S
@@ -22,7 +22,6 @@ CONSTANTS: .octa 0x6b20657479622d323320646e61707865
* rcx: number of 64-byte blocks to write to output
*/
SYM_FUNC_START(__arch_chacha20_blocks_nostack)
- CFI_STARTPROC
.set output, %rdi
.set key, %rsi
.set counter, %rdx
@@ -175,5 +174,4 @@ SYM_FUNC_START(__arch_chacha20_blocks_nostack)
pxor temp,temp
ret
- CFI_ENDPROC
SYM_FUNC_END(__arch_chacha20_blocks_nostack)
diff --git a/arch/x86/entry/vdso/vdso64/vsgx.S b/arch/x86/entry/vdso/vdso64/vsgx.S
index 37a3d4c02366..c0342238c976 100644
--- a/arch/x86/entry/vdso/vdso64/vsgx.S
+++ b/arch/x86/entry/vdso/vdso64/vsgx.S
@@ -24,8 +24,6 @@
.section .text, "ax"
SYM_FUNC_START(__vdso_sgx_enter_enclave)
- /* Prolog */
- .cfi_startproc
push %rbp
.cfi_adjust_cfa_offset 8
.cfi_rel_offset %rbp, 0
@@ -143,8 +141,6 @@ SYM_FUNC_START(__vdso_sgx_enter_enclave)
jle .Lout
jmp .Lenter_enclave
- .cfi_endproc
-
_ASM_VDSO_EXTABLE_HANDLE(.Lenclu_eenter_eresume, .Lhandle_exception)
SYM_FUNC_END(__vdso_sgx_enter_enclave)
diff --git a/arch/x86/include/asm/linkage.h b/arch/x86/include/asm/linkage.h
index 9d38ae744a2e..9d7f90c57451 100644
--- a/arch/x86/include/asm/linkage.h
+++ b/arch/x86/include/asm/linkage.h
@@ -40,6 +40,10 @@
#ifdef __ASSEMBLER__
+#ifndef LINKER_SCRIPT
+#include <asm/dwarf2.h>
+#endif
+
#if defined(CONFIG_MITIGATION_RETHUNK) && !defined(__DISABLE_EXPORTS) && !defined(BUILD_VDSO)
#define RET jmp __x86_return_thunk
#else /* CONFIG_MITIGATION_RETPOLINE */
@@ -112,34 +116,51 @@
# define SYM_FUNC_ALIAS_MEMFUNC SYM_FUNC_ALIAS
#endif
+#define __SYM_FUNC_START \
+ CFI_STARTPROC ASM_NL
+
+#define __SYM_FUNC_END \
+ CFI_ENDPROC ASM_NL
+
/* SYM_TYPED_FUNC_START -- use for indirectly called globals, w/ CFI type */
#define SYM_TYPED_FUNC_START(name) \
SYM_TYPED_START(name, SYM_L_GLOBAL, SYM_F_ALIGN) \
+ __SYM_FUNC_START \
ENDBR
/* SYM_FUNC_START -- use for global functions */
#define SYM_FUNC_START(name) \
- SYM_START(name, SYM_L_GLOBAL, SYM_F_ALIGN)
+ SYM_START(name, SYM_L_GLOBAL, SYM_F_ALIGN) \
+ __SYM_FUNC_START
/* SYM_FUNC_START_NOALIGN -- use for global functions, w/o alignment */
#define SYM_FUNC_START_NOALIGN(name) \
- SYM_START(name, SYM_L_GLOBAL, SYM_A_NONE)
+ SYM_START(name, SYM_L_GLOBAL, SYM_A_NONE) \
+ __SYM_FUNC_START
/* SYM_FUNC_START_LOCAL -- use for local functions */
#define SYM_FUNC_START_LOCAL(name) \
- SYM_START(name, SYM_L_LOCAL, SYM_F_ALIGN)
+ SYM_START(name, SYM_L_LOCAL, SYM_F_ALIGN) \
+ __SYM_FUNC_START
/* SYM_FUNC_START_LOCAL_NOALIGN -- use for local functions, w/o alignment */
#define SYM_FUNC_START_LOCAL_NOALIGN(name) \
- SYM_START(name, SYM_L_LOCAL, SYM_A_NONE)
+ SYM_START(name, SYM_L_LOCAL, SYM_A_NONE) \
+ __SYM_FUNC_START
/* SYM_FUNC_START_WEAK -- use for weak functions */
#define SYM_FUNC_START_WEAK(name) \
- SYM_START(name, SYM_L_WEAK, SYM_F_ALIGN)
+ SYM_START(name, SYM_L_WEAK, SYM_F_ALIGN) \
+ __SYM_FUNC_START
/* SYM_FUNC_START_WEAK_NOALIGN -- use for weak functions, w/o alignment */
#define SYM_FUNC_START_WEAK_NOALIGN(name) \
- SYM_START(name, SYM_L_WEAK, SYM_A_NONE)
+ SYM_START(name, SYM_L_WEAK, SYM_A_NONE) \
+ __SYM_FUNC_START
+
+#define SYM_FUNC_END(name) \
+ __SYM_FUNC_END \
+ SYM_END(name, SYM_T_FUNC)
/*
* Expose 'sym' to the startup code in arch/x86/boot/startup/, by emitting an
diff --git a/arch/x86/include/asm/vdso.h b/arch/x86/include/asm/vdso.h
index e8afbe9faa5b..498ac423741c 100644
--- a/arch/x86/include/asm/vdso.h
+++ b/arch/x86/include/asm/vdso.h
@@ -2,7 +2,6 @@
#ifndef _ASM_X86_VDSO_H
#define _ASM_X86_VDSO_H
-#include <asm/page_types.h>
#include <linux/linkage.h>
#include <linux/init.h>
--
2.51.0
On 2026-02-03 09:19, Jens Remus wrote: > From: Josh Poimboeuf <jpoimboe@kernel.org> > > Add CFI_STARTPROC and CFI_ENDPROC annotations to the SYM_FUNC_* macros > so the VDSO asm functions don't need to add them manually. Note this > only affects VDSO, the CFI_* macros are empty for the kernel proper. > > [ Jens Remus: Reword commit subject and message as suggested by Josh. ] > > Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org> > Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org> > Signed-off-by: Jens Remus <jremus@linux.ibm.com> > --- > arch/x86/entry/vdso/common/vdso-layout.lds.S | 2 +- > .../x86/entry/vdso/vdso64/vgetrandom-chacha.S | 2 -- > arch/x86/entry/vdso/vdso64/vsgx.S | 4 --- > arch/x86/include/asm/linkage.h | 33 +++++++++++++++---- > arch/x86/include/asm/vdso.h | 1 - > 5 files changed, 28 insertions(+), 14 deletions(-) > > diff --git a/arch/x86/entry/vdso/common/vdso-layout.lds.S b/arch/x86/entry/vdso/common/vdso-layout.lds.S > index a1e30be3e83d..856b8b9d278c 100644 > --- a/arch/x86/entry/vdso/common/vdso-layout.lds.S > +++ b/arch/x86/entry/vdso/common/vdso-layout.lds.S > @@ -1,5 +1,5 @@ > /* SPDX-License-Identifier: GPL-2.0 */ > -#include <asm/vdso.h> > +#include <asm/page_types.h> > #include <asm/vdso/vsyscall.h> > #include <vdso/datapage.h> > > diff --git a/arch/x86/entry/vdso/vdso64/vgetrandom-chacha.S b/arch/x86/entry/vdso/vdso64/vgetrandom-chacha.S > index cc82da9216fb..a33212594731 100644 > --- a/arch/x86/entry/vdso/vdso64/vgetrandom-chacha.S > +++ b/arch/x86/entry/vdso/vdso64/vgetrandom-chacha.S > @@ -22,7 +22,6 @@ CONSTANTS: .octa 0x6b20657479622d323320646e61707865 > * rcx: number of 64-byte blocks to write to output > */ > SYM_FUNC_START(__arch_chacha20_blocks_nostack) > - CFI_STARTPROC > .set output, %rdi > .set key, %rsi > .set counter, %rdx > @@ -175,5 +174,4 @@ SYM_FUNC_START(__arch_chacha20_blocks_nostack) > pxor temp,temp > > ret > - CFI_ENDPROC > SYM_FUNC_END(__arch_chacha20_blocks_nostack) > diff --git a/arch/x86/entry/vdso/vdso64/vsgx.S b/arch/x86/entry/vdso/vdso64/vsgx.S > index 37a3d4c02366..c0342238c976 100644 > --- a/arch/x86/entry/vdso/vdso64/vsgx.S > +++ b/arch/x86/entry/vdso/vdso64/vsgx.S > @@ -24,8 +24,6 @@ > .section .text, "ax" > > SYM_FUNC_START(__vdso_sgx_enter_enclave) > - /* Prolog */ > - .cfi_startproc > push %rbp > .cfi_adjust_cfa_offset 8 > .cfi_rel_offset %rbp, 0 > @@ -143,8 +141,6 @@ SYM_FUNC_START(__vdso_sgx_enter_enclave) > jle .Lout > jmp .Lenter_enclave > > - .cfi_endproc > - > _ASM_VDSO_EXTABLE_HANDLE(.Lenclu_eenter_eresume, .Lhandle_exception) > > SYM_FUNC_END(__vdso_sgx_enter_enclave) > diff --git a/arch/x86/include/asm/linkage.h b/arch/x86/include/asm/linkage.h > index 9d38ae744a2e..9d7f90c57451 100644 > --- a/arch/x86/include/asm/linkage.h > +++ b/arch/x86/include/asm/linkage.h > @@ -40,6 +40,10 @@ > > #ifdef __ASSEMBLER__ > > +#ifndef LINKER_SCRIPT > +#include <asm/dwarf2.h> > +#endif > + > #if defined(CONFIG_MITIGATION_RETHUNK) && !defined(__DISABLE_EXPORTS) && !defined(BUILD_VDSO) > #define RET jmp __x86_return_thunk > #else /* CONFIG_MITIGATION_RETPOLINE */ > @@ -112,34 +116,51 @@ > # define SYM_FUNC_ALIAS_MEMFUNC SYM_FUNC_ALIAS > #endif > > +#define __SYM_FUNC_START \ > + CFI_STARTPROC ASM_NL > + > +#define __SYM_FUNC_END \ > + CFI_ENDPROC ASM_NL > + > /* SYM_TYPED_FUNC_START -- use for indirectly called globals, w/ CFI type */ > #define SYM_TYPED_FUNC_START(name) \ > SYM_TYPED_START(name, SYM_L_GLOBAL, SYM_F_ALIGN) \ > + __SYM_FUNC_START \ > ENDBR > > /* SYM_FUNC_START -- use for global functions */ > #define SYM_FUNC_START(name) \ > - SYM_START(name, SYM_L_GLOBAL, SYM_F_ALIGN) > + SYM_START(name, SYM_L_GLOBAL, SYM_F_ALIGN) \ > + __SYM_FUNC_START > > /* SYM_FUNC_START_NOALIGN -- use for global functions, w/o alignment */ > #define SYM_FUNC_START_NOALIGN(name) \ > - SYM_START(name, SYM_L_GLOBAL, SYM_A_NONE) > + SYM_START(name, SYM_L_GLOBAL, SYM_A_NONE) \ > + __SYM_FUNC_START > > /* SYM_FUNC_START_LOCAL -- use for local functions */ > #define SYM_FUNC_START_LOCAL(name) \ > - SYM_START(name, SYM_L_LOCAL, SYM_F_ALIGN) > + SYM_START(name, SYM_L_LOCAL, SYM_F_ALIGN) \ > + __SYM_FUNC_START > > /* SYM_FUNC_START_LOCAL_NOALIGN -- use for local functions, w/o alignment */ > #define SYM_FUNC_START_LOCAL_NOALIGN(name) \ > - SYM_START(name, SYM_L_LOCAL, SYM_A_NONE) > + SYM_START(name, SYM_L_LOCAL, SYM_A_NONE) \ > + __SYM_FUNC_START > > /* SYM_FUNC_START_WEAK -- use for weak functions */ > #define SYM_FUNC_START_WEAK(name) \ > - SYM_START(name, SYM_L_WEAK, SYM_F_ALIGN) > + SYM_START(name, SYM_L_WEAK, SYM_F_ALIGN) \ > + __SYM_FUNC_START > > /* SYM_FUNC_START_WEAK_NOALIGN -- use for weak functions, w/o alignment */ > #define SYM_FUNC_START_WEAK_NOALIGN(name) \ > - SYM_START(name, SYM_L_WEAK, SYM_A_NONE) > + SYM_START(name, SYM_L_WEAK, SYM_A_NONE) \ > + __SYM_FUNC_START > + > +#define SYM_FUNC_END(name) \ > + __SYM_FUNC_END \ > + SYM_END(name, SYM_T_FUNC) > > /* > * Expose 'sym' to the startup code in arch/x86/boot/startup/, by emitting an > diff --git a/arch/x86/include/asm/vdso.h b/arch/x86/include/asm/vdso.h > index e8afbe9faa5b..498ac423741c 100644 > --- a/arch/x86/include/asm/vdso.h > +++ b/arch/x86/include/asm/vdso.h > @@ -2,7 +2,6 @@ > #ifndef _ASM_X86_VDSO_H > #define _ASM_X86_VDSO_H > > -#include <asm/page_types.h> > #include <linux/linkage.h> > #include <linux/init.h> > Makes sense to me. Acked-by: H. Peter Anvin (Intel) <hpa@zytor.com>
© 2016 - 2026 Red Hat, Inc.