Received: by 2002:a25:ef43:0:0:0:0:0 with SMTP id w3csp119278ybm; Tue, 26 May 2020 12:15:07 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwDXXIjtiRSuFvfECoYQlpd6GlHnmh2jGPhZ84+mImmWt+F1M+2zUKn6szJUuBC3rWYFRZy X-Received: by 2002:aa7:cb53:: with SMTP id w19mr3498671edt.328.1590520507789; Tue, 26 May 2020 12:15:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1590520507; cv=none; d=google.com; s=arc-20160816; b=XBN4B46bn6QxMn2BR8spTEhq689nb9BC3cX+NIqJzGbVSommHvbEsEkI18RSiS3StO 2DM8CaA+39LUeX0zNYOyUbT2DHete2VCVj4gCRbQn7Ter0dF3w2QjBF/F7l/A3Th9ikn rJCH1zOAnnp656TWByA2yk29w9mOotkU9vJ7yMN1L87QOcIfItIO7cDq0obMrSl4J627 K1FzgnU3SMlahdjEo4XCzRJzunPc3yopp9IMXpy/hyMN6eibBI/230xH+F3za0Q7FXmt 4mZNjK4cvwnyHVYHwPwAJYE0bjm2SrOr66UvAX5qX3V7Qk4c8z8eDTt16pDAHTigcc++ dfkA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=TDa5rLeg6THI6F5jWkF1wLupbWN2PDrG/8gFyYbfpGs=; b=RM5SGep+MlOBmRZLettdbyLUE3OiZKZ9nt54BghsmyIxDgI3t3tWrfiQBzgFRmELyn MrqbzWXjvmkswaVQmDqUxUKH5agHetQHMajzQkXD5lQ/zzrc+ASVSEImuxL/72NQB6AP DifbeV3MzF5K95FtsMeejH+AZRsVZATVdxs6zssiGrC/3vpSO3XeDh+e/hCCHn05Q1Kj EknOkcIvv0eiHCGawaVsiWqCmqjdqmT/Vfj4fwW3d1V28zbveiuwbAZ5yxbWKoM1vcDa t49gm0NWQhDSI4aDfvTrW7Whb8R/NNinc6ZzU3HdrRL1EzBKKtUv0pjlUWBfk9zXkDpm bVDg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=I9Rv0uSv; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id c15si478532edm.218.2020.05.26.12.14.44; Tue, 26 May 2020 12:15:07 -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=@kernel.org header.s=default header.b=I9Rv0uSv; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404036AbgEZTNC (ORCPT + 99 others); Tue, 26 May 2020 15:13:02 -0400 Received: from mail.kernel.org ([198.145.29.99]:40096 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2391763AbgEZTKu (ORCPT ); Tue, 26 May 2020 15:10:50 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 0473520888; Tue, 26 May 2020 19:10:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1590520249; bh=RDs0EHoSj58AyDLREChCLispvr2WG8bK1kLx4UlzD8M=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=I9Rv0uSvH1yGhF+rbxMeCa5eK7SP7P3iga8P49272K4BzVocCSZfrBOXJch3K1psQ nbOLES/5nlyBK7YEzHn3kU6NGtGzdDHwy7/r0zNQpwSTueVZqyfuIjAmSfZ98YplgN 1/Zfwsj7AqEgd8hH5U7YVyRNENjyLZHQIn1SzNf0= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Kees Cook , Daniel Borkmann , Andrii Nakryiko , Sasha Levin Subject: [PATCH 5.4 079/111] kbuild: Remove debug info from kallsyms linking Date: Tue, 26 May 2020 20:53:37 +0200 Message-Id: <20200526183940.374546582@linuxfoundation.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200526183932.245016380@linuxfoundation.org> References: <20200526183932.245016380@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Kees Cook [ Upstream commit af73d78bd384aa9b8789aa6e7ddbb165f971276f ] When CONFIG_DEBUG_INFO is enabled, the two kallsyms linking steps spend time collecting and writing the dwarf sections to the temporary output files. kallsyms does not need this information, and leaving it off halves their linking time. This is especially noticeable without CONFIG_DEBUG_INFO_REDUCED. The BTF linking stage, however, does still need those details. Refactor the BTF and kallsyms generation stages slightly for more regularized temporary names. Skip debug during kallsyms links. Additionally move "info BTF" to the correct place since commit 8959e39272d6 ("kbuild: Parameterize kallsyms generation and correct reporting"), which added "info LD ..." to vmlinux_link calls. For a full debug info build with BTF, my link time goes from 1m06s to 0m54s, saving about 12 seconds, or 18%. Signed-off-by: Kees Cook Signed-off-by: Daniel Borkmann Acked-by: Andrii Nakryiko Link: https://lore.kernel.org/bpf/202003031814.4AEA3351@keescook Signed-off-by: Sasha Levin --- scripts/link-vmlinux.sh | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/scripts/link-vmlinux.sh b/scripts/link-vmlinux.sh index 408b5c0b99b1..aa1386079f0c 100755 --- a/scripts/link-vmlinux.sh +++ b/scripts/link-vmlinux.sh @@ -63,12 +63,18 @@ vmlinux_link() local lds="${objtree}/${KBUILD_LDS}" local output=${1} local objects + local strip_debug info LD ${output} # skip output file argument shift + # The kallsyms linking does not need debug symbols included. + if [ "$output" != "${output#.tmp_vmlinux.kallsyms}" ] ; then + strip_debug=-Wl,--strip-debug + fi + if [ "${SRCARCH}" != "um" ]; then objects="--whole-archive \ ${KBUILD_VMLINUX_OBJS} \ @@ -79,6 +85,7 @@ vmlinux_link() ${@}" ${LD} ${KBUILD_LDFLAGS} ${LDFLAGS_vmlinux} \ + ${strip_debug#-Wl,} \ -o ${output} \ -T ${lds} ${objects} else @@ -91,6 +98,7 @@ vmlinux_link() ${@}" ${CC} ${CFLAGS_vmlinux} \ + ${strip_debug} \ -o ${output} \ -Wl,-T,${lds} \ ${objects} \ @@ -106,6 +114,8 @@ gen_btf() { local pahole_ver local bin_arch + local bin_format + local bin_file if ! [ -x "$(command -v ${PAHOLE})" ]; then echo >&2 "BTF: ${1}: pahole (${PAHOLE}) is not available" @@ -118,8 +128,9 @@ gen_btf() return 1 fi - info "BTF" ${2} vmlinux_link ${1} + + info "BTF" ${2} LLVM_OBJCOPY=${OBJCOPY} ${PAHOLE} -J ${1} # dump .BTF section into raw binary file to link with final vmlinux @@ -127,11 +138,12 @@ gen_btf() cut -d, -f1 | cut -d' ' -f2) bin_format=$(LANG=C ${OBJDUMP} -f ${1} | grep 'file format' | \ awk '{print $4}') + bin_file=.btf.vmlinux.bin ${OBJCOPY} --change-section-address .BTF=0 \ --set-section-flags .BTF=alloc -O binary \ - --only-section=.BTF ${1} .btf.vmlinux.bin + --only-section=.BTF ${1} $bin_file ${OBJCOPY} -I binary -O ${bin_format} -B ${bin_arch} \ - --rename-section .data=.BTF .btf.vmlinux.bin ${2} + --rename-section .data=.BTF $bin_file ${2} } # Create ${2} .o file with all symbols from the ${1} object file @@ -166,8 +178,8 @@ kallsyms() kallsyms_step() { kallsymso_prev=${kallsymso} - kallsymso=.tmp_kallsyms${1}.o - kallsyms_vmlinux=.tmp_vmlinux${1} + kallsyms_vmlinux=.tmp_vmlinux.kallsyms${1} + kallsymso=${kallsyms_vmlinux}.o vmlinux_link ${kallsyms_vmlinux} "${kallsymso_prev}" ${btf_vmlinux_bin_o} kallsyms ${kallsyms_vmlinux} ${kallsymso} @@ -190,7 +202,6 @@ cleanup() { rm -f .btf.* rm -f .tmp_System.map - rm -f .tmp_kallsyms* rm -f .tmp_vmlinux* rm -f System.map rm -f vmlinux @@ -253,9 +264,8 @@ ${OBJCOPY} -j .modinfo -O binary vmlinux.o modules.builtin.modinfo btf_vmlinux_bin_o="" if [ -n "${CONFIG_DEBUG_INFO_BTF}" ]; then - if gen_btf .tmp_vmlinux.btf .btf.vmlinux.bin.o ; then - btf_vmlinux_bin_o=.btf.vmlinux.bin.o - else + btf_vmlinux_bin_o=.btf.vmlinux.bin.o + if ! gen_btf .tmp_vmlinux.btf $btf_vmlinux_bin_o ; then echo >&2 "Failed to generate BTF for vmlinux" echo >&2 "Try to disable CONFIG_DEBUG_INFO_BTF" exit 1 -- 2.25.1