Skip to content

Commit 65a2de8

Browse files
tejlmandnashif
authored andcommitted
linker: align __data_ram/rom_start/end linker symbol names
Cleanup and preparation commit for linker script generator. Zephyr linker scripts provides start and end symbols for each section, and sometimes even size and LMA start symbols. Generally, start and end symbols uses the following pattern, as: Section name: foo Section start symbol: __foo_start Section end symbol: __foo_end However, this pattern is not followed consistently. To allow for linker script generation and ensure consistent naming of symbols then the following pattern is introduced consistently to allow for cleaner linker script generation. Section name: foo Section start symbol: __foo_start Section end symbol: __foo_end Section size symbol: __foo_size Section LMA start symbol: __foo_load_start This commit aligns the symbols for _data_ram/rom to other symbols and in such a way they follow consistent pattern which allows for linker script and scatter file generation. The symbols are named according to the section name they describe. Section name is `data` A new group named data_region is introduced which instead spans all the input and output sections that was previously covered by __data_ram_start, __data_ram_end, and __data_rom_start. The following symbols are aligned in this commit: - __data_ram_start -> __data_region_start - __data_ram_end -> __data_region_end - __data_rom_start -> __data_region_load_start The following new symbols are introduced so that the data section is aligned with other sections: - __data_end - __data_start value identical to __data_region_start but describes start of the section. Signed-off-by: Torsten Rasmussen <Torsten.Rasmussen@nordicsemi.no>
1 parent 626e167 commit 65a2de8

File tree

12 files changed

+95
-41
lines changed

12 files changed

+95
-41
lines changed

