x86/unwind: Add the ORC unwinder
Add the new ORC unwinder which is enabled by CONFIG_ORC_UNWINDER=y. It plugs into the existing x86 unwinder framework. It relies on objtool to generate the needed .orc_unwind and .orc_unwind_ip sections. For more details on why ORC is used instead of DWARF, see Documentation/x86/orc-unwinder.txt - but the short version is that it's a simplified, fundamentally more robust debugninfo data structure, which also allows up to two orders of magnitude faster lookups than the DWARF unwinder - which matters to profiling workloads like perf. Thanks to Andy Lutomirski for the performance improvement ideas: splitting the ORC unwind table into two parallel arrays and creating a fast lookup table to search a subset of the unwind table. Signed-off-by:Josh Poimboeuf <jpoimboe@redhat.com> Cc: Andy Lutomirski <luto@kernel.org> Cc: Borislav Petkov <bp@alien8.de> Cc: Brian Gerst <brgerst@gmail.com> Cc: Denys Vlasenko <dvlasenk@redhat.com> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Jiri Slaby <jslaby@suse.cz> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Mike Galbraith <efault@gmx.de> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: live-patching@vger.kernel.org Link: http://lkml.kernel.org/r/0a6cbfb40f8da99b7a45a1a8302dc6aef16ec812.1500938583.git.jpoimboe@redhat.com [ Extended the changelog. ] Signed-off-by:
Ingo Molnar <mingo@kernel.org>
Showing
- Documentation/x86/orc-unwinder.txt 179 additions, 0 deletionsDocumentation/x86/orc-unwinder.txt
- arch/um/include/asm/unwind.h 8 additions, 0 deletionsarch/um/include/asm/unwind.h
- arch/x86/Kconfig 1 addition, 0 deletionsarch/x86/Kconfig
- arch/x86/Kconfig.debug 25 additions, 0 deletionsarch/x86/Kconfig.debug
- arch/x86/include/asm/module.h 9 additions, 0 deletionsarch/x86/include/asm/module.h
- arch/x86/include/asm/orc_lookup.h 46 additions, 0 deletionsarch/x86/include/asm/orc_lookup.h
- arch/x86/include/asm/orc_types.h 1 addition, 1 deletionarch/x86/include/asm/orc_types.h
- arch/x86/include/asm/unwind.h 47 additions, 29 deletionsarch/x86/include/asm/unwind.h
- arch/x86/kernel/Makefile 3 additions, 5 deletionsarch/x86/kernel/Makefile
- arch/x86/kernel/module.c 10 additions, 1 deletionarch/x86/kernel/module.c
- arch/x86/kernel/setup.c 3 additions, 0 deletionsarch/x86/kernel/setup.c
- arch/x86/kernel/unwind_frame.c 16 additions, 23 deletionsarch/x86/kernel/unwind_frame.c
- arch/x86/kernel/unwind_guess.c 5 additions, 0 deletionsarch/x86/kernel/unwind_guess.c
- arch/x86/kernel/unwind_orc.c 582 additions, 0 deletionsarch/x86/kernel/unwind_orc.c
- arch/x86/kernel/vmlinux.lds.S 3 additions, 0 deletionsarch/x86/kernel/vmlinux.lds.S
- include/asm-generic/vmlinux.lds.h 26 additions, 1 deletioninclude/asm-generic/vmlinux.lds.h
- lib/Kconfig.debug 3 additions, 0 deletionslib/Kconfig.debug
- scripts/Makefile.build 10 additions, 4 deletionsscripts/Makefile.build
Please register or sign in to comment