From 6a836b086d4692f5c00d13b6da611bca5200e58a Mon Sep 17 00:00:00 2001 From: Bent Bisballe Nyeng Date: Tue, 29 Oct 2013 20:43:02 +0100 Subject: Fix .ld script by copying from PhotonSaw project. --- firmware/lpc17xx/LPC17xx.ld | 386 +++++++++++++++++++++++--------------------- 1 file changed, 204 insertions(+), 182 deletions(-) diff --git a/firmware/lpc17xx/LPC17xx.ld b/firmware/lpc17xx/LPC17xx.ld index 4aa5d0c..8f3e8e9 100644 --- a/firmware/lpc17xx/LPC17xx.ld +++ b/firmware/lpc17xx/LPC17xx.ld @@ -1,182 +1,204 @@ -/* THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED -* OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF -* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. -* THE AUTHORS SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR -* CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. USE IT AT YOUR OWN RISK */ - -MEMORY -{ - /* LPC1768 : 512k ROM + 64k SRAM */ - /*------------------------------ */ - - /* On-chip ROM is a readable (r), executable region (x) */ - /* On-chip SRAM is a readable (r), writable (w) and */ - /* executable region (x) */ - - /* Main ROM region - 512k for LPC1768 */ - IROM (rx) : ORIGIN = 0x00002000, LENGTH = 512k - - /* local static RAM - 32k for LPC1756 */ - IRAM0 (rwx) : ORIGIN = 0x10000000, LENGTH = 32k - - /* AHB SRAM - 16k for LPC1756 - often used for USB */ - IRAM1 (rwx) : ORIGIN = 0x2007C000, LENGTH = 16k - IRAM2 (rwx) : ORIGIN = 0x20080000, LENGTH = 16k -} - -/* SECTION command : Define mapping of input sections */ -/* into output sections. */ - -SECTIONS -{ - /******************************************/ - /* code section */ - - /* "normal" code */ - - .text : - { - KEEP(*(.isr_vector .isr_vector.*)) - *(.text .text.*) - *(.gnu.linkonce.t.*) - *(.glue_7) - *(.glue_7t) - *(.gcc_except_table) - *(.rodata .rodata*) - *(.gnu.linkonce.r.*) - } >IROM - - /******************************************/ - /* .ctors .dtors are used for c++ constructors/destructors */ - .ctors : - { - . = ALIGN(4); - PROVIDE(__ctors_start = .); - KEEP(*(SORT(.ctors.*))) - KEEP(*(.ctors)) - PROVIDE(__ctors_end = .); - } >IROM - - .dtors : - { - . = ALIGN(4); - PROVIDE(__dtors_start = .); - KEEP(*(SORT(.dtors.*))) - KEEP(*(.dtors)) - PROVIDE(__dtors_end = .); - - . = ALIGN(4); - /* End Of .text section */ - _etext = .; - _sifastcode = .; - } >IROM - - /**************************************************/ - /* fastcode - copied at startup & executed in RAM */ - - .fastcode : - { - . = ALIGN (4); - _sfastcode = . ; - - *(.glue_7t) *(.glue_7) - *(.fastcode) - - /* add other modules here ... */ - - . = ALIGN (4); - _efastcode = . ; - _sidata = .; - } >IRAM0 AT>IROM - - /******************************************/ - /* This used for USB RAM section */ - .usb_ram (NOLOAD): - { - *.o (USB_RAM) - } > IRAM1 - - /******************************************/ - /* data section */ - .data : - { - _sidata = LOADADDR (.data); - . = ALIGN(4); - _sdata = .; - - *(vtable vtable.*) - *(.data .data.*) - *(.gnu.linkonce.d*) - - . = ALIGN(4); - _edata = . ; - } >IRAM0 AT>IROM - - /******************************************/ - /* For no-init variables section */ - .bss (NOLOAD) : - { - . = ALIGN(4); - _sbss = . ; - - *(.bss .bss.*) - *(.gnu.linkonce.b*) - *(COMMON) - - . = ALIGN(4); - _ebss = . ; - } >IRAM0 - - /******************************************/ - /* For stack section */ - .stackarea (NOLOAD) : - { - . = ALIGN(8); - _sstack = .; - - *(.stackarea .stackarea.*) - - . = ALIGN(8); - _estack = .; - - . = ALIGN(4); - _end = . ; - PROVIDE (end = .); - - } > IRAM0 - - /******************************************/ - /* Stabs debugging sections. */ - .stab 0 : { *(.stab) } - .stabstr 0 : { *(.stabstr) } - .stab.excl 0 : { *(.stab.excl) } - .stab.exclstr 0 : { *(.stab.exclstr) } - .stab.index 0 : { *(.stab.index) } - .stab.indexstr 0 : { *(.stab.indexstr) } - /* .comment 0 : { *(.comment) } */ - /* DWARF debug sections. - Symbols in the DWARF debugging sections are relative to the beginning - of the section so we begin them at 0. */ - /* DWARF 1 */ - .debug 0 : { *(.debug) } - .line 0 : { *(.line) } - /* GNU DWARF 1 extensions */ - .debug_srcinfo 0 : { *(.debug_srcinfo) } - .debug_sfnames 0 : { *(.debug_sfnames) } - /* DWARF 1.1 and DWARF 2 */ - .debug_aranges 0 : { *(.debug_aranges) } - .debug_pubnames 0 : { *(.debug_pubnames) } - /* DWARF 2 */ - .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } - .debug_abbrev 0 : { *(.debug_abbrev) } - .debug_line 0 : { *(.debug_line) } - .debug_frame 0 : { *(.debug_frame) } - .debug_str 0 : { *(.debug_str) } - .debug_loc 0 : { *(.debug_loc) } - .debug_macinfo 0 : { *(.debug_macinfo) } - /* SGI/MIPS DWARF 2 extensions */ - .debug_weaknames 0 : { *(.debug_weaknames) } - .debug_funcnames 0 : { *(.debug_funcnames) } - .debug_typenames 0 : { *(.debug_typenames) } - .debug_varnames 0 : { *(.debug_varnames) } -} +/* From: http://ulan.git.sourceforge.net/git/gitweb.cgi?p=ulan/sysless;a=blob;f=board/arm/lpc17xx-common/libs/ldscripts/lpc1768.ld-cfg;h=c37ec2de11b5b3d9667a89257c4ec3acecb09b64;hb=HEAD */ + +PROVIDE( __bbconf_pt_addr = 0 ); + +MEMORY +{ + /* LPC176[89] : 512 ROM + 32k SRAM + 16k SRAM + 16k SRAM */ + /*--------------------------------------------------- */ + + + /* Main ROM region - 512k for LPC176[89] */ + FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512k + + /* local static RAM - 32k for LPC176[89] */ + IRAM0 (rwx) : ORIGIN = 0x10000000, LENGTH = 32k + + /* stack location */ + STACK (rw) : ORIGIN = 0x10000000 + 0x00007FE0 - 4, LENGTH = 4 + + /* AHB SRAM - 2x16k for LPC176[89] - often used for USB */ + USBRAM (rwx) : ORIGIN = 0x2007C000, LENGTH = 4k + IRAM1 (rwx) : ORIGIN = 0x2007D000, LENGTH = 28k +} + +/* From: http://ulan.git.sourceforge.net/git/gitweb.cgi?p=ulan/sysless;a=blob;f=board/arm/lpc17xx-common/libs/ldscripts/lpc17xx-base.ld-boot;h=b2c64fa863fba493dfc23aa3a6604851b73e1770;hb=HEAD */ + +/***********************************************************************/ +/* */ +/* ROM.ld: Linker Script File */ +/* */ +/***********************************************************************/ + +ENTRY(g_pfnVectors) + +/* SECTION command : Define mapping of input sections */ +/* into output sections. */ + +SECTIONS +{ + /******************************************/ + /* code section */ + + /* "normal" code */ + + .text : + { + KEEP(*(.isr_vector .isr_vector.*)) + *(.text .text.*) + *(.gnu.linkonce.t.*) + *(.glue_7) + *(.glue_7t) + *(.gcc_except_table) + *(.rodata .rodata*) + *(.gnu.linkonce.r.*) + } >FLASH + + /******************************************/ + /* .ctors .dtors are used for c++ constructors/destructors */ + .ctors : + { + . = ALIGN(4); + PROVIDE(__ctors_start = .); + KEEP(*(SORT(.ctors.*))) + KEEP(*(.ctors)) + PROVIDE(__ctors_end = .); + } >FLASH + + .dtors : + { + . = ALIGN(4); + PROVIDE(__dtors_start = .); + KEEP(*(SORT(.dtors.*))) + KEEP(*(.dtors)) + PROVIDE(__dtors_end = .); + + . = ALIGN(4); + /* End Of .text section */ + _etext = .; + _sifastcode = .; + } >FLASH + + .irqarea (NOLOAD): + { + . = ALIGN (256); + *(.irqarea .irqarea.*) + + } >IRAM0 + + /**************************************************/ + /* fastcode - copied at startup & executed in RAM */ + + .fastcode : + { + . = ALIGN (4); + _sfastcode = . ; + + *(.glue_7t) *(.glue_7) + *(.fastcode) + + /* add other modules here ... */ + + . = ALIGN (4); + _efastcode = . ; + _sidata = .; + } >IRAM0 AT>FLASH + + /******************************************/ + /* data section */ + .data : + { + _sidata = LOADADDR (.data); + . = ALIGN(4); + _sdata = .; + + *(vtable vtable.*) + *(.data .data.*) + *(.gnu.linkonce.d*) + + . = ALIGN(4); + _edata = . ; + } >IRAM0 AT>FLASH + + /******************************************/ + /* For no-init variables section */ + .bss (NOLOAD) : + { + . = ALIGN(4); + _sbss = . ; + __bss_start__ = . ; + + *(.bss .bss.*) + *(.gnu.linkonce.b*) + *(COMMON) + + . = ALIGN(4); + _ebss = . ; + __bss_end__ = .; + + . = ALIGN(4); + _end = . ; + PROVIDE (end = .); + } >IRAM0 + + .stack : + { + _stack = .; + } >STACK + + /******************************************/ + /* This used for USB RAM section */ + .usbram (NOLOAD): + { + _usbram = . ; + USB_RAM_ADR = . ; + *(.usbram) + . = ALIGN(4); + _eusbram = . ; + _usbram_end = . ; + } > USBRAM + + /* Extra RAM */ + .iram1 (NOLOAD): + { + _iram = . ; + *(.iram1) + . = ALIGN(4); + _iram_end = . ; + } > IRAM1 + + /******************************************/ + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + /* .comment 0 : { *(.comment) } */ + /* DWARF debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } +} -- cgit v1.2.3