--- /dev/null
+/***********************************************************************************\r
+* Copyright 2005 Anglia Design\r
+* This demo code and associated components are provided as is and has no warranty,\r
+* implied or otherwise. You are free to use/modify any of the provided\r
+* code at your own risk in your applications with the expressed limitation\r
+* of liability (see below)\r
+* \r
+* LIMITATION OF LIABILITY: ANGLIA OR ANGLIA DESIGNS SHALL NOT BE LIABLE FOR ANY\r
+* LOSS OF PROFITS, LOSS OF USE, LOSS OF DATA, INTERRUPTION OF BUSINESS, NOR FOR\r
+* INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND WHETHER UNDER\r
+* THIS AGREEMENT OR OTHERWISE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.\r
+*\r
+* Author : Spencer Oliver\r
+* Web : www.anglia-designs.com\r
+*\r
+***********************************************************************************/\r
+\r
+/* Stack Sizes */\r
+\r
+ _STACKSIZE = 1024;\r
+ _STACKSIZE_IRQ = 256;\r
+ _STACKSIZE_FIQ = 0;\r
+ _STACKSIZE_SVC = 1024;\r
+ _STACKSIZE_ABT = 0;\r
+ _STACKSIZE_UND = 0;\r
+ _HEAPSIZE = 1024;\r
+\r
+/* Memory Definitions */\r
+\r
+MEMORY\r
+{\r
+ CODE (rx) : ORIGIN = 0x00000000, LENGTH = 0x00080000\r
+ DATA (rw) : ORIGIN = 0x04000000, LENGTH = 0x00018000\r
+}\r
+\r
+/* Section Definitions */\r
+\r
+SECTIONS\r
+{\r
+ /* first section is .text which is used for code */\r
+\r
+ .text :\r
+ {\r
+ CREATE_OBJECT_SYMBOLS\r
+ KEEP(*(.vectors))\r
+ KEEP(*(.init))\r
+ *(.text .text.*)\r
+ *(.gnu.linkonce.t.*)\r
+ *(.glue_7t) *(.glue_7) *(.vfp11_veneer)\r
+ KEEP(*(.fini))\r
+ *(.gcc_except_table)\r
+ } >CODE =0\r
+ . = ALIGN(4);\r
+\r
+ /* .ctors .dtors are used for c++ constructors/destructors */\r
+ \r
+ .ctors :\r
+ {\r
+ PROVIDE(__ctors_start__ = .);\r
+ KEEP(*(SORT(.ctors.*)))\r
+ KEEP(*(.ctors))\r
+ PROVIDE(__ctors_end__ = .);\r
+ } >CODE\r
+\r
+ .dtors :\r
+ {\r
+ PROVIDE(__dtors_start__ = .); \r
+ KEEP(*(SORT(.dtors.*)))\r
+ KEEP(*(.dtors))\r
+ PROVIDE(__dtors_end__ = .);\r
+ } >CODE\r
+ \r
+ /* .rodata section which is used for read-only data (constants) */\r
+\r
+ .rodata :\r
+ {\r
+ *(.rodata .rodata.*)\r
+ *(.gnu.linkonce.r.*)\r
+ } >CODE\r
+ . = ALIGN(4);\r
+\r
+ .init_array :\r
+ {\r
+ *(.init)\r
+ *(.fini)\r
+ PROVIDE_HIDDEN (__preinit_array_start = .);\r
+ KEEP (*(.preinit_array))\r
+ PROVIDE_HIDDEN (__preinit_array_end = .);\r
+ PROVIDE_HIDDEN (__init_array_start = .);\r
+ KEEP (*(SORT(.init_array.*)))\r
+ KEEP (*(.init_array))\r
+ PROVIDE_HIDDEN (__init_array_end = .);\r
+ PROVIDE_HIDDEN (__fini_array_start = .);\r
+ KEEP (*(.fini_array))\r
+ KEEP (*(SORT(.fini_array.*)))\r
+ PROVIDE_HIDDEN (__fini_array_end = .);\r
+ } >CODE\r
+\r
+ . = ALIGN(4);\r
+\r
+ /* .ARM.exidx is sorted, so has to go in its own output section. */\r
+ __exidx_start = .;\r
+ .ARM.exidx :\r
+ {\r
+ *(.ARM.exidx* .gnu.linkonce.armexidx.*)\r
+ } >CODE\r
+ __exidx_end = .;\r
+\r
+ _etext = .;\r
+ PROVIDE (etext = .);\r
+\r
+ /* .data section which is used for initialized data */\r
+\r
+ .data : AT (_etext)\r
+ {\r
+ __data_start = .;\r
+ *(.data .data.*)\r
+ *(.gnu.linkonce.d.*)\r
+ SORT(CONSTRUCTORS)\r
+ . = ALIGN(4);\r
+ *(.fastrun .fastrun.*)\r
+ } >DATA\r
+ . = ALIGN(4);\r
+ \r
+ _edata = .;\r
+ PROVIDE (edata = .);\r
+\r
+ /* .bss section which is used for uninitialized data */\r
+\r
+ .bss :\r
+ {\r
+ __bss_start = .;\r
+ __bss_start__ = .;\r
+ *(.bss .bss.*)\r
+ *(.gnu.linkonce.b.*)\r
+ *(COMMON)\r
+ . = ALIGN(4);\r
+ } >DATA\r
+ . = ALIGN(4);\r
+ __bss_end__ = .;\r
+ \r
+ _end = .;\r
+ PROVIDE(end = .);\r
+\r
+ /* .heap section which is used for memory allocation */\r
+ \r
+ .heap (NOLOAD) :\r
+ {\r
+ __heap_start__ = .;\r
+ *(.heap)\r
+ . = MAX(__heap_start__ + _HEAPSIZE , .);\r
+ } >DATA\r
+ __heap_end__ = __heap_start__ + SIZEOF(.heap);\r
+ \r
+ /* .stack section - user mode stack */\r
+ \r
+ .stack (__heap_end__ + 3) / 4 * 4 (NOLOAD) :\r
+ {\r
+ __stack_start__ = .;\r
+ *(.stack)\r
+ . = MAX(__stack_start__ + _STACKSIZE , .);\r
+ } >DATA\r
+ __stack_end__ = __stack_start__ + SIZEOF(.stack);\r
+\r
+ /* .stack_irq section */\r
+ \r
+ .stack_irq (__stack_end__ + 3) / 4 * 4 (NOLOAD) :\r
+ {\r
+ __stack_irq_start__ = .;\r
+ *(.stack_irq)\r
+ . = MAX(__stack_irq_start__ + _STACKSIZE_IRQ , .);\r
+ } >DATA\r
+ __stack_irq_end__ = __stack_irq_start__ + SIZEOF(.stack_irq);\r
+\r
+ /* .stack_fiq section */\r
+ \r
+ .stack_fiq (__stack_irq_end__ + 3) / 4 * 4 (NOLOAD) :\r
+ {\r
+ __stack_fiq_start__ = .;\r
+ *(.stack_fiq)\r
+ . = MAX(__stack_fiq_start__ + _STACKSIZE_FIQ , .);\r
+ } >DATA\r
+ __stack_fiq_end__ = __stack_fiq_start__ + SIZEOF(.stack_fiq);\r
+\r
+ /* .stack_svc section */\r
+ \r
+ .stack_svc (__stack_fiq_end__ + 3) / 4 * 4 (NOLOAD) :\r
+ {\r
+ __stack_svc_start__ = .;\r
+ *(.stack_svc)\r
+ . = MAX(__stack_svc_start__ + _STACKSIZE_SVC , .);\r
+ } >DATA\r
+ __stack_svc_end__ = __stack_svc_start__ + SIZEOF(.stack_svc);\r
+\r
+ /* .stack_abt section */\r
+ \r
+ .stack_abt (__stack_svc_end__ + 3) / 4 * 4 (NOLOAD) :\r
+ {\r
+ __stack_abt_start__ = .;\r
+ *(.stack_abt)\r
+ . = MAX(__stack_abt_start__ + _STACKSIZE_ABT , .);\r
+ } >DATA\r
+ __stack_abt_end__ = __stack_abt_start__ + SIZEOF(.stack_abt);\r
+\r
+ /* .stack_und section */\r
+ \r
+ .stack_und (__stack_abt_end__ + 3) / 4 * 4 (NOLOAD) :\r
+ {\r
+ __stack_und_start__ = .;\r
+ *(.stack_und)\r
+ . = MAX(__stack_und_start__ + _STACKSIZE_UND , .);\r
+ } >DATA\r
+ __stack_und_end__ = __stack_und_start__ + SIZEOF(.stack_und);\r
+ \r
+ /* Stabs debugging sections. */\r
+ .stab 0 : { *(.stab) }\r
+ .stabstr 0 : { *(.stabstr) }\r
+ .stab.excl 0 : { *(.stab.excl) }\r
+ .stab.exclstr 0 : { *(.stab.exclstr) }\r
+ .stab.index 0 : { *(.stab.index) }\r
+ .stab.indexstr 0 : { *(.stab.indexstr) }\r
+ .comment 0 : { *(.comment) }\r
+ /* DWARF debug sections.\r
+ Symbols in the DWARF debugging sections are relative to the beginning\r
+ of the section so we begin them at 0. */\r
+ /* DWARF 1 */\r
+ .debug 0 : { *(.debug) }\r
+ .line 0 : { *(.line) }\r
+ /* GNU DWARF 1 extensions */\r
+ .debug_srcinfo 0 : { *(.debug_srcinfo) }\r
+ .debug_sfnames 0 : { *(.debug_sfnames) }\r
+ /* DWARF 1.1 and DWARF 2 */\r
+ .debug_aranges 0 : { *(.debug_aranges) }\r
+ .debug_pubnames 0 : { *(.debug_pubnames) }\r
+ /* DWARF 2 */\r
+ .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }\r
+ .debug_abbrev 0 : { *(.debug_abbrev) }\r
+ .debug_line 0 : { *(.debug_line) }\r
+ .debug_frame 0 : { *(.debug_frame) }\r
+ .debug_str 0 : { *(.debug_str) }\r
+ .debug_loc 0 : { *(.debug_loc) }\r
+ .debug_macinfo 0 : { *(.debug_macinfo) }\r
+ /* SGI/MIPS DWARF 2 extensions */\r
+ .debug_weaknames 0 : { *(.debug_weaknames) }\r
+ .debug_funcnames 0 : { *(.debug_funcnames) }\r
+ .debug_typenames 0 : { *(.debug_typenames) }\r
+ .debug_varnames 0 : { *(.debug_varnames) } \r
+}\r
+\r