LPC1768

Committer:
mrsoundhar
Date:
Wed Nov 19 05:50:22 2014 +0000
Revision:
0:ae306d3f6076
publish

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mrsoundhar 0:ae306d3f6076 1 /* Linker script for mbed LPC1768 */
mrsoundhar 0:ae306d3f6076 2
mrsoundhar 0:ae306d3f6076 3 /* Linker script to configure memory regions. */
mrsoundhar 0:ae306d3f6076 4 MEMORY
mrsoundhar 0:ae306d3f6076 5 {
mrsoundhar 0:ae306d3f6076 6 FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K
mrsoundhar 0:ae306d3f6076 7 RAM (rwx) : ORIGIN = 0x100000C8, LENGTH = (32K - 0xC8)
mrsoundhar 0:ae306d3f6076 8
mrsoundhar 0:ae306d3f6076 9 USB_RAM(rwx) : ORIGIN = 0x2007C000, LENGTH = 16K
mrsoundhar 0:ae306d3f6076 10 ETH_RAM(rwx) : ORIGIN = 0x20080000, LENGTH = 16K
mrsoundhar 0:ae306d3f6076 11 }
mrsoundhar 0:ae306d3f6076 12
mrsoundhar 0:ae306d3f6076 13 /* Linker script to place sections and symbol values. Should be used together
mrsoundhar 0:ae306d3f6076 14 * with other linker script that defines memory regions FLASH and RAM.
mrsoundhar 0:ae306d3f6076 15 * It references following symbols, which must be defined in code:
mrsoundhar 0:ae306d3f6076 16 * Reset_Handler : Entry of reset handler
mrsoundhar 0:ae306d3f6076 17 *
mrsoundhar 0:ae306d3f6076 18 * It defines following symbols, which code can use without definition:
mrsoundhar 0:ae306d3f6076 19 * __exidx_start
mrsoundhar 0:ae306d3f6076 20 * __exidx_end
mrsoundhar 0:ae306d3f6076 21 * __etext
mrsoundhar 0:ae306d3f6076 22 * __data_start__
mrsoundhar 0:ae306d3f6076 23 * __preinit_array_start
mrsoundhar 0:ae306d3f6076 24 * __preinit_array_end
mrsoundhar 0:ae306d3f6076 25 * __init_array_start
mrsoundhar 0:ae306d3f6076 26 * __init_array_end
mrsoundhar 0:ae306d3f6076 27 * __fini_array_start
mrsoundhar 0:ae306d3f6076 28 * __fini_array_end
mrsoundhar 0:ae306d3f6076 29 * __data_end__
mrsoundhar 0:ae306d3f6076 30 * __bss_start__
mrsoundhar 0:ae306d3f6076 31 * __bss_end__
mrsoundhar 0:ae306d3f6076 32 * __end__
mrsoundhar 0:ae306d3f6076 33 * end
mrsoundhar 0:ae306d3f6076 34 * __HeapLimit
mrsoundhar 0:ae306d3f6076 35 * __StackLimit
mrsoundhar 0:ae306d3f6076 36 * __StackTop
mrsoundhar 0:ae306d3f6076 37 * __stack
mrsoundhar 0:ae306d3f6076 38 */
mrsoundhar 0:ae306d3f6076 39 ENTRY(Reset_Handler)
mrsoundhar 0:ae306d3f6076 40
mrsoundhar 0:ae306d3f6076 41 SECTIONS
mrsoundhar 0:ae306d3f6076 42 {
mrsoundhar 0:ae306d3f6076 43 .text :
mrsoundhar 0:ae306d3f6076 44 {
mrsoundhar 0:ae306d3f6076 45 KEEP(*(.isr_vector))
mrsoundhar 0:ae306d3f6076 46 *(.text*)
mrsoundhar 0:ae306d3f6076 47
mrsoundhar 0:ae306d3f6076 48 KEEP(*(.init))
mrsoundhar 0:ae306d3f6076 49 KEEP(*(.fini))
mrsoundhar 0:ae306d3f6076 50
mrsoundhar 0:ae306d3f6076 51 /* .ctors */
mrsoundhar 0:ae306d3f6076 52 *crtbegin.o(.ctors)
mrsoundhar 0:ae306d3f6076 53 *crtbegin?.o(.ctors)
mrsoundhar 0:ae306d3f6076 54 *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
mrsoundhar 0:ae306d3f6076 55 *(SORT(.ctors.*))
mrsoundhar 0:ae306d3f6076 56 *(.ctors)
mrsoundhar 0:ae306d3f6076 57
mrsoundhar 0:ae306d3f6076 58 /* .dtors */
mrsoundhar 0:ae306d3f6076 59 *crtbegin.o(.dtors)
mrsoundhar 0:ae306d3f6076 60 *crtbegin?.o(.dtors)
mrsoundhar 0:ae306d3f6076 61 *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
mrsoundhar 0:ae306d3f6076 62 *(SORT(.dtors.*))
mrsoundhar 0:ae306d3f6076 63 *(.dtors)
mrsoundhar 0:ae306d3f6076 64
mrsoundhar 0:ae306d3f6076 65 *(.rodata*)
mrsoundhar 0:ae306d3f6076 66
mrsoundhar 0:ae306d3f6076 67 KEEP(*(.eh_frame*))
mrsoundhar 0:ae306d3f6076 68 } > FLASH
mrsoundhar 0:ae306d3f6076 69
mrsoundhar 0:ae306d3f6076 70 .ARM.extab :
mrsoundhar 0:ae306d3f6076 71 {
mrsoundhar 0:ae306d3f6076 72 *(.ARM.extab* .gnu.linkonce.armextab.*)
mrsoundhar 0:ae306d3f6076 73 } > FLASH
mrsoundhar 0:ae306d3f6076 74
mrsoundhar 0:ae306d3f6076 75 __exidx_start = .;
mrsoundhar 0:ae306d3f6076 76 .ARM.exidx :
mrsoundhar 0:ae306d3f6076 77 {
mrsoundhar 0:ae306d3f6076 78 *(.ARM.exidx* .gnu.linkonce.armexidx.*)
mrsoundhar 0:ae306d3f6076 79 } > FLASH
mrsoundhar 0:ae306d3f6076 80 __exidx_end = .;
mrsoundhar 0:ae306d3f6076 81
mrsoundhar 0:ae306d3f6076 82 __etext = .;
mrsoundhar 0:ae306d3f6076 83
mrsoundhar 0:ae306d3f6076 84 .data : AT (__etext)
mrsoundhar 0:ae306d3f6076 85 {
mrsoundhar 0:ae306d3f6076 86 __data_start__ = .;
mrsoundhar 0:ae306d3f6076 87 Image$$RW_IRAM1$$Base = .;
mrsoundhar 0:ae306d3f6076 88 *(vtable)
mrsoundhar 0:ae306d3f6076 89 *(.data*)
mrsoundhar 0:ae306d3f6076 90
mrsoundhar 0:ae306d3f6076 91 . = ALIGN(4);
mrsoundhar 0:ae306d3f6076 92 /* preinit data */
mrsoundhar 0:ae306d3f6076 93 PROVIDE (__preinit_array_start = .);
mrsoundhar 0:ae306d3f6076 94 KEEP(*(.preinit_array))
mrsoundhar 0:ae306d3f6076 95 PROVIDE (__preinit_array_end = .);
mrsoundhar 0:ae306d3f6076 96
mrsoundhar 0:ae306d3f6076 97 . = ALIGN(4);
mrsoundhar 0:ae306d3f6076 98 /* init data */
mrsoundhar 0:ae306d3f6076 99 PROVIDE (__init_array_start = .);
mrsoundhar 0:ae306d3f6076 100 KEEP(*(SORT(.init_array.*)))
mrsoundhar 0:ae306d3f6076 101 KEEP(*(.init_array))
mrsoundhar 0:ae306d3f6076 102 PROVIDE (__init_array_end = .);
mrsoundhar 0:ae306d3f6076 103
mrsoundhar 0:ae306d3f6076 104
mrsoundhar 0:ae306d3f6076 105 . = ALIGN(4);
mrsoundhar 0:ae306d3f6076 106 /* finit data */
mrsoundhar 0:ae306d3f6076 107 PROVIDE (__fini_array_start = .);
mrsoundhar 0:ae306d3f6076 108 KEEP(*(SORT(.fini_array.*)))
mrsoundhar 0:ae306d3f6076 109 KEEP(*(.fini_array))
mrsoundhar 0:ae306d3f6076 110 PROVIDE (__fini_array_end = .);
mrsoundhar 0:ae306d3f6076 111
mrsoundhar 0:ae306d3f6076 112 . = ALIGN(4);
mrsoundhar 0:ae306d3f6076 113 /* All data end */
mrsoundhar 0:ae306d3f6076 114 __data_end__ = .;
mrsoundhar 0:ae306d3f6076 115
mrsoundhar 0:ae306d3f6076 116 } > RAM
mrsoundhar 0:ae306d3f6076 117
mrsoundhar 0:ae306d3f6076 118
mrsoundhar 0:ae306d3f6076 119 .bss :
mrsoundhar 0:ae306d3f6076 120 {
mrsoundhar 0:ae306d3f6076 121 __bss_start__ = .;
mrsoundhar 0:ae306d3f6076 122 *(.bss*)
mrsoundhar 0:ae306d3f6076 123 *(COMMON)
mrsoundhar 0:ae306d3f6076 124 __bss_end__ = .;
mrsoundhar 0:ae306d3f6076 125 Image$$RW_IRAM1$$ZI$$Limit = . ;
mrsoundhar 0:ae306d3f6076 126 } > RAM
mrsoundhar 0:ae306d3f6076 127
mrsoundhar 0:ae306d3f6076 128
mrsoundhar 0:ae306d3f6076 129 .heap :
mrsoundhar 0:ae306d3f6076 130 {
mrsoundhar 0:ae306d3f6076 131 __end__ = .;
mrsoundhar 0:ae306d3f6076 132 end = __end__;
mrsoundhar 0:ae306d3f6076 133 *(.heap*)
mrsoundhar 0:ae306d3f6076 134 __HeapLimit = .;
mrsoundhar 0:ae306d3f6076 135 } > RAM
mrsoundhar 0:ae306d3f6076 136
mrsoundhar 0:ae306d3f6076 137 /* .stack_dummy section doesn't contains any symbols. It is only
mrsoundhar 0:ae306d3f6076 138 * used for linker to calculate size of stack sections, and assign
mrsoundhar 0:ae306d3f6076 139 * values to stack symbols later */
mrsoundhar 0:ae306d3f6076 140 .stack_dummy :
mrsoundhar 0:ae306d3f6076 141 {
mrsoundhar 0:ae306d3f6076 142 *(.stack)
mrsoundhar 0:ae306d3f6076 143 } > RAM
mrsoundhar 0:ae306d3f6076 144
mrsoundhar 0:ae306d3f6076 145 /* Set stack top to end of RAM, and stack limit move down by
mrsoundhar 0:ae306d3f6076 146 * size of stack_dummy section */
mrsoundhar 0:ae306d3f6076 147 __StackTop = ORIGIN(RAM) + LENGTH(RAM);
mrsoundhar 0:ae306d3f6076 148 __StackLimit = __StackTop - SIZEOF(.stack_dummy);
mrsoundhar 0:ae306d3f6076 149 PROVIDE(__stack = __StackTop);
mrsoundhar 0:ae306d3f6076 150
mrsoundhar 0:ae306d3f6076 151 /* Check if data + heap + stack exceeds RAM limit */
mrsoundhar 0:ae306d3f6076 152 ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
mrsoundhar 0:ae306d3f6076 153
mrsoundhar 0:ae306d3f6076 154
mrsoundhar 0:ae306d3f6076 155 /* Code can explicitly ask for data to be
mrsoundhar 0:ae306d3f6076 156 placed in these higher RAM banks where
mrsoundhar 0:ae306d3f6076 157 they will be left uninitialized.
mrsoundhar 0:ae306d3f6076 158 */
mrsoundhar 0:ae306d3f6076 159 .AHBSRAM0 (NOLOAD):
mrsoundhar 0:ae306d3f6076 160 {
mrsoundhar 0:ae306d3f6076 161 Image$$RW_IRAM2$$Base = . ;
mrsoundhar 0:ae306d3f6076 162 *(AHBSRAM0)
mrsoundhar 0:ae306d3f6076 163 Image$$RW_IRAM2$$ZI$$Limit = .;
mrsoundhar 0:ae306d3f6076 164 } > USB_RAM
mrsoundhar 0:ae306d3f6076 165
mrsoundhar 0:ae306d3f6076 166 .AHBSRAM1 (NOLOAD):
mrsoundhar 0:ae306d3f6076 167 {
mrsoundhar 0:ae306d3f6076 168 Image$$RW_IRAM3$$Base = . ;
mrsoundhar 0:ae306d3f6076 169 *(AHBSRAM1)
mrsoundhar 0:ae306d3f6076 170 Image$$RW_IRAM3$$ZI$$Limit = .;
mrsoundhar 0:ae306d3f6076 171 } > ETH_RAM
mrsoundhar 0:ae306d3f6076 172 }