linker: esp32: fix linker to enable proper MMU usage

ESP32 flash_mmap() function requires `_rodata_reserved_start` address
to be at the beginning of RODATA. This allows adding memory-mapped flash
areas.

Fixes #52764

Signed-off-by: Sylvio Alves <sylvio.alves@espressif.com>
This commit is contained in:
Sylvio Alves 2023-10-17 05:49:39 -03:00 committed by Carles Cufí
commit 3f5ea785f2
4 changed files with 7 additions and 6 deletions

View file

@ -130,6 +130,7 @@ SECTIONS
SECTION_PROLOGUE(_RODATA_SECTION_NAME,,) SECTION_PROLOGUE(_RODATA_SECTION_NAME,,)
{ {
_rodata_reserved_start = ABSOLUTE(.);
_rodata_start = ABSOLUTE(.); _rodata_start = ABSOLUTE(.);
*(.rodata_desc .rodata_desc.*) *(.rodata_desc .rodata_desc.*)
@ -186,7 +187,6 @@ SECTIONS
*(.rodata_wlog) *(.rodata_wlog)
*(.rodata_wlog*) *(.rodata_wlog*)
_thread_local_end = ABSOLUTE(.); _thread_local_end = ABSOLUTE(.);
_rodata_reserved_end = ABSOLUTE(.);
. = ALIGN(4); . = ALIGN(4);
} GROUP_DATA_LINK_IN(RODATA_REGION, ROMABLE_REGION) } GROUP_DATA_LINK_IN(RODATA_REGION, ROMABLE_REGION)
@ -203,6 +203,7 @@ SECTIONS
* This is used to calculate the size of the _image_drom_size variable */ * This is used to calculate the size of the _image_drom_size variable */
SECTION_PROLOGUE(_RODATA_SECTION_END,,) SECTION_PROLOGUE(_RODATA_SECTION_END,,)
{ {
_rodata_reserved_end = ABSOLUTE(.);
. = ALIGN(4); . = ALIGN(4);
_image_rodata_end = ABSOLUTE(.); _image_rodata_end = ABSOLUTE(.);
} GROUP_DATA_LINK_IN(RODATA_REGION, ROMABLE_REGION) } GROUP_DATA_LINK_IN(RODATA_REGION, ROMABLE_REGION)
@ -402,7 +403,6 @@ SECTIONS
{ {
. = SIZEOF(_RODATA_SECTION_NAME); . = SIZEOF(_RODATA_SECTION_NAME);
. = ALIGN(0x10000) + 0x20; . = ALIGN(0x10000) + 0x20;
_rodata_reserved_start = .;
} GROUP_LINK_IN(FLASH_CODE_REGION) } GROUP_LINK_IN(FLASH_CODE_REGION)
.flash.text : ALIGN(IROM_SEG_ALIGN) .flash.text : ALIGN(IROM_SEG_ALIGN)

View file

@ -135,6 +135,7 @@ SECTIONS
*/ */
SECTION_PROLOGUE(_RODATA_SECTION_NAME,,ALIGN(4)) SECTION_PROLOGUE(_RODATA_SECTION_NAME,,ALIGN(4))
{ {
_rodata_reserved_start = ABSOLUTE(.);
__rodata_region_start = ABSOLUTE(.); __rodata_region_start = ABSOLUTE(.);
. = ALIGN(4); . = ALIGN(4);
@ -182,7 +183,6 @@ SECTIONS
*(.rodata_wlog) *(.rodata_wlog)
*(.rodata_wlog*) *(.rodata_wlog*)
_thread_local_end = ABSOLUTE(.); _thread_local_end = ABSOLUTE(.);
_rodata_reserved_end = ABSOLUTE(.);
. = ALIGN(4); . = ALIGN(4);
} GROUP_DATA_LINK_IN(RODATA_REGION, ROMABLE_REGION) } GROUP_DATA_LINK_IN(RODATA_REGION, ROMABLE_REGION)
@ -198,6 +198,7 @@ SECTIONS
* This is used to calculate the size of the _image_drom_size variable */ * This is used to calculate the size of the _image_drom_size variable */
SECTION_PROLOGUE(_RODATA_SECTION_END,,ALIGN(0x10)) SECTION_PROLOGUE(_RODATA_SECTION_END,,ALIGN(0x10))
{ {
_rodata_reserved_end = ABSOLUTE(.);
. = ALIGN(4); . = ALIGN(4);
_image_rodata_end = ABSOLUTE(.); _image_rodata_end = ABSOLUTE(.);
} GROUP_DATA_LINK_IN(RODATA_REGION, ROMABLE_REGION) } GROUP_DATA_LINK_IN(RODATA_REGION, ROMABLE_REGION)

