linux/arch/xtensa/kernel
Chris Zankel 78f3cdfa2a xtensa: Fix linker script to include .literal sections
Fix resembles implementation from Marc Gauthier and Piet Denaly:

In the Xtensa architecture, assembly generates literals which must always
precede the code (the L32R instruction that loads them only uses negative
PC-relative offsets).  For any *.text section, literals are placed in a
corresponding *.literal section.  The linker script (vmlinux.lds) must
place these in the correct order.  It must also combine them, when the
*.text section can be larger than L32R's 256 kB range.

For example, this doesn't work:  *(.literal) *(.text) because L32R
instructions at the end of .text can't reach the literals.

The linker can solve this if they are combined in parentheses, like this:
       *(.literal .text)
because it is now allowed mix literals in .text to bring them in range.

None of this is done by standard vmlinux.lds.h macros such as TEXT_TEXT
and INIT_TEXT.  To avoid replicating the logic of that header file, we
instead post-process the generated linker script to convert *(xxx.text)
to *(xxx.literal xxx.text) for the following text sections:
       .text .ref.text .*init.text .*exit.text .text.*
using a sed script.  To do this we must override the default rule for
vmlinux.lds (see scripts/Makefile.build and the top-level Makefile)
to insert this extra step.

Signed-off-by: Marc Gauthier <marc@tensilica.com>
Signed-off-by: Pete Delaney <piet@tensilica.com>
Signed-off-by: Chris Zankel <chris@zankel.net>
2009-05-11 23:40:33 -07:00
..
align.S [PATCH] xtensa: remove extra header files 2006-12-10 09:55:39 -08:00
asm-offsets.c xtensa: use kbuild.h macros instead of defining them in asm-offsets.c 2008-04-29 08:06:29 -07:00
coprocessor.S [XTENSA] Add support for configurable registers and coprocessors 2008-02-13 17:41:43 -08:00
entry.S xtensa: nommu support 2009-04-02 23:41:50 -07:00
head.S xtensa: convert to use __HEAD and HEAD_TEXT macros. 2009-04-26 09:20:38 -07:00
init_task.c take init_fs to saner place 2008-12-31 18:07:42 -05:00
io.c [XTENSA] Move string-io functions to io.c from pci.c 2007-08-27 13:53:22 -07:00
irq.c xtensa: variant irq set callbacks 2009-04-02 23:43:01 -07:00
Makefile xtensa: Fix linker script to include .literal sections 2009-05-11 23:40:33 -07:00
module.c [XTENSA] Fix modules for non-exec processor configurations 2008-02-13 17:23:26 -08:00
pci-dma.c fix file specification in comments 2007-05-09 08:58:16 +02:00
pci.c [XTENSA] Move string-io functions to io.c from pci.c 2007-08-27 13:53:22 -07:00
platform.c xtensa: remove platform rtc hooks 2009-04-02 23:45:07 -07:00
process.c Simplify copy_thread() 2009-04-02 19:04:51 -07:00
ptrace.c [XTENSA] Allow debugger to modify the WINDOWBASE register. 2008-02-13 17:45:36 -08:00
setup.c xtensa: nommu support 2009-04-02 23:41:50 -07:00
signal.c [XTENSA] Add support for the sa_restorer function 2008-02-13 17:42:31 -08:00
syscall.c flag parameters: pipe 2008-07-24 10:47:28 -07:00
time.c xtensa: ccount clocksource 2009-04-02 23:45:22 -07:00
traps.c xtensa: always use correct stack pointer for stack traces 2009-05-11 21:59:43 -07:00
vectors.S xtensa: nommu support 2009-04-02 23:41:50 -07:00
vmlinux.lds.S xtensa: Fix linker script to include .literal sections 2009-05-11 23:40:33 -07:00
xtensa_ksyms.c remove unneeded #include <linux/ide.h>'s 2008-08-05 18:17:00 +02:00