-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Bring back linker scripts for backward compatibility.
- Loading branch information
1 parent
f6802e4
commit 4cab14b
Showing
27 changed files
with
4,901 additions
and
42 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
#! armclang -E --target=arm-arm-none-eabi -mcpu=cortex-m0 -xc | ||
; command above MUST be in first line (no comment above!) | ||
|
||
/* | ||
;-------- <<< Use Configuration Wizard in Context Menu >>> ------------------- | ||
*/ | ||
|
||
/*--------------------- Flash Configuration ---------------------------------- | ||
; <h> Flash Configuration | ||
; <o0> Flash Base Address <0x0-0xFFFFFFFF:8> | ||
; <o1> Flash Size (in Bytes) <0x0-0xFFFFFFFF:8> | ||
; </h> | ||
*----------------------------------------------------------------------------*/ | ||
#define __ROM_BASE 0x00000000 | ||
#define __ROM_SIZE 0x00080000 | ||
|
||
/*--------------------- Embedded RAM Configuration --------------------------- | ||
; <h> RAM Configuration | ||
; <o0> RAM Base Address <0x0-0xFFFFFFFF:8> | ||
; <o1> RAM Size (in Bytes) <0x0-0xFFFFFFFF:8> | ||
; </h> | ||
*----------------------------------------------------------------------------*/ | ||
#define __RAM_BASE 0x20000000 | ||
#define __RAM_SIZE 0x00040000 | ||
|
||
/*--------------------- Stack / Heap Configuration --------------------------- | ||
; <h> Stack / Heap Configuration | ||
; <o0> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> | ||
; <o1> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> | ||
; </h> | ||
*----------------------------------------------------------------------------*/ | ||
#define __STACK_SIZE 0x00000200 | ||
#define __HEAP_SIZE 0x00000C00 | ||
|
||
/* | ||
;------------- <<< end of configuration section >>> --------------------------- | ||
*/ | ||
|
||
|
||
/*---------------------------------------------------------------------------- | ||
User Stack & Heap boundary definition | ||
*----------------------------------------------------------------------------*/ | ||
#define __STACK_TOP (__RAM_BASE + __RAM_SIZE) /* starts at end of RAM */ | ||
#define __HEAP_BASE (AlignExpr(+0, 8)) /* starts after RW_RAM section, 8 byte aligned */ | ||
|
||
|
||
/*---------------------------------------------------------------------------- | ||
Scatter File Definitions definition | ||
*----------------------------------------------------------------------------*/ | ||
#define __RO_BASE __ROM_BASE | ||
#define __RO_SIZE __ROM_SIZE | ||
|
||
#define __RW_BASE __RAM_BASE | ||
#define __RW_SIZE (__RAM_SIZE - __STACK_SIZE - __HEAP_SIZE) | ||
|
||
|
||
LR_ROM __RO_BASE __RO_SIZE { ; load region size_region | ||
ER_ROM __RO_BASE __RO_SIZE { ; load address = execution address | ||
*.o (RESET, +First) | ||
*(InRoot$$Sections) | ||
.ANY (+RO) | ||
.ANY (+XO) | ||
} | ||
|
||
RW_NOINIT __RW_BASE UNINIT __RW_SIZE { | ||
*(.bss.noinit) | ||
} | ||
|
||
RW_RAM AlignExpr(+0, 8) (__RW_SIZE - AlignExpr(ImageLength(RW_NOINIT), 8)) { | ||
*(+RW +ZI) | ||
} | ||
|
||
#if __HEAP_SIZE > 0 | ||
ARM_LIB_HEAP __HEAP_BASE EMPTY __HEAP_SIZE { ; Reserve empty region for heap | ||
} | ||
#endif | ||
|
||
ARM_LIB_STACK __STACK_TOP EMPTY -__STACK_SIZE { ; Reserve empty region for stack | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,263 @@ | ||
/* | ||
*-------- <<< Use Configuration Wizard in Context Menu >>> ------------------- | ||
*/ | ||
|
||
/*---------------------- Flash Configuration ---------------------------------- | ||
<h> Flash Configuration | ||
<o0> Flash Base Address <0x0-0xFFFFFFFF:8> | ||
<o1> Flash Size (in Bytes) <0x0-0xFFFFFFFF:8> | ||
</h> | ||
-----------------------------------------------------------------------------*/ | ||
__ROM_BASE = 0x00000000; | ||
__ROM_SIZE = 0x00040000; | ||
|
||
/*--------------------- Embedded RAM Configuration ---------------------------- | ||
<h> RAM Configuration | ||
<o0> RAM Base Address <0x0-0xFFFFFFFF:8> | ||
<o1> RAM Size (in Bytes) <0x0-0xFFFFFFFF:8> | ||
</h> | ||
-----------------------------------------------------------------------------*/ | ||
__RAM_BASE = 0x20000000; | ||
__RAM_SIZE = 0x00020000; | ||
|
||
/*--------------------- Stack / Heap Configuration ---------------------------- | ||
<h> Stack / Heap Configuration | ||
<o0> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> | ||
<o1> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> | ||
</h> | ||
-----------------------------------------------------------------------------*/ | ||
__STACK_SIZE = 0x00000400; | ||
__HEAP_SIZE = 0x00000C00; | ||
|
||
/* | ||
*-------------------- <<< end of configuration section >>> ------------------- | ||
*/ | ||
|
||
MEMORY | ||
{ | ||
FLASH (rx) : ORIGIN = __ROM_BASE, LENGTH = __ROM_SIZE | ||
RAM (rwx) : ORIGIN = __RAM_BASE, LENGTH = __RAM_SIZE | ||
} | ||
|
||
/* Linker script to place sections and symbol values. Should be used together | ||
* with other linker script that defines memory regions FLASH and RAM. | ||
* It references following symbols, which must be defined in code: | ||
* Reset_Handler : Entry of reset handler | ||
* | ||
* It defines following symbols, which code can use without definition: | ||
* __exidx_start | ||
* __exidx_end | ||
* __copy_table_start__ | ||
* __copy_table_end__ | ||
* __zero_table_start__ | ||
* __zero_table_end__ | ||
* __etext (deprecated) | ||
* __data_start__ | ||
* __preinit_array_start | ||
* __preinit_array_end | ||
* __init_array_start | ||
* __init_array_end | ||
* __fini_array_start | ||
* __fini_array_end | ||
* __data_end__ | ||
* __bss_start__ | ||
* __bss_end__ | ||
* __end__ | ||
* end | ||
* __HeapLimit | ||
* __StackLimit | ||
* __StackTop | ||
* __stack | ||
*/ | ||
ENTRY(Reset_Handler) | ||
|
||
SECTIONS | ||
{ | ||
.text : | ||
{ | ||
KEEP(*(.vectors)) | ||
*(.text*) | ||
|
||
KEEP(*(.init)) | ||
KEEP(*(.fini)) | ||
|
||
/* .ctors */ | ||
*crtbegin.o(.ctors) | ||
*crtbegin?.o(.ctors) | ||
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) | ||
*(SORT(.ctors.*)) | ||
*(.ctors) | ||
|
||
/* .dtors */ | ||
*crtbegin.o(.dtors) | ||
*crtbegin?.o(.dtors) | ||
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) | ||
*(SORT(.dtors.*)) | ||
*(.dtors) | ||
|
||
*(.rodata*) | ||
|
||
KEEP(*(.eh_frame*)) | ||
} > FLASH | ||
|
||
.ARM.extab : | ||
{ | ||
*(.ARM.extab* .gnu.linkonce.armextab.*) | ||
} > FLASH | ||
|
||
__exidx_start = .; | ||
.ARM.exidx : | ||
{ | ||
*(.ARM.exidx* .gnu.linkonce.armexidx.*) | ||
} > FLASH | ||
__exidx_end = .; | ||
|
||
.copy.table : | ||
{ | ||
. = ALIGN(4); | ||
__copy_table_start__ = .; | ||
|
||
LONG (LOADADDR(.data)) | ||
LONG (ADDR(.data)) | ||
LONG (SIZEOF(.data) / 4) | ||
|
||
/* Add each additional data section here */ | ||
/* | ||
LONG (LOADADDR(.data2)) | ||
LONG (ADDR(.data2)) | ||
LONG (SIZEOF(.data2) / 4) | ||
*/ | ||
__copy_table_end__ = .; | ||
} > FLASH | ||
|
||
.zero.table : | ||
{ | ||
. = ALIGN(4); | ||
__zero_table_start__ = .; | ||
|
||
/* .bss initialization to zero is already done during C Run-Time Startup. | ||
LONG (ADDR(.bss)) | ||
LONG (SIZEOF(.bss) / 4) | ||
*/ | ||
|
||
/* Add each additional bss section here */ | ||
/* | ||
LONG (ADDR(.bss2)) | ||
LONG (SIZEOF(.bss2) / 4) | ||
*/ | ||
__zero_table_end__ = .; | ||
} > FLASH | ||
|
||
/* | ||
* This __etext variable is kept for backward compatibility with older, | ||
* ASM based startup files. | ||
*/ | ||
PROVIDE(__etext = LOADADDR(.data)); | ||
|
||
.data : ALIGN(4) | ||
{ | ||
__data_start__ = .; | ||
*(vtable) | ||
*(.data) | ||
*(.data.*) | ||
|
||
. = ALIGN(4); | ||
/* preinit data */ | ||
PROVIDE_HIDDEN (__preinit_array_start = .); | ||
KEEP(*(.preinit_array)) | ||
PROVIDE_HIDDEN (__preinit_array_end = .); | ||
|
||
. = ALIGN(4); | ||
/* init data */ | ||
PROVIDE_HIDDEN (__init_array_start = .); | ||
KEEP(*(SORT(.init_array.*))) | ||
KEEP(*(.init_array)) | ||
PROVIDE_HIDDEN (__init_array_end = .); | ||
|
||
. = ALIGN(4); | ||
/* finit data */ | ||
PROVIDE_HIDDEN (__fini_array_start = .); | ||
KEEP(*(SORT(.fini_array.*))) | ||
KEEP(*(.fini_array)) | ||
PROVIDE_HIDDEN (__fini_array_end = .); | ||
|
||
KEEP(*(.jcr*)) | ||
. = ALIGN(4); | ||
/* All data end */ | ||
__data_end__ = .; | ||
|
||
} > RAM AT > FLASH | ||
|
||
/* | ||
* Secondary data section, optional | ||
* | ||
* Remember to add each additional data section | ||
* to the .copy.table above to assure proper | ||
* initialization during startup. | ||
*/ | ||
/* | ||
.data2 : ALIGN(4) | ||
{ | ||
. = ALIGN(4); | ||
__data2_start__ = .; | ||
*(.data2) | ||
*(.data2.*) | ||
. = ALIGN(4); | ||
__data2_end__ = .; | ||
|
||
} > RAM2 AT > FLASH | ||
*/ | ||
|
||
.bss : | ||
{ | ||
. = ALIGN(4); | ||
__bss_start__ = .; | ||
*(.bss) | ||
*(.bss.*) | ||
*(COMMON) | ||
. = ALIGN(4); | ||
__bss_end__ = .; | ||
} > RAM AT > RAM | ||
|
||
/* | ||
* Secondary bss section, optional | ||
* | ||
* Remember to add each additional bss section | ||
* to the .zero.table above to assure proper | ||
* initialization during startup. | ||
*/ | ||
/* | ||
.bss2 : | ||
{ | ||
. = ALIGN(4); | ||
__bss2_start__ = .; | ||
*(.bss2) | ||
*(.bss2.*) | ||
. = ALIGN(4); | ||
__bss2_end__ = .; | ||
} > RAM2 AT > RAM2 | ||
*/ | ||
|
||
.heap (NOLOAD) : | ||
{ | ||
. = ALIGN(8); | ||
__end__ = .; | ||
PROVIDE(end = .); | ||
. = . + __HEAP_SIZE; | ||
. = ALIGN(8); | ||
__HeapLimit = .; | ||
} > RAM | ||
|
||
.stack (ORIGIN(RAM) + LENGTH(RAM) - __STACK_SIZE) (NOLOAD) : | ||
{ | ||
. = ALIGN(8); | ||
__StackLimit = .; | ||
. = . + __STACK_SIZE; | ||
. = ALIGN(8); | ||
__StackTop = .; | ||
} > RAM | ||
PROVIDE(__stack = __StackTop); | ||
|
||
/* Check if data + heap + stack exceeds RAM limit */ | ||
ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") | ||
} |
Oops, something went wrong.