From patchwork Wed Aug 24 12:29:21 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Piggin X-Patchwork-Id: 9297605 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 E20FD607F0 for ; Wed, 24 Aug 2016 12:30:39 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D47F528F49 for ; Wed, 24 Aug 2016 12:30:39 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C8C4528F66; Wed, 24 Aug 2016 12:30: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 15F3A28F4E for ; Wed, 24 Aug 2016 12:30:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932308AbcHXMah (ORCPT ); Wed, 24 Aug 2016 08:30:37 -0400 Received: from mail-pa0-f66.google.com ([209.85.220.66]:35532 "EHLO mail-pa0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754654AbcHXMaT (ORCPT ); Wed, 24 Aug 2016 08:30:19 -0400 Received: by mail-pa0-f66.google.com with SMTP id cf3so1132010pad.2; Wed, 24 Aug 2016 05:30:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=EyttN2OGfNzi+WbVtcBFdDcqcF4ELB/sw6qOSmMNo3Q=; b=mYZF3kKBL1p6mEv6MIrjqYezc0ESneEQhF/DpVJhlF5JjcBFfC6IHzAe2Naj6lcaBB izY20K/ZjhAo3Kfh7RPFnSicbS7KqNAiHRXS+8UrhnG/Q+gFMfwt0Ws6iGztHCzy0yex eOuMz2BBUFESpfHQ4GUKA2gr4LDwM5PIH0nfIavOrc488gchYEU+DCpVpYDOkrGmdavY kA8ppfT2UIZMz68ZzqnnCtOk7J7cI+7p9BsjsATliRw8L0nozCw/64K8ZdUqiUHIY1P6 rejeVGArjGUEvwaSMU9Op4hwHwtM+J7ImDzzBGcDo+8BBSK2JTwN0NVqM76t9DvOdol+ lyqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=EyttN2OGfNzi+WbVtcBFdDcqcF4ELB/sw6qOSmMNo3Q=; b=lnxm2yj4/ibJYK8efVVYX0SSdZEfGsZRvPSLzR+040pxnBVnjgQx54xioD5PCcp/KI R49XtuNJEBewNRNbT+rNjwIMwMNY4t22X2MUdLJwufUPTikfG8IcR8RNzGCWP5dZwoU6 UKGW2TyXy2WPOZBBHYLpH9VgRkiXw2iKZb2zJJEZGcVXE0yVeOiJ5qGzXqnOGjHY6P18 qTePFSWG7wYdjI1SmwYcqBjZf+uBKOe8OMdECP5RJtlvuVuZdJ1vzgImtvZ6vgnq8Ets rwSR0O6uEFNrW5qyfBKRjBQCIKJqg2chcHWvErYO+1iF55gk3XadT2CNvaOD0emJZUmg h/nQ== X-Gm-Message-State: AE9vXwOCqpdjlDoYooUS1BJKq93tTNKLNZqWd5NAwqS2cP3CRM4vJi2TCqZ70ObqJgNhwg== X-Received: by 10.66.222.202 with SMTP id qo10mr5211667pac.76.1472041807314; Wed, 24 Aug 2016 05:30:07 -0700 (PDT) Received: from roar.ozlabs.ibm.com ([122.99.82.10]) by smtp.gmail.com with ESMTPSA id yv9sm13467578pab.0.2016.08.24.05.30.02 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 24 Aug 2016 05:30:06 -0700 (PDT) From: Nicholas Piggin To: Michal Marek , linux-kbuild@vger.kernel.org Cc: Nicholas Piggin , linux-arch@vger.kernel.org, Sam Ravnborg , Stephen Rothwell , Arnd Bergmann , Nicolas Pitre , Segher Boessenkool , Alan Modra Subject: [PATCH 3/3] kbuild: add arch specific post-link Makefile Date: Wed, 24 Aug 2016 22:29:21 +1000 Message-Id: <1472041761-14414-4-git-send-email-npiggin@gmail.com> X-Mailer: git-send-email 2.8.1 In-Reply-To: <1472041761-14414-1-git-send-email-npiggin@gmail.com> References: <1472041761-14414-1-git-send-email-npiggin@gmail.com> 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 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. - Add a clean target - Move post-vmlinux invocation into Makefile rather than link-vmlinux.sh - Arch postlink must always be done after final link, not on an if_changed basis, because the vmlinux itself is not a dependency. Documentation/kbuild/makefiles.txt | 16 ++++++++++++++++ Makefile | 10 +++++++--- arch/Kconfig | 7 +++++++ scripts/Makefile.modpost | 14 +++++++++----- 4 files changed, 39 insertions(+), 8 deletions(-) diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt index 13f888a..16841a7 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 @@ -1236,6 +1237,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 b29c6c0..9c6992f 100644 --- a/Makefile +++ b/Makefile @@ -967,9 +967,12 @@ endif include/generated/autoksyms.h: FORCE $(Q)$(CONFIG_SHELL) $(srctree)/scripts/adjust_autoksyms.sh true -# Final link of vmlinux - cmd_link-vmlinux = $(CONFIG_SHELL) $< $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux) -quiet_cmd_link-vmlinux = LINK $@ +ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink) + +# Final link of vmlinux with optional arch pass after final link + cmd_link-vmlinux = \ + $(CONFIG_SHELL) $< $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux) ; \ + $(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true) vmlinux: scripts/link-vmlinux.sh vmlinux_prereq $(vmlinux-deps) FORCE +$(call if_changed,link-vmlinux) @@ -1268,6 +1271,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/arch/Kconfig b/arch/Kconfig index 94138e5..c8a1677 100644 --- a/arch/Kconfig +++ b/arch/Kconfig @@ -424,6 +424,13 @@ config CC_STACKPROTECTOR_STRONG endchoice +config BUILD_ARCH_POSTLINK + bool + help + Select this if the architecture wants to have a Makefile invoked + on modules and vmlinux after they are linked. The architecture + must provide arch/?/Makefile.postlink + config THIN_ARCHIVES bool help diff --git a/scripts/Makefile.modpost b/scripts/Makefile.modpost index 1366a94..16923ba 100644 --- a/scripts/Makefile.modpost +++ b/scripts/Makefile.modpost @@ -115,14 +115,18 @@ $(modules:.ko=.mod.o): %.mod.o: %.mod.c FORCE targets += $(modules:.ko=.mod.o) -# Step 6), final link of the modules +ARCH_POSTLINK := $(wildcard $(srctree)/arch/$(SRCARCH)/Makefile.postlink) + +# Step 6), final link of the modules with optional arch pass after final link quiet_cmd_ld_ko_o = LD [M] $@ - cmd_ld_ko_o = $(LD) -r $(LDFLAGS) \ - $(KBUILD_LDFLAGS_MODULE) $(LDFLAGS_MODULE) \ - -o $@ $(filter-out FORCE,$^) + cmd_ld_ko_o = \ + $(LD) -r $(LDFLAGS) \ + $(KBUILD_LDFLAGS_MODULE) $(LDFLAGS_MODULE) \ + -o $@ $(filter-out FORCE,$^) ; \ + $(if $(ARCH_POSTLINK), $(MAKE) -f $(ARCH_POSTLINK) $@, true) $(modules): %.ko :%.o %.mod.o FORCE - $(call if_changed,ld_ko_o) + +$(call if_changed,ld_ko_o) targets += $(modules)