
This can be useful to test improvements in LLVM master and to make it possible to support LLVM 11 for the most part already before the next release. That also allows catching LLVM bugs early to fix them upstream. Note that tests do not yet pass for this LLVM version, but the TinyGo compiler can be built with the binaries from apt.llvm.org (at the time of making this commit).
84 строки
2 КиБ
Text
84 строки
2 КиБ
Text
OUTPUT_ARCH(arm)
|
|
ENTRY(_start)
|
|
|
|
/* Note: iwram is reduced by 96 bytes because the last part of that RAM
|
|
* (starting at 0x03007FA0) is used for interrupt handling.
|
|
*/
|
|
MEMORY {
|
|
ewram : ORIGIN = 0x02000000, LENGTH = 256K /* on-board work RAM (2 wait states) */
|
|
iwram : ORIGIN = 0x03000000, LENGTH = 32K-96 /* in-chip work RAM (faster) */
|
|
rom : ORIGIN = 0x08000000, LENGTH = 32M /* flash ROM */
|
|
}
|
|
|
|
__stack_size_irq = 1K;
|
|
__stack_size_usr = 2K;
|
|
|
|
SECTIONS
|
|
{
|
|
.text :
|
|
{
|
|
KEEP (*(.init))
|
|
*(.text)
|
|
*(.text.*)
|
|
. = ALIGN(4);
|
|
} >rom
|
|
|
|
.rodata :
|
|
{
|
|
. = ALIGN(4);
|
|
*(.rodata)
|
|
*(.rodata.*)
|
|
. = ALIGN(4);
|
|
} >rom
|
|
|
|
/* Put the stack at the bottom of RAM, so that the application will
|
|
* crash on stack overflow instead of silently corrupting memory.
|
|
* See: http://blog.japaric.io/stack-overflow-protection/ */
|
|
.stack (NOLOAD) :
|
|
{
|
|
. = ALIGN(4);
|
|
_stack_top_irq = .;
|
|
. += __stack_size_irq;
|
|
_stack_top = .;
|
|
. += __stack_size_usr;
|
|
} >iwram
|
|
|
|
/* Start address (in flash) of .data, used by startup code. */
|
|
_sidata = LOADADDR(.data);
|
|
|
|
/* Globals with initial value */
|
|
.data :
|
|
{
|
|
. = ALIGN(4);
|
|
_sdata = .; /* used by startup code */
|
|
*(.data)
|
|
*(.data.*)
|
|
*(.iwram .iwram.*)
|
|
. = ALIGN(4);
|
|
_edata = .; /* used by startup code */
|
|
} >iwram AT>rom
|
|
|
|
/* Zero-initialized globals */
|
|
.bss :
|
|
{
|
|
. = ALIGN(4);
|
|
_sbss = .; /* used by startup code */
|
|
*(.bss)
|
|
*(.bss.*)
|
|
*(COMMON)
|
|
. = ALIGN(4);
|
|
_ebss = .; /* used by startup code */
|
|
} >iwram
|
|
|
|
/DISCARD/ :
|
|
{
|
|
*(.ARM.exidx) /* causes 'no memory region specified' error in lld */
|
|
*(.ARM.exidx.*) /* causes spurious 'undefined reference' errors */
|
|
}
|
|
}
|
|
|
|
/* For the memory allocator. */
|
|
_heap_start = ORIGIN(ewram);
|
|
_heap_end = ORIGIN(ewram) + LENGTH(ewram);
|
|
_globals_start = _sdata;
|
|
_globals_end = _ebss;
|