From patchwork Fri Feb 5 20:22:17 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nick Desaulniers X-Patchwork-Id: 12070841 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-26.2 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_GIT,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7E0A1C433E0 for ; Fri, 5 Feb 2021 20:25:06 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 39DBE64FDC for ; Fri, 5 Feb 2021 20:25:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233244AbhBESl4 (ORCPT ); Fri, 5 Feb 2021 13:41:56 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41658 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233231AbhBESkq (ORCPT ); Fri, 5 Feb 2021 13:40:46 -0500 Received: from mail-qv1-xf49.google.com (mail-qv1-xf49.google.com [IPv6:2607:f8b0:4864:20::f49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 13E9FC061786 for ; Fri, 5 Feb 2021 12:22:31 -0800 (PST) Received: by mail-qv1-xf49.google.com with SMTP id dh16so5884486qvb.11 for ; Fri, 05 Feb 2021 12:22:31 -0800 (PST) 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=JkiU6LubiRQMiRTUkzQ3xqlvscsZlRnvwncDVkGj4+8=; b=rRrebpAL4dPbI8AaS2ldSzHnzsLzMqVHOKpPxQ6HCIgGLFfsCX+3l9oKDT0/RNXj0I jpn7PrLJ6s/aXTSB81qSw/Yvrh2JcB07gt/TccdR6O21J/+CkBXlfgcfLn5Z23J9B+qU 9lK+mBQEwoW6LtRMXQwPKyr8Yh+3nC7nK3VD3Jr44Vwq0yQHiH/2yogmTZ5UmHJHSN62 AMIm/X7p0G04XK+GbxT3h6n3fiLNHfdAs4lwNOCh9u7wIBeMxaxxjlrwzvvlwXVSXz1n mjQVjpVeNT+x9tlzTj6sbwfxqnKPchVV6trcpuDSIiHRugFo2i48ClTaGvuDFX+IR3e9 NP6w== 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=JkiU6LubiRQMiRTUkzQ3xqlvscsZlRnvwncDVkGj4+8=; b=rFgZNOMgn4egVUi7jGFMbyQ7EiRrNeOCQqnDK+yGViz8TPgAIDkNw/y0WFGHo0Ahpo mrIJdSIQtW8pNHvfSuShitGiC2B+7GO3gNlmuesQI2MHmMa7pZOa6KmQK5C6W146HI6m oQ9iGL6RrAI6MWZZGD4xapudX6iBxXwf/Urjaa2MIQz1v14Hj9cBFD7pRr0RxSrAoZNr 8XYxpSGpg1VuU8mZ4M/eQrCvY9wx407EZefQjQIkZtt6/bEgiUoO+I2p/EwXHe0ilJ27 UFkCZBGLymv7zlmkUFEy6aIe/jRGaRp0aulqZAJ+dVLBfZn6eutCCZUQRVQNxMQLpPlC YPuA== X-Gm-Message-State: AOAM532d6GrU+Yf6OiQIvKbeOGKxUG/gjFgFzFXY7mEpJmQIaObRAcZo tiaLJBn5suPe99wYqrrPp9MgMclRtNTB8TJf2PY= X-Google-Smtp-Source: ABdhPJxjyhQcTVKXyi8QxMs0J/iUleLIs8/Q7zrtBiY36TrxxBeGn8chzArDZJ1st/J1z8x1RkCfNhb7fXw+3rczCfg= Sender: "ndesaulniers via sendgmr" X-Received: from ndesaulniers1.mtv.corp.google.com ([2620:15c:211:202:fce9:1439:f67f:bf26]) (user=ndesaulniers job=sendgmr) by 2002:a0c:abce:: with SMTP id k14mr6218548qvb.23.1612556550018; Fri, 05 Feb 2021 12:22:30 -0800 (PST) Date: Fri, 5 Feb 2021 12:22:17 -0800 Message-Id: <20210205202220.2748551-1-ndesaulniers@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.30.0.365.g02bc693789-goog Subject: [PATCH v9 0/3] Kbuild: DWARF v5 support 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 , Chris Murphy , Mark Wielaard , Nick Desaulniers Precedence: bulk List-ID: X-Mailing-List: linux-kbuild@vger.kernel.org DWARF v5 is the latest standard of the DWARF debug info format. DWARF5 wins significantly in terms of size and especially so when mixed with compression (CONFIG_DEBUG_INFO_COMPRESSED). Link: http://www.dwarfstd.org/doc/DWARF5.pdf Patch 1 places the DWARF v5 sections explicitly in the kernel linker script. Patch 2 modifies Kconfig for DEBUG_INFO_DWARF4 to be used as a fallback. Patch 3 adds an explicit Kconfig for DWARF v5 for clang and older GCC where the implicit default DWARF version is not 5. Changes from v8: * Separate out the linker script changes (from v7 0002). Put those first. Carry Reviewed by and tested by tags. Least contentious part of the series. Tagged for stable; otherwise users upgrading to GCC 11 may find orphan section warnings from the implicit default DWARF version changing and generating the new debug info sections. * Add CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT in 0002, make it the default rather than CONFIG_DEBUG_INFO_DWARF4, as per Mark, Jakub, Arvind. * Drop reviewed by and tested by tags for 0002 and 0003; sorry reviewers/testers, but I view that as a big change. I will buy you beers if you're fatigued, AND for the help so far. I appreciate you. * Rework commit one lines, and commit messages somewhat. * Remove Kconfig help text about v4 being "bigger." * I didn't touch the BTF config from v8, but suggest the BTF folks consider https://lore.kernel.org/bpf/20210111180609.713998-1-natechancellor@gmail.com/ that way we can express via Kconfig that older version of pahole are in conflict with other Kconfig options. Changes from v7: (Strictly commit message changes) * Pick up Nathan's reviewed by tags for both patches. * Add note about only modifying compiler dwarf info, not assembler dwarf info, as per Nathan. * Add link to Red Hat bug report and Chris' reported by on patch 2. * Add more info from Jakub on patch 2 commit message. * Reorder info about validating version, noting the tree is not "clean" in the sense that parts mess up existing CFLAGS, or don't use DEBUG_CFLAGS. I will not be adding such cleanups to this series. They can be done AFTER. * Update note about 2.35.2 (rather than include the full text Jakub wrote on it in https://patchwork.kernel.org/project/linux-kbuild/patch/20201022012106.1875129-1-ndesaulniers@google.com/#23727667). * Add note that GCC 11 has changed the implicit default version. Changes from v6: * Reorder sections from linker script to match order from BFD's internal linker script. * Add .debug_names section, as per Fangrui. * Drop CONFIG_DEBUG_INFO_DWARF2. Patch 0001 becomes a menu with 1 choice. GCC's implicit default version of DWARF has been DWARF v4 since ~4.8. * Modify the test script to check for the presence of https://sourceware.org/bugzilla/show_bug.cgi?id=27195. * Drop the clang without integrated assembler block in 0002. Bumps the version requirement for GAS to 2.35.2, which isn't released yet (but should be released soon). Folks looking to test with clang but without the integrated assembler should fetch binutils-gdb, build it from source, add a symlink to binutils-gdb/gas/as-new to binutils-gdb/gas/as, then prefix binutils-gdb/gas/as to their $PATH when building the kernel. Changes from v5: * Drop previous patch 1, it has been accepted into kbuild: https://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild.git/commit/?h=kbuild&id=3f4d8ce271c7082be75bacbcbd2048aa78ce2b44 * Trying to set -Wa,-gdwarf-4 in the earlier patch was the source of additional complexity. Drop it that part of the patch. We can revisit clang without the integrated assembler setting -Wa,-gdwarf-4 later. That is a separate problem from generally supporting DWARF v5. * Rework the final patch for clang without the integrated assembler. -Wa,-gdwarf-5 is required for DWARF5 in that case otherwise GAS will not accept the assembler directives clang produces from C code when generating asm. Changes from v4: * drop set -e from script as per Nathan. * add dependency on !CONFIG_DEBUG_INFO_BTF for DWARF v5 as per Sedat. * Move LLVM_IAS=1 complexity from patch 2 to patch 3 as per Arvind and Masahiro. Sorry it took me a few tries to understand the point (I might still not), but it looks much cleaner this way. Sorry Nathan, I did not carry forward your previous reviews as a result, but I would appreciate if you could look again. * Add Nathan's reviewed by tag to patch 1. * Reword commit message for patch 3 to mention LLVM_IAS=1 and -gdwarf-5 binutils addition later, and BTF issue. * I still happen to see a pahole related error spew for the combination of: * LLVM=1 * LLVM_IAS=1 * CONFIG_DEBUG_INFO_DWARF4 * CONFIG_DEBUG_INFO_BTF Though they're non-fatal to the build. I'm not sure yet why removing any one of the above prevents the warning spew. Maybe we'll need a v6. Changes from v3: Changes as per Arvind: * only add -Wa,-gdwarf-5 for (LLVM=1|CC=clang)+LLVM_IAS=0 builds. * add -gdwarf-5 to Kconfig shell script. * only run Kconfig shell script for Clang. Apologies to Sedat and Nathan; I appreciate previous testing/review, but I did no carry forward your Tested-by and Reviewed-by tags, as the patches have changed too much IMO. Changes from v2: * Drop two of the earlier patches that have been accepted already. * Add measurements with GCC 10.2 to commit message. * Update help text as per Arvind with help from Caroline. * Improve case/wording between DWARF Versions as per Masahiro. Changes from the RFC: * split patch in 3 patch series, include Fangrui's patch, too. * prefer `DWARF vX` format, as per Fangrui. * use spaces between assignment in Makefile as per Masahiro. * simplify setting dwarf-version-y as per Masahiro. * indent `prompt` in Kconfig change as per Masahiro. * remove explicit default in Kconfig as per Masahiro. * add comments to test_dwarf5_support.sh. * change echo in test_dwarf5_support.sh as per Masahiro. * remove -u from test_dwarf5_support.sh as per Masahiro. * add a -gdwarf-5 cc-option check to Kconfig as per Jakub. Nick Desaulniers (3): vmlinux.lds.h: add DWARF v5 sections Kbuild: make DWARF version a choice Kconfig: allow explicit opt in to DWARF v5 Makefile | 6 ++-- include/asm-generic/vmlinux.lds.h | 7 ++++- lib/Kconfig.debug | 48 +++++++++++++++++++++++++++---- scripts/test_dwarf5_support.sh | 8 ++++++ 4 files changed, 61 insertions(+), 8 deletions(-) create mode 100755 scripts/test_dwarf5_support.sh Tested-by: Sedat Dilek # LLVM/Clang v12.0.0-rc1 x86-64