From patchwork Fri Apr 21 19:36:44 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Masahiro Yamada X-Patchwork-Id: 9693617 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 9771E601D4 for ; Fri, 21 Apr 2017 19:38:01 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 81B4228654 for ; Fri, 21 Apr 2017 19:38:01 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 7518A2865D; Fri, 21 Apr 2017 19:38:01 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [65.50.211.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id B6CC02865B for ; Fri, 21 Apr 2017 19:38:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:Message-Id:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To: References:List-Owner; bh=4gsY042NwqntELSWeUu/R+jQfVKcq3T2Ug346w0EVzg=; b=Gru TS6h+psl1G7e080uNONHd7qaCM96Lsn+RjaX3PFKTFyvz/9Mi0UAB7Lw87SPT0i1X+Jp7Uk60jt91 rzwL5vy+A5tGNRhrcYkhmjlWOxslEmRhVAfquMf+4cPJB0MmOEp95/ahkRwI6s2xI7AKIRFsOz/Eo fTu9P61zSjXel4cDa3osz4CQqjBNGqQV1sWJBGFHrsJL1WfIrzreN+v3tAMKeQxDslgT7ENUELO56 4qvgKukAy+vrj6H+FE17M/tfY37UMOWKRwD9Nj+UeOOWvq44WL/hjpNHCFmXzbhyqq4yl2ODZC6kz +HxxMuWVHM/FJkWEpUqjRcz42NzbWHg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux)) id 1d1eNU-00026B-6k; Fri, 21 Apr 2017 19:38:00 +0000 Received: from conuserg-11.nifty.com ([210.131.2.78]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1d1eNQ-0001yM-7j for linux-arm-kernel@lists.infradead.org; Fri, 21 Apr 2017 19:37:58 +0000 Received: from grover.sesame (FL1-111-169-71-157.osk.mesh.ad.jp [111.169.71.157]) (authenticated) by conuserg-11.nifty.com with ESMTP id v3LJapaV016563; Sat, 22 Apr 2017 04:36:55 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conuserg-11.nifty.com v3LJapaV016563 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1492803415; bh=9poJ2gK6wj/hPYv0xoF6m35t95XY+uOQhj/zQQUmYPE=; h=From:To:Cc:Subject:Date:From; b=OI5Dir1/cGA2HGgBmre4XCaCkHmCdLhmR1k8TKid5dLYMEwH9P55Q9wAMgws+PgZM RDlJLm7eFKxML3gVAkH34lcw17GrRFTd+oJjjvxe8LsHnw8CdEXa0UugZCzJ2vFG4c i2XG05uszdGWwp4RNMg0vmdzQbzRfa7R5kTBo2EJUOpnzr1GazTDXR70rFV8O+2Gfo yVYrJuVf0ZHtnYj8RkLwKMSIdV6OZsADLlEA2MOwYWGsvzbxHLBtYbltE0NqmvCc/9 b4RzOvXyCil8hUFJtA/B/XWQWpvRqqxqQqgvngGcl3jewqjYZAH+838XhW6PREOWRr 6SvQinhdz1psA== X-Nifty-SrcIP: [111.169.71.157] From: Masahiro Yamada To: linux-kbuild@vger.kernel.org Subject: [RFC-b PATCH] kbuild: redefine __FILE__ as relative path from $(srctree) if possible Date: Sat, 22 Apr 2017 04:36:44 +0900 Message-Id: <1492803404-17837-1-git-send-email-yamada.masahiro@socionext.com> X-Mailer: git-send-email 2.7.4 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20170421_123756_533467_C0CC4CF3 X-CRM114-Status: GOOD ( 12.91 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Masahiro Yamada , Greg KH , x86@kernel.org, linux-kernel@vger.kernel.org, Linus Torvalds , Michal Marek , Andrew Morton , Sam Ravnborg , linux-arm-kernel@lists.infradead.org MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP Since Kbuild runs in the objtree, __FILE__ can be a very long path depending of $(srctree). Commit 9da0763bdd82 ("kbuild: Use relative path when building in a subdir of the source tree") made the situation better for cases where objtree is a child of srctree. ($(srctree) is "..") For other cases of out-of-tree build, filenames in WARN_ON() etc. are still an absolute path. It also means the kernel image depends on where it was built. Here, the idea is to redefine __FILE__ as the relative path from $(srctree), but doing so causes a compiler warning: warning: "__FILE__" redefined [-Wbuiltin-macro-redefined] We can suppress it with -Wno-builtin-macro-redefined. However, this option is not recognized by old compilers. So, __FILE__ is re-defined only when the option is supported. I am adding stringify helper because '"..."' wrapping is the same pattern as in KBUILD_BASENAME, KBUILD_MODNAME. Please note __FILE__ is always an absolute path for external modules. We can strip KBUILD_EXTMOD from the path if we want, but I am not doing that. It would make it difficult to figure out the module in question in case of WARN_ON(). Signed-off-by: Masahiro Yamada --- This is another possible approach. Please see these as well: https://patchwork.kernel.org/patch/9693559/ https://patchwork.kernel.org/patch/9693563/ Pro: this is only touching 3 makefiles. Con: this does not work for old compilers. Makefile | 3 +++ scripts/Kbuild.include | 4 ++++ scripts/Makefile.lib | 6 ++++-- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 8804aae..293ef6d 100644 --- a/Makefile +++ b/Makefile @@ -798,6 +798,9 @@ KBUILD_CFLAGS += $(call cc-option,-Werror=strict-prototypes) # Prohibit date/time macros, which would make the build non-deterministic KBUILD_CFLAGS += $(call cc-option,-Werror=date-time) +# Is is possible to redefine __FILE__? +KBUILD_CFLAGS += $(call cc-disable-warning, builtin-macro-redefined) + # enforce correct pointer usage KBUILD_CFLAGS += $(call cc-option,-Werror=incompatible-pointer-types) diff --git a/scripts/Kbuild.include b/scripts/Kbuild.include index 61f87a9..7fc3841 100644 --- a/scripts/Kbuild.include +++ b/scripts/Kbuild.include @@ -31,6 +31,10 @@ baseprereq = $(basename $(notdir $<)) escsq = $(subst $(squote),'\$(squote)',$1) ### +# Quote a string to pass it to C files. foo => '"foo"' +stringify = $(squote)$(quote)$1$(quote)$(squote) + +### # Easy method for doing a status message kecho := : quiet_kecho := echo diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib index 9e70196..1d789df 100644 --- a/scripts/Makefile.lib +++ b/scripts/Makefile.lib @@ -96,10 +96,12 @@ obj-dirs := $(addprefix $(obj)/,$(obj-dirs)) # Note: Files that end up in two or more modules are compiled without the # KBUILD_MODNAME definition. The reason is that any made-up name would # differ in different configs. -name-fix = $(squote)$(quote)$(subst $(comma),_,$(subst -,_,$1))$(quote)$(squote) +name-fix = $(call stringify,$(subst $(comma),_,$(subst -,_,$1))) basename_flags = -DKBUILD_BASENAME=$(call name-fix,$(basetarget)) modname_flags = $(if $(filter 1,$(words $(modname))),\ -DKBUILD_MODNAME=$(call name-fix,$(modname))) +filepath_flags = $(if $(filter -Wno-builtin-macro-redefined, $(KBUILD_CFLAGS)), \ + -D__FILE__=$(call stringify,$(src)/$(notdir $<))) orig_c_flags = $(KBUILD_CPPFLAGS) $(KBUILD_CFLAGS) $(KBUILD_SUBDIR_CCFLAGS) \ $(ccflags-y) $(CFLAGS_$(basetarget).o) @@ -163,7 +165,7 @@ endif c_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \ $(__c_flags) $(modkern_cflags) \ - $(basename_flags) $(modname_flags) + $(basename_flags) $(modname_flags) $(filepath_flags) a_flags = -Wp,-MD,$(depfile) $(NOSTDINC_FLAGS) $(LINUXINCLUDE) \ $(__a_flags) $(modkern_aflags)