* [PATCH 0/6] [PATCH v6 0/6] x86/vdso: VDSO updates and fixes for sframes
@ 2025-04-25 2:37 Steven Rostedt
2025-04-25 2:37 ` [PATCH 1/6] x86/vdso: Fix DWARF generation for getrandom() Steven Rostedt
` (6 more replies)
0 siblings, 7 replies; 14+ messages in thread
From: Steven Rostedt @ 2025-04-25 2:37 UTC (permalink / raw)
To: linux-kernel, linux-trace-kernel
Cc: Masami Hiramatsu, Mark Rutland, Mathieu Desnoyers, Andrew Morton,
Josh Poimboeuf, Jens Remus, x86, Peter Zijlstra, Ingo Molnar,
Indu Bhagat, Andy Lutomirski, Thomas Gleixner, Borislav Petkov,
Dave Hansen, H. Peter Anvin
I'm currently working on getting sframe support from the kernel.
In order to do that, it requires some fixes. Josh Poimboeuf did
a lot of the hard work already, but he told me he doesn't have
time to continue it so I'm picking it up where he left off.
His last series of v4 is here:
https://lore.kernel.org/all/cover.1737511963.git.jpoimboe@kernel.org/
It covers a lot of topics as he found issues with other aspects of
the kernel that needed to be fixed for sframes to work properly.
This series focuses only on the VDSO code. They are helpful fixes
and updates that doesn't rely on sframes (although the last patch
is sframe related).
I based this off of the latest tip/master:
commit 0c6ae66ef164c408daeab6a61aace4b86010369a
Changes since v5: https://lore.kernel.org/all/20250422183439.895236512@goodmis.org/
- Updated change log of patch 3 to make it more of a clean up than a fix.
- Replaced $(comma} with actual comma in Makefile of the last patch.
Josh Poimboeuf (6):
x86/vdso: Fix DWARF generation for getrandom()
x86/asm: Avoid emitting DWARF CFI for non-VDSO
x86/asm: Use CFI_* macros in SYM_FUNC_* macros so they can be added to VDSO
x86/vdso: Use SYM_FUNC_{START,END} in __kernel_vsyscall()
x86/vdso: Use CFI macros in __vdso_sgx_enter_enclave()
x86/vdso: Enable sframe generation in VDSO
----
arch/Kconfig | 3 ++
arch/x86/entry/vdso/Makefile | 10 ++++--
arch/x86/entry/vdso/vdso-layout.lds.S | 5 ++-
arch/x86/entry/vdso/vdso32/system_call.S | 10 ++----
arch/x86/entry/vdso/vgetrandom-chacha.S | 3 +-
arch/x86/entry/vdso/vsgx.S | 19 +++++------
arch/x86/include/asm/dwarf2.h | 54 ++++++++++++++++++++++----------
arch/x86/include/asm/linkage.h | 33 +++++++++++++++----
arch/x86/include/asm/vdso.h | 1 -
9 files changed, 89 insertions(+), 49 deletions(-)
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 1/6] x86/vdso: Fix DWARF generation for getrandom()
2025-04-25 2:37 [PATCH 0/6] [PATCH v6 0/6] x86/vdso: VDSO updates and fixes for sframes Steven Rostedt
@ 2025-04-25 2:37 ` Steven Rostedt
2025-04-25 2:37 ` [PATCH 2/6] x86/asm: Avoid emitting DWARF CFI for non-VDSO Steven Rostedt
` (5 subsequent siblings)
6 siblings, 0 replies; 14+ messages in thread
From: Steven Rostedt @ 2025-04-25 2:37 UTC (permalink / raw)
To: linux-kernel, linux-trace-kernel
Cc: Masami Hiramatsu, Mark Rutland, Mathieu Desnoyers, Andrew Morton,
Josh Poimboeuf, Jens Remus, x86, Peter Zijlstra, Ingo Molnar,
Indu Bhagat, Andy Lutomirski, Thomas Gleixner, Borislav Petkov,
Dave Hansen, H. Peter Anvin
From: Josh Poimboeuf <jpoimboe@kernel.org>
Add CFI annotations to the VDSO implementation of getrandom() so it will
have valid DWARF unwinding metadata.
Fixes: 33385150ac45 ("x86: vdso: Wire up getrandom() vDSO implementation")
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
---
arch/x86/entry/vdso/vgetrandom-chacha.S | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/arch/x86/entry/vdso/vgetrandom-chacha.S b/arch/x86/entry/vdso/vgetrandom-chacha.S
index bcba5639b8ee..cc82da9216fb 100644
--- a/arch/x86/entry/vdso/vgetrandom-chacha.S
+++ b/arch/x86/entry/vdso/vgetrandom-chacha.S
@@ -4,7 +4,7 @@
*/
#include <linux/linkage.h>
-#include <asm/frame.h>
+#include <asm/dwarf2.h>
.section .rodata, "a"
.align 16
@@ -22,7 +22,7 @@ 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,4 +175,5 @@ SYM_FUNC_START(__arch_chacha20_blocks_nostack)
pxor temp,temp
ret
+ CFI_ENDPROC
SYM_FUNC_END(__arch_chacha20_blocks_nostack)
--
2.47.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 2/6] x86/asm: Avoid emitting DWARF CFI for non-VDSO
2025-04-25 2:37 [PATCH 0/6] [PATCH v6 0/6] x86/vdso: VDSO updates and fixes for sframes Steven Rostedt
2025-04-25 2:37 ` [PATCH 1/6] x86/vdso: Fix DWARF generation for getrandom() Steven Rostedt
@ 2025-04-25 2:37 ` Steven Rostedt
2025-04-25 2:37 ` [PATCH 3/6] x86/asm: Use CFI_* macros in SYM_FUNC_* macros so they can be added to VDSO Steven Rostedt
` (4 subsequent siblings)
6 siblings, 0 replies; 14+ messages in thread
From: Steven Rostedt @ 2025-04-25 2:37 UTC (permalink / raw)
To: linux-kernel, linux-trace-kernel
Cc: Masami Hiramatsu, Mark Rutland, Mathieu Desnoyers, Andrew Morton,
Josh Poimboeuf, Jens Remus, x86, Peter Zijlstra, Ingo Molnar,
Indu Bhagat, Andy Lutomirski, Thomas Gleixner, Borislav Petkov,
Dave Hansen, H. Peter Anvin
From: Josh Poimboeuf <jpoimboe@kernel.org>
It was decided years ago that .cfi_* annotations aren't maintainable in
the kernel. They were replaced by objtool unwind hints. For the kernel
proper, ensure the CFI_* macros don't do anything.
On the other hand the VDSO library *does* use them, so user space can
unwind through it.
Make sure these macros only work for VDSO. They aren't actually being
used outside of VDSO anyway, so there's no functional change.
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
---
arch/x86/include/asm/dwarf2.h | 51 ++++++++++++++++++++++++-----------
1 file changed, 35 insertions(+), 16 deletions(-)
diff --git a/arch/x86/include/asm/dwarf2.h b/arch/x86/include/asm/dwarf2.h
index 302e11b15da8..65d958ef1178 100644
--- a/arch/x86/include/asm/dwarf2.h
+++ b/arch/x86/include/asm/dwarf2.h
@@ -6,6 +6,15 @@
#warning "asm/dwarf2.h should be only included in pure assembly files"
#endif
+#ifdef BUILD_VDSO
+
+ /*
+ * For the vDSO, emit both runtime unwind information and debug
+ * symbols for the .dbg file.
+ */
+
+ .cfi_sections .eh_frame, .debug_frame
+
#define CFI_STARTPROC .cfi_startproc
#define CFI_ENDPROC .cfi_endproc
#define CFI_DEF_CFA .cfi_def_cfa
@@ -21,21 +30,31 @@
#define CFI_UNDEFINED .cfi_undefined
#define CFI_ESCAPE .cfi_escape
-#ifndef BUILD_VDSO
- /*
- * Emit CFI data in .debug_frame sections, not .eh_frame sections.
- * The latter we currently just discard since we don't do DWARF
- * unwinding at runtime. So only the offline DWARF information is
- * useful to anyone. Note we should not use this directive if we
- * ever decide to enable DWARF unwinding at runtime.
- */
- .cfi_sections .debug_frame
-#else
- /*
- * For the vDSO, emit both runtime unwind information and debug
- * symbols for the .dbg file.
- */
- .cfi_sections .eh_frame, .debug_frame
-#endif
+#else /* !BUILD_VDSO */
+
+/*
+ * On x86, these macros aren't used outside VDSO. As well they shouldn't be:
+ * they're fragile and very difficult to maintain.
+ */
+
+.macro nocfi args:vararg
+.endm
+
+#define CFI_STARTPROC nocfi
+#define CFI_ENDPROC nocfi
+#define CFI_DEF_CFA nocfi
+#define CFI_DEF_CFA_REGISTER nocfi
+#define CFI_DEF_CFA_OFFSET nocfi
+#define CFI_ADJUST_CFA_OFFSET nocfi
+#define CFI_OFFSET nocfi
+#define CFI_REL_OFFSET nocfi
+#define CFI_REGISTER nocfi
+#define CFI_RESTORE nocfi
+#define CFI_REMEMBER_STATE nocfi
+#define CFI_RESTORE_STATE nocfi
+#define CFI_UNDEFINED nocfi
+#define CFI_ESCAPE nocfi
+
+#endif /* !BUILD_VDSO */
#endif /* _ASM_X86_DWARF2_H */
--
2.47.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 3/6] x86/asm: Use CFI_* macros in SYM_FUNC_* macros so they can be added to VDSO
2025-04-25 2:37 [PATCH 0/6] [PATCH v6 0/6] x86/vdso: VDSO updates and fixes for sframes Steven Rostedt
2025-04-25 2:37 ` [PATCH 1/6] x86/vdso: Fix DWARF generation for getrandom() Steven Rostedt
2025-04-25 2:37 ` [PATCH 2/6] x86/asm: Avoid emitting DWARF CFI for non-VDSO Steven Rostedt
@ 2025-04-25 2:37 ` Steven Rostedt
2025-04-25 2:37 ` [PATCH 4/6] x86/vdso: Use SYM_FUNC_{START,END} in __kernel_vsyscall() Steven Rostedt
` (3 subsequent siblings)
6 siblings, 0 replies; 14+ messages in thread
From: Steven Rostedt @ 2025-04-25 2:37 UTC (permalink / raw)
To: linux-kernel, linux-trace-kernel
Cc: Masami Hiramatsu, Mark Rutland, Mathieu Desnoyers, Andrew Morton,
Josh Poimboeuf, Jens Remus, x86, Peter Zijlstra, Ingo Molnar,
Indu Bhagat, Andy Lutomirski, Thomas Gleixner, Borislav Petkov,
Dave Hansen, H. Peter Anvin
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.
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
[ Fixed rebased issues. ]
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
---
arch/x86/entry/vdso/vdso-layout.lds.S | 2 +-
arch/x86/entry/vdso/vgetrandom-chacha.S | 2 --
arch/x86/entry/vdso/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/vdso-layout.lds.S b/arch/x86/entry/vdso/vdso-layout.lds.S
index ec1ac191a057..60747905de2b 100644
--- a/arch/x86/entry/vdso/vdso-layout.lds.S
+++ b/arch/x86/entry/vdso/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/vgetrandom-chacha.S b/arch/x86/entry/vdso/vgetrandom-chacha.S
index cc82da9216fb..a33212594731 100644
--- a/arch/x86/entry/vdso/vgetrandom-chacha.S
+++ b/arch/x86/entry/vdso/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/vsgx.S b/arch/x86/entry/vdso/vsgx.S
index 37a3d4c02366..c0342238c976 100644
--- a/arch/x86/entry/vdso/vsgx.S
+++ b/arch/x86/entry/vdso/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 b51d8a4673f5..1ba1f208414f 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)
#endif /* _ASM_X86_LINKAGE_H */
diff --git a/arch/x86/include/asm/vdso.h b/arch/x86/include/asm/vdso.h
index b7253ef3205a..c4290dadba66 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.47.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 4/6] x86/vdso: Use SYM_FUNC_{START,END} in __kernel_vsyscall()
2025-04-25 2:37 [PATCH 0/6] [PATCH v6 0/6] x86/vdso: VDSO updates and fixes for sframes Steven Rostedt
` (2 preceding siblings ...)
2025-04-25 2:37 ` [PATCH 3/6] x86/asm: Use CFI_* macros in SYM_FUNC_* macros so they can be added to VDSO Steven Rostedt
@ 2025-04-25 2:37 ` Steven Rostedt
2025-04-25 2:37 ` [PATCH 5/6] x86/vdso: Use CFI macros in __vdso_sgx_enter_enclave() Steven Rostedt
` (2 subsequent siblings)
6 siblings, 0 replies; 14+ messages in thread
From: Steven Rostedt @ 2025-04-25 2:37 UTC (permalink / raw)
To: linux-kernel, linux-trace-kernel
Cc: Masami Hiramatsu, Mark Rutland, Mathieu Desnoyers, Andrew Morton,
Josh Poimboeuf, Jens Remus, x86, Peter Zijlstra, Ingo Molnar,
Indu Bhagat, Andy Lutomirski, Thomas Gleixner, Borislav Petkov,
Dave Hansen, H. Peter Anvin
From: Josh Poimboeuf <jpoimboe@kernel.org>
Use SYM_FUNC_{START,END} instead of all the boilerplate. No functional
change.
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
---
arch/x86/entry/vdso/vdso32/system_call.S | 10 ++--------
1 file changed, 2 insertions(+), 8 deletions(-)
diff --git a/arch/x86/entry/vdso/vdso32/system_call.S b/arch/x86/entry/vdso/vdso32/system_call.S
index d33c6513fd2c..bdc576548240 100644
--- a/arch/x86/entry/vdso/vdso32/system_call.S
+++ b/arch/x86/entry/vdso/vdso32/system_call.S
@@ -9,11 +9,7 @@
#include <asm/alternative.h>
.text
- .globl __kernel_vsyscall
- .type __kernel_vsyscall,@function
- ALIGN
-__kernel_vsyscall:
- CFI_STARTPROC
+SYM_FUNC_START(__kernel_vsyscall)
/*
* Reshuffle regs so that all of any of the entry instructions
* will preserve enough state.
@@ -79,7 +75,5 @@ SYM_INNER_LABEL(int80_landing_pad, SYM_L_GLOBAL)
CFI_RESTORE ecx
CFI_ADJUST_CFA_OFFSET -4
RET
- CFI_ENDPROC
-
- .size __kernel_vsyscall,.-__kernel_vsyscall
+SYM_FUNC_END(__kernel_vsyscall)
.previous
--
2.47.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 5/6] x86/vdso: Use CFI macros in __vdso_sgx_enter_enclave()
2025-04-25 2:37 [PATCH 0/6] [PATCH v6 0/6] x86/vdso: VDSO updates and fixes for sframes Steven Rostedt
` (3 preceding siblings ...)
2025-04-25 2:37 ` [PATCH 4/6] x86/vdso: Use SYM_FUNC_{START,END} in __kernel_vsyscall() Steven Rostedt
@ 2025-04-25 2:37 ` Steven Rostedt
2025-04-25 23:22 ` Indu Bhagat
2025-04-28 16:23 ` Josh Poimboeuf
2025-04-25 2:37 ` [PATCH 6/6] x86/vdso: Enable sframe generation in VDSO Steven Rostedt
2025-04-25 14:47 ` [PATCH 0/6] [PATCH v6 0/6] x86/vdso: VDSO updates and fixes for sframes Steven Rostedt
6 siblings, 2 replies; 14+ messages in thread
From: Steven Rostedt @ 2025-04-25 2:37 UTC (permalink / raw)
To: linux-kernel, linux-trace-kernel
Cc: Masami Hiramatsu, Mark Rutland, Mathieu Desnoyers, Andrew Morton,
Josh Poimboeuf, Jens Remus, x86, Peter Zijlstra, Ingo Molnar,
Indu Bhagat, Andy Lutomirski, Thomas Gleixner, Borislav Petkov,
Dave Hansen, H. Peter Anvin
From: Josh Poimboeuf <jpoimboe@kernel.org>
Use the CFI macros instead of the raw .cfi_* directives to be consistent
with the rest of the VDSO asm. It's also easier on the eyes.
No functional changes.
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
---
arch/x86/entry/vdso/vsgx.S | 15 +++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/arch/x86/entry/vdso/vsgx.S b/arch/x86/entry/vdso/vsgx.S
index c0342238c976..8d7b8eb45c50 100644
--- a/arch/x86/entry/vdso/vsgx.S
+++ b/arch/x86/entry/vdso/vsgx.S
@@ -24,13 +24,14 @@
.section .text, "ax"
SYM_FUNC_START(__vdso_sgx_enter_enclave)
+ SYM_F_ALIGN
push %rbp
- .cfi_adjust_cfa_offset 8
- .cfi_rel_offset %rbp, 0
+ CFI_ADJUST_CFA_OFFSET 8
+ CFI_REL_OFFSET %rbp, 0
mov %rsp, %rbp
- .cfi_def_cfa_register %rbp
+ CFI_DEF_CFA_REGISTER %rbp
push %rbx
- .cfi_rel_offset %rbx, -8
+ CFI_REL_OFFSET %rbx, -8
mov %ecx, %eax
.Lenter_enclave:
@@ -77,13 +78,11 @@ SYM_FUNC_START(__vdso_sgx_enter_enclave)
.Lout:
pop %rbx
leave
- .cfi_def_cfa %rsp, 8
+ CFI_DEF_CFA %rsp, 8
RET
- /* The out-of-line code runs with the pre-leave stack frame. */
- .cfi_def_cfa %rbp, 16
-
.Linvalid_input:
+ CFI_DEF_CFA %rbp, 16
mov $(-EINVAL), %eax
jmp .Lout
--
2.47.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 6/6] x86/vdso: Enable sframe generation in VDSO
2025-04-25 2:37 [PATCH 0/6] [PATCH v6 0/6] x86/vdso: VDSO updates and fixes for sframes Steven Rostedt
` (4 preceding siblings ...)
2025-04-25 2:37 ` [PATCH 5/6] x86/vdso: Use CFI macros in __vdso_sgx_enter_enclave() Steven Rostedt
@ 2025-04-25 2:37 ` Steven Rostedt
2025-05-27 14:16 ` Jens Remus
2025-04-25 14:47 ` [PATCH 0/6] [PATCH v6 0/6] x86/vdso: VDSO updates and fixes for sframes Steven Rostedt
6 siblings, 1 reply; 14+ messages in thread
From: Steven Rostedt @ 2025-04-25 2:37 UTC (permalink / raw)
To: linux-kernel, linux-trace-kernel
Cc: Masami Hiramatsu, Mark Rutland, Mathieu Desnoyers, Andrew Morton,
Josh Poimboeuf, Jens Remus, x86, Peter Zijlstra, Ingo Molnar,
Indu Bhagat, Andy Lutomirski, Thomas Gleixner, Borislav Petkov,
Dave Hansen, H. Peter Anvin
From: Josh Poimboeuf <jpoimboe@kernel.org>
Enable sframe generation in the VDSO library so kernel and user space
can unwind through it.
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
---
Changes since v5: https://lore.kernel.org/20250422183722.919601983@goodmis.org
- Replace $(comma) with a comma in the Makefile
(Jens Remus)
arch/Kconfig | 3 +++
arch/x86/entry/vdso/Makefile | 10 +++++++---
arch/x86/entry/vdso/vdso-layout.lds.S | 3 +++
arch/x86/include/asm/dwarf2.h | 5 ++++-
4 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/arch/Kconfig b/arch/Kconfig
index b0adb665041f..6e7d739e853b 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -435,6 +435,9 @@ config HAVE_HARDLOCKUP_DETECTOR_ARCH
It uses the same command line parameters, and sysctl interface,
as the generic hardlockup detectors.
+config AS_SFRAME
+ def_bool $(as-instr,.cfi_sections .sframe\n.cfi_startproc\n.cfi_endproc)
+
config HAVE_PERF_REGS
bool
help
diff --git a/arch/x86/entry/vdso/Makefile b/arch/x86/entry/vdso/Makefile
index 54d3e9774d62..2dc0e0ca19a7 100644
--- a/arch/x86/entry/vdso/Makefile
+++ b/arch/x86/entry/vdso/Makefile
@@ -47,13 +47,17 @@ quiet_cmd_vdso2c = VDSO2C $@
$(obj)/vdso-image-%.c: $(obj)/vdso%.so.dbg $(obj)/vdso%.so $(obj)/vdso2c FORCE
$(call if_changed,vdso2c)
+ifeq ($(CONFIG_AS_SFRAME),y)
+ SFRAME_CFLAGS := -Wa,-gsframe
+endif
+
#
# Don't omit frame pointers for ease of userspace debugging, but do
# optimize sibling calls.
#
CFL := $(PROFILING) -mcmodel=small -fPIC -O2 -fasynchronous-unwind-tables -m64 \
$(filter -g%,$(KBUILD_CFLAGS)) -fno-stack-protector \
- -fno-omit-frame-pointer -foptimize-sibling-calls \
+ -fno-omit-frame-pointer $(SFRAME_CFLAGS) -foptimize-sibling-calls \
-DDISABLE_BRANCH_PROFILING -DBUILD_VDSO
ifdef CONFIG_MITIGATION_RETPOLINE
@@ -63,7 +67,7 @@ endif
endif
$(vobjs): KBUILD_CFLAGS := $(filter-out $(PADDING_CFLAGS) $(CC_FLAGS_LTO) $(CC_FLAGS_CFI) $(RANDSTRUCT_CFLAGS) $(GCC_PLUGINS_CFLAGS) $(RETPOLINE_CFLAGS),$(KBUILD_CFLAGS)) $(CFL)
-$(vobjs): KBUILD_AFLAGS += -DBUILD_VDSO
+$(vobjs): KBUILD_AFLAGS += -DBUILD_VDSO $(SFRAME_CFLAGS)
#
# vDSO code runs in userspace and -pg doesn't help with profiling anyway.
@@ -104,7 +108,7 @@ $(obj)/%-x32.o: $(obj)/%.o FORCE
targets += vdsox32.lds $(vobjx32s-y)
-$(obj)/%.so: OBJCOPYFLAGS := -S --remove-section __ex_table
+$(obj)/%.so: OBJCOPYFLAGS := -g --remove-section __ex_table
$(obj)/%.so: $(obj)/%.so.dbg FORCE
$(call if_changed,objcopy)
diff --git a/arch/x86/entry/vdso/vdso-layout.lds.S b/arch/x86/entry/vdso/vdso-layout.lds.S
index 60747905de2b..24b92687597b 100644
--- a/arch/x86/entry/vdso/vdso-layout.lds.S
+++ b/arch/x86/entry/vdso/vdso-layout.lds.S
@@ -59,6 +59,7 @@ SECTIONS
.eh_frame_hdr : { *(.eh_frame_hdr) } :text :eh_frame_hdr
.eh_frame : { KEEP (*(.eh_frame)) } :text
+ .sframe : { *(.sframe) } :text :sframe
/*
* Text is well-separated from actual data: there's plenty of
@@ -87,6 +88,7 @@ SECTIONS
* Very old versions of ld do not recognize this name token; use the constant.
*/
#define PT_GNU_EH_FRAME 0x6474e550
+#define PT_GNU_SFRAME 0x6474e554
/*
* We must supply the ELF program headers explicitly to get just one
@@ -98,4 +100,5 @@ PHDRS
dynamic PT_DYNAMIC FLAGS(4); /* PF_R */
note PT_NOTE FLAGS(4); /* PF_R */
eh_frame_hdr PT_GNU_EH_FRAME;
+ sframe PT_GNU_SFRAME;
}
diff --git a/arch/x86/include/asm/dwarf2.h b/arch/x86/include/asm/dwarf2.h
index 65d958ef1178..ce294e6c9017 100644
--- a/arch/x86/include/asm/dwarf2.h
+++ b/arch/x86/include/asm/dwarf2.h
@@ -12,8 +12,11 @@
* For the vDSO, emit both runtime unwind information and debug
* symbols for the .dbg file.
*/
-
+#if defined(__x86_64__) && defined(CONFIG_AS_SFRAME)
+ .cfi_sections .eh_frame, .debug_frame, .sframe
+#else
.cfi_sections .eh_frame, .debug_frame
+#endif
#define CFI_STARTPROC .cfi_startproc
#define CFI_ENDPROC .cfi_endproc
--
2.47.2
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH 0/6] [PATCH v6 0/6] x86/vdso: VDSO updates and fixes for sframes
2025-04-25 2:37 [PATCH 0/6] [PATCH v6 0/6] x86/vdso: VDSO updates and fixes for sframes Steven Rostedt
` (5 preceding siblings ...)
2025-04-25 2:37 ` [PATCH 6/6] x86/vdso: Enable sframe generation in VDSO Steven Rostedt
@ 2025-04-25 14:47 ` Steven Rostedt
6 siblings, 0 replies; 14+ messages in thread
From: Steven Rostedt @ 2025-04-25 14:47 UTC (permalink / raw)
To: linux-kernel, linux-trace-kernel
Cc: Masami Hiramatsu, Mark Rutland, Mathieu Desnoyers, Andrew Morton,
Josh Poimboeuf, Jens Remus, x86, Peter Zijlstra, Ingo Molnar,
Indu Bhagat, Andy Lutomirski, Thomas Gleixner, Borislav Petkov,
Dave Hansen, H. Peter Anvin
Hmm, my scripts added an extra [PATCH ...]
I must have done something wrong. :-/
-- Steve
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 5/6] x86/vdso: Use CFI macros in __vdso_sgx_enter_enclave()
2025-04-25 2:37 ` [PATCH 5/6] x86/vdso: Use CFI macros in __vdso_sgx_enter_enclave() Steven Rostedt
@ 2025-04-25 23:22 ` Indu Bhagat
2025-04-28 16:16 ` Josh Poimboeuf
2025-04-28 16:23 ` Josh Poimboeuf
1 sibling, 1 reply; 14+ messages in thread
From: Indu Bhagat @ 2025-04-25 23:22 UTC (permalink / raw)
To: Steven Rostedt, linux-kernel, linux-trace-kernel
Cc: Masami Hiramatsu, Mark Rutland, Mathieu Desnoyers, Andrew Morton,
Josh Poimboeuf, Jens Remus, x86, Peter Zijlstra, Ingo Molnar,
Andy Lutomirski, Thomas Gleixner, Borislav Petkov, Dave Hansen,
H. Peter Anvin
On 4/24/25 7:37 PM, Steven Rostedt wrote:
> From: Josh Poimboeuf <jpoimboe@kernel.org>
>
> Use the CFI macros instead of the raw .cfi_* directives to be consistent
> with the rest of the VDSO asm. It's also easier on the eyes.
>
> No functional changes.
>
Although unrelated to the current intent of the patch, a question:
Why does the stub after .Linvoke_userspace_handler in vsgs.S not have
CFI directives ?
> Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
> Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
> ---
> arch/x86/entry/vdso/vsgx.S | 15 +++++++--------
> 1 file changed, 7 insertions(+), 8 deletions(-)
>
> diff --git a/arch/x86/entry/vdso/vsgx.S b/arch/x86/entry/vdso/vsgx.S
> index c0342238c976..8d7b8eb45c50 100644
> --- a/arch/x86/entry/vdso/vsgx.S
> +++ b/arch/x86/entry/vdso/vsgx.S
> @@ -24,13 +24,14 @@
> .section .text, "ax"
>
> SYM_FUNC_START(__vdso_sgx_enter_enclave)
> + SYM_F_ALIGN
> push %rbp
> - .cfi_adjust_cfa_offset 8
> - .cfi_rel_offset %rbp, 0
> + CFI_ADJUST_CFA_OFFSET 8
> + CFI_REL_OFFSET %rbp, 0
> mov %rsp, %rbp
> - .cfi_def_cfa_register %rbp
> + CFI_DEF_CFA_REGISTER %rbp
> push %rbx
> - .cfi_rel_offset %rbx, -8
> + CFI_REL_OFFSET %rbx, -8
>
> mov %ecx, %eax
> .Lenter_enclave:
> @@ -77,13 +78,11 @@ SYM_FUNC_START(__vdso_sgx_enter_enclave)
> .Lout:
> pop %rbx
> leave
> - .cfi_def_cfa %rsp, 8
> + CFI_DEF_CFA %rsp, 8
> RET
>
> - /* The out-of-line code runs with the pre-leave stack frame. */
> - .cfi_def_cfa %rbp, 16
> -
> .Linvalid_input:
> + CFI_DEF_CFA %rbp, 16
> mov $(-EINVAL), %eax
> jmp .Lout
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 5/6] x86/vdso: Use CFI macros in __vdso_sgx_enter_enclave()
2025-04-25 23:22 ` Indu Bhagat
@ 2025-04-28 16:16 ` Josh Poimboeuf
2025-04-28 17:10 ` Josh Poimboeuf
0 siblings, 1 reply; 14+ messages in thread
From: Josh Poimboeuf @ 2025-04-28 16:16 UTC (permalink / raw)
To: Indu Bhagat
Cc: Steven Rostedt, linux-kernel, linux-trace-kernel,
Masami Hiramatsu, Mark Rutland, Mathieu Desnoyers, Andrew Morton,
Jens Remus, x86, Peter Zijlstra, Ingo Molnar, Andy Lutomirski,
Thomas Gleixner, Borislav Petkov, Dave Hansen, H. Peter Anvin
On Fri, Apr 25, 2025 at 04:22:22PM -0700, Indu Bhagat wrote:
> On 4/24/25 7:37 PM, Steven Rostedt wrote:
> > From: Josh Poimboeuf <jpoimboe@kernel.org>
> >
> > Use the CFI macros instead of the raw .cfi_* directives to be consistent
> > with the rest of the VDSO asm. It's also easier on the eyes.
> >
> > No functional changes.
> >
>
> Although unrelated to the current intent of the patch, a question:
>
> Why does the stub after .Linvoke_userspace_handler in vsgs.S not have CFI
> directives ?
Yeah, looks like that stack alignment code needs some CFI.
--
Josh
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 5/6] x86/vdso: Use CFI macros in __vdso_sgx_enter_enclave()
2025-04-25 2:37 ` [PATCH 5/6] x86/vdso: Use CFI macros in __vdso_sgx_enter_enclave() Steven Rostedt
2025-04-25 23:22 ` Indu Bhagat
@ 2025-04-28 16:23 ` Josh Poimboeuf
1 sibling, 0 replies; 14+ messages in thread
From: Josh Poimboeuf @ 2025-04-28 16:23 UTC (permalink / raw)
To: Steven Rostedt
Cc: linux-kernel, linux-trace-kernel, Masami Hiramatsu, Mark Rutland,
Mathieu Desnoyers, Andrew Morton, Jens Remus, x86, Peter Zijlstra,
Ingo Molnar, Indu Bhagat, Andy Lutomirski, Thomas Gleixner,
Borislav Petkov, Dave Hansen, H. Peter Anvin
On Thu, Apr 24, 2025 at 10:37:55PM -0400, Steven Rostedt wrote:
> From: Josh Poimboeuf <jpoimboe@kernel.org>
>
> Use the CFI macros instead of the raw .cfi_* directives to be consistent
> with the rest of the VDSO asm. It's also easier on the eyes.
>
> No functional changes.
>
> Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
> Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
> ---
> arch/x86/entry/vdso/vsgx.S | 15 +++++++--------
> 1 file changed, 7 insertions(+), 8 deletions(-)
>
> diff --git a/arch/x86/entry/vdso/vsgx.S b/arch/x86/entry/vdso/vsgx.S
> index c0342238c976..8d7b8eb45c50 100644
> --- a/arch/x86/entry/vdso/vsgx.S
> +++ b/arch/x86/entry/vdso/vsgx.S
> @@ -24,13 +24,14 @@
> .section .text, "ax"
>
> SYM_FUNC_START(__vdso_sgx_enter_enclave)
> + SYM_F_ALIGN
I'm not sure why I had this SYM_F_ALIGN here, but it doesn't belong here
and can be removed.
--
Josh
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 5/6] x86/vdso: Use CFI macros in __vdso_sgx_enter_enclave()
2025-04-28 16:16 ` Josh Poimboeuf
@ 2025-04-28 17:10 ` Josh Poimboeuf
2025-04-29 17:52 ` Indu Bhagat
0 siblings, 1 reply; 14+ messages in thread
From: Josh Poimboeuf @ 2025-04-28 17:10 UTC (permalink / raw)
To: Indu Bhagat
Cc: Steven Rostedt, linux-kernel, linux-trace-kernel,
Masami Hiramatsu, Mark Rutland, Mathieu Desnoyers, Andrew Morton,
Jens Remus, x86, Peter Zijlstra, Ingo Molnar, Andy Lutomirski,
Thomas Gleixner, Borislav Petkov, Dave Hansen, H. Peter Anvin
On Mon, Apr 28, 2025 at 09:17:01AM -0700, Josh Poimboeuf wrote:
> On Fri, Apr 25, 2025 at 04:22:22PM -0700, Indu Bhagat wrote:
> > On 4/24/25 7:37 PM, Steven Rostedt wrote:
> > > From: Josh Poimboeuf <jpoimboe@kernel.org>
> > >
> > > Use the CFI macros instead of the raw .cfi_* directives to be consistent
> > > with the rest of the VDSO asm. It's also easier on the eyes.
> > >
> > > No functional changes.
> > >
> >
> > Although unrelated to the current intent of the patch, a question:
> >
> > Why does the stub after .Linvoke_userspace_handler in vsgs.S not have CFI
> > directives ?
>
> Yeah, looks like that stack alignment code needs some CFI.
Actually, this function uses a frame pointer so I think the stack
pointer alignment shouldn't affect the CFI?
--
Josh
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 5/6] x86/vdso: Use CFI macros in __vdso_sgx_enter_enclave()
2025-04-28 17:10 ` Josh Poimboeuf
@ 2025-04-29 17:52 ` Indu Bhagat
0 siblings, 0 replies; 14+ messages in thread
From: Indu Bhagat @ 2025-04-29 17:52 UTC (permalink / raw)
To: Josh Poimboeuf
Cc: Steven Rostedt, linux-kernel, linux-trace-kernel,
Masami Hiramatsu, Mark Rutland, Mathieu Desnoyers, Andrew Morton,
Jens Remus, x86, Peter Zijlstra, Ingo Molnar, Andy Lutomirski,
Thomas Gleixner, Borislav Petkov, Dave Hansen, H. Peter Anvin
On 4/28/25 10:10 AM, Josh Poimboeuf wrote:
> On Mon, Apr 28, 2025 at 09:17:01AM -0700, Josh Poimboeuf wrote:
>> On Fri, Apr 25, 2025 at 04:22:22PM -0700, Indu Bhagat wrote:
>>> On 4/24/25 7:37 PM, Steven Rostedt wrote:
>>>> From: Josh Poimboeuf <jpoimboe@kernel.org>
>>>>
>>>> Use the CFI macros instead of the raw .cfi_* directives to be consistent
>>>> with the rest of the VDSO asm. It's also easier on the eyes.
>>>>
>>>> No functional changes.
>>>>
>>>
>>> Although unrelated to the current intent of the patch, a question:
>>>
>>> Why does the stub after .Linvoke_userspace_handler in vsgs.S not have CFI
>>> directives ?
>>
>> Yeah, looks like that stack alignment code needs some CFI.
>
> Actually, this function uses a frame pointer so I think the stack
> pointer alignment shouldn't affect the CFI?
>
You are right. rbx is already handled too with the required CFI in the
prologue.
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 6/6] x86/vdso: Enable sframe generation in VDSO
2025-04-25 2:37 ` [PATCH 6/6] x86/vdso: Enable sframe generation in VDSO Steven Rostedt
@ 2025-05-27 14:16 ` Jens Remus
0 siblings, 0 replies; 14+ messages in thread
From: Jens Remus @ 2025-05-27 14:16 UTC (permalink / raw)
To: Steven Rostedt, Josh Poimboeuf, Indu Bhagat, linux-kernel,
linux-trace-kernel
Cc: Masami Hiramatsu, Mark Rutland, Mathieu Desnoyers, Andrew Morton,
x86, Peter Zijlstra, Ingo Molnar, Andy Lutomirski,
Thomas Gleixner, Borislav Petkov, Dave Hansen, H. Peter Anvin
On 25.04.2025 04:37, Steven Rostedt wrote:
> From: Josh Poimboeuf <jpoimboe@kernel.org>
>
> Enable sframe generation in the VDSO library so kernel and user space
> can unwind through it.
>
> Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
> Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
> ---
> Changes since v5: https://lore.kernel.org/20250422183722.919601983@goodmis.org
>
> - Replace $(comma) with a comma in the Makefile
> (Jens Remus)
> diff --git a/arch/x86/entry/vdso/Makefile b/arch/x86/entry/vdso/Makefile
> @@ -47,13 +47,17 @@ quiet_cmd_vdso2c = VDSO2C $@
> $(obj)/vdso-image-%.c: $(obj)/vdso%.so.dbg $(obj)/vdso%.so $(obj)/vdso2c FORCE
> $(call if_changed,vdso2c)
>
> +ifeq ($(CONFIG_AS_SFRAME),y)
> + SFRAME_CFLAGS := -Wa,-gsframe
Nit: The GNU assembler (GAS) option as of "as --help" and "man as" is
"--gsframe" (with two dashes). But as GAS uses getopt_long_only() it
accepts long options prefixed with "--" as well as "-". I don't have
any preference.
> +endif
> +
Regards,
Jens
--
Jens Remus
Linux on Z Development (D3303)
+49-7031-16-1128 Office
jremus@de.ibm.com
IBM
IBM Deutschland Research & Development GmbH; Vorsitzender des Aufsichtsrats: Wolfgang Wendt; Geschäftsführung: David Faller; Sitz der Gesellschaft: Böblingen; Registergericht: Amtsgericht Stuttgart, HRB 243294
IBM Data Privacy Statement: https://www.ibm.com/privacy/
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2025-05-27 14:17 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-25 2:37 [PATCH 0/6] [PATCH v6 0/6] x86/vdso: VDSO updates and fixes for sframes Steven Rostedt
2025-04-25 2:37 ` [PATCH 1/6] x86/vdso: Fix DWARF generation for getrandom() Steven Rostedt
2025-04-25 2:37 ` [PATCH 2/6] x86/asm: Avoid emitting DWARF CFI for non-VDSO Steven Rostedt
2025-04-25 2:37 ` [PATCH 3/6] x86/asm: Use CFI_* macros in SYM_FUNC_* macros so they can be added to VDSO Steven Rostedt
2025-04-25 2:37 ` [PATCH 4/6] x86/vdso: Use SYM_FUNC_{START,END} in __kernel_vsyscall() Steven Rostedt
2025-04-25 2:37 ` [PATCH 5/6] x86/vdso: Use CFI macros in __vdso_sgx_enter_enclave() Steven Rostedt
2025-04-25 23:22 ` Indu Bhagat
2025-04-28 16:16 ` Josh Poimboeuf
2025-04-28 17:10 ` Josh Poimboeuf
2025-04-29 17:52 ` Indu Bhagat
2025-04-28 16:23 ` Josh Poimboeuf
2025-04-25 2:37 ` [PATCH 6/6] x86/vdso: Enable sframe generation in VDSO Steven Rostedt
2025-05-27 14:16 ` Jens Remus
2025-04-25 14:47 ` [PATCH 0/6] [PATCH v6 0/6] x86/vdso: VDSO updates and fixes for sframes Steven Rostedt
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).