Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp882198ybv; Fri, 7 Feb 2020 10:11:12 -0800 (PST) X-Google-Smtp-Source: APXvYqz9SVPKbS0vXPfgkAsmWpFQ/wq9EOJf5CaURUOILfXQ3AjvP/6d7GVzSCcoa+VBDSANFGh6 X-Received: by 2002:aca:ea43:: with SMTP id i64mr2987119oih.30.1581099072008; Fri, 07 Feb 2020 10:11:12 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1581099072; cv=none; d=google.com; s=arc-20160816; b=n+iKMfYEHTXA5Cu05T0I3PNEPWXDLix9kNXvXVBRF2LIpmpwjkFyupoav9Nm/qtBfV vAGMe6vFGS0FstzabX+qbOZyWCEZbDcvbfgAzIT1KcdXkuC9vB22mMam2TfIyfy2D8ZS eSGpbjQ9N2mCUMpRXeN/dudKsIP6inTgd1fakA4B1ItYCXA7N6FeLigzhgc11Ic7mB6G 2yvdoFsu3h/+CRJVQtZVg2O7D9AuGK85HHE7/UXMvqtdR5m6RJr2Vh4RXIaC2VASZz1u 4k8TL46j/aqLfw68TcTcwfr1/6i13aZvtBl9AH0j+rPOZ++IqrPdM2gZEkdEqvWqreqS BhoQ== 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=Iq1xJJ5JyP7yGNZmWBQagYtjdyevY3BNthLqd4tXyyc=; b=zTKluz1jFTBhvytGQjaBm94TSLicW1ndYkUHZ5SDfL8cp0wQi0XWD5vaeU294Hswsx Tjk56vfwlI4b2vLorvEvvszk8uyjSfPZD70hJo2mMWJqr7jCjG1Zq7L4lKju6yVd9BIz MyNL4igcNyuq5uBOIDjxXtE5lbF+nEMxQaKgDV8G/Uhtl9brjLjD9qW4BECAc7tq41Md NzfAK1mKopUIUZqmeY5nD5w4FKUeTaxsN2K5YyvnPb9/7fDqMl7bNsu5L+42WBwwaLdp Q48zyjFayX2jQjONXy2+vmlEwMU3Es4tEWTEaT9WBzEdmA6jWkC4TcdDrPicBMMfIdCz bb4w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=ljx8rr+z; 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 e23si4337988oie.105.2020.02.07.10.10.59; Fri, 07 Feb 2020 10:11:11 -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=ljx8rr+z; 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 S1727443AbgBGSIG (ORCPT + 99 others); Fri, 7 Feb 2020 13:08:06 -0500 Received: from mail-wm1-f73.google.com ([209.85.128.73]:36170 "EHLO mail-wm1-f73.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727379AbgBGSIF (ORCPT ); Fri, 7 Feb 2020 13:08:05 -0500 Received: by mail-wm1-f73.google.com with SMTP id q125so1085249wme.1 for ; Fri, 07 Feb 2020 10:08:02 -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=Iq1xJJ5JyP7yGNZmWBQagYtjdyevY3BNthLqd4tXyyc=; b=ljx8rr+zrjNgFsvfk9NSWMaxlIxVoEXA76nyx2+oCJR5Vr8GBpYQqspJmdouPydQOp UJonWLOS/LIx+rdeSQ6iZ1SkyUIfN0olInHFb3hcFVTh7dB0+K9qQzgHKGjiQsKeIn/b caPczZzzYT8BZ9AyX0fOfLSjZu2nZktValQb6Dts16MxUCh7y1+XIbeClgYJ/DYClooN Ljk/NjtvQqFBmyc+9Heh4l6mr6jt2QJYHXhPh5Y+PjmxzLcTIgqaqdLEq8Ex8dWUy5HB L+GUzgJvgx2cfCI2saXmh08LYgbZ7bNc+B3wGynYqEkQzKPTpL8jy6fLw7EJzpsnXC7q 0sVg== 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=Iq1xJJ5JyP7yGNZmWBQagYtjdyevY3BNthLqd4tXyyc=; b=gb0mZRKmHtu3glgp8jEbq5oyJx2TP9TKuTXnlF5I7jnTgpGqZ/W4QyJUViTZBIDLFw w9KIYS3CmC3wd69SmdSIA7iBwLK0zqFzJm61lK63v7D5fIib3lKfg3TI/qULeqkTsMSA iR/lI0RISvwrvM67gJoXOpqoh3wBOg9UEwmpRWxIaKDF0fMeqvGqvulGB8cysCrl80Pu g62gySTCDivQIgNDIaWOw/SnqyHwyHkEjrX7o08Tcdre68X2mqYnY+SDK85xWDIIxE8v 9acYwZLwsygTrAaFSfwhaBN5RSl0z9P/gtkXxrbjoZkGDq9pVan3wLbYh6fEaAwu2GCK 6kmw== X-Gm-Message-State: APjAAAWEsS4ftcBfzvFaRIEttw9Wn3Ulhc8dkIEtSAF8elMcGCTT3vrv B3n7k7BxYGn5edFHDWOGJKk1UNt6Qx2g X-Received: by 2002:a5d:6a83:: with SMTP id s3mr211395wru.99.1581098881312; Fri, 07 Feb 2020 10:08:01 -0800 (PST) Date: Fri, 7 Feb 2020 18:07:53 +0000 In-Reply-To: <20200207180755.100561-1-qperret@google.com> Message-Id: <20200207180755.100561-2-qperret@google.com> Mime-Version: 1.0 References: <20200207180755.100561-1-qperret@google.com> X-Mailer: git-send-email 2.25.0.341.g760bfbb309-goog Subject: [PATCH v3 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 --- @Nicolas: I left your Reviewed-by behind as the code has changed a bit but let me know what you think --- init/Kconfig | 13 +++++++++++++ scripts/adjust_autoksyms.sh | 5 +++++ 2 files changed, 18 insertions(+) diff --git a/init/Kconfig b/init/Kconfig index a34064a031a5..79fd976ce031 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -2180,6 +2180,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..58335eee4b38 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 +# The symbol whitelist, relative to the source tree +eval ksym_wl="${CONFIG_UNUSED_KSYMS_WHITELIST:-/dev/null}" +[[ "$ksym_wl" =~ ^/ ]] || 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.341.g760bfbb309-goog