Преглед изворни кода

build: fix cache issue when .flash.text section alignment is uncommon

rodata dummy section has now the same alignment as flash text section,
and at least the same size. For these reasons, the cache will map
correctly the following rodata section.
Omar Chebib пре 4 година
родитељ
комит
c29dbda5fd

+ 10 - 1
components/esp32c3/ld/esp32c3.project.ld.in

@@ -283,9 +283,18 @@ SECTIONS
     _flash_cache_start = ABSOLUTE(0);
   } > default_code_seg
 
+  /**
+   * This dummy section represents the .flash.text section but in default_rodata_seg.
+   * Thus, it must have its alignement and (at least) its size.
+   */
   .flash_rodata_dummy (NOLOAD):
   {
-    . = SIZEOF(.flash.text);
+    /* Start at the same alignement constraint than .flash.text */
+    . = ALIGN(ALIGNOF(.flash.text));
+    /* Create an empty gap as big as .flash.text section */
+    . = . + SIZEOF(.flash.text);
+    /* Prepare the alignement of the section above. Few bytes (0x20) must be
+     * added for the mapping header. */
     . = ALIGN(0x10000) + 0x20;
     _rodata_reserved_start = .;
   } > default_rodata_seg

+ 10 - 1
components/esp32s3/ld/esp32s3.project.ld.in

@@ -314,9 +314,18 @@ SECTIONS
     _flash_cache_start = ABSOLUTE(0);
   } > default_code_seg
 
+  /**
+   * This dummy section represents the .flash.text section but in default_rodata_seg.
+   * Thus, it must have its alignement and (at least) its size.
+   */
   .flash_rodata_dummy (NOLOAD):
   {
-    . = SIZEOF(.flash.text);
+    /* Start at the same alignement constraint than .flash.text */
+    . = ALIGN(ALIGNOF(.flash.text));
+    /* Create an empty gap as big as .flash.text section */
+    . = . + SIZEOF(.flash.text);
+    /* Prepare the alignement of the section above. Few bytes (0x20) must be
+     * added for the mapping header. */
     . = ALIGN(0x10000) + 0x20;
     _rodata_reserved_start = .;
   } > default_rodata_seg