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