Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752293AbdGIN7t (ORCPT ); Sun, 9 Jul 2017 09:59:49 -0400 Received: from mail-io0-f178.google.com ([209.85.223.178]:35601 "EHLO mail-io0-f178.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750992AbdGIN7r (ORCPT ); Sun, 9 Jul 2017 09:59:47 -0400 Date: Sun, 9 Jul 2017 09:59:44 -0400 (EDT) From: Nicolas Pitre To: Masahiro Yamada cc: Ingo Molnar , Nicholas Piggin , linux-arch , Linux Kbuild mailing list , X86 ML , Linux Kernel Mailing List , Arnd Bergmann , Paul Burton , Linus Torvalds , Thomas Gleixner , "H. Peter Anvin" , Peter Zijlstra , Andrew Morton Subject: Re: [RFC PATCH] x86: enable dead code and data elimination (LTO) In-Reply-To: Message-ID: References: <20170709031333.29443-1-npiggin@gmail.com> <20170709090551.bm2c55ctt3togim7@gmail.com> User-Agent: Alpine 2.20 (LFD 67 2015-01-07) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1639 Lines: 50 On Sun, 9 Jul 2017, Masahiro Yamada wrote: > Hi. > > 2017-07-09 18:05 GMT+09:00 Ingo Molnar : > > > > * Nicholas Piggin wrote: > > > >> FYI, easiest way to check if you forgot to KEEP a linker table is > >> to look at `readelf -S vmlinux` differences, and to see what is > >> being trimmed, look at nm differences or use --print-gc-sections > >> LD option to see what symbols you're trimming. Linker tables, > >> boot entry, and exception entry tends to require anchoring. > > > > Could you please add a debug build target to display all discarded > > symbols/sections? Something like: > > > > make lto-check > > > > ... or so? > > > > Thanks, > > > > Ingo > > > Actually, LTO activity existed some years ago > (but not pulled in). > > http://www.spinics.net/lists/linux-kbuild/msg09242.html > > > IIUC, this patch enables "dead code elimination", > (or "garbage collection"?), > but I think it is different from what is called LTO. Yes, it is different. With gc-sections the linker simply drops code sections that have no references to them. This is therefore fast and low complexity. LTO postpones the compiler's code optimization passes at the point where everything is linked together and can do things like constant propagation across multiple files, etc. LTO is therefore more efficient at removing unused code but compilation time is much longer due to the added complexity and inherent difficulty to parallelize the operation across multiple CPUS. I think we should aim for gc-sections to be used by default and have LTO as a possible option only. Nicolas