Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp3012443pxj; Mon, 17 May 2021 15:33:03 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzUyppGhJoBHkrh6GFWprBFaNQPceQ1P+245DYvbAJXkDiYOtg+mYORSDFnJ2Q5EFABr77s X-Received: by 2002:a17:906:e0d5:: with SMTP id gl21mr2306544ejb.93.1621290783556; Mon, 17 May 2021 15:33:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621290783; cv=none; d=google.com; s=arc-20160816; b=KZxm05UYkOYFlDe0d4LjdmemXCev7CRM+J6YyrHox4tZQ/w5E8Dw5GwhMGkKiZh8iv ODhq7163505pe6XjcZIPFF9pVCKZHTsTJtRrWSBQwJamGGZnRglj/its+5cGrhdH2W4k mFfVsWkb/PQdBCyRGe27hHm0vzDCwV3LgbvgnOnfazb6C9A3J3aTcIpoaNDTRZB/HuAj 8fXoVnVJGTgkKGHM5sqWvSMeRWYoY8bJKUxIYuWcBw0Ln/n9qpDoxGZjhVYkMUtTuI/Z Huurjmiia8n3kpq9Nt7VHLkJ+89heaLnPV7SB93jXtCbrQKoYSOjumA309NFwjUAw/dt IQzg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=z/jbUHD1Y5Q9mdWZJwEeMO/wZfvbdUZ+olwCAYxLM0Q=; b=W+fr4xVSKpBp7ES5LAxwHYk/WTaqh1a0x7fEQKFH2UxmIMkM4EGfmhfmbpLMKwQfF1 6ms3h+84Y7OMlJYXS6rcs4RJADSDk1W+sUaUdncqwYajI9Oq19hdbeiWUel9w+19zjsq VbihzElulglnuG1Ad2c69xCmUQDc7F89QfTnU6pXM+YzddLuNP0T5wHf4GFB5NAFerNc j0b+xaqiD4N6IzN2vIbjjX1/E8RUnK6Ti+bhMBM5//YY+cp/9kj1ovBYNh3hXcJQoKqz jEtxwB1HsPSoLvJy3FhI83KFWCrEjxoCkF4hEeBRDbo6opKwvwNAPL2KqHgAvyF/PLMT R7aw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=x6UfZQDi; 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=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id m10si18354285eji.560.2021.05.17.15.32.40; Mon, 17 May 2021 15:33:03 -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=@linuxfoundation.org header.s=korg header.b=x6UfZQDi; 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=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237003AbhEQOPy (ORCPT + 99 others); Mon, 17 May 2021 10:15:54 -0400 Received: from mail.kernel.org ([198.145.29.99]:46782 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238489AbhEQONB (ORCPT ); Mon, 17 May 2021 10:13:01 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id BC47B61370; Mon, 17 May 2021 14:08:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1621260512; bh=hZyy5BCMkH/J58QIAmFGTtFRImIMQp19z3NPYHyeXYg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=x6UfZQDi0ilc4vYN1lIE8Txz5/eLTn+L2nrAGT85bLsF5r1s10WlomfzitYxqbPRq xRhA9wKEl2ntsnXtwhJL29WKRqqbLmX1UaOKk2PnKOmL+3XiN79to51Xly2koouRn/ NyI1rBDoHUhq3AF+PItSg5EDb7SvvSA4OFZt/RpY= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Masahiro Yamada , Sasha Levin Subject: [PATCH 5.12 115/363] kbuild: generate Module.symvers only when vmlinux exists Date: Mon, 17 May 2021 15:59:41 +0200 Message-Id: <20210517140306.512473726@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210517140302.508966430@linuxfoundation.org> References: <20210517140302.508966430@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Masahiro Yamada [ Upstream commit 69bc8d386aebbd91a6bb44b6d33f77c8dfa9ed8c ] The external module build shows the following warning if Module.symvers is missing in the kernel tree. WARNING: Symbol version dump "Module.symvers" is missing. Modules may not have dependencies or modversions. I think this is an important heads-up because the resulting modules may not work as expected. This happens when you did not build the entire kernel tree, for example, you might have prepared the minimal setups for external modules by 'make defconfig && make modules_preapre'. A problem is that 'make modules' creates Module.symvers even without vmlinux. In this case, that warning is suppressed since Module.symvers already exists in spite of its incomplete content. The incomplete (i.e. invalid) Module.symvers should not be created. This commit changes the second pass of modpost to dump symbols into modules-only.symvers. The final Module.symvers is created by concatenating vmlinux.symvers and modules-only.symvers if both exist. Module.symvers is supposed to collect symbols from both vmlinux and modules. It might be a bit confusing, and I am not quite sure if it is an official interface, but presumably it is difficult to rename it because some tools (e.g. kmod) parse it. Signed-off-by: Masahiro Yamada Signed-off-by: Sasha Levin --- .gitignore | 1 + Documentation/dontdiff | 1 + Makefile | 2 +- scripts/Makefile.modpost | 15 ++++++++++++++- scripts/mod/modpost.c | 15 +-------------- 5 files changed, 18 insertions(+), 16 deletions(-) diff --git a/.gitignore b/.gitignore index 3af66272d6f1..127012c1f717 100644 --- a/.gitignore +++ b/.gitignore @@ -57,6 +57,7 @@ modules.order /tags /TAGS /linux +/modules-only.symvers /vmlinux /vmlinux.32 /vmlinux.symvers diff --git a/Documentation/dontdiff b/Documentation/dontdiff index e361fc95ca29..82e3eee7363b 100644 --- a/Documentation/dontdiff +++ b/Documentation/dontdiff @@ -178,6 +178,7 @@ mktables mktree mkutf8data modpost +modules-only.symvers modules.builtin modules.builtin.modinfo modules.nsdeps diff --git a/Makefile b/Makefile index 0b1852621615..7503ffef6424 100644 --- a/Makefile +++ b/Makefile @@ -1513,7 +1513,7 @@ endif # CONFIG_MODULES # make distclean Remove editor backup files, patch leftover files and the like # Directories & files removed with 'make clean' -CLEAN_FILES += include/ksym vmlinux.symvers \ +CLEAN_FILES += include/ksym vmlinux.symvers modules-only.symvers \ modules.builtin modules.builtin.modinfo modules.nsdeps \ compile_commands.json .thinlto-cache diff --git a/scripts/Makefile.modpost b/scripts/Makefile.modpost index 066beffca09a..4ca5579af4e4 100644 --- a/scripts/Makefile.modpost +++ b/scripts/Makefile.modpost @@ -68,7 +68,20 @@ else ifeq ($(KBUILD_EXTMOD),) input-symdump := vmlinux.symvers -output-symdump := Module.symvers +output-symdump := modules-only.symvers + +quiet_cmd_cat = GEN $@ + cmd_cat = cat $(real-prereqs) > $@ + +ifneq ($(wildcard vmlinux.symvers),) + +__modpost: Module.symvers +Module.symvers: vmlinux.symvers modules-only.symvers FORCE + $(call if_changed,cat) + +targets += Module.symvers + +endif else diff --git a/scripts/mod/modpost.c b/scripts/mod/modpost.c index 24725e50c7b4..10c3fba26f03 100644 --- a/scripts/mod/modpost.c +++ b/scripts/mod/modpost.c @@ -2423,19 +2423,6 @@ fail: fatal("parse error in symbol dump file\n"); } -/* For normal builds always dump all symbols. - * For external modules only dump symbols - * that are not read from kernel Module.symvers. - **/ -static int dump_sym(struct symbol *sym) -{ - if (!external_module) - return 1; - if (sym->module->from_dump) - return 0; - return 1; -} - static void write_dump(const char *fname) { struct buffer buf = { }; @@ -2446,7 +2433,7 @@ static void write_dump(const char *fname) for (n = 0; n < SYMBOL_HASH_SIZE ; n++) { symbol = symbolhash[n]; while (symbol) { - if (dump_sym(symbol)) { + if (!symbol->module->from_dump) { namespace = symbol->namespace; buf_printf(&buf, "0x%08x\t%s\t%s\t%s\t%s\n", symbol->crc, symbol->name, -- 2.30.2