Received: by 2002:a05:6a10:6744:0:0:0:0 with SMTP id w4csp5400025pxu; Thu, 22 Oct 2020 00:54:38 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzTFp6PcGwVmDeTtKSfWssvHj0+zxIGqqXqbwI3Mct9up7v3Iz/LiyvGenVT9QeJ6Bbidy7 X-Received: by 2002:a17:906:234d:: with SMTP id m13mr1099960eja.497.1603353277991; Thu, 22 Oct 2020 00:54:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1603353277; cv=none; d=google.com; s=arc-20160816; b=pmw4t0RQrN4ZVVteN5cFW/qrSOLNdWFOySxX978TP4eQ+oMdyBbddOolnqgYRSdZS5 9xe2l6NV70mzcz7GVOLgsVMPN4eXvOg+/fN0huTwEcjQnK4KPWje/Vj4B9gqUPT4bTyv Ld5EDNAbn/pLtD4NLg3se2EHQXBNH4eVmkaUARi5P20Fv6PNfbABZSoChsA4vXLqnvL4 1SRsaNCUxNc+bFtzlCNeq1v1RxvL93QMijNJVgfkT63Ms1VbwxV7ZELGXWU7CQrJRUj5 t5f64a59n6VO1ml0TwftbwUPfKvB4rJUz313v4wl6xlRkfmgebvQbCa85AQWUuhe8W32 yIBQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:mime-version:message-id:date :sender:dkim-signature; bh=Js6xKSsQarFSzAqlLNbqSKDvsIAL2Ulu7vmD2P/qCQ0=; b=ci/SP2lExB3hhLB/SQVbzavcRc/1UpXDcrldv293ZTB4t+EGzdLsuQrp0WNvO8X8Np iTEYRtGJok8S4vRtyEbdz6HdSeSpd//bcm/3CrLS7jCJ9IUC5TqLkHJNQIBAkVLeEd9x ErmgznEgqDzRM/SVJP9e23oQU9wGzbJQmArqakFJEm2ddNmbvVdjMThKVygnugKX5Khz 9zKPfMcD0W4ZIkUIa1YQH46G+72VUQENLo7zgscbofKxrvAnxy/vwhSGECRWlGt8bu0S MrzvTqp8XLtPLw4+AARLW+g39PhRgO5hD/HX0qwqYa6i2lsm2smDRJAW3QVePz5Vz8Ii Nlrw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=G2Rk3NTN; 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 a95si485469edf.1.2020.10.22.00.54.15; Thu, 22 Oct 2020 00:54:37 -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=G2Rk3NTN; 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 S2894655AbgJVBVQ (ORCPT + 99 others); Wed, 21 Oct 2020 21:21:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52942 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2894656AbgJVBVQ (ORCPT ); Wed, 21 Oct 2020 21:21:16 -0400 Received: from mail-qk1-x749.google.com (mail-qk1-x749.google.com [IPv6:2607:f8b0:4864:20::749]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 957F3C0613D2 for ; Wed, 21 Oct 2020 18:21:14 -0700 (PDT) Received: by mail-qk1-x749.google.com with SMTP id d5so2947259qkg.16 for ; Wed, 21 Oct 2020 18:21:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=sender:date:message-id:mime-version:subject:from:to:cc; bh=Js6xKSsQarFSzAqlLNbqSKDvsIAL2Ulu7vmD2P/qCQ0=; b=G2Rk3NTNeizVUXrrKW3VThtrUg6KYQV+3OC3BDc+RG+hwSeMAw8v4iHA2xRdRG9n5I MD65Qj5qKfMSrhANDPNJF3GBlcvoYBnrhpGQqNMm+n/F3/oERzkjI6iRTeWU+5OrRokI UvzX33T3DP4Zitx8mfsPIsnmVidmUlKBXa1HPdwo9NSCFwJeUV8cdNintLOB44QUXA4G 26FUiN7HUU1+CVQxQ70Chvu9Kdv1qGw3+KNfjBGzQfoPeWKH+S/2OwFfW4D2+5u64FUk WTLmfT58xbVKnedhfOCVmvItSXlFylKG+mPPD1nniNaEqU8jshaZECJJQ/QtY1h6+GnH 3C7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:date:message-id:mime-version:subject:from :to:cc; bh=Js6xKSsQarFSzAqlLNbqSKDvsIAL2Ulu7vmD2P/qCQ0=; b=AqWjlMqfQfwhh4lNZ89LGg255/poJMhx1ifYX3KhaBeNo+FKM+UMCP9XddlAybn+FY RVy5Rrx1ztvD0UiwPyoA3cCw+d/pIYdgTFpW6DlG9abH2sjLEIGVUN4jslkNTx/9JabW lIGxNV0v9EXGKWuhri7Kui7s3lXUIJCFXcLZ+k/yYD80NWuTMQmgqqxOjACz7QvuX+QV 6s6hCaiDdTjTwcenA5Q59A2vXOjjk/emh4bzD1yWtIPiphlybNI7JYgArOJ2ecIUcWAa 7kUQdoNnJxYPnS5uuyoQCtQGFKISoduK5nsWDP4793TuhbPUpx4ZArwZYPuNrYLRi/Lg jBJA== X-Gm-Message-State: AOAM531K/TgKRHEZlMbepR/t8pXoWlD52JyqU8wfmCZeehCNEunZMLby 3IfjlTQyKVTzgs+/ymzMUyehgT0EIZBc5t+Drkw= Sender: "ndesaulniers via sendgmr" X-Received: from ndesaulniers1.mtv.corp.google.com ([2620:15c:211:202:f693:9fff:fef4:4d25]) (user=ndesaulniers job=sendgmr) by 2002:ad4:46a8:: with SMTP id br8mr234132qvb.24.1603329673641; Wed, 21 Oct 2020 18:21:13 -0700 (PDT) Date: Wed, 21 Oct 2020 18:21:06 -0700 Message-Id: <20201022012106.1875129-1-ndesaulniers@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.29.0.rc1.297.gfa9743e501-goog Subject: [PATCH] Kbuild: implement support for DWARF5 From: Nick Desaulniers To: Masahiro Yamada Cc: linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org, clang-built-linux@googlegroups.com, linux-toolchains@vger.kernel.org, Nick Desaulniers Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org DWARF5 is the latest standard of the DWARF debug info format. Feature detection of DWARF5 is onerous, especially given that we've removed $(AS), so we must query $(CC) for DWARF5 assembler directive support. Further -gdwarf-X where X is an unsupported value doesn't produce an error in $(CC). GNU `as` only recently gained support for specifying -gdwarf-5. The DWARF version of a binary can be validated with: $ llvm-dwarfdump vmlinux | head -n 5 | grep version or $ readelf --debug-dump=info vmlinux 2>/dev/null | grep Version DWARF5 wins significantly in terms of size when mixed with compression (CONFIG_DEBUG_INFO_COMPRESSED). 363M vmlinux.clang12.dwarf5.compressed 434M vmlinux.clang12.dwarf4.compressed 439M vmlinux.clang12.dwarf2.compressed 457M vmlinux.clang12.dwarf5 536M vmlinux.clang12.dwarf4 548M vmlinux.clang12.dwarf2 Make CONFIG_DEBUG_INFO_DWARF4 part of a Kconfig choice to preserve forward compatibility. Link: http://www.dwarfstd.org/doc/DWARF5.pdf Signed-off-by: Nick Desaulniers --- RFC because this patch is super half baked, but I'm looking for feedback. I would logically split this into a series of patches; 1. disable -Wa,gdwarf-2 for LLVM_IAS=1, see also https://github.com/ClangBuiltLinux/linux/issues/716 https://github.com/ClangBuiltLinux/continuous-integration/blob/master/patches/llvm-all/linux-next/arm64/silence-dwarf2-warnings.patch that way we can backport for improved LLVM_IAS support. 2. move CONFIG_DEBUG_INFO_DWARF4 to choice. 3. implement the rest on top. I'm pretty sure GNU `as` only recently gained the ability to specify -gdwarf-4 without erroring in binutils 2.35, so that part likely needs to be fixed. Makefile | 19 ++++++++++++++++--- include/asm-generic/vmlinux.lds.h | 6 +++++- lib/Kconfig.debug | 29 +++++++++++++++++++++++++---- scripts/test_dwarf5_support.sh | 4 ++++ 4 files changed, 50 insertions(+), 8 deletions(-) create mode 100755 scripts/test_dwarf5_support.sh diff --git a/Makefile b/Makefile index e71979882e4f..0862df5b1a24 100644 --- a/Makefile +++ b/Makefile @@ -828,10 +828,23 @@ else DEBUG_CFLAGS += -g endif -KBUILD_AFLAGS += -Wa,-gdwarf-2 - +DWARF_VERSION=2 ifdef CONFIG_DEBUG_INFO_DWARF4 -DEBUG_CFLAGS += -gdwarf-4 +DWARF_VERSION=4 +endif +ifdef CONFIG_DEBUG_INFO_DWARF5 +DWARF_VERSION=5 +endif +DEBUG_CFLAGS += -gdwarf-$(DWARF_VERSION) + +ifneq ($(DWARF_VERSION)$(LLVM_IAS),21) +KBUILD_AFLAGS += -Wa,-gdwarf-$(DWARF_VERSION) +endif + +ifdef CONFIG_CC_IS_CLANG +ifneq ($(LLVM_IAS),1) +KBUILD_CFLAGS += -Wa,-gdwarf-$(DWARF_VERSION) +endif endif ifdef CONFIG_DEBUG_INFO_REDUCED diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index cd14444bf600..0382808ef9fe 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h @@ -828,7 +828,11 @@ .debug_types 0 : { *(.debug_types) } \ /* DWARF 5 */ \ .debug_macro 0 : { *(.debug_macro) } \ - .debug_addr 0 : { *(.debug_addr) } + .debug_addr 0 : { *(.debug_addr) } \ + .debug_line_str 0 : { *(.debug_line_str) } \ + .debug_loclists 0 : { *(.debug_loclists) } \ + .debug_rnglists 0 : { *(.debug_rnglists) } \ + .debug_str_offsets 0 : { *(.debug_str_offsets) } /* Stabs debugging sections. */ #define STABS_DEBUG \ diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 537cf3c2937d..6b01f0e2dad8 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -256,14 +256,35 @@ config DEBUG_INFO_SPLIT to know about the .dwo files and include them. Incompatible with older versions of ccache. +choice +prompt "DWARF version" + depends on DEBUG_INFO + default DEBUG_INFO_DWARF2 + help + Which version of DWARF debug info to emit. + +config DEBUG_INFO_DWARF2 + bool "Generate dwarf2 debuginfo" + help + Generate dwarf2 debug info. + config DEBUG_INFO_DWARF4 bool "Generate dwarf4 debuginfo" depends on $(cc-option,-gdwarf-4) help - Generate dwarf4 debug info. This requires recent versions - of gcc and gdb. It makes the debug information larger. - But it significantly improves the success of resolving - variables in gdb on optimized code. + Generate dwarf4 debug info. This requires gcc 4.5+ and gdb 7.0+. + It makes the debug information larger, but it significantly + improves the success of resolving variables in gdb on optimized code. + +config DEBUG_INFO_DWARF5 + bool "Generate dwarf5 debuginfo" + depends on DEBUG_INFO + depends on $(success,$(srctree)/scripts/test_dwarf5_support.sh $(CC) $(CLANG_FLAGS)) + help + Genereate dwarf5 debug info. Requires binutils 2.35+, gcc 5.1+, and + gdb 8.0+. + +endchoice # "DWARF version" config DEBUG_INFO_BTF bool "Generate BTF typeinfo" diff --git a/scripts/test_dwarf5_support.sh b/scripts/test_dwarf5_support.sh new file mode 100755 index 000000000000..82c0eea45845 --- /dev/null +++ b/scripts/test_dwarf5_support.sh @@ -0,0 +1,4 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 +set -eu +echo ".file 0 \"asdf\"" | $* -Wa,-gdwarf-5 -c -x assembler -o /dev/null - -- 2.29.0.rc1.297.gfa9743e501-goog