فهرست منبع

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
2فایلهای تغییر یافته به همراه20 افزوده شده و 2 حذف شده
  1. 10 1
      components/esp32c3/ld/esp32c3.project.ld.in
  2. 10 1
      components/esp32s3/ld/esp32s3.project.ld.in

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

@@ -283,9 +283,18 @@ SECTIONS
     _flash_cache_start = ABSOLUTE(0);
     _flash_cache_start = ABSOLUTE(0);
   } > default_code_seg
   } > 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):
   .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;
     . = ALIGN(0x10000) + 0x20;
     _rodata_reserved_start = .;
     _rodata_reserved_start = .;
   } > default_rodata_seg
   } > default_rodata_seg

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

@@ -314,9 +314,18 @@ SECTIONS
     _flash_cache_start = ABSOLUTE(0);
     _flash_cache_start = ABSOLUTE(0);
   } > default_code_seg
   } > 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):
   .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;
     . = ALIGN(0x10000) + 0x20;
     _rodata_reserved_start = .;
     _rodata_reserved_start = .;
   } > default_rodata_seg
   } > default_rodata_seg