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.
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
include/asm-generic/vmlinux.lds.h | 1 +
include/linux/mtd/xip.h | 10 ++++++----
2 files changed, 7 insertions(+), 4 deletions(-)
From: Brian Norris <computersforpeace@gmail.com> Date: 2016-03-05 00:02:30
Hi Arnd,
I know you're travelling, but...
On Mon, Jan 25, 2016 at 04:41:50PM +0100, Arnd Bergmann wrote:
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
Can you provide a sample .config that DOES build correctly with
XIP_KERNEL enabled + this patch? My first attempt yields some other
failures I don't care to fixup right now...
Anyway, I don't doubt you have a good fix here, so I can probably take
it. Any review from others would be welcome though.
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.
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
From: Brian Norris <computersforpeace@gmail.com> Date: 2016-03-05 00:11:04
+ others
On Fri, Mar 04, 2016 at 04:02:25PM -0800, Brian Norris wrote:
Hi Arnd,
I know you're travelling, but...
On Mon, Jan 25, 2016 at 04:41:50PM +0100, Arnd Bergmann wrote:
quoted
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
Can you provide a sample .config that DOES build correctly with
XIP_KERNEL enabled + this patch? My first attempt yields some other
failures I don't care to fixup right now...
Particularly, mach-pxa MTD_XIP looks like it's broken, at least since
here:
5d284e353eb1 ARM: pxa: avoid accessing interrupt registers directly
CC drivers/mtd/chips/cfi_cmdset_0002.o
drivers/mtd/chips/cfi_cmdset_0002.c: In function ?xip_udelay?:
drivers/mtd/chips/cfi_cmdset_0002.c:962:35: warning: initialization makes integer from pointer without a cast [enabled by default]
drivers/mtd/chips/cfi_cmdset_0002.c:967:8: error: ?ICIP? undeclared (first use in this function)
drivers/mtd/chips/cfi_cmdset_0002.c:967:8: note: each undeclared identifier is reported only once for each function it appears in
drivers/mtd/chips/cfi_cmdset_0002.c:967:15: error: ?ICMR? undeclared (first use in this function)
drivers/mtd/chips/cfi_cmdset_0002.c:981:123: error: invalid operands to binary / (have ?void *? and ?int?)
drivers/mtd/chips/cfi_cmdset_0002.c:982:14: warning: assignment makes integer from pointer without a cast [enabled by default]
drivers/mtd/chips/cfi_cmdset_0002.c:984:124: error: invalid operands to binary / (have ?void *? and ?int?)
drivers/mtd/chips/cfi_cmdset_0002.c:1034:10: warning: assignment makes integer from pointer without a cast [enabled by default]
drivers/mtd/chips/cfi_cmdset_0002.c:1045:118: error: invalid operands to binary / (have ?void *? and ?int?)
Looks like arch/arm/mach-pxa/include/mach/mtd-xip.h can't find ICIP or ICMR...
Anyway, I don't doubt you have a good fix here, so I can probably take
it. Any review from others would be welcome though.
quoted
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.
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
On Friday 04 March 2016 16:02:25 Brian Norris wrote:
Hi Arnd,
I know you're travelling, but...
On Mon, Jan 25, 2016 at 04:41:50PM +0100, Arnd Bergmann wrote:
quoted
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
Can you provide a sample .config that DOES build correctly with
XIP_KERNEL enabled + this patch? My first attempt yields some other
failures I don't care to fixup right now...
Anyway, I don't doubt you have a good fix here, so I can probably take
it. Any review from others would be welcome though.
I found the config in the attachment in my logs.
To get this config working, I also needed this hunk from my set of
old unsubmitted patches:
From: Brian Norris <computersforpeace@gmail.com> Date: 2016-03-05 00:22:12
Hi Arnd,
On Sat, Mar 05, 2016 at 01:19:21AM +0100, Arnd Bergmann wrote:
On Friday 04 March 2016 16:02:25 Brian Norris wrote:
quoted
On Mon, Jan 25, 2016 at 04:41:50PM +0100, Arnd Bergmann wrote:
quoted
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
Can you provide a sample .config that DOES build correctly with
XIP_KERNEL enabled + this patch? My first attempt yields some other
failures I don't care to fixup right now...
Anyway, I don't doubt you have a good fix here, so I can probably take
it. Any review from others would be welcome though.
I found the config in the attachment in my logs.
Thanks...
To get this config working, I also needed this hunk from my set of
old unsubmitted patches:
...but, does anyone care about XIP / MTD_XIP then, if the first two
examples we have both have long-standing build issues?
Regards,
Brian
On Friday 04 March 2016 16:10:57 Brian Norris wrote:
5d284e353eb1 ARM: pxa: avoid accessing interrupt registers directly
CC drivers/mtd/chips/cfi_cmdset_0002.o
drivers/mtd/chips/cfi_cmdset_0002.c: In function ?xip_udelay?:
drivers/mtd/chips/cfi_cmdset_0002.c:962:35: warning: initialization makes integer from pointer without a cast [enabled by default]
drivers/mtd/chips/cfi_cmdset_0002.c:967:8: error: ?ICIP? undeclared (first use in this function)
drivers/mtd/chips/cfi_cmdset_0002.c:967:8: note: each undeclared identifier is reported only once for each function it appears in
drivers/mtd/chips/cfi_cmdset_0002.c:967:15: error: ?ICMR? undeclared (first use in this function)
drivers/mtd/chips/cfi_cmdset_0002.c:981:123: error: invalid operands to binary / (have ?void *? and ?int?)
drivers/mtd/chips/cfi_cmdset_0002.c:982:14: warning: assignment makes integer from pointer without a cast [enabled by default]
drivers/mtd/chips/cfi_cmdset_0002.c:984:124: error: invalid operands to binary / (have ?void *? and ?int?)
drivers/mtd/chips/cfi_cmdset_0002.c:1034:10: warning: assignment makes integer from pointer without a cast [enabled by default]
drivers/mtd/chips/cfi_cmdset_0002.c:1045:118: error: invalid operands to binary / (have ?void *? and ?int?)
Looks like arch/arm/mach-pxa/include/mach/mtd-xip.h can't find ICIP or ICMR...
Right, I also have a workaround for that one, but found later that it
won't work. I think this is the patch that broke it five years ago:
commit 5d284e353eb11ab2e8b1c5671ba06489b0bd1e0c
Author: Eric Miao [off-list ref]
Date: Wed Apr 27 22:48:04 2011 +0800
ARM: pxa: avoid accessing interrupt registers directly
Signed-off-by: Eric Miao [off-list ref]
From: David Woodhouse <dwmw2@infradead.org> Date: 2016-03-05 00:28:46
On Fri, 2016-03-04 at 16:22 -0800, Brian Norris wrote:
...but, does anyone care about XIP / MTD_XIP then, if the first two
examples we have both have long-standing build issues?
I think there are people trying to make it work on other platforms,
yes.
--
David Woodhouse Open Source Technology Centre
David.Woodhouse at intel.com Intel Corporation
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 5691 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20160305/caad6369/attachment-0001.bin>
On Friday 04 March 2016 16:22:03 Brian Norris wrote:
Hi Arnd,
On Sat, Mar 05, 2016 at 01:19:21AM +0100, Arnd Bergmann wrote:
quoted
On Friday 04 March 2016 16:02:25 Brian Norris wrote:
quoted
On Mon, Jan 25, 2016 at 04:41:50PM +0100, Arnd Bergmann wrote:
quoted
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
Can you provide a sample .config that DOES build correctly with
XIP_KERNEL enabled + this patch? My first attempt yields some other
failures I don't care to fixup right now...
Anyway, I don't doubt you have a good fix here, so I can probably take
it. Any review from others would be welcome though.
I found the config in the attachment in my logs.
Thanks...
quoted
To get this config working, I also needed this hunk from my set of
old unsubmitted patches:
...but, does anyone care about XIP / MTD_XIP then, if the first two
examples we have both have long-standing build issues?
Probably not. I just checked the third user (omap1), and it seems that one
has been broken since 2009 with 941132606c76 ("OMAP: Remove OMAP_IO_ADDRESS,
use OMAP1_IO_ADDRESS and OMAP2_IO_ADDRESS instead"), when Tony replaced
the inline omap_readl() with an extern function, thus breaking the
implementation of xip_irqpending() that must be inlined.
The other two have apparently been broken since 2011, by other patches
that also broke compilation.
Arnd
From: Brian Norris <computersforpeace@gmail.com> Date: 2016-03-05 00:43:41
On Sat, Mar 05, 2016 at 12:28:38AM +0000, David Woodhouse wrote:
On Fri, 2016-03-04 at 16:22 -0800, Brian Norris wrote:
quoted
...but, does anyone care about XIP / MTD_XIP then, if the first two
examples we have both have long-standing build issues?
I think there are people trying to make it work on other platforms,
yes.
OK... can we kill the broken platforms though? I'm not confident that my
and Arnd's workaround attempts will yield anything more than a pat on
our own backs to say "yay, it compiles!" And given the number of
practically unused things we're already maintaining in MTD, I'm always
happy for an excuse to kill off some of it.
Brian
From: Tony Lindgren <tony@atomide.com> Date: 2016-03-07 16:44:12
* Arnd Bergmann [off-list ref] [160304 16:34]:
On Friday 04 March 2016 16:22:03 Brian Norris wrote:
quoted
Hi Arnd,
On Sat, Mar 05, 2016 at 01:19:21AM +0100, Arnd Bergmann wrote:
quoted
On Friday 04 March 2016 16:02:25 Brian Norris wrote:
quoted
On Mon, Jan 25, 2016 at 04:41:50PM +0100, Arnd Bergmann wrote:
quoted
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
Can you provide a sample .config that DOES build correctly with
XIP_KERNEL enabled + this patch? My first attempt yields some other
failures I don't care to fixup right now...
Anyway, I don't doubt you have a good fix here, so I can probably take
it. Any review from others would be welcome though.
I found the config in the attachment in my logs.
Thanks...
quoted
To get this config working, I also needed this hunk from my set of
old unsubmitted patches:
...but, does anyone care about XIP / MTD_XIP then, if the first two
examples we have both have long-standing build issues?
Probably not. I just checked the third user (omap1), and it seems that one
has been broken since 2009 with 941132606c76 ("OMAP: Remove OMAP_IO_ADDRESS,
use OMAP1_IO_ADDRESS and OMAP2_IO_ADDRESS instead"), when Tony replaced
the inline omap_readl() with an extern function, thus breaking the
implementation of xip_irqpending() that must be inlined.
The other two have apparently been broken since 2011, by other patches
that also broke compilation.
For omaps, I don't recall anybody working on xip for probably close to
10 years.
Regards,
Tony
On Friday 04 March 2016 16:43:36 Brian Norris wrote:
On Sat, Mar 05, 2016 at 12:28:38AM +0000, David Woodhouse wrote:
quoted
On Fri, 2016-03-04 at 16:22 -0800, Brian Norris wrote:
quoted
...but, does anyone care about XIP / MTD_XIP then, if the first two
examples we have both have long-standing build issues?
I think there are people trying to make it work on other platforms,
yes.
OK... can we kill the broken platforms though? I'm not confident that my
and Arnd's workaround attempts will yield anything more than a pat on
our own backs to say "yay, it compiles!" And given the number of
practically unused things we're already maintaining in MTD, I'm always
happy for an excuse to kill off some of it.
Sorry for the late reply.
As the three platforms that use this have all been broken for around
ten years, it seems reasonable to assume nobody is going to miss the
current implementation, but I'd leave it up to the individual platform
maintainers.
If we remove all three, that would also give us more flexibility
regarding the interface definition for any future users of the feature.
I think the most likely to use it is the Renesas RZ/A1H platform
with its 10MB of on-chip SRAM, and this one doesn't work with the
current method anyway.
Arnd