From patchwork Wed Aug 17 04:43:22 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 9285113 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 59ACE60459 for ; Wed, 17 Aug 2016 04:43:39 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 418FB28822 for ; Wed, 17 Aug 2016 04:43:39 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 3621D2882D; Wed, 17 Aug 2016 04:43:39 +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=-6.8 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 92F8328822 for ; Wed, 17 Aug 2016 04:43:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750794AbcHQEnh (ORCPT ); Wed, 17 Aug 2016 00:43:37 -0400 Received: from mail-pf0-f193.google.com ([209.85.192.193]:36391 "EHLO mail-pf0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750784AbcHQEng (ORCPT ); Wed, 17 Aug 2016 00:43:36 -0400 Received: by mail-pf0-f193.google.com with SMTP id y134so6788046pfg.3; Tue, 16 Aug 2016 21:43:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=date:from:to:cc:subject:message-id:in-reply-to:references :organization:mime-version:content-transfer-encoding; bh=n9/YYJUmQS2PwdDYuMEIq6UaRrnngx0u34mIaYaO5b8=; b=IqvdpC2ZDerr7RXar9/vrmDazeDmfC0pmFryTfWuNPgPQulHnWGWc13WmK9mXUp/2W 6k21Y7wfLr7EIK1cfZFnca8tc7v9mGFvbwT/26FbFXiO33G0A33Zj57Cb4YfEatLprsM PxUACyb+ni16maQQChY7YSAhEvAgHnmuC+uzo8VzZFtbP1d5BTSXTJfNUEQSjROrB9f3 85ezaJV7LtUysq7AMOpV0+YUAb57vz7G8S1sz0h8cByysWvtK8lSiI+gBhFbXyEmZAyM YLYzNNJ72a6I8UoRFUGKO2AuO46QHZC0E6Ruo5FBOv3RxaZjUPpgcU0pmIRnjySoJscm UsSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:date:from:to:cc:subject:message-id:in-reply-to :references:organization:mime-version:content-transfer-encoding; bh=n9/YYJUmQS2PwdDYuMEIq6UaRrnngx0u34mIaYaO5b8=; b=ShfgC8fBChFxgUxxzlKW99nGH704slrwoR1kRNjaEUgWn17Hbtzq7fqEu9NSaBH+MP VNSq2erl5Zoele1vZLx10cvOHpByPBpz8788XQnhwyXlbIi/L/9kDilTmA1C+knAgyED tx0bZW+K0Vhr0qgZy+UONIYIfnhQZNx4LHRFvqoyd56sJQJ+Zbtkoe5LVnX8a9DDs7OV /yVWrD0PCKrSOugd0eJepQmAR4q+AaJ2kthUr+dDFTqw3RfCRhlWMT+e/kiK/kFmGMah VK+xe8hJE4lN5HTMi0UI8405I8TGtkckstZTxnI4utIBGx0IEUiyp2LFpJFDQbLTYaYD /cLQ== X-Gm-Message-State: AEkoouu2UmkwLzYUB7ChoUrA9WcZ2s+DAyEJg8VSVYg9qJxk0a8ohmKuC9FSC1wTIRdgxQ== X-Received: by 10.98.49.198 with SMTP id x189mr19851729pfx.135.1471409015826; Tue, 16 Aug 2016 21:43:35 -0700 (PDT) Received: from roar.ozlabs.ibm.com ([122.99.82.10]) by smtp.gmail.com with ESMTPSA id n13sm43028776pfj.16.2016.08.16.21.43.31 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 16 Aug 2016 21:43:35 -0700 (PDT) Date: Wed, 17 Aug 2016 14:43:22 +1000 From: Nicholas Piggin To: Michal Marek Cc: linux-kbuild@vger.kernel.org, linux-arch@vger.kernel.org, Sam Ravnborg , Stephen Rothwell , Arnd Bergmann , Nicolas Pitre , Segher Boessenkool , Alan Modra Subject: Re: [PATCH 3/6] kbuild: add arch specific post-link pass Message-ID: <20160817144322.4067391f@roar.ozlabs.ibm.com> In-Reply-To: <57B2DBA1.6090304@suse.com> References: <1470910580-18458-1-git-send-email-npiggin@gmail.com> <1470910580-18458-4-git-send-email-npiggin@gmail.com> <57B2DBA1.6090304@suse.com> Organization: IBM X-Mailer: Claws Mail 3.14.0 (GTK+ 2.24.30; x86_64-pc-linux-gnu) MIME-Version: 1.0 Sender: linux-kbuild-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kbuild@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP On Tue, 16 Aug 2016 11:23:45 +0200 Michal Marek wrote: > Dne 11.8.2016 v 12:16 Nicholas Piggin napsal(a): > > $(modules): %.ko :%.o %.mod.o FORCE > > $(call if_changed,ld_ko_o) > > +ifdef CONFIG_BUILD_ARCH_POSTLINK > > + $(Q)$(MAKE) -f $(srctree)/arch/$(SRCARCH)/Makefile.postlink $@ > > +endif > > Why not simply branch off the existence of arch/*/Makefile.postlink and > drop the kconfig option? I just did not think of it. That does seem nicer, thanks. What do you think of this? Allow architectures to create arch/xxx/Makefile.postlink with targets for vmlinux, modules.ko, and clean, which will be invoked after final linking of vmlinux and modules. powerpc will use this to check vmlinux linker relocations for sanity, and may use it to fix up alternate instruction patch branch addresses. Signed-off-by: Nicholas Piggin --- Since v1, - Switched to a more flexible arch makefile invocation. - Provide a powerpc patch to use it to help existing build issue (rather than only justification being out-of-tree patch). Since v2 - Depend on existence of Makefile.modpost, rather than config option. - Move post-vmlinux invocation into Makefile rather than link-vmlinux.sh - Add a clean target --- Documentation/kbuild/makefiles.txt | 16 ++++++++++++++++ Makefile | 7 +++++++ scripts/Makefile.modpost | 6 ++++++ 3 files changed, 29 insertions(+) diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt index 385a5ef..ce93dc7 100644 --- a/Documentation/kbuild/makefiles.txt +++ b/Documentation/kbuild/makefiles.txt @@ -41,6 +41,7 @@ This document describes the Linux kernel Makefiles. --- 6.8 Custom kbuild commands --- 6.9 Preprocessing linker scripts --- 6.10 Generic header files + --- 6.11 Post-link pass === 7 Kbuild syntax for exported headers --- 7.1 header-y @@ -1237,6 +1238,21 @@ When kbuild executes, the following steps are followed (roughly): to list the file in the Kbuild file. See "7.4 generic-y" for further info on syntax etc. +--- 6.11 Post-link pass + + If the file arch/xxx/Makefile.postlink exists, this makefile + will be invoked for post-link objects (vmlinux and modules.ko) + for architectures to run post-link passes on. Must also handle + the clean target. + + This pass runs after kallsyms generation. If the architecture + needs to modify symbol locations, rather than manipulate the + kallsyms, it may be easier to add another postlink target for + .tmp_vmlinux? targets to be called from link-vmlinux.sh. + + For example, powerpc uses this to check relocation sanity of + the linked vmlinux file. + === 7 Kbuild syntax for exported headers The kernel includes a set of headers that is exported to userspace. diff --git a/Makefile b/Makefile index 1d26fdb..20d3bfd 100644 --- a/Makefile +++ b/Makefile @@ -954,8 +954,14 @@ include/generated/autoksyms.h: FORCE cmd_link-vmlinux = $(CONFIG_SHELL) $< $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux) quiet_cmd_link-vmlinux = LINK $@ +# Optional arch pass after final link +ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink) + cmd_postlink-vmlinux = \ + $(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true) + vmlinux: scripts/link-vmlinux.sh vmlinux_prereq $(vmlinux-deps) FORCE +$(call if_changed,link-vmlinux) + +$(call if_changed,postlink-vmlinux) # Build samples along the rest of the kernel ifdef CONFIG_SAMPLES @@ -1279,6 +1285,7 @@ $(clean-dirs): vmlinuxclean: $(Q)$(CONFIG_SHELL) $(srctree)/scripts/link-vmlinux.sh clean + $(Q)$(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) clean) clean: archclean vmlinuxclean diff --git a/scripts/Makefile.modpost b/scripts/Makefile.modpost index 1366a94..a3e862e 100644 --- a/scripts/Makefile.modpost +++ b/scripts/Makefile.modpost @@ -121,8 +121,14 @@ quiet_cmd_ld_ko_o = LD [M] $@ $(KBUILD_LDFLAGS_MODULE) $(LDFLAGS_MODULE) \ -o $@ $(filter-out FORCE,$^) +# Optional arch pass after final link +ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink) + cmd_postlink-ko = \ + $(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true) + $(modules): %.ko :%.o %.mod.o FORCE $(call if_changed,ld_ko_o) + +$(call if_changed,postlink-ko) targets += $(modules)