The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

mbed 2

This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.

Committer:
emilmont
Date:
Tue Nov 29 14:59:27 2011 +0000
Revision:
27:7110ebee3484
Child:
30:3991a86798e3
New Libraries 11.11

Who changed what in which revision?

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