From patchwork Thu Feb 14 01:48:13 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 158272 Delivered-To: patch@linaro.org Received: by 2002:a02:48:0:0:0:0:0 with SMTP id 69csp777567jaa; Wed, 13 Feb 2019 17:50:29 -0800 (PST) X-Google-Smtp-Source: AHgI3Iaf9AEyn5zapshpNLPmQwhw0pa5iMdNDAnYftfnQzGYjHo4lQtaxsz9iKLzx2782T6pJBW3 X-Received: by 2002:a17:902:be10:: with SMTP id r16mr1415535pls.304.1550109028962; Wed, 13 Feb 2019 17:50:28 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1550109028; cv=none; d=google.com; s=arc-20160816; b=epIvFT0nuRNnZ/8nUpK7/5zYeu4V6uJmoNWxcwWFtELmz2TG0plB1bfBIKQPv4V9Y9 yt/Gz548ZvnmD9zc41FMEJ9uVHxDvzwro3bHiXlwWcGADLpM2GehNCFBkCVrEmNMMV/N cTJxWc6KOmdF+qxbOBsK0ecNSkQ59X+BFzjrytdkg9WMKzeJpum/Dq0ePFUCvLz+DfDe 7rVYs9TLARunfNZOotcKtoe5X5vSOJgIc7VaqCREGyFbnTuD1DdEMkNw7l56v+AtyrId JJ9SyIyZktkdpKaWwDvXU+qZQ0UD9JnF69t2K/XAt8ZfmRz1GvHQABanQGrNdwQxommm usVg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :dkim-signature:dkim-filter; bh=0BvUdvCRw6PHAEM4VEzTZq100sYqySqWIxigW0cVcLM=; b=XM1A+F4oh6WOJYVBZ+zP0O0cAllW+YIhrFLN6dVfSx0vQ60V1a1/GtJhVO7ZoyTWcZ P2tbkBhk2wNog/7GUGIkhIF7yxgC0pCtNoKwb6cYdRL9iVjIJHwe5O76pFrLbihvEyMd W6U468W3Q0PaVS0TmHjql+BArGN75YESg2zVMA2JkVUQpvRpleyQfPiaf1RMuw28P+Xy UWLMljPAFflagEWmlMdTRRd0tO2WMM7TrUQZhr61Mi9TvWHeH0e+KFDVy8d6cnJrmpPg NVT3apsw25kUdh/Fs6KleN8K9dIUzAYKUdhWXPvRWTsHBH8syl9/2npMvjmdXuDm9V5p 5qBg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nifty.com header.s=dec2015msa header.b=fWzf4TNN; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d130si945668pgc.232.2019.02.13.17.50.28; Wed, 13 Feb 2019 17:50:28 -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=@nifty.com header.s=dec2015msa header.b=fWzf4TNN; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2391664AbfBNBu0 (ORCPT + 31 others); Wed, 13 Feb 2019 20:50:26 -0500 Received: from conuserg-07.nifty.com ([210.131.2.74]:50509 "EHLO conuserg-07.nifty.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726392AbfBNBu0 (ORCPT ); Wed, 13 Feb 2019 20:50:26 -0500 Received: from pug.e01.socionext.com (p14092-ipngnfx01kyoto.kyoto.ocn.ne.jp [153.142.97.92]) (authenticated) by conuserg-07.nifty.com with ESMTP id x1E1mU1f030693; Thu, 14 Feb 2019 10:48:30 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-07.nifty.com x1E1mU1f030693 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1550108911; bh=0BvUdvCRw6PHAEM4VEzTZq100sYqySqWIxigW0cVcLM=; h=From:To:Cc:Subject:Date:From; b=fWzf4TNNn/shTYGZ7qsdt21aRq1IBwEDxBlCliK/k2ABtep601ErBHSs/zLtXTMtx S6Bki/FtMoE/2pIaIrubwC5vnPnM2eeV35zhOFKKdyKcwwRF8Ut7Fb4YDxkhv8elRr DrRl/qnv/Cam6XkTZdpFlUQi0WzGXtE1w1cqd+4EXXCPcez85R5CL0erM3Rx/3hr2u z8/CU4qhpHtz11IXUSjvyG/QmeJW8smxo+v0Qj7Qct0Pok+/SOgswbvn+PUX1iLeEf kjMxacVuaV8A0f2sdTQwl1OyR2EKaebgkM8dfmZQDVGRJHdF9M9rlTwaH2xrLFCO7H 6Ed1ElISGJ36Q== X-Nifty-SrcIP: [153.142.97.92] From: Masahiro Yamada To: Andrew Morton Cc: Randy Dunlap , Masahiro Yamada , Arnd Bergmann , Alexander Popov , Kees Cook , linux-doc@vger.kernel.org, Jonathan Corbet , Thomas Gleixner , linux-kernel@vger.kernel.org, Dan Williams , Mathieu Desnoyers , Richard Guy Briggs Subject: [PATCH v2] kernel/configs: use .incbin directive to embed config_data.gz Date: Thu, 14 Feb 2019 10:48:13 +0900 Message-Id: <1550108893-21226-1-git-send-email-yamada.masahiro@socionext.com> X-Mailer: git-send-email 2.7.4 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This slightly optimizes the kernel/configs.c build. bin2c is not very efficient because it converts a data file into a huge array to embed it into a *.c file. Instead, we can use the .incbin directive. Also, this simplifies the code; Makefile is cleaner, and the way to get the offset/size of the config_data.gz is more straightforward. I used the "asm" statement in *.c instead of splitting it into *.S because MODULE_* tags are not supported in *.S files. I also cleaned up kernel/.gitignore; "config_data.gz" is unneeded because the top-level .gitignore takes care of the "*.gz" pattern. Signed-off-by: Masahiro Yamada --- Changes in v2: - The .section directive in v1 accidentally moved executable code from .text into .rodata (reported by kbuild test robot). .pushsection and .popsection should be used here. Documentation/dontdiff | 1 - kernel/.gitignore | 2 -- kernel/Makefile | 11 +---------- kernel/configs.c | 42 ++++++++++++++++++++---------------------- 4 files changed, 21 insertions(+), 35 deletions(-) -- 2.7.4 diff --git a/Documentation/dontdiff b/Documentation/dontdiff index 2228fcc..ef25a06 100644 --- a/Documentation/dontdiff +++ b/Documentation/dontdiff @@ -106,7 +106,6 @@ compile.h* conf config config-* -config_data.h* config.mak config.mak.autogen conmakehash diff --git a/kernel/.gitignore b/kernel/.gitignore index b3097bd..6e69910 100644 --- a/kernel/.gitignore +++ b/kernel/.gitignore @@ -1,7 +1,5 @@ # # Generated files # -config_data.h -config_data.gz timeconst.h hz.bc diff --git a/kernel/Makefile b/kernel/Makefile index 6aa7543..6c57e78 100644 --- a/kernel/Makefile +++ b/kernel/Makefile @@ -116,17 +116,8 @@ obj-$(CONFIG_GCC_PLUGIN_STACKLEAK) += stackleak.o KASAN_SANITIZE_stackleak.o := n KCOV_INSTRUMENT_stackleak.o := n -$(obj)/configs.o: $(obj)/config_data.h +$(obj)/configs.o: $(obj)/config_data.gz targets += config_data.gz $(obj)/config_data.gz: $(KCONFIG_CONFIG) FORCE $(call if_changed,gzip) - -filechk_ikconfiggz = \ - echo "static const char kernel_config_data[] __used = MAGIC_START"; \ - cat $< | scripts/bin2c; \ - echo "MAGIC_END;" - -targets += config_data.h -$(obj)/config_data.h: $(obj)/config_data.gz FORCE - $(call filechk,ikconfiggz) diff --git a/kernel/configs.c b/kernel/configs.c index 2df132b..b062425 100644 --- a/kernel/configs.c +++ b/kernel/configs.c @@ -30,37 +30,35 @@ #include #include -/**************************************************/ -/* the actual current config file */ - /* - * Define kernel_config_data and kernel_config_data_size, which contains the - * wrapped and compressed configuration file. The file is first compressed - * with gzip and then bounded by two eight byte magic numbers to allow - * extraction from a binary kernel image: - * - * IKCFG_ST - * - * IKCFG_ED + * "IKCFG_ST" and "IKCFG_ED" are used to extract the config data from + * a binary kernel image or a module. See scripts/extract-ikconfig. */ -#define MAGIC_START "IKCFG_ST" -#define MAGIC_END "IKCFG_ED" -#include "config_data.h" - - -#define MAGIC_SIZE (sizeof(MAGIC_START) - 1) -#define kernel_config_data_size \ - (sizeof(kernel_config_data) - 1 - MAGIC_SIZE * 2) +asm ( +" .pushsection .rodata, \"a\" \n" +" .ascii \"IKCFG_ST\" \n" +" .global kernel_config_data \n" +"kernel_config_data: \n" +" .incbin \"kernel/config_data.gz\" \n" +" .global kernel_config_data_end \n" +"kernel_config_data_end: \n" +" .ascii \"IKCFG_ED\" \n" +" .popsection \n" +); #ifdef CONFIG_IKCONFIG_PROC +extern char kernel_config_data; +extern char kernel_config_data_end; + static ssize_t ikconfig_read_current(struct file *file, char __user *buf, size_t len, loff_t * offset) { return simple_read_from_buffer(buf, len, offset, - kernel_config_data + MAGIC_SIZE, - kernel_config_data_size); + &kernel_config_data, + &kernel_config_data_end - + &kernel_config_data); } static const struct file_operations ikconfig_file_ops = { @@ -79,7 +77,7 @@ static int __init ikconfig_init(void) if (!entry) return -ENOMEM; - proc_set_size(entry, kernel_config_data_size); + proc_set_size(entry, &kernel_config_data_end - &kernel_config_data); return 0; }