Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp6446126ybv; Wed, 12 Feb 2020 12:22:23 -0800 (PST) X-Google-Smtp-Source: APXvYqz1w0H/QZP8lQPMrNt/T3kHaJqvRisTRXgtfxp5KpijaMNWxGQlJ4CgojxmYYXcvKYup5Dl X-Received: by 2002:a05:6808:3b2:: with SMTP id n18mr578660oie.146.1581538943225; Wed, 12 Feb 2020 12:22:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1581538943; cv=none; d=google.com; s=arc-20160816; b=n/koQ+6ZF6rfEtjtY3AEFDP4ai1wf694PJ3T/tSjEKMW9+Bhvg66tfNNsiF08btgMC J9+eMsLmdQ6QtQbxlI1fD6vBtVEhC3XYa+ai78BMaTmaciT8OMs9dY5yH9/21USdBxhq by+2cIHPtZrJZOopOtvLnKS7GfLm7gxL4/T2F2Y3/7Qb702IuMjcR2FRbDgwLY8c/58z LKIau5vrIz11v7zLz1xL3x2WeVvzUysvYIThUqEavLU908e0seLL57W5JB3FiQNM7p0G /r8iaK3NXR02Mnu7CgjmmsIiw9Bks7a75weYXDkBJEMD+Gr1VEV5nNEi0wK50s79BvJO Da8w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:from:subject:references :mime-version:message-id:in-reply-to:date:dkim-signature; bh=xrAVzSt3UNPeZ7YpW4vFYovDZZzDHICcFwGU53dmNwI=; b=aDglDuuvS13PHsiOpAfVHjeSrvrMKTXt93IxoI2YXWG3dRdDIVwr/meayqILjtzUZi /aWfx4ww2M2BIW67rHJ82h7QisY4mPQTLv6FA0+jU60ld2OMAd5DfPry8H2g/f0NUX7w c8Br+2RBXWKrq+2bb4Ibfq9bAKh3e2RcEe6NG6VCMwf9AIkA5qw6WKvmaS3K5EuLhpbv Dq3hinT2MvRatt+231tWBwPfQ/jyGfWzM8dmPypKhsel4zYX+XUOy78OCwgwBUr1RyuB hcVcNCupMFQhPzinpyylgGjxT48p6sdQaNYvnqdsI2PSoOFZD7fkApYEmEyGgDQql23n hUBQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b="eyisWvF/"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 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. [209.132.180.67]) by mx.google.com with ESMTP id q126si102693oia.8.2020.02.12.12.22.11; Wed, 12 Feb 2020 12:22:23 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b="eyisWvF/"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 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 S1729084AbgBLUVt (ORCPT + 99 others); Wed, 12 Feb 2020 15:21:49 -0500 Received: from mail-wr1-f74.google.com ([209.85.221.74]:48004 "EHLO mail-wr1-f74.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727439AbgBLUVt (ORCPT ); Wed, 12 Feb 2020 15:21:49 -0500 Received: by mail-wr1-f74.google.com with SMTP id o9so1298211wrw.14 for ; Wed, 12 Feb 2020 12:21:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=xrAVzSt3UNPeZ7YpW4vFYovDZZzDHICcFwGU53dmNwI=; b=eyisWvF/PZOeu2CSMmxeD5tE1yDIDrPp6bq11YZWAfzccZBgfdmCBJD2+9VNXnrRMn s72O96T8S3vC+GvyLW5JeoFLENOymvb1jLTfNFGCJHzGOqs3RLwHQ5oB6NhRplQumPd/ +PrlTuKc0AExFnjSJLnZi6f+N9pTIvh0Wuq34RZT26NcQYJuNLSTdwoo1hO1SVgVNr2U zdMs7PryyH7jwy0Tx4Hiv28MG/+uj364AbcSN9a9GEcsB5c6V/H8jOCwAiZR8cBWSPOw ZXdLJtbWZ1GtbLjmbzdcZxN3QxHtHg6R5koiOARvwUT5jzX8X9DaGaMYlQdT4tSFCXup /Ppg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=xrAVzSt3UNPeZ7YpW4vFYovDZZzDHICcFwGU53dmNwI=; b=P93bSoVOEeK6rwO/jvazbmQs73Bz11FwODICzIdsqRDnT7n3+bjsyGzXx4PXfEDIKI zvPALK+wVU1f89fX++kiIrG309dXApbIQbCiacmqhA4KGcPbxbAdIEr8+EUSyvyIgOXv RMzFiKQhJuJqkfMO6NWw5pYUwQUbJUUNz38HxIdeS/6K93EtP9+h0hujslY5z1BywAuI KRDGr4EsCZS/d6ohoxlcF/VjdyjRH+PSMS3G6EZdfWHexcsLlQJARt4VEEnU5xG0HCv2 dTD47ircv2RUxL0MdtcRb05Sc9KZZiFKsWvc+b4i0kDIeQaDGgeL6Wvm6vIGnIw1EUvE gf9Q== X-Gm-Message-State: APjAAAWdscFLQB+NNsiSFmqjCnIlOGsUEeimWpqupmvJEVxo/PRMVuRd IiDBqCusrfBibUV6ZO2Nqb7wnq9FkLAZ X-Received: by 2002:a5d:4085:: with SMTP id o5mr16673093wrp.321.1581538906039; Wed, 12 Feb 2020 12:21:46 -0800 (PST) Date: Wed, 12 Feb 2020 20:21:38 +0000 In-Reply-To: <20200212202140.138092-1-qperret@google.com> Message-Id: <20200212202140.138092-2-qperret@google.com> Mime-Version: 1.0 References: <20200212202140.138092-1-qperret@google.com> X-Mailer: git-send-email 2.25.0.225.g125e21ebc7-goog Subject: [PATCH v4 1/3] kbuild: allow symbol whitelisting with TRIM_UNUSED_KSYMS From: Quentin Perret To: masahiroy@kernel.org, nico@fluxnic.net Cc: linux-kernel@vger.kernel.org, linux-kbuild@vger.kernel.org, maennich@google.com, kernel-team@android.com, jeyu@kernel.org, hch@infradead.org, qperret@google.com Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org CONFIG_TRIM_UNUSED_KSYMS currently removes all unused exported symbols from ksymtab. This works really well when using in-tree drivers, but cannot be used in its current form if some of them are out-of-tree. Indeed, even if the list of symbols required by out-of-tree drivers is known at compile time, the only solution today to guarantee these don't get trimmed is to set CONFIG_TRIM_UNUSED_KSYMS=n. This not only wastes space, but also makes it difficult to control the ABI usable by vendor modules in distribution kernels such as Android. Being able to control the kernel ABI surface is particularly useful to ship a unique Generic Kernel Image (GKI) for all vendors, which is a first step in the direction of getting all vendors to contribute their code upstream. As such, attempt to improve the situation by enabling users to specify a symbol 'whitelist' at compile time. Any symbol specified in this whitelist will be kept exported when CONFIG_TRIM_UNUSED_KSYMS is set, even if it has no in-tree user. The whitelist is defined as a simple text file, listing symbols, one per line. Acked-by: Jessica Yu Signed-off-by: Quentin Perret --- init/Kconfig | 13 +++++++++++++ scripts/adjust_autoksyms.sh | 5 +++++ 2 files changed, 18 insertions(+) diff --git a/init/Kconfig b/init/Kconfig index cfee56c151f1..58b672afceb2 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -2210,6 +2210,19 @@ config TRIM_UNUSED_KSYMS If unsure, or if you need to build out-of-tree modules, say N. +config UNUSED_KSYMS_WHITELIST + string "Whitelist of symbols to keep in ksymtab" + depends on TRIM_UNUSED_KSYMS + help + By default, all unused exported symbols will be un-exported from the + build when TRIM_UNUSED_KSYMS is selected. + + UNUSED_KSYMS_WHITELIST allows to whitelist symbols that must be kept + exported at all times, even in absence of in-tree users. The value to + set here is the path to a text file containing the list of symbols, + one per line. The path can be absolute, or relative to the kernel + source tree. + endif # MODULES config MODULES_TREE_LOOKUP diff --git a/scripts/adjust_autoksyms.sh b/scripts/adjust_autoksyms.sh index a904bf1f5e67..93f4d10e66e6 100755 --- a/scripts/adjust_autoksyms.sh +++ b/scripts/adjust_autoksyms.sh @@ -38,6 +38,10 @@ esac # We need access to CONFIG_ symbols . include/config/auto.conf +# Use 'eval' to expand the whitelist path and check if it is relative +eval ksym_wl="${CONFIG_UNUSED_KSYMS_WHITELIST:-/dev/null}" +[ "${ksym_wl:0:1}" = "/" ] || ksym_wl="$abs_srctree/$ksym_wl" + # Generate a new ksym list file with symbols needed by the current # set of modules. cat > "$new_ksyms_file" << EOT @@ -48,6 +52,7 @@ cat > "$new_ksyms_file" << EOT EOT sed 's/ko$/mod/' modules.order | xargs -n1 sed -n -e '2{s/ /\n/g;/^$/!p;}' -- | +cat - "$ksym_wl" | sort -u | sed -e 's/\(.*\)/#define __KSYM_\1 1/' >> "$new_ksyms_file" -- 2.25.0.225.g125e21ebc7-goog