View file

@ -167,6 +167,7 @@ SECTIONS
*/ */
SECTION_PROLOGUE(_RODATA_SECTION_NAME,,ALIGN(0x10)) SECTION_PROLOGUE(_RODATA_SECTION_NAME,,ALIGN(0x10))
{ {
_rodata_reserved_start = ABSOLUTE(.);
_rodata_start = ABSOLUTE(.); _rodata_start = ABSOLUTE(.);
*(.rodata_desc .rodata_desc.*) /* Should be the first. App version info. DO NOT PUT ANYTHING BEFORE IT! */ *(.rodata_desc .rodata_desc.*) /* Should be the first. App version info. DO NOT PUT ANYTHING BEFORE IT! */
@ -218,7 +219,6 @@ SECTIONS
*(.rodata_wlog) *(.rodata_wlog)
*(.rodata_wlog*) *(.rodata_wlog*)
_thread_local_end = ABSOLUTE(.); _thread_local_end = ABSOLUTE(.);
_rodata_reserved_end = ABSOLUTE(.);
. = ALIGN(4); . = ALIGN(4);
} GROUP_DATA_LINK_IN(RODATA_REGION, ROMABLE_REGION) } GROUP_DATA_LINK_IN(RODATA_REGION, ROMABLE_REGION)
@ -235,6 +235,7 @@ SECTIONS
* This is used to calculate the size of the _image_drom_size variable */ * This is used to calculate the size of the _image_drom_size variable */
SECTION_PROLOGUE(_RODATA_SECTION_END,,ALIGN(0x10)) SECTION_PROLOGUE(_RODATA_SECTION_END,,ALIGN(0x10))
{ {
_rodata_reserved_end = ABSOLUTE(.);
. = ALIGN(16); . = ALIGN(16);
_image_rodata_end = ABSOLUTE(.); _image_rodata_end = ABSOLUTE(.);
} GROUP_DATA_LINK_IN(RODATA_REGION, ROMABLE_REGION) } GROUP_DATA_LINK_IN(RODATA_REGION, ROMABLE_REGION)
@ -494,7 +495,6 @@ SECTIONS
{ {
. = SIZEOF(_RODATA_SECTION_NAME); . = SIZEOF(_RODATA_SECTION_NAME);
. = ALIGN(IROM_SEG_ALIGN) + 0x20; . = ALIGN(IROM_SEG_ALIGN) + 0x20;
_rodata_reserved_start = .;
} GROUP_LINK_IN(FLASH_CODE_REGION) } GROUP_LINK_IN(FLASH_CODE_REGION)
.flash.text : ALIGN(IROM_SEG_ALIGN) .flash.text : ALIGN(IROM_SEG_ALIGN)

View file

@ -155,7 +155,7 @@ manifest:
groups: groups:
- hal - hal
- name: hal_espressif - name: hal_espressif
revision: 31fc5758f3507f8f0af00b1dea1a0df7af99bfc0 revision: b3cb13f06586543ae1d156dc3e84b2fd3dc2f1fb
path: modules/hal/espressif path: modules/hal/espressif
west-commands: west/west-commands.yml west-commands: west/west-commands.yml
groups: groups: