11/* ****************************************************************************
2- * Product: Linker script for EK-TM4C123GXL, GNU-ARM linker
3- * Last Updated for Version: 5.9.8
4- * Date of the Last Update: 2017-09-13
2+ * Linker script for EK-TM4C123GXL, GNU-ARM linker
53*
6- * Q u a n t u m L e a P s
7- * ---------------------------
8- * innovating embedded systems
4+ * Copyright (C) 2005 Quantum Leaps, LLC. All rights reserved.
95*
10- * Copyright (C) Quantum Leaps, LLC. All rights reserved.
6+ * Q u a n t u m L e a P s
7+ * ------------------------
8+ * Modern Embedded Software
119*
12- * This program is open source software: you can redistribute it and/or
13- * modify it under the terms of the GNU General Public License as published
14- * by the Free Software Foundation, either version 3 of the License, or
15- * (at your option) any later version.
10+ * SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-QL-commercial
1611*
17- * Alternatively, this program may be distributed and modified under the
18- * terms of Quantum Leaps commercial licenses, which expressly supersede
19- * the GNU General Public License and are specifically designed for
20- * licensees interested in retaining the proprietary status of their code.
12+ * This software is dual-licensed under the terms of the open-source GNU
13+ * General Public License (GPL) or under the terms of one of the closed-
14+ * source Quantum Leaps commercial licenses.
2115*
22- * This program is distributed in the hope that it will be useful,
23- * but WITHOUT ANY WARRANTY; without even the implied warranty of
24- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25- * GNU General Public License for more details.
16+ * Redistributions in source code must retain this top-level comment block.
17+ * Plagiarizing this software to sidestep the license obligations is illegal.
2618*
27- * You should have received a copy of the GNU General Public License
28- * along with this program. If not, see <http://www.gnu.org/licenses/>.
19+ * NOTE:
20+ * The GPL does NOT permit the incorporation of this code into proprietary
21+ * programs. Please contact Quantum Leaps for commercial licensing options,
22+ * which expressly supersede the GPL and are designed explicitly for
23+ * closed-source distribution.
2924*
30- * Contact information:
31- * Web : http:// www.state-machine.com
32- 25+ * Quantum Leaps contact information:
26+ * < www.state-machine.com/licensing>
27+ 3328*****************************************************************************/
3429OUTPUT_FORMAT (" elf32-littlearm" , " elf32-bigarm" , " elf32-littlearm" )
3530OUTPUT_ARCH(arm)
@@ -47,87 +42,131 @@ STACK_SIZE = 2048;
4742HEAP_SIZE = 0 ;
4843
4944SECTIONS {
50-
51- .isr_vector : { /* the vector table goes FIRST into ROM */
52- KEEP (*(.isr_vector )) /* vector table */
45+ /* Startup code into ROM type memory */
46+ .isr_vector : {
47+ . = ALIGN (4 );
48+ KEEP (*(.isr_vector )) /* Startup code */
5349 . = ALIGN (4 );
5450 } >ROM
5551
56- .text : { /* code and constants */
52+ /* The program code and other data into ROM type memory */
53+ .text : {
5754 . = ALIGN (4 );
5855 *(.text ) /* .text sections (code) */
5956 *(.text *) /* .text* sections (code) */
60- *(.rodata ) /* .rodata sections (constants, strings, etc.) */
61- *(.rodata *) /* .rodata* sections (constants, strings, etc.) */
57+ *(.glue_7 ) /* glue arm to thumb code */
58+ *(.glue_7t ) /* glue thumb to arm code */
59+ *(.eh_frame )
6260
6361 KEEP (*(.init ))
6462 KEEP (*(.fini ))
6563
6664 . = ALIGN (4 );
65+ _etext = .; /* define a global symbols at end of code */
66+ } >ROM
67+
68+ /* Constant data into ROM type memory */
69+ .rodata : {
70+ . = ALIGN (4 );
71+ *(.rodata ) /* .rodata sections (constants, strings, etc.) */
72+ *(.rodata *) /* .rodata* sections (constants, strings, etc.) */
73+ . = ALIGN (4 );
74+ } >ROM
75+
76+ /* NOTE:
77+ * The "READONLY" keyword is only supported in GCC11 and later,
78+ * remove it if using GCC10 or earlier.
79+ */
80+ .ARM .extab (READONLY) : {
81+ . = ALIGN (4 );
82+ *(.ARM .extab * .gnu .linkonce .armextab .*)
83+ . = ALIGN (4 );
84+ } >ROM
85+
86+ .ARM (READONLY) : {
87+ . = ALIGN (4 );
88+ __exidx_start = .;
89+ *(.ARM .exidx *)
90+ __exidx_end = .;
91+ . = ALIGN (4 );
6792 } >ROM
6893
69- .preinit_array : {
94+ .preinit_array (READONLY) : {
95+ . = ALIGN (4 );
7096 PROVIDE_HIDDEN (__preinit_array_start = .);
7197 KEEP (*(.preinit_array *))
7298 PROVIDE_HIDDEN (__preinit_array_end = .);
99+ . = ALIGN (4 );
73100 } >ROM
74101
75- .init_array : {
102+ .init_array (READONLY) : {
103+ . = ALIGN (4 );
76104 PROVIDE_HIDDEN (__init_array_start = .);
77105 KEEP (*(SORT (.init_array .*)))
78106 KEEP (*(.init_array *))
79107 PROVIDE_HIDDEN (__init_array_end = .);
108+ . = ALIGN (4 );
80109 } >ROM
81110
82- .fini_array : {
111+ .fini_array (READONLY) : {
112+ . = ALIGN (4 );
83113 PROVIDE_HIDDEN (__fini_array_start = .);
84- KEEP (*(.fini_array *))
85114 KEEP (*(SORT (.fini_array .*)))
115+ KEEP (*(.fini_array *))
86116 PROVIDE_HIDDEN (__fini_array_end = .);
117+ . = ALIGN (4 );
87118 } >ROM
88119
89- _etext = .; /* global symbols at end of code */
90-
120+ /* RAM ------------------------------------------------------------*/
91121 .stack : {
122+ . = ALIGN (8 );
92123 __stack_start__ = .;
93124 . = . + STACK_SIZE;
94125 . = ALIGN (4 );
95126 __stack_end__ = .;
127+ . = ALIGN (8 );
96128 } >RAM
97129
98- .data : AT (_etext) {
99- __data_load = LOADADDR (.data );
100- __data_start = .;
130+ /* Used by the startup to initialize data */
131+ __data_load = LOADADDR (.data );
132+
133+ /* Initialized data sections into "RAM" Ram type memory */
134+ .data : {
135+ . = ALIGN (4 );
136+ __data_start = .; /* create a global symbol at data start */
101137 *(.data ) /* .data sections */
102138 *(.data *) /* .data* sections */
139+ *(.RamFunc ) /* .RamFunc sections */
140+ *(.RamFunc *) /* .RamFunc* sections */
103141 . = ALIGN (4 );
104- __data_end__ = .;
142+ __data_end__ = .; /* define a global symbol at data end */
105143 _edata = __data_end__;
106- } >RAM
144+ } >RAM AT> ROM
107145
146+ /* Uninitialized data section into "RAM" Ram type memory */
147+ . = ALIGN (4 );
108148 .bss : {
109- __bss_start__ = .;
149+ /* This is used by the startup in order to initialize the .bss section */
150+ __bss_start__ = .; /* define a global symbol at bss start */
151+ _sbss = __bss_start__;
110152 *(.bss )
111153 *(.bss *)
112154 *(COMMON)
113- . = ALIGN (4 );
114- _ebss = .; /* define a global symbol at bss end */
115- __bss_end__ = .;
116- } >RAM
117155
118- __exidx_start = .;
119- .ARM.exidx : { *(.ARM .exidx * .gnu .linkonce .armexidx .*) } >RAM
120- __exidx_end = .;
121-
122- PROVIDE ( end = _ebss );
123- PROVIDE ( _end = _ebss );
124- PROVIDE ( __end__ = _ebss );
156+ . = ALIGN (4 );
157+ __bss_end__ = .; /* define a global symbol at bss end */
158+ _ebss = __bss_end__;
159+ } >RAM
125160
126161 .heap : {
162+ . = ALIGN (8 );
163+ PROVIDE ( end = . );
164+ PROVIDE ( _end = . );
127165 __heap_start__ = .;
128166 . = . + HEAP_SIZE;
129167 . = ALIGN (4 );
130168 __heap_end__ = .;
169+ . = ALIGN (8 );
131170 } >RAM
132171
133172 /* Remove information from the standard libraries */
0 commit comments