Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp2429455pxb; Sat, 30 Jan 2021 02:18:42 -0800 (PST) X-Google-Smtp-Source: ABdhPJxBHQ3UJrI/wrzDjWinCnCYD439cZluFk5+oGkgnwTTMOy9xAxinGHyuZVHqCGJEoOCCtsv X-Received: by 2002:aa7:cb42:: with SMTP id w2mr9547943edt.21.1612001922770; Sat, 30 Jan 2021 02:18:42 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1612001922; cv=none; d=google.com; s=arc-20160816; b=ZsNdQeeTU7eJMcLcNGJp3nT2vwG8GGPi9D0R/0ocCdAViNkeQ0lAd77H4tOwWn8rnH QA7m3aO5f+3SNZ5COsVRtTQ6loLYphhLQYbSDbjGP/e4eHEH2o46FVyzeabpHTyYCmqV LqRX0L//wmW2vDczjqMtUiJY5n7oswjF5DXqBtY5eZy4l0RIIC951pLSln5u7zzo+q/l hQIUEamvovKfTttEw+mJQ1YwTdW+mCYk6fw8Df9ahXL14CnoyreujISVc4/ltPMJjpcv NR1hr/NEDuVEld1p767QsTKhOz5WqQmE7bGYi8pjRdoAw/R4E430qP7Jk4RMhzuzlMo/ pvVQ== 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:references:mime-version :message-id:in-reply-to:date:sender:dkim-signature; bh=Ofun504N86O16xMMFIX9BZnji2IL0CpoNJxh7Yk7aGY=; b=SjJKgu9+ZUQFOAvz1/E7B20wGapC67/t5FH2ofnEtjA5nnvzTPpxDVyPiM1qXq/bjx oanO6c391GSrkB9Lxhu9MaBPYfB498l7wVAu4Wg/atu3DdPE+Ng22pD8c3zEmZ6IFLk9 WOzC4Zn5C33cQm0oFWsMIg9Y4yKkhQGqvn5eoXkTSDvCM0vGCwUMcZ+U1JrPzwT5H4zV FD3J5MwERONn2ktgeWZ+JkoKISnudKtMda5JeOAqp1i8uscHgdeqKVKSrLQp3VYAm57M dUvq/p0StH5XYv3CUKu0rOLB+xVlPU0NhwFEpZihj03PQhA0lb7hc2QPcX9OHK3OZFwp nQ/g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=s+z2URkp; 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 k25si6914665edq.373.2021.01.30.02.18.18; Sat, 30 Jan 2021 02:18:42 -0800 (PST) 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=s+z2URkp; 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 S232101AbhA3KQb (ORCPT + 99 others); Sat, 30 Jan 2021 05:16:31 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34158 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233011AbhA3A4i (ORCPT ); Fri, 29 Jan 2021 19:56:38 -0500 Received: from mail-qt1-x84a.google.com (mail-qt1-x84a.google.com [IPv6:2607:f8b0:4864:20::84a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4D4F9C06178C for ; Fri, 29 Jan 2021 16:44:10 -0800 (PST) Received: by mail-qt1-x84a.google.com with SMTP id r18so7301103qta.19 for ; Fri, 29 Jan 2021 16:44:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=sender:date:in-reply-to:message-id:mime-version:references:subject :from:to:cc; bh=Ofun504N86O16xMMFIX9BZnji2IL0CpoNJxh7Yk7aGY=; b=s+z2URkpUDlvS1pLGEzD4XsNIbdnTOGm2MtJuBn3VeJiFDHOUusn4Jm9oyoAbUhhxI w/bER5f6+sxwSgVTtE5A6RBGiWtM5Jito31o0hKwDOwhbQhLnPviqyFbJY/o7ERWZtZi qFO6c1SFGZOVr86dsDM2PXovadwcGAU6O4TEoNVsgb2J1Kul7PUdClFAAg7CzqkYsnsg 0tNjchw4AUqMGA2sOlDH1CjCc08gjcyuicqoiKxnJwpuWVDFC5t380b9wnXkUykhLBNy 1qTfyyGytMLCLKVL0MnwDH5qV4GlPQA06az0w5e4xPT3DT/4RuRRls+IpQZju6pVcLEJ 79aw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=Ofun504N86O16xMMFIX9BZnji2IL0CpoNJxh7Yk7aGY=; b=fxctt35+WVr56JCLgkDZlTQqoyAKTyHXe4g1uHECWd72O3Qplsavi/SrNe8g8LPn4y AeYZF9HqaKkiy3vFDEMmMvSPCJN4xeDLXWDvUbV0/hLUJem6qURec5Gu/MF4+E8e0O6z 9NfOmmrBkqkaf2QfGb0+7Vf18Rj8cTDpbCeuVxLdBeGrh9WDXwyPDw2ZQJQbdO4X4pVn du5qYU3R4wd47p2r8ta5YrW1YbkISw3Tffjl4cdy7+sLTtGTjaqLhYPCZoybAW2C7pD8 mmjXN8oGIcLIcjnmwyy40MXXFfUoOKEVHbgwuroE1A82mWjaaIW82XMqoC+6WQom+1F8 AyQg== X-Gm-Message-State: AOAM533Em34mo/QnQf75qtJhqJL8SCfkjytoqohUos/a1xH8spe0rT5o 3hL8YurufwsmLMCBCYwP5LbXWKANILcqFx85ksY= 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:a0c:ebc2:: with SMTP id k2mr3510569qvq.0.1611967449511; Fri, 29 Jan 2021 16:44:09 -0800 (PST) Date: Fri, 29 Jan 2021 16:44:01 -0800 In-Reply-To: <20210130004401.2528717-1-ndesaulniers@google.com> Message-Id: <20210130004401.2528717-3-ndesaulniers@google.com> Mime-Version: 1.0 References: <20210130004401.2528717-1-ndesaulniers@google.com> X-Mailer: git-send-email 2.30.0.365.g02bc693789-goog Subject: [PATCH v7 2/2] Kbuild: implement support for DWARF v5 From: Nick Desaulniers To: Masahiro Yamada Cc: Nathan Chancellor , Andrew Morton , Sedat Dilek , linux-kernel@vger.kernel.org, clang-built-linux@googlegroups.com, linux-kbuild@vger.kernel.org, linux-arch@vger.kernel.org, Jakub Jelinek , Fangrui Song , Caroline Tice , Nick Clifton , Yonghong Song , Jiri Olsa , Andrii Nakryiko , Arnaldo Carvalho de Melo , Arvind Sankar , Nick Desaulniers Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org DWARF v5 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. The DWARF version of a binary can be validated with: $ llvm-dwarfdump vmlinux | head -n 4 | 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 515M vmlinux.gcc10.2.dwarf5.compressed 599M vmlinux.gcc10.2.dwarf4.compressed 624M vmlinux.gcc10.2.dwarf2.compressed 630M vmlinux.gcc10.2.dwarf5 765M vmlinux.gcc10.2.dwarf4 809M vmlinux.gcc10.2.dwarf2 Though the quality of debug info is harder to quantify; size is not a proxy for quality. Jakub notes: All [GCC] 5.1 - 6.x did was start accepting -gdwarf-5 as experimental option that enabled some small DWARF subset (initially only a few DW_LANG_* codes newly added to DWARF5 drafts). Only GCC 7 (released after DWARF 5 has been finalized) started emitting DWARF5 section headers and got most of the DWARF5 changes in... Version check GCC so that we don't need to worry about the difference in command line args between GNU readelf and llvm-readelf/llvm-dwarfdump to validate the DWARF Version in the assembler feature detection script. GNU `as` only recently gained support for specifying -gdwarf-5, so when compiling with Clang but without Clang's integrated assembler (LLVM_IAS=1 is not set), explicitly add -Wa,-gdwarf-5 to DEBUG_CFLAGS. Disabled for now if CONFIG_DEBUG_INFO_BTF is set; pahole doesn't yet recognize the new additions to the DWARF debug info. Thanks to Sedat for the report. Link: http://www.dwarfstd.org/doc/DWARF5.pdf Reported-by: Sedat Dilek Suggested-by: Arvind Sankar Suggested-by: Caroline Tice Suggested-by: Fangrui Song Suggested-by: Jakub Jelinek Suggested-by: Masahiro Yamada Suggested-by: Nathan Chancellor Signed-off-by: Nick Desaulniers --- Makefile | 1 + include/asm-generic/vmlinux.lds.h | 7 ++++++- lib/Kconfig.debug | 18 ++++++++++++++++++ scripts/test_dwarf5_support.sh | 8 ++++++++ 4 files changed, 33 insertions(+), 1 deletion(-) create mode 100755 scripts/test_dwarf5_support.sh diff --git a/Makefile b/Makefile index d2b4980807e0..5387a6f2f62d 100644 --- a/Makefile +++ b/Makefile @@ -831,6 +831,7 @@ KBUILD_AFLAGS += -Wa,-gdwarf-2 endif dwarf-version-$(CONFIG_DEBUG_INFO_DWARF4) := 4 +dwarf-version-$(CONFIG_DEBUG_INFO_DWARF5) := 5 DEBUG_CFLAGS += -gdwarf-$(dwarf-version-y) ifdef CONFIG_DEBUG_INFO_REDUCED diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index 34b7e0d2346c..1e7cde4bd3f9 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h @@ -842,8 +842,13 @@ /* DWARF 4 */ \ .debug_types 0 : { *(.debug_types) } \ /* DWARF 5 */ \ + .debug_addr 0 : { *(.debug_addr) } \ + .debug_line_str 0 : { *(.debug_line_str) } \ + .debug_loclists 0 : { *(.debug_loclists) } \ .debug_macro 0 : { *(.debug_macro) } \ - .debug_addr 0 : { *(.debug_addr) } + .debug_names 0 : { *(.debug_names) } \ + .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 94c1a7ed6306..ad6f78989d4f 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -268,6 +268,24 @@ config DEBUG_INFO_DWARF4 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 DWARF Version 5 debuginfo" + depends on GCC_VERSION >= 50000 || CC_IS_CLANG + depends on CC_IS_GCC || $(success,$(srctree)/scripts/test_dwarf5_support.sh $(CC) $(CLANG_FLAGS)) + depends on !DEBUG_INFO_BTF + help + Generate DWARF v5 debug info. Requires binutils 2.35.2, gcc 5.0+ (gcc + 5.0+ accepts the -gdwarf-5 flag but only had partial support for some + draft features until 7.0), and gdb 8.0+. + + Changes to the structure of debug info in Version 5 allow for around + 15-18% savings in resulting image and debug info section sizes as + compared to DWARF Version 4. DWARF Version 5 standardizes previous + extensions such as accelerators for symbol indexing and the format + for fission (.dwo/.dwp) files. Users may not want to select this + config if they rely on tooling that has not yet been updated to + support DWARF Version 5. + endchoice # "DWARF version" config DEBUG_INFO_BTF diff --git a/scripts/test_dwarf5_support.sh b/scripts/test_dwarf5_support.sh new file mode 100755 index 000000000000..c46e2456b47a --- /dev/null +++ b/scripts/test_dwarf5_support.sh @@ -0,0 +1,8 @@ +#!/bin/sh +# SPDX-License-Identifier: GPL-2.0 + +# Test that the assembler doesn't need -Wa,-gdwarf-5 when presented with DWARF +# v5 input, such as `.file 0` and `md5 0x00`. Should be fixed in GNU binutils +# 2.35.2. https://sourceware.org/bugzilla/show_bug.cgi?id=25611 +echo '.file 0 "filename" md5 0x7a0b65214090b6693bd1dc24dd248245' | \ + $* -gdwarf-5 -Wno-unused-command-line-argument -c -x assembler -o /dev/null - -- 2.30.0.365.g02bc693789-goog