-/* Default linker script, for normal executables */\r
-OUTPUT_FORMAT("elf32-msp430","elf32-msp430","elf32-msp430")\r
-OUTPUT_ARCH(msp:20)\r
-MEMORY\r
-{\r
- text (rx) : ORIGIN = 0x4000, LENGTH = 0x3FE0\r
- data (rwx) : ORIGIN = 0x4000, LENGTH = 0x3FE0\r
- vectors (rw) : ORIGIN = 0xFFE0, LENGTH = 64\r
- bootloader(rx) : ORIGIN = 0x0800, LENGTH = 2048\r
- infomem(rx) : ORIGIN = 0x0000, LENGTH = 256\r
- infomemnobits(rx) : ORIGIN = 0x0100, LENGTH = 256\r
-}\r
-SECTIONS\r
-{\r
- /* Read-only sections, merged into text segment. */\r
- .hash : { *(.hash) }\r
- .dynsym : { *(.dynsym) }\r
- .dynstr : { *(.dynstr) }\r
- .gnu.version : { *(.gnu.version) }\r
- .gnu.version_d : { *(.gnu.version_d) }\r
- .gnu.version_r : { *(.gnu.version_r) }\r
- .rel.init : { *(.rel.init) }\r
- .rela.init : { *(.rela.init) }\r
- .rel.text :\r
- {\r
- *(.rel.text)\r
- *(.rel.text.*)\r
- *(.rel.gnu.linkonce.t*)\r
- }\r
- .rela.text :\r
- {\r
- *(.rela.text)\r
- *(.rela.text.*)\r
- *(.rela.gnu.linkonce.t*)\r
- }\r
- .rel.fini : { *(.rel.fini) }\r
- .rela.fini : { *(.rela.fini) }\r
- .rel.rodata :\r
- {\r
- *(.rel.rodata)\r
- *(.rel.rodata.*)\r
- *(.rel.gnu.linkonce.r*)\r
- }\r
- .rela.rodata :\r
- {\r
- *(.rela.rodata)\r
- *(.rela.rodata.*)\r
- *(.rela.gnu.linkonce.r*)\r
- }\r
- .rel.data :\r
- {\r
- *(.rel.data)\r
- *(.rel.data.*)\r
- *(.rel.gnu.linkonce.d*)\r
- }\r
- .rela.data :\r
- {\r
- *(.rela.data)\r
- *(.rela.data.*)\r
- *(.rela.gnu.linkonce.d*)\r
- }\r
- .rel.ctors : { *(.rel.ctors) }\r
- .rela.ctors : { *(.rela.ctors) }\r
- .rel.dtors : { *(.rel.dtors) }\r
- .rela.dtors : { *(.rela.dtors) }\r
- .rel.got : { *(.rel.got) }\r
- .rela.got : { *(.rela.got) }\r
- .rel.bss : { *(.rel.bss) }\r
- .rela.bss : { *(.rela.bss) }\r
- .rel.plt : { *(.rel.plt) }\r
- .rela.plt : { *(.rela.plt) }\r
- /* Internal text space. */\r
- .text :\r
- {\r
- . = ALIGN(2);\r
- *(.init)\r
- *(.init0) /* Start here after reset. */\r
- *(.init1)\r
- *(.init2) /* Copy data loop */\r
- *(.init3)\r
- *(.init4) /* Clear bss */\r
- *(.init5)\r
- *(.init6) /* C++ constructors. */\r
- *(.init7)\r
- *(.init8)\r
- *(.init9) /* Call main(). */\r
- __ctors_start = . ;\r
- *(.ctors)\r
- __ctors_end = . ;\r
- __dtors_start = . ;\r
- *(.dtors)\r
- __dtors_end = . ;\r
- . = ALIGN(2);\r
- *(.text)\r
- . = ALIGN(2);\r
- *(.text.*)\r
- . = ALIGN(2);\r
- *(.fini9) /* */\r
- *(.fini8)\r
- *(.fini7)\r
- *(.fini6) /* C++ destructors. */\r
- *(.fini5)\r
- *(.fini4)\r
- *(.fini3)\r
- *(.fini2)\r
- *(.fini1)\r
- *(.fini0) /* Infinite loop after program termination. */\r
- *(.fini)\r
- _etext = .;\r
- } > text\r
- .data : AT (ADDR (.text) + SIZEOF (.text))\r
- {\r
- PROVIDE (__data_start = .) ;\r
- . = ALIGN(2);\r
- *(.data)\r
- . = ALIGN(2);\r
- *(.gnu.linkonce.d*)\r
- . = ALIGN(2);\r
- _edata = . ;\r
- } > data\r
- PROVIDE (__data_load_start = LOADADDR(.data) );\r
- PROVIDE (__data_size = SIZEOF(.data) );\r
- /* Bootloader. */\r
- .bootloader :\r
- {\r
- PROVIDE (__boot_start = .) ;\r
- *(.bootloader)\r
- . = ALIGN(2);\r
- *(.bootloader.*)\r
- } > bootloader\r
- /* Information memory. */\r
- .infomem :\r
- {\r
- *(.infomem)\r
- . = ALIGN(2);\r
- *(.infomem.*)\r
- } > infomem\r
- /* Information memory (not loaded into MPU). */\r
- .infomemnobits :\r
- {\r
- *(.infomemnobits)\r
- . = ALIGN(2);\r
- *(.infomemnobits.*)\r
- } > infomemnobits\r
- .bss SIZEOF(.data) + ADDR(.data) :\r
- {\r
- PROVIDE (__bss_start = .) ;\r
- *(.bss)\r
- *(COMMON)\r
- PROVIDE (__bss_end = .) ;\r
- _end = . ;\r
- } > data\r
- PROVIDE (__bss_size = SIZEOF(.bss) );\r
- .noinit SIZEOF(.bss) + ADDR(.bss) :\r
- {\r
- PROVIDE (__noinit_start = .) ;\r
- *(.noinit)\r
- *(COMMON)\r
- PROVIDE (__noinit_end = .) ;\r
- _end = . ;\r
- } > data\r
- .vectors :\r
- {\r
- PROVIDE (__vectors_start = .) ;\r
- *(.vectors*)\r
- _vectors_end = . ;\r
- } > vectors\r
-\r
- /* Stabs for profiling information*/\r
- .profiler 0 : { *(.profiler) }\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
- PROVIDE (__stack = ORIGIN(data) + LENGTH(data) - 1) ;\r
- PROVIDE (__data_start_rom = _etext) ;\r
- PROVIDE (__data_end_rom = _etext + SIZEOF (.data)) ;\r
- PROVIDE (__noinit_start_rom = _etext + SIZEOF (.data)) ;\r
- PROVIDE (__noinit_end_rom = _etext + SIZEOF (.data) + SIZEOF (.noinit)) ;\r
- PROVIDE (__subdevice_has_heap = 0) ;\r
-}\r
+/* Default linker script, for normal executables */
+OUTPUT_FORMAT("elf32-msp430","elf32-msp430","elf32-msp430")
+OUTPUT_ARCH(msp)
+MEMORY
+{
+ text (rx) : ORIGIN = 0x4000, LENGTH = 0x3FE0
+ data (rwx) : ORIGIN = 0x4000, LENGTH = 0x3FE0
+ vectors (rw) : ORIGIN = 0xFFE0, LENGTH = 64
+ bootloader(rx) : ORIGIN = 0x0800, LENGTH = 2048
+ infomem(rx) : ORIGIN = 0x0000, LENGTH = 256
+ infomemnobits(rx) : ORIGIN = 0x0100, LENGTH = 256
+}
+SECTIONS
+{
+ /* Read-only sections, merged into text segment. */
+ .hash : { *(.hash) }
+ .dynsym : { *(.dynsym) }
+ .dynstr : { *(.dynstr) }
+ .gnu.version : { *(.gnu.version) }
+ .gnu.version_d : { *(.gnu.version_d) }
+ .gnu.version_r : { *(.gnu.version_r) }
+ .rel.init : { *(.rel.init) }
+ .rela.init : { *(.rela.init) }
+ .rel.text :
+ {
+ *(.rel.text)
+ *(.rel.text.*)
+ *(.rel.gnu.linkonce.t*)
+ }
+ .rela.text :
+ {
+ *(.rela.text)
+ *(.rela.text.*)
+ *(.rela.gnu.linkonce.t*)
+ }
+ .rel.fini : { *(.rel.fini) }
+ .rela.fini : { *(.rela.fini) }
+ .rel.rodata :
+ {
+ *(.rel.rodata)
+ *(.rel.rodata.*)
+ *(.rel.gnu.linkonce.r*)
+ }
+ .rela.rodata :
+ {
+ *(.rela.rodata)
+ *(.rela.rodata.*)
+ *(.rela.gnu.linkonce.r*)
+ }
+ .rel.data :
+ {
+ *(.rel.data)
+ *(.rel.data.*)
+ *(.rel.gnu.linkonce.d*)
+ }
+ .rela.data :
+ {
+ *(.rela.data)
+ *(.rela.data.*)
+ *(.rela.gnu.linkonce.d*)
+ }
+ .rel.ctors : { *(.rel.ctors) }
+ .rela.ctors : { *(.rela.ctors) }
+ .rel.dtors : { *(.rel.dtors) }
+ .rela.dtors : { *(.rela.dtors) }
+ .rel.got : { *(.rel.got) }
+ .rela.got : { *(.rela.got) }
+ .rel.bss : { *(.rel.bss) }
+ .rela.bss : { *(.rela.bss) }
+ .rel.plt : { *(.rel.plt) }
+ .rela.plt : { *(.rela.plt) }
+ /* Internal text space. */
+ .text :
+ {
+ . = ALIGN(2);
+ *(.init)
+ *(.init0) /* Start here after reset. */
+ *(.init1)
+ *(.init2) /* Copy data loop */
+ *(.init3)
+ *(.init4) /* Clear bss */
+ *(.init5)
+ *(.init6) /* C++ constructors. */
+ *(.init7)
+ *(.init8)
+ *(.init9) /* Call main(). */
+ __ctors_start = . ;
+ *(.ctors)
+ __ctors_end = . ;
+ __dtors_start = . ;
+ *(.dtors)
+ __dtors_end = . ;
+ . = ALIGN(2);
+ *(.text)
+ . = ALIGN(2);
+ *(.text.*)
+ . = ALIGN(2);
+ *(.fini9) /* */
+ *(.fini8)
+ *(.fini7)
+ *(.fini6) /* C++ destructors. */
+ *(.fini5)
+ *(.fini4)
+ *(.fini3)
+ *(.fini2)
+ *(.fini1)
+ *(.fini0) /* Infinite loop after program termination. */
+ *(.fini)
+ _etext = .;
+ } > text
+ .data : AT (ADDR (.text) + SIZEOF (.text))
+ {
+ PROVIDE (__data_start = .) ;
+ . = ALIGN(2);
+ *(.data)
+ . = ALIGN(2);
+ *(.gnu.linkonce.d*)
+ . = ALIGN(2);
+ _edata = . ;
+ } > data
+ PROVIDE (__data_load_start = LOADADDR(.data) );
+ PROVIDE (__data_size = SIZEOF(.data) );
+ /* Bootloader. */
+ .bootloader :
+ {
+ PROVIDE (__boot_start = .) ;
+ *(.bootloader)
+ . = ALIGN(2);
+ *(.bootloader.*)
+ } > bootloader
+ /* Information memory. */
+ .infomem :
+ {
+ *(.infomem)
+ . = ALIGN(2);
+ *(.infomem.*)
+ } > infomem
+ /* Information memory (not loaded into MPU). */
+ .infomemnobits :
+ {
+ *(.infomemnobits)
+ . = ALIGN(2);
+ *(.infomemnobits.*)
+ } > infomemnobits
+ .bss SIZEOF(.data) + ADDR(.data) :
+ {
+ PROVIDE (__bss_start = .) ;
+ *(.bss)
+ *(COMMON)
+ PROVIDE (__bss_end = .) ;
+ _end = . ;
+ } > data
+ PROVIDE (__bss_size = SIZEOF(.bss) );
+ .noinit SIZEOF(.bss) + ADDR(.bss) :
+ {
+ PROVIDE (__noinit_start = .) ;
+ *(.noinit)
+ *(COMMON)
+ PROVIDE (__noinit_end = .) ;
+ _end = . ;
+ } > data
+ .vectors :
+ {
+ PROVIDE (__vectors_start = .) ;
+ *(.vectors*)
+ _vectors_end = . ;
+ } > vectors
+
+ /* Stabs for profiling information*/
+ .profiler 0 : { *(.profiler) }
+ /* 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) }
+ PROVIDE (__stack = ORIGIN(data) + LENGTH(data) - 1) ;
+ PROVIDE (__data_start_rom = _etext) ;
+ PROVIDE (__data_end_rom = _etext + SIZEOF (.data)) ;
+ PROVIDE (__noinit_start_rom = _etext + SIZEOF (.data)) ;
+ PROVIDE (__noinit_end_rom = _etext + SIZEOF (.data) + SIZEOF (.noinit)) ;
+ PROVIDE (__subdevice_has_heap = 0) ;
+}
+__PC_AFTER_RESET = 0x3000;
+__CRCDI = 0x0000;
+__CRCDI_L = 0x0000;
+__CRCDI_H = 0x0001;
+__CRCDIRB = 0x0002;
+__CRCDIRB_L = 0x0002;
+__CRCDIRB_H = 0x0002;
+__CRCINIRES = 0x0004;
+__CRCINIRES_L = 0x0004;
+__CRCINIRES_H = 0x0005;
+__CRCRESR = 0x0006;
+__CRCRESR_L = 0x0006;
+__CRCRESR_H = 0x0007;
+__MPY = 0x0130;
+__MPYS = 0x0132;
+__MAC = 0x0134;
+__MACS = 0x0136;
+__OP2 = 0x0138;
+__RESLO = 0x013a;
+__RESHI = 0x013c;
+__SUMEXT = 0x013e;
+__AES_CR = 0x0400;
+__AES_SR = 0x0402;
+__AES_STATE = 0x0410;
+__AES_STATE_SIZE = 0x0010;
+__AES_KEY = 0x0700;
+__AES_KEY_SIZE = 0x0020;
+__AES_EXPKEY = 0x0720;
+__AES_EXPKEY_SIZE = 0x00e0;
+__PADSR = 0x1a00;
+__PBDSR = 0x1a02;
+__PAOEN = 0x1a04;
+__PBOEN = 0x1a06;
+__PAOUT = 0x1a08;
+__PBOUT = 0x1a0a;
+__PAPER = 0x1a0c;
+__PBPER = 0x1a0e;
+__PAIER = 0x1a10;
+__PBIER = 0x1a12;
+__PAIMR = 0x1a14;
+__PBIMR = 0x1a16;
+__PAPUE = 0x1a18;
+__PBPUE = 0x1a1a;
+__PBTSD = 0x1a1c;
+__PBPSR = 0x1a1e;
+__PAOCEN = 0x1a20;
+__PBOCEN = 0x1a22;
+__TMR0_CR = 0x1c00;
+__TMR0_SR = 0x1c02;
+__TMR0_CNT = 0x1c04;
+__TMR0_RA = 0x1c06;
+__TMR0_RB = 0x1c08;
+__TMR0_RC = 0x1c0a;
+__TMR0_CAP0 = 0x1c0c;
+__TMR0_CAP1 = 0x1c0e;
+__TMR1_CR = 0x1c10;
+__TMR1_SR = 0x1c12;
+__TMR1_CNT = 0x1c14;
+__TMR1_RA = 0x1c16;
+__TMR1_RB = 0x1c18;
+__TMR1_RC = 0x1c1a;
+__TMR1_CAP0 = 0x1c1c;
+__TMR1_CAP1 = 0x1c1e;
+__TMR2_CR = 0x1e00;
+__TMR2_SR = 0x1e02;
+__TMR2_CNT = 0x1e04;
+__TMR2_RA = 0x1e06;
+__TMR2_RB = 0x1e08;
+__TMR2_RC = 0x1e0a;
+__TMR2_CAP0 = 0x1e0c;
+__TMR2_CAP1 = 0x1e0e;
+__TMR3_CR = 0x1e10;
+__TMR3_SR = 0x1e12;
+__TMR3_CNT = 0x1e14;
+__TMR3_RA = 0x1e16;
+__TMR3_RB = 0x1e18;
+__TMR3_RC = 0x1e1a;
+__TMR3_CAP0 = 0x1e1c;
+__TMR3_CAP1 = 0x1e1e;
+__SPI0_CR = 0x2000;
+__SPI0_RDR = 0x2002;
+__SPI0_TDR = 0x2004;
+__SPI0_SR = 0x2006;
+__SPI1_CR = 0x2008;
+__SPI1_RDR = 0x200a;
+__SPI1_TDR = 0x200c;
+__SPI1_SR = 0x200e;
+__UART0_CR = 0x2200;
+__UART0_BCR = 0x2202;
+__UART0_SR = 0x2204;
+__UART0_RDR = 0x2206;
+__UART0_TDR = 0x2208;
+__UART1_CR = 0x2210;
+__UART1_BCR = 0x2212;
+__UART1_SR = 0x2214;
+__UART1_RDR = 0x2216;
+__UART1_TDR = 0x2218;
+__ADC_CR = 0x2400;
+__GPIN0 = 0x2402;
+__GPIN1 = 0x2404;
+__GPOUT0 = 0x2406;
+__GPOUT1 = 0x2408;
+__GPOUT2 = 0x240a;
+__GPOUT3 = 0x240c;
+__I2CM_CR = 0x2a00;
+__I2CM_TCFG = 0x2a02;
+__I2CM_SR = 0x2a04;
+__I2CM_WCR = 0x2a06;
+__I2CM_TDR_ST = 0x2a08;
+__I2CM_TDR = 0x2a0a;
+__I2CM_TDR_SP = 0x2a0c;
+__I2CM_RDR = 0x2a0e;
+__I2CS_CR = 0x2a10;
+__I2CS_SR = 0x2a12;
+__I2CS_TDR = 0x2a14;
+__I2CS_RDR = 0x2a16;
+__ROMStart = 0x3000;
+__ROMSize = 0x0800;
+__RAMStart = 0x4000;
+__RAMSize = 0xc000;