Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751771AbdGLT14 (ORCPT ); Wed, 12 Jul 2017 15:27:56 -0400 Received: from mail-wm0-f67.google.com ([74.125.82.67]:33826 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750738AbdGLT1y (ORCPT ); Wed, 12 Jul 2017 15:27:54 -0400 Date: Wed, 12 Jul 2017 21:27:50 +0200 From: Ingo Molnar To: Josh Poimboeuf Cc: x86@kernel.org, linux-kernel@vger.kernel.org, live-patching@vger.kernel.org, Linus Torvalds , Andy Lutomirski , Jiri Slaby , "H. Peter Anvin" , Peter Zijlstra , Mike Galbraith Subject: Re: [PATCH v3 00/10] x86: ORC unwinder (previously undwarf) Message-ID: <20170712192750.p4wwz6ptjrub7bav@gmail.com> References: <20170712082710.g2syanmhtwqeus4o@gmail.com> <20170712144254.tihj43mvdj2so74d@treble> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20170712144254.tihj43mvdj2so74d@treble> User-Agent: NeoMutt/20170113 (1.7.2) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2548 Lines: 71 * Josh Poimboeuf wrote: > On Wed, Jul 12, 2017 at 10:27:10AM +0200, Ingo Molnar wrote: > > > Create a new "ORC" unwinder, enabled by CONFIG_ORC_UNWINDER, and plug it > > > into the x86 unwinder framework. Objtool is used to generate the ORC > > > debuginfo. The ORC debuginfo format is basically a simplified version > > > of DWARF CFI. More details below. > > > > BTW., we should perhaps consolidate our unwinder related Kconfig space, > > hierarchically: > > > > CONFIG_UNWINDER > > CONFIG_UNWINDER_ORC > > CONFIG_UNWINDER_FRAME_POINTERS > > > > Note that as a side effect it would be a valid small systems build option to have > > no unwinder at all, if CONFIG_EXPERT=y is set and such: !CONFIG_UNWINDER=n would > > be a sibling to !CONFIG_BUG. > > So is the idea that CONFIG_UNWINDER=n means "use the 'guess' unwinder"? > Or should it mean that the unwind API isn't available? > > Without frame pointers and orc, it defaults to the 'guess' unwinder, for > which the only overhead is a tiny amount of code. It's still > technically considered an unwinder because it plugs into the unwind > interfaces (unwind_start(), unwind_next_frame(), etc) and is used for > things like /proc//stack. > > So I'm not really sure CONFIG_UNWINDER=n would make sense. Maybe there > should just be a multiple-choice where you have to choose one of > CONFIG_UNWINDER_{ORC,FRAME_POINTER,GUESS}. Ok, you are right. Maybe we could offer a menu of unwinders - i.e. make the whole Kconfig interface a bit nicer: CONFIG_UNWINDER_FRAME_POINTER CONFIG_UNWINDER_ORC CONFIG_UNWINDER_GUESS ... or so? Default would be the historic FRAME_POINTER, at least initially, I think. I wouldn't mind making CONFIG_UNWINDER_ORC the new default either, due to the non-trivial speedup it offers - but maybe folks would object? > > CONFIG_FRAME_POINTERS et al would be left for architectures where it has a meaning > > beyond backtrace generation. (Not sure whether there's any such architectures.) > > Well, on x86, hardened usercopy relies on frame pointers, but not the > unwinder. It does the frame pointer walk manually to avoid the full > unwinder overhead. See arch_within_stack_frames(). Oh well... > Ok, how about: > > "Orc unwind tables take up ~50% more RAM (+1.3MB on an x86 defconfig > kernel) than DWARF eh_frame tables." > > (My previous 1MB number was from my distro-based config, and it also > forgot to take into account the fast lookup table (".orc_lookup")). Sounds good to me! Thanks, Ingo