Using perf probe and libdw on kernel modules failed to find CFI data for symbols. The CFI data is stored in the .eh_frame section. The elfutils libdw is not able to extract the CFI data correctly, because the .eh_frame section requires "non-simple" relocations for kernel modules. The suggestion is to avoid these "non-simple" relocations by emitting the CFI data in the .debug_frame section. Let gcc emit respective directives by specifying the -fno-asynchronous-unwind-tables option. Using the .debug_frame section for CFI data, the .eh_frame section becomes unused and, thus, discard it for kernel and modules builds The vDSO requires the .eh_frame section and, hence, emit the CFI data in both, the .eh_frame and .debug_frame sections. See also discussion on elfutils/libdw bugzilla: https://sourceware.org/bugzilla/show_bug.cgi?id=22452 Suggested-by: Mark Wielaard <mark@klomp.org> Signed-off-by: Hendrik Brueckner <brueckner@linux.vnet.ibm.com> Reviewed-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
26 lines
593 B
C
26 lines
593 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _ASM_S390_DWARF_H
|
|
#define _ASM_S390_DWARF_H
|
|
|
|
#ifdef __ASSEMBLY__
|
|
|
|
#ifndef BUILD_VDSO
|
|
/*
|
|
* Emit CFI data in .debug_frame sections and not in .eh_frame
|
|
* sections. The .eh_frame CFI is used for runtime unwind
|
|
* information that is not being used. Hence, vmlinux.lds.S
|
|
* can discard the .eh_frame sections.
|
|
*/
|
|
.cfi_sections .debug_frame
|
|
#else
|
|
/*
|
|
* For vDSO, emit CFI data in both, .eh_frame and .debug_frame
|
|
* sections.
|
|
*/
|
|
.cfi_sections .eh_frame, .debug_frame
|
|
#endif
|
|
|
|
#endif /* __ASSEMBLY__ */
|
|
|
|
#endif /* _ASM_S390_DWARF_H */
|