GoodFET30 now MSP430F2254 compatible by default.
[goodfet] / firmware / ldscripts / msp430x2274.x
1 /* 2254 script, for backward compatibility. */
2 OUTPUT_FORMAT("elf32-msp430","elf32-msp430","elf32-msp430")
3 OUTPUT_ARCH(msp:22)
4 MEMORY
5 {
6   text   (rx)       : ORIGIN = 0xc000,     LENGTH = 0x3fe0
7   data   (rwx)      : ORIGIN = 0x0200,     LENGTH = 512
8   vectors (rw)      : ORIGIN = 0xffe0,     LENGTH = 32
9   bootloader(rx)    : ORIGIN = 0x0c00,     LENGTH = 1K
10   infomem(rx)       : ORIGIN = 0x1000,     LENGTH = 256
11   infomemnobits(rx) : ORIGIN = 0x1000,     LENGTH = 256
12 }
13 SECTIONS
14 {
15   /* Read-only sections, merged into text segment.  */
16   .hash          : { *(.hash)             }
17   .dynsym        : { *(.dynsym)           }
18   .dynstr        : { *(.dynstr)           }
19   .gnu.version   : { *(.gnu.version)      }
20   .gnu.version_d   : { *(.gnu.version_d)  }
21   .gnu.version_r   : { *(.gnu.version_r)  }
22   .rel.init      : { *(.rel.init) }
23   .rela.init     : { *(.rela.init) }
24   .rel.text      :
25     {
26       *(.rel.text)
27       *(.rel.text.*)
28       *(.rel.gnu.linkonce.t*)
29     }
30   .rela.text     :
31     {
32       *(.rela.text)
33       *(.rela.text.*)
34       *(.rela.gnu.linkonce.t*)
35     }
36   .rel.fini      : { *(.rel.fini) }
37   .rela.fini     : { *(.rela.fini) }
38   .rel.rodata    :
39     {
40       *(.rel.rodata)
41       *(.rel.rodata.*)
42       *(.rel.gnu.linkonce.r*)
43     }
44   .rela.rodata   :
45     {
46       *(.rela.rodata)
47       *(.rela.rodata.*)
48       *(.rela.gnu.linkonce.r*)
49     }
50   .rel.data      :
51     {
52       *(.rel.data)
53       *(.rel.data.*)
54       *(.rel.gnu.linkonce.d*)
55     }
56   .rela.data     :
57     {
58       *(.rela.data)
59       *(.rela.data.*)
60       *(.rela.gnu.linkonce.d*)
61     }
62   .rel.ctors     : { *(.rel.ctors)        }
63   .rela.ctors    : { *(.rela.ctors)       }
64   .rel.dtors     : { *(.rel.dtors)        }
65   .rela.dtors    : { *(.rela.dtors)       }
66   .rel.got       : { *(.rel.got)          }
67   .rela.got      : { *(.rela.got)         }
68   .rel.bss       : { *(.rel.bss)          }
69   .rela.bss      : { *(.rela.bss)         }
70   .rel.plt       : { *(.rel.plt)          }
71   .rela.plt      : { *(.rela.plt)         }
72   /* Internal text space.  */
73   .text :
74   {
75     . = ALIGN(2);
76     *(.init)
77     KEEP(*(.init))
78     *(.init0)  /* Start here after reset.               */
79     KEEP(*(.init0))
80     *(.init1)  /* User definable.                       */
81     KEEP(*(.init1))
82     *(.init2)  /* Initialize stack.                     */
83     KEEP(*(.init2))
84     *(.init3)  /* Initialize hardware, user definable.  */
85     KEEP(*(.init3))
86     *(.init4)  /* Copy data to .data, clear bss.        */
87     KEEP(*(.init4))
88     *(.init5)  /* User definable.                       */
89     KEEP(*(.init5))
90     *(.init6)  /* C++ constructors.                     */
91     KEEP(*(.init6))
92     *(.init7)  /* User definable.                       */
93     KEEP(*(.init7))
94     *(.init8)  /* User definable.                       */
95     KEEP(*(.init8))
96     *(.init9)  /* Call main().                          */
97     KEEP(*(.init9))
98      __ctors_start = . ;
99      *(.ctors)
100      KEEP(*(.ctors))
101      __ctors_end = . ;
102      __dtors_start = . ;
103      *(.dtors)
104      KEEP(*(.dtors))
105      __dtors_end = . ;
106     . = ALIGN(2);
107     *(.text)
108     . = ALIGN(2);
109     *(.text.*)
110     . = ALIGN(2);
111     *(.fini9)  /* Jumps here after main(). User definable.  */
112     KEEP(*(.fini9))
113     *(.fini8)  /* User definable.                           */
114     KEEP(*(.fini8))
115     *(.fini7)  /* User definable.                           */
116     KEEP(*(.fini7))
117     *(.fini6)  /* C++ destructors.                          */
118     KEEP(*(.fini6))
119     *(.fini5)  /* User definable.                           */
120     KEEP(*(.fini5))
121     *(.fini4)  /* User definable.                           */
122     KEEP(*(.fini4))
123     *(.fini3)  /* User definable.                           */
124     KEEP(*(.fini3))
125     *(.fini2)  /* User definable.                           */
126     KEEP(*(.fini2))
127     *(.fini1)  /* User definable.                           */
128     KEEP(*(.fini1))
129     *(.fini0)  /* Infinite loop after program termination.  */
130     KEEP(*(.fini0))
131     *(.fini)
132     KEEP(*(.fini))
133     _etext = .;
134   }  > text
135   .data   :
136   {
137      PROVIDE (__data_start = .) ;
138     . = ALIGN(2);
139     *(.data)
140     *(SORT_BY_ALIGNMENT(.data.*))
141     . = ALIGN(2);
142     *(.gnu.linkonce.d*)
143     . = ALIGN(2);
144      _edata = . ;
145   }  > data AT > text
146     PROVIDE (__data_load_start = LOADADDR(.data) );
147     PROVIDE (__data_size = SIZEOF(.data) );
148   /* Bootloader.  */
149   .bootloader   :
150   {
151      PROVIDE (__boot_start = .) ;
152     *(.bootloader)
153     . = ALIGN(2);
154     *(.bootloader.*)
155   }  > bootloader
156   /* Information memory.  */
157   .infomem   :
158   {
159     *(.infomem)
160     . = ALIGN(2);
161     *(.infomem.*)
162   }  > infomem
163   /* Information memory (not loaded into MPU).  */
164   .infomemnobits   :
165   {
166     *(.infomemnobits)
167     . = ALIGN(2);
168     *(.infomemnobits.*)
169   }  > infomemnobits
170   .bss   :
171   {
172      PROVIDE (__bss_start = .) ;
173     *(.bss)
174     *(SORT_BY_ALIGNMENT(.bss.*))
175     *(COMMON)
176      PROVIDE (__bss_end = .) ;
177      _end = . ;
178   }  > data
179     PROVIDE (__bss_size = SIZEOF(.bss) );
180   .noinit   :
181   {
182      PROVIDE (__noinit_start = .) ;
183     *(.noinit)
184     *(.noinit.*)
185     *(COMMON)
186      PROVIDE (__noinit_end = .) ;
187      _end = . ;
188   }  > data
189   .vectors  :
190   {
191      PROVIDE (__vectors_start = .) ;
192     *(.vectors*)
193     KEEP(*(.vectors*))
194      _vectors_end = . ;
195   }  > vectors
196   /* Stabs for profiling information*/
197   .profiler 0 : { *(.profiler) }
198   /* Stabs debugging sections.  */
199   .stab 0 : { *(.stab) }
200   .stabstr 0 : { *(.stabstr) }
201   .stab.excl 0 : { *(.stab.excl) }
202   .stab.exclstr 0 : { *(.stab.exclstr) }
203   .stab.index 0 : { *(.stab.index) }
204   .stab.indexstr 0 : { *(.stab.indexstr) }
205   .comment 0 : { *(.comment) }
206   /* DWARF debug sections.
207      Symbols in the DWARF debugging sections are relative to the beginning
208      of the section so we begin them at 0.  */
209   /* DWARF 1 */
210   .debug          0 : { *(.debug) }
211   .line           0 : { *(.line) }
212   /* GNU DWARF 1 extensions */
213   .debug_srcinfo  0 : { *(.debug_srcinfo) }
214   .debug_sfnames  0 : { *(.debug_sfnames) }
215   /* DWARF 1.1 and DWARF 2 */
216   .debug_aranges  0 : { *(.debug_aranges) }
217   .debug_pubnames 0 : { *(.debug_pubnames) }
218   /* DWARF 2 */
219   .debug_info     0 : { *(.debug_info) *(.gnu.linkonce.wi.*) }
220   .debug_abbrev   0 : { *(.debug_abbrev) }
221   .debug_line     0 : { *(.debug_line) }
222   .debug_frame    0 : { *(.debug_frame) }
223   .debug_str      0 : { *(.debug_str) }
224   .debug_loc      0 : { *(.debug_loc) }
225   .debug_macinfo  0 : { *(.debug_macinfo) }
226   /* DWARF 3 */
227   .debug_pubtypes 0 : { *(.debug_pubtypes) }
228   .debug_ranges   0 : { *(.debug_ranges) }
229   PROVIDE (__stack = 0x400) ;
230   PROVIDE (__data_start_rom = _etext) ;
231   PROVIDE (__data_end_rom   = _etext + SIZEOF (.data)) ;
232   PROVIDE (__noinit_start_rom = _etext + SIZEOF (.data)) ;
233   PROVIDE (__noinit_end_rom = _etext + SIZEOF (.data) + SIZEOF (.noinit)) ;
234   PROVIDE (__subdevice_has_heap = 0) ;
235 }