/* Linker script for mbed LPC1768 */ | |
GROUP(-lstdc++ -lsupc++ -lm -lc -lnosys -lgcc) | |
/* Linker script to configure memory regions. */ | |
MEMORY | |
{ | |
FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K | |
RAM (rwx) : ORIGIN = 0x100000C8, LENGTH = 0x7F38 | |
USB_RAM(rwx) : ORIGIN = 0x2007C000, LENGTH = 16K | |
ETH_RAM(rwx) : ORIGIN = 0x20080000, LENGTH = 16K | |
} | |
/* 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 | |
* __etext | |
* __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(*(.isr_vector)) | |
*(.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 = .; | |
__etext = .; | |
.data : AT (__etext) | |
{ | |
__data_start__ = .; | |
*(vtable) | |
*(.data*) | |
. = ALIGN(4); | |
/* preinit data */ | |
PROVIDE (__preinit_array_start = .); | |
KEEP(*(.preinit_array)) | |
PROVIDE (__preinit_array_end = .); | |
. = ALIGN(4); | |
/* init data */ | |
PROVIDE (__init_array_start = .); | |
KEEP(*(SORT(.init_array.*))) | |
KEEP(*(.init_array)) | |
PROVIDE (__init_array_end = .); | |
. = ALIGN(4); | |
/* finit data */ | |
PROVIDE (__fini_array_start = .); | |
KEEP(*(SORT(.fini_array.*))) | |
KEEP(*(.fini_array)) | |
PROVIDE (__fini_array_end = .); | |
. = ALIGN(4); | |
/* All data end */ | |
__data_end__ = .; | |
} > RAM | |
.bss : | |
{ | |
__bss_start__ = .; | |
*(.bss*) | |
*(COMMON) | |
__bss_end__ = .; | |
Image$$RW_IRAM1$$ZI$$Limit = . ; | |
} > RAM | |
.heap : | |
{ | |
__end__ = .; | |
end = __end__; | |
*(.heap*) | |
__HeapLimit = .; | |
} > RAM | |
/* .stack_dummy section doesn't contains any symbols. It is only | |
* used for linker to calculate size of stack sections, and assign | |
* values to stack symbols later */ | |
.stack_dummy : | |
{ | |
*(.stack) | |
} > RAM | |
/* Set stack top to end of RAM, and stack limit move down by | |
* size of stack_dummy section */ | |
__StackTop = ORIGIN(RAM) + LENGTH(RAM); | |
__StackLimit = __StackTop - SIZEOF(.stack_dummy); | |
PROVIDE(__stack = __StackTop); | |
PROVIDE(__heapLimit = __HeapLimit); | |
PROVIDE(__stackSize = __StackTop - __HeapLimit); | |
/* Area of memory, heap and stack, to fill on startup - 8 bytes at a time. */ | |
__FillStart = ALIGN(__end__, 8); | |
/* Check if data + heap + stack exceeds RAM limit */ | |
ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") | |
/* Code can explicitly ask for data to be | |
placed in these higher RAM banks where | |
they will be left uninitialized. | |
*/ | |
.AHBSRAM0 (NOLOAD): | |
{ | |
Image$$RW_IRAM2$$Base = . ; | |
PROVIDE(__AHB0_block_start = .); | |
*(AHBSRAM0) | |
Image$$RW_IRAM2$$ZI$$Limit = .; | |
PROVIDE(__AHB0_dyn_start = .); | |
PROVIDE(__AHB0_end = ORIGIN(USB_RAM) + LENGTH(USB_RAM)); | |
} > USB_RAM | |
.AHBSRAM1 (NOLOAD): | |
{ | |
Image$$RW_IRAM3$$Base = . ; | |
PROVIDE(__AHB1_block_start = .); | |
*(AHBSRAM1) | |
Image$$RW_IRAM3$$ZI$$Limit = .; | |
PROVIDE(__AHB1_dyn_start = .); | |
PROVIDE(__AHB1_end = ORIGIN(ETH_RAM) + LENGTH(ETH_RAM)); | |
} > ETH_RAM | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment