Received: by 2002:a25:ef43:0:0:0:0:0 with SMTP id w3csp45509ybm; Tue, 26 May 2020 10:20:50 -0700 (PDT) X-Google-Smtp-Source: ABdhPJycnOhMyBuldLGm7Q3jvekeuNeonbnNQJmjUbPmsufDAyovYF86FMVyk1dfIpCN6lAsI9Dr X-Received: by 2002:a17:907:20ee:: with SMTP id rh14mr2126660ejb.158.1590513650696; Tue, 26 May 2020 10:20:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1590513650; cv=none; d=google.com; s=arc-20160816; b=YQjs6zSn4DameJyJc+hBNAhtJQPxZiq6DPZ1kxQWiqq8dVMHRlNujAZaJJ3eZC2tvg i6KHvfwv+w5+vb+W/45ou3ufwLepo9sAfWdz4WK1kRBg8YFfs6ZDsFQeiQGXshVrNIDC 1RwbetM/HduUX13KP3fzdk4x305KX9eUwjlFYWk8ik231NOwyXJ/xJ7ynMJI4u/TfABK wqAOEUU+g07HE5b4464baUv403xurMtbdeCgsf3oazqOf/wFZqSjguAvt1+f/Qb6vygB MYq78WTbVgPpE6KMt8kvsNZHXcnwHwqg5QJcl5UnU+tLsm80/3bBfWtSvWe8IEccK/Fx e4oQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:from:subject:references :mime-version:message-id:in-reply-to:date:dkim-signature; bh=qz8XL5HjRypO1RoMKqirUSXQ6SNzxq1AQO7Af1uk7eg=; b=aC8799dzOCTbykKw1DhdYsr61W02JVuziu3AAT4D/Aef7B5FrUMwaPsv98GsmI39kb 0xVVA7Kx/COPHo7TK+epEzkyQZ01H6OFCYMIIly1cOgjaIn3ty9Lakx0lBcKt7HD25AJ bW/3jBFz7+lG2tVCzXV/l0hgwTuMfrhpq18bboB188520Ape/+EnuU427w3o079AVU3w D36+/5xJJUBwTHplNY4AV0wWUZsy4IypdX+UZD0wKOmncBySQNOIIUKPIfAbpSulifdj 07nIzHj60Mkn42ulgS80GvPhhtuW8ShU7PLtuKopfCMq6EAKRu83GDIXZbU9q4tpjxfV 6a2A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=aV+EtZWf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id p12si265825ejo.592.2020.05.26.10.20.26; Tue, 26 May 2020 10:20:50 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=aV+EtZWf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728731AbgEZRSj (ORCPT + 99 others); Tue, 26 May 2020 13:18:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44808 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728581AbgEZRSi (ORCPT ); Tue, 26 May 2020 13:18:38 -0400 Received: from mail-yb1-xb4a.google.com (mail-yb1-xb4a.google.com [IPv6:2607:f8b0:4864:20::b4a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C2283C03E96E for ; Tue, 26 May 2020 10:18:38 -0700 (PDT) Received: by mail-yb1-xb4a.google.com with SMTP id h129so21039261ybc.3 for ; Tue, 26 May 2020 10:18:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=qz8XL5HjRypO1RoMKqirUSXQ6SNzxq1AQO7Af1uk7eg=; b=aV+EtZWfxq8hZz390kw22ff2bERfaAxS+NwmsZdiIUYAvoCIzy6goI4eJRxT3jrPh8 xZYkVZxurB1Lv/uWfUfFZ3pJ5UsvfeEIXy854tkDM9LazUXsuIeOmUybAr4CYx3HQmVF qyGFlExpbOoOyFc7nVlxMSoptdyr/Q9z8Xo/uO/3QgOoZd9/YiPasUywI8nfmj9Vlg8u IVLFQthtuCm0vWlOg2NN9zs23tyOQBP6RENrKAVbXKWf/MOCFN11o2vkNBkxIN20dZzL RqrWSqv9lpx2dbFJ6M0CSj/EZEFGfKqE1UBO6lue5FJgw9NbeGY1eKIIgrXnUwRlX98o rIBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=qz8XL5HjRypO1RoMKqirUSXQ6SNzxq1AQO7Af1uk7eg=; b=qQ0IOYNruWacdowNpzmZBI4aG53UWDMRN45KusL8EukNReVW4oR1Bv/Q5FFz4k99ZJ +M7ys2vgZSWNfcmllZi/QvFBc/MgDWjIOA6NkpX7IKFNkg7uYGimxGavSJPzehgBjC/W cbtwqz0NrNsUmmYBhA4B/i5rFD8K7XBZ3ZWfgMQCs1wLaqD+1Dopdqqhn+hgO8viAwkG +oirJyAl0AwX6UD0nZesjeYLiaugHp2p11G6fBXEOcv5z5Ub6cKjsHqoy/fmk0KAImv8 bRriIxFIdHf/1o4W9Bjo1/Oso9/QSfqKil4kAAJrUbkexPiDxDZTJIMtk07CUkoWpRYL 6v2A== X-Gm-Message-State: AOAM531yEdexj9CT4UXVOjpkmnMphHZ/9mAjNGpIs+n9lwyNcKtMkpOz 2JbGZ8jHkyakCT5juIQHkZFHPEPmN+Whmq6c0T4= X-Received: by 2002:a25:253:: with SMTP id 80mr3241130ybc.405.1590513517344; Tue, 26 May 2020 10:18:37 -0700 (PDT) Date: Tue, 26 May 2020 10:18:29 -0700 In-Reply-To: Message-Id: <20200526171830.151966-1-ndesaulniers@google.com> Mime-Version: 1.0 References: X-Mailer: git-send-email 2.27.0.rc0.183.gde8f92d652-goog Subject: [PATCH v5] Makefile: support compressed debug info From: Nick Desaulniers To: Masahiro Yamada Cc: Sedat Dilek , Fangrui Song , Nick Clifton , Nick Desaulniers , David Blaikie , Michal Marek , Andrew Morton , Changbin Du , Randy Dunlap , Stephen Rothwell , Mauro Carvalho Chehab , Anshuman Khandual , Krzysztof Kozlowski , linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org, clang-built-linux@googlegroups.com Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org As debug information gets larger and larger, it helps significantly save the size of vmlinux images to compress the information in the debug information sections. Note: this debug info is typically split off from the final compressed kernel image, which is why vmlinux is what's used in conjunction with GDB. Minimizing the debug info size should have no impact on boot times, or final compressed kernel image size. All of the debug sections will have a `C` flag set. $ readelf -S $ bloaty vmlinux.gcc75.compressed.dwarf4 -- \ vmlinux.gcc75.uncompressed.dwarf4 FILE SIZE VM SIZE -------------- -------------- +0.0% +18 [ = ] 0 [Unmapped] -73.3% -114Ki [ = ] 0 .debug_aranges -76.2% -2.01Mi [ = ] 0 .debug_frame -73.6% -2.89Mi [ = ] 0 .debug_str -80.7% -4.66Mi [ = ] 0 .debug_abbrev -82.9% -4.88Mi [ = ] 0 .debug_ranges -70.5% -9.04Mi [ = ] 0 .debug_line -79.3% -10.9Mi [ = ] 0 .debug_loc -39.5% -88.6Mi [ = ] 0 .debug_info -18.2% -123Mi [ = ] 0 TOTAL $ bloaty vmlinux.clang11.compressed.dwarf4 -- \ vmlinux.clang11.uncompressed.dwarf4 FILE SIZE VM SIZE -------------- -------------- +0.0% +23 [ = ] 0 [Unmapped] -65.6% -871 [ = ] 0 .debug_aranges -77.4% -1.84Mi [ = ] 0 .debug_frame -82.9% -2.33Mi [ = ] 0 .debug_abbrev -73.1% -2.43Mi [ = ] 0 .debug_str -84.8% -3.07Mi [ = ] 0 .debug_ranges -65.9% -8.62Mi [ = ] 0 .debug_line -86.2% -40.0Mi [ = ] 0 .debug_loc -42.0% -64.1Mi [ = ] 0 .debug_info -22.1% -122Mi [ = ] 0 TOTAL For x86_64 defconfig + LLVM=1 (before): Elapsed (wall clock) time (h:mm:ss or m:ss): 3:22.03 Maximum resident set size (kbytes): 43856 For x86_64 defconfig + LLVM=1 (after): Elapsed (wall clock) time (h:mm:ss or m:ss): 3:32.52 Maximum resident set size (kbytes): 1566776 Thanks to: Nick Clifton helped us to provide the minimal binutils version. Sedat Dilet found an increase in size of debug .deb package. Cc: Nick Clifton Cc: Sedat Dilek Suggested-by: David Blaikie Reviewed-by: Fangrui Song Tested-by: Sedat Dilek Signed-off-by: Nick Desaulniers --- Changes V4 -> V5: * Drop unrelated hunk from a dirty tree. Changes V3 -> V4: * Add thanks line to commit message as per Masahiro. * Swap Sugguested-by to Cc for two lines in commit message, as per Masahiro. Changes V2 -> V3: * Fix blaikie@'s email addr. * Fix Fangrui's Reviewed-by tag as per Masahiro. * Fix help text as per Masahiro. * Fix -Wa$(comma)foo as per Masahiro. Changes V1 -> V2: * rebase on linux-next. * Add assembler flags as per Fangrui. * Add note about KDEB_COMPRESS+scripts/package/builddeb as per Sedat and Masahiro. * Add note about bintutils version requirements as per Nick C. * Add note about measured increased build time and max RSS. Makefile | 6 ++++++ lib/Kconfig.debug | 17 +++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/Makefile b/Makefile index 71687bfe1cd9..be8835296754 100644 --- a/Makefile +++ b/Makefile @@ -822,6 +822,12 @@ DEBUG_CFLAGS += $(call cc-option, -femit-struct-debug-baseonly) \ $(call cc-option,-fno-var-tracking) endif +ifdef CONFIG_DEBUG_INFO_COMPRESSED +DEBUG_CFLAGS += -gz=zlib +KBUILD_AFLAGS += -Wa,--compress-debug-sections=zlib +KBUILD_LDFLAGS += --compress-debug-sections=zlib +endif + KBUILD_CFLAGS += $(DEBUG_CFLAGS) export DEBUG_CFLAGS diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index b8f023e054b9..7fc82dcf814b 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -225,6 +225,23 @@ config DEBUG_INFO_REDUCED DEBUG_INFO build and compile times are reduced too. Only works with newer gcc versions. +config DEBUG_INFO_COMPRESSED + bool "Compressed debugging information" + depends on DEBUG_INFO + depends on $(cc-option,-gz=zlib) + depends on $(as-option,-Wa$(comma)--compress-debug-sections=zlib) + depends on $(ld-option,--compress-debug-sections=zlib) + help + Compress the debug information using zlib. Requires GCC 5.0+ or Clang + 5.0+, binutils 2.26+, and zlib. + + Users of dpkg-deb via scripts/package/builddeb may find an increase in + size of their debug .deb packages with this config set, due to the + debug info being compressed with zlib, then the object files being + recompressed with a different compression scheme. But this is still + preferable to setting $KDEB_COMPRESS to "none" which would be even + larger. + config DEBUG_INFO_SPLIT bool "Produce split debuginfo in .dwo files" depends on DEBUG_INFO -- 2.27.0.rc0.183.gde8f92d652-goog