1/* Copyright (c) 2013-2015 Red Hat, Inc. All rights reserved. 2 3 This copyrighted material is made available to anyone wishing to use, modify, 4 copy, or redistribute it subject to the terms and conditions of the BSD 5 License. This program is distributed in the hope that it will be useful, 6 but WITHOUT ANY WARRANTY expressed or implied, including the implied warranties 7 of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. A copy of this license 8 is available at http://www.opensource.org/licenses. Any Red Hat trademarks that 9 are incorporated in the source code or documentation are not subject to the BSD 10 License and may only be used or replicated with the express permission of 11 Red Hat, Inc. */ 12 13/* Default linker script, for normal MSP430 executables. */ 14 15OUTPUT_ARCH(msp430) 16ENTRY(_start) 17 18INCLUDE intr_vectors.ld 19 20MEMORY 21{ 22 RAM (w) : ORIGIN = 0x00500, LENGTH = 0x0eb00 23} 24 25SECTIONS 26{ 27 .resetvec : 28 { 29 *(.resetvec) 30 } > VECT31 31 32 .rodata : 33 { 34 . = ALIGN(2); 35 *(.plt) 36 . = ALIGN(2); 37 *(.lower.rodata.* .lower.rodata) 38 . = ALIGN(2); 39 *(.rodata .rodata.* .gnu.linkonce.r.* .const .const:*) 40 . = ALIGN(2); 41 *(.either.rodata.* .either.rodata) 42 . = ALIGN(2); 43 *(.rodata1) 44 45 KEEP (*(.gcc_except_table)) *(.gcc_except_table.*) 46 PROVIDE (__preinit_array_start = .); 47 KEEP (*(.preinit_array)) 48 PROVIDE (__preinit_array_end = .); 49 PROVIDE (__init_array_start = .); 50 KEEP (*(SORT(.init_array.*))) 51 KEEP (*(.init_array)) 52 PROVIDE (__init_array_end = .); 53 PROVIDE (__fini_array_start = .); 54 KEEP (*(.fini_array)) 55 KEEP (*(SORT(.fini_array.*))) 56 PROVIDE (__fini_array_end = .); 57 58 } > RAM 59 60 /* Note: This is a separate .rodata section for sections which are 61 read only but which older linkers treat as read-write. 62 This prevents older linkers from marking the entire .rodata 63 section as read-write. */ 64 .rodata2 : 65 { 66 . = ALIGN(2); 67 *(.eh_frame_hdr) 68 KEEP (*(.eh_frame)) 69 70 /* gcc uses crtbegin.o to find the start of the constructors, so 71 we make sure it is first. Because this is a wildcard, it 72 doesn't matter if the user does not actually link against 73 crtbegin.o; the linker won't look for a file to match a 74 wildcard. The wildcard also means that it doesn't matter which 75 directory crtbegin.o is in. */ 76 KEEP (*crtbegin*.o(.ctors)) 77 78 /* We don't want to include the .ctor section from from the 79 crtend.o file until after the sorted ctors. The .ctor section 80 from the crtend file contains the end of ctors marker and it 81 must be last */ 82 KEEP (*(EXCLUDE_FILE (*crtend*.o ) .ctors)) 83 KEEP (*(SORT(.ctors.*))) 84 KEEP (*(.ctors)) 85 86 KEEP (*crtbegin*.o(.dtors)) 87 KEEP (*(EXCLUDE_FILE (*crtend*.o ) .dtors)) 88 KEEP (*(SORT(.dtors.*))) 89 KEEP (*(.dtors)) 90 } > RAM 91 92 .text : 93 { 94 . = ALIGN(2); 95 PROVIDE (_start = .); 96 KEEP (*(SORT(.crt_*))) 97 *(.lowtext) 98 *(.lower.text.* .lower.text) 99 *(.text .stub .text.* .gnu.linkonce.t.* .text:*) 100 *(.either.text.* .either.text) 101 KEEP (*(.text.*personality*)) 102 /* .gnu.warning sections are handled specially by elf32.em. */ 103 *(.gnu.warning) 104 *(.interp .hash .dynsym .dynstr .gnu.version*) 105 PROVIDE (__etext = .); 106 PROVIDE (_etext = .); 107 PROVIDE (etext = .); 108 . = ALIGN(2); 109 KEEP (*(.init)) 110 KEEP (*(.fini)) 111 KEEP (*(.tm_clone_table)) 112 } > RAM 113 114 .data : 115 { 116 . = ALIGN(2); 117 PROVIDE (__datastart = .); 118 119 *(.lower.data.* .lower.data) 120 121 *(.data .data.* .gnu.linkonce.d.*) 122 123 *(.either.data.* .either.data) 124 125 KEEP (*(.jcr)) 126 *(.data.rel.ro.local) *(.data.rel.ro*) 127 *(.dynamic) 128 129 KEEP (*(.gnu.linkonce.d.*personality*)) 130 SORT(CONSTRUCTORS) 131 *(.data1) 132 *(.got.plt) *(.got) 133 134 /* We want the small data sections together, so single-instruction offsets 135 can access them all, and initialized data all before uninitialized, so 136 we can shorten the on-disk segment size. */ 137 . = ALIGN(2); 138 *(.sdata .sdata.* .gnu.linkonce.s.* D_2 D_1) 139 140 . = ALIGN(2); 141 _edata = .; 142 PROVIDE (edata = .); 143 PROVIDE (__dataend = .); 144 } > RAM 145 146 /* Note that crt0 assumes this is a multiple of two; all the 147 start/stop symbols are also assumed word-aligned. */ 148 PROVIDE(__romdatastart = LOADADDR(.data)); 149 PROVIDE (__romdatacopysize = SIZEOF(.data)); 150 151 .bss : 152 { 153 . = ALIGN(2); 154 PROVIDE (__bssstart = .); 155 *(.lower.bss.* .lower.bss) 156 *(.dynbss) 157 *(.sbss .sbss.*) 158 *(.bss .bss.* .gnu.linkonce.b.*) 159 *(.either.bss.* .either.bss) 160 . = ALIGN(2); 161 *(COMMON) 162 . = ALIGN(2); 163 PROVIDE (__bssend = .); 164 } > RAM 165 PROVIDE (__bsssize = SIZEOF(.bss)); 166 167 /* This section contains data that is not initialised during load 168 *or* application reset. */ 169 .noinit (NOLOAD) : 170 { 171 . = ALIGN(2); 172 PROVIDE (__noinit_start = .); 173 *(.noinit) 174 . = ALIGN(2); 175 PROVIDE (__noinit_end = .); 176 } > RAM 177 178 /* This section is intended to contain data that *is* initialised during load 179 but *not* on application reset. Normally the section would be stored in 180 FLASH RAM, but this is not available here. We just have to hope that the 181 programmer knows what they are doing. */ 182 .persistent : 183 { 184 . = ALIGN(2); 185 PROVIDE (__persistent_start = .); 186 *(.persistent) 187 . = ALIGN(2); 188 PROVIDE (__persistent_end = .); 189 } > RAM 190 191 _end = .; 192 PROVIDE (end = .); 193 194 /* The __stack_size value of 0x100 is just a guess, but since it is 195 PROVIDEd the user can override it on the command line. It has to be 196 set here, rather than inside the .stack section, as symbols defined 197 inside sections are only evaluated during the final phase of the link, 198 long after the ASSERT is checked. An ASSERT referencing a PROVIDED but 199 not yet evaluated symbol will automatically fail. 200 201 FIXME: It would be nice if this value could be automatically set via 202 gcc's -fstack-usage command line option somehow. */ 203 PROVIDE (__stack_size = 0x100); 204 205 .stack (ORIGIN (RAM) + LENGTH(RAM)) : 206 { 207 PROVIDE (__stack = .); 208 *(.stack) 209 210 /* Linker section checking ignores empty sections like 211 this one so we have to have our own test here. */ 212 /* FIXME: This test is triggering erroneously. I have not figured 213 out why yet, but I am disabling it for now as it prevents the 214 gcc testsuite from working. */ 215 /* ASSERT (__stack > (_end + __stack_size), 216 "Error: Too much data - no room left for the stack"); */ 217 } 218 219 /* Make sure that .upper sections are not used without -mlarge support. */ 220 .upper : 221 { 222 *(.upper.rodata.* .upper.rodata) 223 *(.upper.data.* .upper.data) 224 *(.upper.bss.* .upper.bss) 225 *(.upper.text.* .upper.text) 226 ASSERT (SIZEOF(.upper) == 0, "This MCU does not support high memory"); 227 } 228 229 /* The rest are all not normally part of the runtime image. */ 230 231 .MP430.attributes 0 : 232 { 233 KEEP (*(.MSP430.attributes)) 234 KEEP (*(.gnu.attributes)) 235 KEEP (*(__TI_build_attributes)) 236 } 237 238 /* Stabs debugging sections. */ 239 .stab 0 : { *(.stab) } 240 .stabstr 0 : { *(.stabstr) } 241 .stab.excl 0 : { *(.stab.excl) } 242 .stab.exclstr 0 : { *(.stab.exclstr) } 243 .stab.index 0 : { *(.stab.index) } 244 .stab.indexstr 0 : { *(.stab.indexstr) } 245 .comment 0 : { *(.comment) } 246 /* DWARF debug sections. 247 Symbols in the DWARF debugging sections are relative to the beginning 248 of the section so we begin them at 0. */ 249 /* DWARF 1. */ 250 .debug 0 : { *(.debug) } 251 .line 0 : { *(.line) } 252 /* GNU DWARF 1 extensions. */ 253 .debug_srcinfo 0 : { *(.debug_srcinfo) } 254 .debug_sfnames 0 : { *(.debug_sfnames) } 255 /* DWARF 1.1 and DWARF 2. */ 256 .debug_aranges 0 : { *(.debug_aranges) } 257 .debug_pubnames 0 : { *(.debug_pubnames) } 258 /* DWARF 2 */ 259 .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } 260 .debug_abbrev 0 : { *(.debug_abbrev) } 261 .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end ) } 262 .debug_frame 0 : { *(.debug_frame) } 263 .debug_str 0 : { *(.debug_str) } 264 .debug_loc 0 : { *(.debug_loc) } 265 .debug_macinfo 0 : { *(.debug_macinfo) } 266 /* SGI/MIPS DWARF 2 extensions. */ 267 .debug_weaknames 0 : { *(.debug_weaknames) } 268 .debug_funcnames 0 : { *(.debug_funcnames) } 269 .debug_typenames 0 : { *(.debug_typenames) } 270 .debug_varnames 0 : { *(.debug_varnames) } 271 /* DWARF 3. */ 272 .debug_pubtypes 0 : { *(.debug_pubtypes) } 273 .debug_ranges 0 : { *(.debug_ranges) } 274 /* DWARF Extension. */ 275 .debug_macro 0 : { *(.debug_macro) } 276 277 /DISCARD/ : { *(.note.GNU-stack) } 278} 279