include/arch/arc/v2/linker.ld

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -178,10 +178,14 @@ SECTIONS {
178178

179179
#include <linker/common-noinit.ld>
180180

181+
GROUP_START(DATA_REGION)
182+
183+
__data_region_start = .;
184+
181185
SECTION_DATA_PROLOGUE(_DATA_SECTION_NAME,,) {
182186

183187
/* when XIP, .text is in ROM, but vector table must be at start of .data */
184-
__data_ram_start = .;
188+
__data_start = .;
185189
*(".data")
186190
*(".data.*")
187191
*(".kernel.*")
@@ -191,9 +195,14 @@ SECTIONS {
191195
*/
192196
#include <snippets-rwdata.ld>
193197

198+
__data_end = .;
199+
194200
} GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
195201

196-
__data_rom_start = LOADADDR(_DATA_SECTION_NAME);
202+
__data_size = __data_end - __data_start;
203+
__data_load_start = LOADADDR(_DATA_SECTION_NAME);
204+
205+
__data_region_load_start = LOADADDR(_DATA_SECTION_NAME);
197206

198207
#include <linker/common-ram.ld>
199208
#include <linker/kobject-data.ld>
@@ -209,7 +218,8 @@ SECTIONS {
209218
*/
210219
#include <snippets-data-sections.ld>
211220

212-
__data_ram_end = .;
221+
__data_region_end = .;
222+
213223
MPU_MIN_SIZE_ALIGN
214224
/* Define linker symbols */
215225
_image_ram_end = .;

include/arch/arm/aarch32/cortex_a_r/scripts/linker.ld

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -278,9 +278,11 @@ SECTIONS
278278

279279
#include <linker/common-noinit.ld>
280280

281+
__data_region_start = .;
282+
281283
SECTION_DATA_PROLOGUE(_DATA_SECTION_NAME,,)
282284
{
283-
__data_ram_start = .;
285+
__data_start = .;
284286
*(.data)
285287
*(".data.*")
286288
*(".kernel.*")
@@ -293,10 +295,13 @@ SECTIONS
293295
#ifdef CONFIG_CODE_DATA_RELOCATION
294296
#include <linker_sram_data_relocate.ld>
295297
#endif
298+
__data_end = .;
296299

297300
} GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
301+
__data_size = __data_end - __data_start;
302+
__data_load_start = LOADADDR(_DATA_SECTION_NAME);
298303

299-
__data_rom_start = LOADADDR(_DATA_SECTION_NAME);
304+
__data_region_load_start = LOADADDR(_DATA_SECTION_NAME);
300305

301306
#include <linker/common-ram.ld>
302307
#include <linker/kobject-data.ld>
@@ -307,7 +312,7 @@ SECTIONS
307312
*/
308313
#include <snippets-data-sections.ld>
309314

310-
__data_ram_end = .;
315+
__data_region_end = .;
311316

312317

313318
/* Define linker symbols */

include/arch/arm/aarch32/cortex_m/scripts/linker.ld

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -292,9 +292,13 @@ SECTIONS
292292

293293
#endif /* CONFIG_USERSPACE */
294294

295+
GROUP_START(DATA_REGION)
296+
297+
__data_region_start = .;
298+
295299
SECTION_DATA_PROLOGUE(_DATA_SECTION_NAME,,)
296300
{
297-
__data_ram_start = .;
301+
__data_start = .;
298302
*(.data)
299303
*(".data.*")
300304
*(".kernel.*")
@@ -307,10 +311,13 @@ SECTIONS
307311
#ifdef CONFIG_CODE_DATA_RELOCATION
308312
#include <linker_sram_data_relocate.ld>
309313
#endif
314+
__data_end = .;
310315

311316
} GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
317+
__data_size = __data_end - __data_start;
318+
__data_load_start = LOADADDR(_DATA_SECTION_NAME);
312319

313-
__data_rom_start = LOADADDR(_DATA_SECTION_NAME);
320+
__data_region_load_start = LOADADDR(_DATA_SECTION_NAME);
314321

315322
#include <linker/common-ram.ld>
316323
#include <linker/kobject-data.ld>
@@ -322,7 +329,7 @@ SECTIONS
322329
*/
323330
#include <snippets-data-sections.ld>
324331

325-
__data_ram_end = .;
332+
__data_region_end = .;
326333

327334
#ifndef CONFIG_USERSPACE
328335
SECTION_DATA_PROLOGUE(_BSS_SECTION_NAME,(NOLOAD),)

include/arch/arm64/scripts/linker.ld

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -248,9 +248,11 @@ SECTIONS
248248

249249
#include <linker/common-noinit.ld>
250250

251+
__data_region_start = .;
252+
251253
SECTION_DATA_PROLOGUE(_DATA_SECTION_NAME,,)
252254
{
253-
__data_ram_start = .;
255+
__data_start = .;
254256
*(.data)
255257
*(".data.*")
256258
*(".kernel.*")
@@ -260,9 +262,13 @@ SECTIONS
260262
*/
261263
#include <snippets-rwdata.ld>
262264

265+
__data_end = .;
266+
263267
} GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
268+
__data_size = __data_end - __data_start;
269+
__data_load_start = LOADADDR(_DATA_SECTION_NAME);
264270

265-
__data_rom_start = LOADADDR(_DATA_SECTION_NAME);
271+
__data_region_load_start = LOADADDR(_DATA_SECTION_NAME);
266272

267273
#include <linker/common-ram.ld>
268274
#include <linker/kobject-data.ld>
@@ -273,7 +279,7 @@ SECTIONS
273279
*/
274280
#include <snippets-data-sections.ld>
275281

276-
__data_ram_end = .;
282+
__data_region_end = .;
277283

278284

279285
/* Define linker symbols */

include/arch/nios2/linker.ld

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ SECTIONS
9797
}
9898

9999
GROUP_START(ROMABLE_REGION)
100-
_image_rom_start = _ROM_ADDR;
100+
__rom_region_start = _ROM_ADDR;
101101

102102
SECTION_PROLOGUE(_RESET_SECTION_NAME,,)
103103
{
@@ -119,21 +119,21 @@ SECTIONS
119119
* we are going to waste flash space? */
120120
. = ALT_CPU_RESET_ADDR;
121121

122-
_image_text_start = .;
122+
__text_region_start = .;
123123

124124
*(.text)
125125
*(".text.*")
126126
*(.gnu.linkonce.t.*)
127127
} GROUP_LINK_IN(ROMABLE_REGION)
128128

129-
_image_text_end = .;
129+
__text_region_end = .;
130130

131131
#if defined(CONFIG_GP_ALL_DATA)
132132
_gp = ABSOLUTE(. + 0x8000);
133133
PROVIDE(gp = _gp);
134134
#endif
135135

136-
_image_rodata_start = .;
136+
__rodata_region_start = .;
137137

138138
#include <linker/common-rom.ld>
139139

@@ -159,7 +159,7 @@ SECTIONS
159159
_image_rodata_size = _image_rodata_end - _image_rodata_start;
160160

161161
_image_rom_end = .;
162-
__data_rom_start = ALIGN(4); /* XIP imaged DATA ROM start addr */
162+
__data_region_load_start = ALIGN(4); /* XIP imaged DATA ROM start addr */
163163

164164
GROUP_END(ROMABLE_REGION)
165165

@@ -175,7 +175,7 @@ SECTIONS
175175
SECTION_DATA_PROLOGUE(_EXCEPTION_SECTION_NAME,,)
176176
{
177177
_image_ram_start = .;
178-
__data_ram_start = .;
178+
__data_region_start = .;
179179

180180
KEEP(*(".exception.entry.*"))
181181
*(".exception.other.*")
@@ -191,6 +191,7 @@ SECTIONS
191191

192192
SECTION_DATA_PROLOGUE(_DATA_SECTION_NAME,,)
193193
{
194+
__data_start = .;
194195
*(.data)
195196
*(".data.*")
196197

@@ -223,8 +224,11 @@ SECTIONS
223224
* zephyr_linker_sources() Cmake function.
224225
*/
225226
#include <snippets-ram-sections.ld>
227+
__data_end = .;
226228

227229
} GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
230+
__data_size = __data_end - __data_start;
231+
__data_load_start = LOADADDR(_DATA_SECTION_NAME);
228232

229233
#include <linker/cplusplus-ram.ld>
230234

@@ -233,7 +237,7 @@ SECTIONS
233237
*/
234238
#include <snippets-data-sections.ld>
235239

236-
__data_ram_end = .;
240+
__data_region_end = .;
237241

238242
SECTION_DATA_PROLOGUE(_BSS_SECTION_NAME,(NOLOAD),)
239243
{

include/arch/posix/linker.ld

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ SECTIONS
5353
*/
5454
#include <snippets-data-sections.ld>
5555

56-
__data_ram_end = .;
56+
__data_region_end = .;
5757

5858
/* Located in generated directory. This file is populated by the
5959
* zephyr_linker_sources() Cmake function.

include/arch/riscv/common/linker.ld

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -229,11 +229,13 @@ SECTIONS
229229
#include <linker/common-noinit.ld>
230230
#include <linker/cplusplus-ram.ld>
231231

232+
__data_region_start = .;
233+
232234
SECTION_DATA_PROLOGUE(_DATA_SECTION_NAME,,)
233235
{
234236
. = ALIGN(4);
235237
/* _image_ram_start = .; */
236-
__data_ram_start = .;
238+
__data_start = .;
237239

238240
*(.data)
239241
*(".data.*")
@@ -260,10 +262,13 @@ SECTIONS
260262
* zephyr_linker_sources() Cmake function.
261263
*/
262264
#include <snippets-rwdata.ld>
265+
__data_end = .;
263266

264267
} GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
268+
__data_size = __data_end - __data_start;
269+
__data_load_start = LOADADDR(_DATA_SECTION_NAME);
265270

266-
__data_rom_start = LOADADDR(_DATA_SECTION_NAME);
271+
__data_region_load_start = LOADADDR(_DATA_SECTION_NAME);
267272

268273
#include <linker/common-ram.ld>
269274
#include <linker/kobject-data.ld>
@@ -278,7 +283,7 @@ SECTIONS
278283
*/
279284
#include <snippets-data-sections.ld>
280285

281-
__data_ram_end = .;
286+
__data_region_end = .;
282287

283288
MPU_MIN_SIZE_ALIGN
284289

include/arch/sparc/linker.ld

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,8 @@ SECTIONS
6767

6868
_image_rom_end = .;
6969

70-
__data_rom_start = .;
70+
__data_region_load_start = .;
71+
__data_region_start = .;
7172

7273

7374
SECTION_PROLOGUE(.plt,,)
@@ -84,7 +85,7 @@ SECTIONS
8485
{
8586
. = ALIGN(8);
8687
_image_ram_start = .;
87-
__data_ram_start = .;
88+
__data_start = .;
8889

8990
*(.data)
9091
*(.data.*)
@@ -96,7 +97,11 @@ SECTIONS
9697
*/
9798
#include <snippets-rwdata.ld>
9899

100+
__data_end = .;
101+
99102
} GROUP_DATA_LINK_IN(REGION_DATA_VMA, REGION_DATA_LMA)
103+
__data_size = __data_end - __data_start;
104+
__data_load_start = LOADADDR(_DATA_SECTION_NAME);
100105

101106
#include <linker/common-ram.ld>
102107

@@ -110,7 +115,7 @@ SECTIONS
110115
*/
111116
#include <snippets-data-sections.ld>
112117

113-
__data_ram_end = .;
118+
__data_region_end = .;
114119

115120
SECTION_DATA_PROLOGUE(_BSS_SECTION_NAME,(NOLOAD),)
116121
{

include/arch/x86/ia32/linker.ld

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -437,10 +437,12 @@ SECTIONS
437437

438438
MMU_PAGE_ALIGN_PERM
439439

440+
440441
SECTION_DATA_PROLOGUE(_DATA_SECTION_NAME,,)
441442
{
442443

443-
__data_ram_start = .;
444+
__data_region_start = .;
445+
__data_start = .;
444446

445447
*(.data)
446448
*(".data.*")
@@ -462,9 +464,13 @@ SECTIONS
462464
#endif /* !CONFIG_LINKER_USE_PINNED_SECTION */
463465

464466
. = ALIGN(4);
467+
__data_end = .;
468+
465469
} GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
470+
__data_size = __data_end - __data_start;
471+
__data_load_start = LOADADDR(_DATA_SECTION_NAME);
466472

467-
__data_rom_start = LOADADDR(_DATA_SECTION_NAME);
473+
__data_region_load_start = LOADADDR(_DATA_SECTION_NAME);
468474

469475
#include <linker/cplusplus-ram.ld>
470476

@@ -482,7 +488,7 @@ SECTIONS
482488
#include <snippets-data-sections.ld>
483489

484490
MMU_PAGE_ALIGN
485-
__data_ram_end = .;
491+
__data_region_end = .;
486492

487493
/* All unused memory also owned by the kernel for heaps */
488494
__kernel_ram_end = KERNEL_BASE_ADDR + KERNEL_RAM_SIZE;
@@ -536,6 +542,6 @@ SECTIONS
536542
* to 3 extra bytes copied in next section (BSS). At run time, the XIP copy
537543
* is done first followed by clearing the BSS section.
538544
*/
539-
__data_size = (__data_ram_end - __data_ram_start);
545+
__data_size = (__data_region_end - __data_region_start);
540546
__data_num_words = (__data_size + 3) >> 2;
541547
#endif

include/linker/linker-defs.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -172,9 +172,9 @@
172172
GDATA(__bss_start)
173173
GDATA(__bss_num_words)
174174
#ifdef CONFIG_XIP
175-
GDATA(__data_rom_start)
176-
GDATA(__data_ram_start)
177-
GDATA(__data_num_words)
175+
GDATA(__data_region_load_start)
176+
GDATA(__data_region_start)
177+
GDATA(__data_region_num_words)
178178
#endif
179179

180180
#else /* ! _ASMLANGUAGE */
@@ -224,9 +224,9 @@ extern char __bss_end[];
224224

225225
/* Used by z_data_copy() or arch-specific implementation */
226226
#ifdef CONFIG_XIP
227-
extern char __data_rom_start[];
228-
extern char __data_ram_start[];
229-
extern char __data_ram_end[];
227+
extern char __data_region_load_start[];
228+
extern char __data_region_start[];
229+
extern char __data_region_end[];
230230
#endif /* CONFIG_XIP */
231231

232232
#ifdef CONFIG_MMU

0 commit comments

Comments
 (0)