Skip to content

Commit 334014a

Browse files
MaureenHelmioannisg
authored andcommitted
linker: arm: Fix cortex_m dtcm and ccm sections to work with relocation
Adds missing DTCM_ADDR and CCM_ADDR macros needed by the linker script generated by scripts/gen_relocate_app.py. Moves associated bss_end, noinit_end, and data_end linker symbols to account for section relocation. Without this change, the section sizes calculated in z_bss_zero() and z_data_copy() are incorrect. Signed-off-by: Maureen Helm <[email protected]>
1 parent bbc563f commit 334014a

File tree

2 files changed

+18
-12
lines changed
  • include/arch/arm/aarch32/cortex_m/scripts
  • soc/arm/st_stm32/common

2 files changed

+18
-12
lines changed

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

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,16 @@
6666
#define RAM_ADDR CONFIG_SRAM_BASE_ADDRESS
6767
#endif
6868

69+
#if DT_NODE_HAS_STATUS(DT_CHOSEN(zephyr_ccm), okay)
70+
#define CCM_SIZE DT_REG_SIZE(DT_CHOSEN(zephyr_ccm))
71+
#define CCM_ADDR DT_REG_ADDR(DT_CHOSEN(zephyr_ccm))
72+
#endif
73+
74+
#if DT_NODE_HAS_STATUS(DT_CHOSEN(zephyr_dtcm), okay)
75+
#define DTCM_SIZE DT_REG_SIZE(DT_CHOSEN(zephyr_dtcm))
76+
#define DTCM_ADDR DT_REG_ADDR(DT_CHOSEN(zephyr_dtcm))
77+
#endif
78+
6979
#if defined(CONFIG_CUSTOM_SECTION_ALIGN)
7080
_region_min_align = CONFIG_CUSTOM_SECTION_MIN_ALIGN_SIZE;
7181
#else
@@ -96,10 +106,10 @@ MEMORY
96106
FLASH_CCFG (rwx): ORIGIN = CCFG_ADDR, LENGTH = CCFG_SIZE
97107
#endif
98108
#if DT_NODE_HAS_STATUS(DT_CHOSEN(zephyr_ccm), okay)
99-
CCM (rw) : ORIGIN = DT_REG_ADDR(DT_CHOSEN(zephyr_ccm)), LENGTH = DT_REG_SIZE(DT_CHOSEN(zephyr_ccm))
109+
CCM (rw) : ORIGIN = CCM_ADDR, LENGTH = CCM_SIZE
100110
#endif
101111
#if DT_NODE_HAS_STATUS(DT_CHOSEN(zephyr_dtcm), okay)
102-
DTCM (rw) : ORIGIN = DT_REG_ADDR(DT_CHOSEN(zephyr_dtcm)), LENGTH = DT_REG_SIZE(DT_CHOSEN(zephyr_dtcm))
112+
DTCM (rw) : ORIGIN = DTCM_ADDR, LENGTH = DTCM_SIZE
103113
#endif
104114
SRAM (wx) : ORIGIN = RAM_ADDR, LENGTH = RAM_SIZE
105115
#ifdef CONFIG_BT_STM32_IPM
@@ -418,27 +428,25 @@ GROUP_START(DTCM)
418428
__dtcm_bss_start = .;
419429
*(.dtcm_bss)
420430
*(".dtcm_bss.*")
431+
__dtcm_bss_end = .;
421432
} GROUP_LINK_IN(DTCM)
422433

423-
__dtcm_bss_end = .;
424-
425434
SECTION_PROLOGUE(_DTCM_NOINIT_SECTION_NAME, (NOLOAD),SUBALIGN(4))
426435
{
427436
__dtcm_noinit_start = .;
428437
*(.dtcm_noinit)
429438
*(".dtcm_noinit.*")
439+
__dtcm_noinit_end = .;
430440
} GROUP_LINK_IN(DTCM)
431441

432-
__dtcm_noinit_end = .;
433-
434442
SECTION_PROLOGUE(_DTCM_DATA_SECTION_NAME,,SUBALIGN(4))
435443
{
436444
__dtcm_data_start = .;
437445
*(.dtcm_data)
438446
*(".dtcm_data.*")
447+
__dtcm_data_end = .;
439448
} GROUP_LINK_IN(DTCM AT> ROMABLE_REGION)
440449

441-
__dtcm_data_end = .;
442450
__dtcm_end = .;
443451

444452
__dtcm_data_rom_start = LOADADDR(_DTCM_DATA_SECTION_NAME);

soc/arm/st_stm32/common/ccm.ld

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,27 +8,25 @@ GROUP_START(CCM)
88
__ccm_bss_start = .;
99
*(.ccm_bss)
1010
*(".ccm_bss.*")
11+
__ccm_bss_end = .;
1112
} GROUP_LINK_IN(CCM)
1213

13-
__ccm_bss_end = .;
14-
1514
SECTION_PROLOGUE(_CCM_NOINIT_SECTION_NAME, (NOLOAD),SUBALIGN(4))
1615
{
1716
__ccm_noinit_start = .;
1817
*(.ccm_noinit)
1918
*(".ccm_noinit.*")
19+
__ccm_noinit_end = .;
2020
} GROUP_LINK_IN(CCM)
2121

22-
__ccm_noinit_end = .;
23-
2422
SECTION_PROLOGUE(_CCM_DATA_SECTION_NAME,,SUBALIGN(4))
2523
{
2624
__ccm_data_start = .;
2725
*(.ccm_data)
2826
*(".ccm_data.*")
27+
__ccm_data_end = .;
2928
} GROUP_LINK_IN(CCM AT> ROMABLE_REGION)
3029

31-
__ccm_data_end = .;
3230
__ccm_end = .;
3331

3432
__ccm_data_rom_start = LOADADDR(_CCM_DATA_SECTION_NAME);

0 commit comments

Comments
 (0)