| From 9e565292270a2d55524be38835104c564ac8f795 Mon Sep 17 00:00:00 2001 |
| From: Roland McGrath <roland@redhat.com> |
| Date: Thu, 13 May 2010 21:43:03 -0700 |
| Subject: [PATCH] x86: Use .cfi_sections for assembly code |
| |
| The newer assemblers support the .cfi_sections directive so we can put |
| the CFI from .S files into the .debug_frame section that is preserved |
| in unstripped vmlinux and in separate debuginfo, rather than the |
| .eh_frame section that is now discarded by vmlinux.lds.S. |
| |
| Signed-off-by: Roland McGrath <roland@redhat.com> |
| LKML-Reference: <20100514044303.A6FE7400BE@magilla.sf.frob.com> |
| Signed-off-by: H. Peter Anvin <hpa@zytor.com> |
| |
| arch/x86/Makefile | 5 +++-- |
| arch/x86/include/asm/dwarf2.h | 12 ++++++++++++ |
| 2 files changed, 15 insertions(+), 2 deletions(-) |
| |
| diff --git a/arch/x86/Makefile b/arch/x86/Makefile |
| index 0a43dc5..8aa1b59 100644 |
| |
| |
| @@ -95,8 +95,9 @@ sp-$(CONFIG_X86_64) := rsp |
| cfi := $(call as-instr,.cfi_startproc\n.cfi_rel_offset $(sp-y)$(comma)0\n.cfi_endproc,-DCONFIG_AS_CFI=1) |
| # is .cfi_signal_frame supported too? |
| cfi-sigframe := $(call as-instr,.cfi_startproc\n.cfi_signal_frame\n.cfi_endproc,-DCONFIG_AS_CFI_SIGNAL_FRAME=1) |
| -KBUILD_AFLAGS += $(cfi) $(cfi-sigframe) |
| -KBUILD_CFLAGS += $(cfi) $(cfi-sigframe) |
| +cfi-sections := $(call as-instr,.cfi_sections .debug_frame,-DCONFIG_AS_CFI_SECTIONS=1) |
| +KBUILD_AFLAGS += $(cfi) $(cfi-sigframe) $(cfi-sections) |
| +KBUILD_CFLAGS += $(cfi) $(cfi-sigframe) $(cfi-sections) |
| |
| LDFLAGS := -m elf_$(UTS_MACHINE) |
| |
| diff --git a/arch/x86/include/asm/dwarf2.h b/arch/x86/include/asm/dwarf2.h |
| index ae6253a..733f7e9 100644 |
| |
| |
| @@ -34,6 +34,18 @@ |
| #define CFI_SIGNAL_FRAME |
| #endif |
| |
| +#if defined(CONFIG_AS_CFI_SECTIONS) && defined(__ASSEMBLY__) |
| + /* |
| + * 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 this |
| + * file is used in the vDSO assembly, or if vmlinux.lds.S gets |
| + * changed so it doesn't discard .eh_frame. |
| + */ |
| + .cfi_sections .debug_frame |
| +#endif |
| + |
| #else |
| |
| /* |
| -- |
| 1.7.0.1 |
| |