Browse Source

[BSP] Fix component initialization functions may be not sequential storage on ROM when used for IAR linker.

armink 8 years ago
parent
commit
573c294216

+ 2 - 1
bsp/beaglebone/am335x_DDR.icf

@@ -29,6 +29,7 @@ define block FIQ_STACK with alignment = 8, size = __ICFEDIT_size_fiqstack__ { };
 define block UND_STACK with alignment = 8, size = __ICFEDIT_size_undstack__ { };
 define block ABT_STACK with alignment = 8, size = __ICFEDIT_size_abtstack__ { };
 define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };
+define block RTT_INIT_FUNC with fixed order { readonly section .rti_fn* };
 
 initialize by copy { readwrite };
 do not initialize  { section .noinit };
@@ -38,7 +39,7 @@ keep { section .rti_fn* };
 
 place at address mem :__ICFEDIT_intvec_start__ {readonly section .intvec};
 
-place in ROM_region  { readonly };
+place in ROM_region  { readonly, block RTT_INIT_FUNC };
 place in RAM_region  { readwrite,
                         block CSTACK, block SVC_STACK, block IRQ_STACK, block FIQ_STACK,
                         block UND_STACK, block ABT_STACK, block HEAP };

+ 2 - 1
bsp/mb9bf618s/rtthread-fm3.icf

@@ -20,6 +20,7 @@ define region RAM_region   = mem:[from __ICFEDIT_region_RAM_start__   to __ICFED
 
 define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
 define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };
+define block RTT_INIT_FUNC with fixed order { readonly section .rti_fn* };
 
 initialize by copy { readwrite };
 do not initialize  { section .noinit };
@@ -29,5 +30,5 @@ keep { section VSymTab };
 keep { section .rti_fn* };
 place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
 
-place in ROM_region   { readonly };
+place in ROM_region   { readonly, block RTT_INIT_FUNC };
 place in RAM_region   { readwrite, block CSTACK, last block HEAP };

+ 2 - 1
bsp/stm32f10x/stm32f10x_flash.icf

@@ -20,6 +20,7 @@ define region RAM_region   = mem:[from __ICFEDIT_region_RAM_start__   to __ICFED
 
 define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
 define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };
+define block RTT_INIT_FUNC with fixed order { readonly section .rti_fn* };
 
 initialize by copy { readwrite };
 do not initialize  { section .noinit };
@@ -29,5 +30,5 @@ keep { section VSymTab };
 keep { section .rti_fn* };
 place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
 
-place in ROM_region   { readonly };
+place in ROM_region   { readonly, block RTT_INIT_FUNC };
 place in RAM_region   { readwrite, block CSTACK, last block HEAP};

+ 2 - 1
bsp/stm32f20x/stm32_rom.icf

@@ -20,6 +20,7 @@ define region RAM_region   = mem:[from __ICFEDIT_region_RAM_start__   to __ICFED
 
 define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
 define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };
+define block RTT_INIT_FUNC with fixed order { readonly section .rti_fn* };
 
 initialize by copy { readwrite };
 //initialize by copy with packing = none { section __DLIB_PERTHREAD }; // Required in a multi-threaded application
@@ -29,6 +30,6 @@ keep { section FSymTab };
 keep { section VSymTab };
 place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
 
-place in ROM_region   { readonly };
+place in ROM_region   { readonly, block RTT_INIT_FUNC };
 place in RAM_region   { readwrite,
                         block CSTACK, block HEAP };

+ 2 - 1
bsp/stm32f40x/stm32f40x_flash.icf

@@ -23,6 +23,7 @@ define region RAM_region   = mem:[from __ICFEDIT_region_RAM_start__   to __ICFED
 
 define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
 define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };
+define block RTT_INIT_FUNC with fixed order { readonly section .rti_fn* };
 
 initialize by copy { readwrite };
 do not initialize  { section .noinit };
@@ -32,5 +33,5 @@ keep { section VSymTab };
 keep { section .rti_fn* };
 place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
 
-place in ROM_region   { readonly };
+place in ROM_region   { readonly, block RTT_INIT_FUNC };
 place in RAM_region   { readwrite, block CSTACK, last block HEAP};

+ 2 - 1
bsp/stm32f411-nucleo/stm32_rom.icf

@@ -20,13 +20,14 @@ define region RAM_region      = mem:[from __ICFEDIT_region_RAM_start__   to __IC
 
 define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
 define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };
+define block RTT_INIT_FUNC with fixed order { readonly section .rti_fn* };
 
 initialize by copy { readwrite };
 do not initialize  { section .noinit };
 
 place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
 
-place in ROM_region   { readonly };
+place in ROM_region   { readonly, block RTT_INIT_FUNC };
 place in RAM_region   { readwrite, block CSTACK, block HEAP };
 keep { section FSymTab };
 keep { section VSymTab };

+ 2 - 1
bsp/stm32f7-disco/rtthread-stm32f7xx.icf

@@ -20,13 +20,14 @@ define region RAM_region      = mem:[from __ICFEDIT_region_RAM_start__   to __IC
 
 define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
 define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };
+define block RTT_INIT_FUNC with fixed order { readonly section .rti_fn* };
 
 initialize by copy { readwrite };
 do not initialize  { section .noinit };
 
 place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };
 
-place in ROM_region   { readonly };
+place in ROM_region   { readonly, block RTT_INIT_FUNC };
 place in RAM_region   { readwrite, block CSTACK, block HEAP };
 keep { section FSymTab };
 keep { section VSymTab };

+ 6 - 1
bsp/tm4c129x/tm4c_rom.icf

@@ -44,11 +44,16 @@ define region SRAM = mem:[from 0x20000000 to 0x2003ffff];
 //
 define block HEAP with alignment = 8, size = 0x00000000 { };
 
+//
+// Define a block for RT-Thread components initialization
+//
+define block RTT_INIT_FUNC with fixed order { readonly section .rti_fn* };
+
 //
 // Indicate that the read/write values should be initialized by copying from
 // flash.
 //
-initialize by copy { readwrite };
+initialize by copy { readwrite , RTT_INIT_FUNC };
 
 //
 // Indicate that the noinit values should be left alone.  This includes the