From patchwork Fri Jul 21 20:26:25 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 108507 Delivered-To: patch@linaro.org Received: by 10.140.101.44 with SMTP id t41csp1238795qge; Fri, 21 Jul 2017 13:28:51 -0700 (PDT) X-Received: by 10.84.232.205 with SMTP id x13mr4547499plm.432.1500668930994; Fri, 21 Jul 2017 13:28:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1500668930; cv=none; d=google.com; s=arc-20160816; b=hm+/vlFOiz07sglYT8CAsFqdqvKEZLQmvq2Kq7CCaUO/TSQpt8Cj0vtRuwCof+vuxY e1fiFNHB6st3P0l5fPPx2G5bBSg06SjwsUEVa23echBD1MjtUsWmM1bQnBlfDcmC0dMF VibwxUbZv9ijgSZmuDoZb+FzlGzNvVHLSqi3Q6yKYPvVdgnT1rgYYO47PwAWKgiwV935 gnVr+PxMDrVhAfGwjvv7zGIBXBZHQetasQBekmtx4vh+T4+Cgvda+VbwItLmhEoqxisW 4JQ12bFtG57nOrVRHSCssN/7c6TbUb2uOinzCnfA0KnHcttKWvELQwXYIk5gQTRZki2o 1P0A== 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 :arc-authentication-results; bh=vxf/uo8q9fXa8k3Rjmi/l5j6SWYEZYxdDzwiqUYrG2w=; b=qMs+w5ZDbZ5cDdkB85oEn6PlGCvlF7+DZkMBHiehgoCStO2xo6WjpzzK6qaoFPLNxf XiOJB1exXG58voBRmV2RpLDFOU/t5inbN8N1Kruc1Dn1WJz2w2F57OHcYjiFhNfBwRfK vfrPeapBRq7q78Xb3fIwQTeiea4AsqcZmSi1DaEicqLMXR1AgBCIqqUczUXNxfeFTRe5 dUTBjyC+omcc8h4yhYH6LLKqemxqXynxpwahmDkLu1gVmp3oRtZe4Ru4TYV4AYWYJub9 iuX9Jhbp5Yze/GvzEsGP0BKN2D6SDfs7iFpeVCF1Tel8vMvOx/069LFI5/8ODNL1gL2a FX2Q== ARC-Authentication-Results: i=1; mx.google.com; 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 t11si3500570pgo.703.2017.07.21.13.28.50; Fri, 21 Jul 2017 13:28:50 -0700 (PDT) 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; 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 S1754766AbdGUU2r (ORCPT + 26 others); Fri, 21 Jul 2017 16:28:47 -0400 Received: from mout.kundenserver.de ([212.227.126.130]:54485 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752811AbdGUU2p (ORCPT ); Fri, 21 Jul 2017 16:28:45 -0400 Received: from wuerfel.lan ([5.56.224.194]) by mrelayeu.kundenserver.de (mreue003 [212.227.15.129]) with ESMTPA (Nemesis) id 0LtBwl-1djPsq45b1-012saR; Fri, 21 Jul 2017 22:26:40 +0200 From: Arnd Bergmann To: Arnd Bergmann , David Woodhouse , Brian Norris , Boris Brezillon , Marek Vasut , Richard Weinberger , Cyrille Pitchen Cc: Russell King , Andrew Morton , Nicholas Piggin , Daniel Lezcano , Michal Marek , Linus Walleij , Lorenzo Pieralisi , Kees Cook , Peter Zijlstra , Chris Metcalf , linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org Subject: [PATCH] [RESEND] mtd: only use __xipram annotation when XIP_KERNEL is set Date: Fri, 21 Jul 2017 22:26:25 +0200 Message-Id: <20170721202636.3361536-1-arnd@arndb.de> X-Mailer: git-send-email 2.9.0 X-Provags-ID: V03:K0:D+DHIYH2temWxJkr1mV5b7kqxe+nmEwT5Xbyos0ojqXBV15c8a0 fjXT6jvtpaRlk11ickKlf/4acLLIouEbmlEsRi9rZCp7ltpdkejqW7HU5aM/S3OT2mbNWUY q3atn4ZC++2ammZTVwfeRSFWOekXlUTwUdGZc9DagYc079RiNkk3+oHDmdKWX68h/X1DPxH FK2td0tUs4cWe10NiU1cw== X-UI-Out-Filterresults: notjunk:1; V01:K0:TdQICsgxMM0=:DWziYoMsm6Kw8W77LfD79Z 4JPcDElUCJNGlNHmNKTksKlrIrJvwodXE/n4+YqIL2k42zccl6MYAsCn4aqh43oBZ1rrM/xKA 8dmRZ+KonJ49b2b5t/ZG6K+nk7QPOBAn6wD5qZ1GvMwCbAXhHWSvEiqikdcHCIDG0eF5xyGFt MBYmkPTSpag5Qgbh6I/pvDH3twBWGWIow4Ga16sdOqB8O4ZIyxQS/PimfnP47SEoNyk9BHl7v tNLobiRas2mCJYhAKqg020bvEFOsvjGDDHbPL0ST+MZGp7S/0uc8G3yyoWaftWY4yOXXXlTh4 AhzkGurq6RBEvfRWtnRPHOi/bcbyRkXMqZE8oGubJIt21oHnlVw+WPeXu6olt/B6qqnOl5IiP s5IwpaeTz2GuPXoksB7Y0k0yKRmqXrcv+5jSGPEcQYwrVQ1v/X8WHE3HM5qlU6qTBY7Z9FPVG M1OPe62xHNiRGuGDr6AA/Q9miKkI05VeBiq9u0+W0FTGPkxBVqyyfd1pM9xKww+GtO8ive2r6 Zhd9g2c1A5AdvIkUZc9DcCAB2b9IGDjJhV5PbfaYE39+X/QVDHHlFebfe6OgYZ+tcfewwOHfv L1MTh8WRSR/L78NVJA8Dt8W0U6I1vBI4fDIi5veouHxTyGyOKOin7ymnh8METzW+ee9gI1PDR vdCahljgEkkK9i+UkhINXNdB06lKzSvA1FLZFtdk/eZ2OW/MhVHvF1PGMSkln65Jh8H2vXhAr vpf3Tw3JYeKFiE9srL8V32GoHkG9R1jDr+RPig== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When XIP_KERNEL is enabled, some functions are defined in the .data ELF section because we require them to be in RAM whenever we communicate with the flash chip. However this causes problems when FTRACE is enabled and gcc emits calls to __gnu_mcount_nc in the function prolog: drivers/built-in.o: In function `cfi_chip_setup': :(.data+0x272fc): relocation truncated to fit: R_ARM_CALL against symbol `__gnu_mcount_nc' defined in .text section in arch/arm/kernel/built-in.o drivers/built-in.o: In function `cfi_probe_chip': :(.data+0x27de8): relocation truncated to fit: R_ARM_CALL against symbol `__gnu_mcount_nc' defined in .text section in arch/arm/kernel/built-in.o /tmp/ccY172rP.s: Assembler messages: /tmp/ccY172rP.s:70: Warning: ignoring changed section attributes for .data /tmp/ccY172rP.s: Error: 1 warning, treating warnings as errors make[5]: *** [drivers/mtd/chips/cfi_probe.o] Error 1 /tmp/ccK4rjeO.s: Assembler messages: /tmp/ccK4rjeO.s:421: Warning: ignoring changed section attributes for .data /tmp/ccK4rjeO.s: Error: 1 warning, treating warnings as errors make[5]: *** [drivers/mtd/chips/cfi_util.o] Error 1 /tmp/ccUvhCYR.s: Assembler messages: /tmp/ccUvhCYR.s:1895: Warning: ignoring changed section attributes for .data /tmp/ccUvhCYR.s: Error: 1 warning, treating warnings as errors Specifically, this does not work because the .data section is not marked executable, which leads LD to not generate trampolines for long calls. This moves the __xipram functions into their own .xiptext section instead. The section is still placed next to .data and located in RAM but is marked executable, which avoids the build errors. Also, we only need to place the XIP functions into a separate section if both CONFIG_XIP_KERNEL and CONFIG_MTD_XIP are set: When only MTD_XIP is used, the whole kernel is still in RAM and we do not need to worry about pulling out the rug under it. When only XIP_KERNEL but not MTD_XIP is set, the kernel is in some form of ROM, but we never write to it. Note that MTD_XIP has been broken on ARM since around 2011 or 2012. I have sent another patch[2] to fix compilation, which I plan to merge through arm-soc unless there are objections. The obvious alternative to that would be to completely rip out the MTD_XIP support from the kernel, since obviously nobody has been using it in a long while. Link: [1] https://patchwork.kernel.org/patch/8109771/ Link: [2] https://patchwork.kernel.org/patch/9855225/ Signed-off-by: Arnd Bergmann --- include/asm-generic/vmlinux.lds.h | 1 + include/linux/mtd/xip.h | 10 ++++++---- 2 files changed, 7 insertions(+), 4 deletions(-) -- 2.9.0 Acked-by: Boris Brezillon diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index da0be9a8d1de..ff507c178327 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h @@ -203,6 +203,7 @@ * pull in .data..stuff which has its own requirements. Same for bss. */ #define DATA_DATA \ + *(.xiptext) \ *(.data .data.[0-9a-zA-Z_]*) \ *(.ref.data) \ *(.data..shared_aligned) /* percpu related */ \ diff --git a/include/linux/mtd/xip.h b/include/linux/mtd/xip.h index abed4dec5c2f..e373690cce0a 100644 --- a/include/linux/mtd/xip.h +++ b/include/linux/mtd/xip.h @@ -30,7 +30,9 @@ * obviously not be running from flash. The __xipram is therefore marking * those functions so they get relocated to ram. */ -#define __xipram noinline __attribute__ ((__section__ (".data"))) +#ifdef CONFIG_XIP_KERNEL +#define __xipram noinline __attribute__ ((__section__ (".xiptext"))) +#endif /* * Each architecture has to provide the following macros. They must access @@ -90,10 +92,10 @@ #define xip_cpu_idle() do { } while (0) #endif -#else +#endif /* CONFIG_MTD_XIP */ +#ifndef __xipram #define __xipram - -#endif /* CONFIG_MTD_XIP */ +#endif #endif /* __LINUX_MTD_XIP_H__ */