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

update linker script for components auto initial.

aozima пре 11 година
родитељ
комит
cc8301d0f1

+ 75 - 69
bsp/at91sam9260/at91sam9260_ram.ld

@@ -3,83 +3,89 @@ OUTPUT_ARCH(arm)
 ENTRY(_start)
 SECTIONS
 {
-	. = 0x20000000;
+    . = 0x20000000;
 
-	. = ALIGN(4);
-	.text :	
-	{
-		*(.init)
-		*(.text)
-		*(.gnu.linkonce.t*)
-		
-		/* section information for finsh shell */
-		. = ALIGN(4);
-		__fsymtab_start = .;
-		KEEP(*(FSymTab))
-		__fsymtab_end = .;
-		. = ALIGN(4);
-		__vsymtab_start = .;
-		KEEP(*(VSymTab))
-		__vsymtab_end = .;
-		. = ALIGN(4);	
+    . = ALIGN(4);
+    .text : 
+    {
+        *(.init)
+        *(.text)
+        *(.gnu.linkonce.t*)
+        
+        /* section information for finsh shell */
+        . = ALIGN(4);
+        __fsymtab_start = .;
+        KEEP(*(FSymTab))
+        __fsymtab_end = .;
+        . = ALIGN(4);
+        __vsymtab_start = .;
+        KEEP(*(VSymTab))
+        __vsymtab_end = .;
+        . = ALIGN(4);   
 
-		/* section information for modules */
-		. = ALIGN(4);
-		__rtmsymtab_start = .;
-		KEEP(*(RTMSymTab))
-		__rtmsymtab_end = .;
-	}
+        . = ALIGN(4);
+        __rt_init_start = .;
+        KEEP(*(SORT(.rti_fn*)))
+        __rt_init_end = .;
+        . = ALIGN(4);
 
-	. = ALIGN(4);
-	.rodata : { *(.rodata) *(.rodata.*) *(.gnu.linkonce.r*) *(.eh_frame) }
+        /* section information for modules */
+        . = ALIGN(4);
+        __rtmsymtab_start = .;
+        KEEP(*(RTMSymTab))
+        __rtmsymtab_end = .;
+    }
 
-	. = ALIGN(4);
-	.ctors :
-	{
-		PROVIDE(__ctors_start__ = .);
-		KEEP(*(SORT(.ctors.*)))
-		KEEP(*(.ctors))
-		PROVIDE(__ctors_end__ = .);
-	}
+    . = ALIGN(4);
+    .rodata : { *(.rodata) *(.rodata.*) *(.gnu.linkonce.r*) *(.eh_frame) }
 
-	.dtors :
-	{
-		PROVIDE(__dtors_start__ = .);
-		KEEP(*(SORT(.dtors.*)))
-		KEEP(*(.dtors))
-		PROVIDE(__dtors_end__ = .);
-	}
+    . = ALIGN(4);
+    .ctors :
+    {
+        PROVIDE(__ctors_start__ = .);
+        KEEP(*(SORT(.ctors.*)))
+        KEEP(*(.ctors))
+        PROVIDE(__ctors_end__ = .);
+    }
 
-	. = ALIGN(4);
-	.data :
-	{
-		*(.data)
-		*(.data.*)
-		*(.gnu.linkonce.d*)
-	}
+    .dtors :
+    {
+        PROVIDE(__dtors_start__ = .);
+        KEEP(*(SORT(.dtors.*)))
+        KEEP(*(.dtors))
+        PROVIDE(__dtors_end__ = .);
+    }
 
-	. = ALIGN(4);
-	.nobss : { *(.nobss) }
+    . = ALIGN(4);
+    .data :
+    {
+        *(.data)
+        *(.data.*)
+        *(.gnu.linkonce.d*)
+    }
 
-	. = 0x20300000;
-	. = ALIGN(4);
-	__bss_start = .;
-	.bss : { *(.bss) }
-	__bss_end = .;
+    . = ALIGN(4);
+    .nobss : { *(.nobss) }
 
-	/* stabs debugging sections. */
-	.stab 0 : { *(.stab) }
-	.stabstr 0 : { *(.stabstr) }
-	.stab.excl 0 : { *(.stab.excl) }
-	.stab.exclstr 0 : { *(.stab.exclstr) }
-	.stab.index 0 : { *(.stab.index) }
-	.stab.indexstr 0 : { *(.stab.indexstr) }
-	.comment 0 : { *(.comment) }
-	.debug_abbrev 0 : { *(.debug_abbrev) }
-	.debug_info 0 : { *(.debug_info) }
-	.debug_line 0 : { *(.debug_line) }
-	.debug_pubnames 0 : { *(.debug_pubnames) }
-	.debug_aranges 0 : { *(.debug_aranges) }
+    . = 0x20300000;
+    . = ALIGN(4);
+    __bss_start = .;
+    .bss : { *(.bss) }
+    __bss_end = .;
 
-	_end = .;
+    /* stabs debugging sections. */
+    .stab 0 : { *(.stab) }
+    .stabstr 0 : { *(.stabstr) }
+    .stab.excl 0 : { *(.stab.excl) }
+    .stab.exclstr 0 : { *(.stab.exclstr) }
+    .stab.index 0 : { *(.stab.index) }
+    .stab.indexstr 0 : { *(.stab.indexstr) }
+    .comment 0 : { *(.comment) }
+    .debug_abbrev 0 : { *(.debug_abbrev) }
+    .debug_info 0 : { *(.debug_info) }
+    .debug_line 0 : { *(.debug_line) }
+    .debug_pubnames 0 : { *(.debug_pubnames) }
+    .debug_aranges 0 : { *(.debug_aranges) }
+
+    _end = .;
 }

+ 134 - 127
bsp/efm32/efm32g_rom.ld

@@ -1,8 +1,8 @@
 /***************************************************************************//**
- * @file 		efm32_rom_g.ld
- * @brief 	Linker script for EFM32 gecko
- * 	COPYRIGHT (C) 2012, RT-Thread Development Team
- * @author 	Bernard, onelife
+ * @file        efm32_rom_g.ld
+ * @brief   Linker script for EFM32 gecko
+ *  COPYRIGHT (C) 2012, RT-Thread Development Team
+ * @author  Bernard, onelife
  * @version 1.0
  *******************************************************************************
  * @section License
@@ -10,11 +10,11 @@
  * LICENSE in this distribution or at http://www.rt-thread.org/license/LICENSE
  *******************************************************************************
  * @section Change Logs
- * Date			Author		Notes
- * 2009-10-14 	Bernard 	first version
- * 2010-12-22	onelife		Modify for EFM32
- * 2011-07-06 	onelife 	Modify to make use the start code in libraries
- * 2012-05-15	onelife		Modified to compatible with CMSIS v3
+ * Date         Author      Notes
+ * 2009-10-14   Bernard     first version
+ * 2010-12-22   onelife     Modify for EFM32
+ * 2011-07-06   onelife     Modify to make use the start code in libraries
+ * 2012-05-15   onelife     Modified to compatible with CMSIS v3
  ******************************************************************************/
 MEMORY
 {
@@ -53,122 +53,129 @@ ENTRY(Reset_Handler)
 
 SECTIONS
 {
-	.text :
-	{
-		KEEP(*(.isr_vector))
-		*(.text*)
-
-		KEEP(*(.init))
-		KEEP(*(.fini))
-
-		/* .ctors */
-		*crtbegin.o(.ctors)
-		*crtbegin?.o(.ctors)
-		*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
-		*(SORT(.ctors.*))
-		*(.ctors)
-
-		/* .dtors */
- 		*crtbegin.o(.dtors)
- 		*crtbegin?.o(.dtors)
- 		*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
- 		*(SORT(.dtors.*))
- 		*(.dtors)
-
-		*(.rodata*)
-
-		KEEP(*(.eh_frame*))
-
-		/* section information for finsh shell */
-		. = ALIGN(4);
-		__fsymtab_start = .;
-		KEEP(*(FSymTab))
-		__fsymtab_end = .;
-		. = ALIGN(4);
-		__vsymtab_start = .;
-		KEEP(*(VSymTab))
-		__vsymtab_end = .;
-	} > FLASH = 0
-
-	.ARM.extab :
-	{
-		*(.ARM.extab* .gnu.linkonce.armextab.*)
-	} > FLASH
-
-	__exidx_start = .;
-	.ARM.exidx :
-	{
-		*(.ARM.exidx* .gnu.linkonce.armexidx.*)
-	} > FLASH
-	__exidx_end = .;
-
-	__etext = .;
-
-	.data : AT (__etext)
-	{
-		__data_start__ = .;
-		*(vtable)
-		*(.data*)
-		*(.ram)
-
-		. = ALIGN(4);
-		/* preinit data */
-		PROVIDE_HIDDEN (__preinit_array_start = .);
-		KEEP(*(.preinit_array))
-		PROVIDE_HIDDEN (__preinit_array_end = .);
-
-		. = ALIGN(4);
-		/* init data */
-		PROVIDE_HIDDEN (__init_array_start = .);
-		KEEP(*(SORT(.init_array.*)))
-		KEEP(*(.init_array))
-		PROVIDE_HIDDEN (__init_array_end = .);
-
-
-		. = ALIGN(4);
-		/* finit data */
-		PROVIDE_HIDDEN (__fini_array_start = .);
-		KEEP(*(SORT(.fini_array.*)))
-		KEEP(*(.fini_array))
-		PROVIDE_HIDDEN (__fini_array_end = .);
-
-		. = ALIGN(4);
-		/* All data end */
-		__data_end__ = .;
-
-	} > RAM
-
-	.bss :
-	{
-		__bss_start__ = .;
-		*(.bss*)
-		*(COMMON)
-		__bss_end__ = .;
-	} > RAM
-
-	.heap :
-	{
-		__end__ = .;
-		end = __end__;
-		_end = __end__;
-		*(.heap*)
-		__HeapLimit = .;
-	} > RAM
-
-	/* .stack_dummy section doesn't contains any symbols. It is only
-	 * used for linker to calculate size of stack sections, and assign
-	 * values to stack symbols later */
-	.stack_dummy :
-	{
-		*(.stack)
-	} > RAM
-
-	/* Set stack top to end of RAM, and stack limit move down by
-	 * size of stack_dummy section */
-	__StackTop = ORIGIN(RAM) + LENGTH(RAM);
-	__StackLimit = __StackTop - SIZEOF(.stack_dummy);
-	PROVIDE(__stack = __StackTop);
-
-	/* Check if data + heap + stack exceeds RAM limit */
-	ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
+    .text :
+    {
+        KEEP(*(.isr_vector))
+        *(.text*)
+
+        KEEP(*(.init))
+        KEEP(*(.fini))
+
+        /* .ctors */
+        *crtbegin.o(.ctors)
+        *crtbegin?.o(.ctors)
+        *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
+        *(SORT(.ctors.*))
+        *(.ctors)
+
+        /* .dtors */
+        *crtbegin.o(.dtors)
+        *crtbegin?.o(.dtors)
+        *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
+        *(SORT(.dtors.*))
+        *(.dtors)
+
+        *(.rodata*)
+
+        KEEP(*(.eh_frame*))
+
+        /* section information for finsh shell */
+        . = ALIGN(4);
+        __fsymtab_start = .;
+        KEEP(*(FSymTab))
+        __fsymtab_end = .;
+        . = ALIGN(4);
+        __vsymtab_start = .;
+        KEEP(*(VSymTab))
+        __vsymtab_end = .;
+
+        . = ALIGN(4);
+        __rt_init_start = .;
+        KEEP(*(SORT(.rti_fn*)))
+        __rt_init_end = .;
+        . = ALIGN(4);
+
+    } > FLASH = 0
+
+    .ARM.extab :
+    {
+        *(.ARM.extab* .gnu.linkonce.armextab.*)
+    } > FLASH
+
+    __exidx_start = .;
+    .ARM.exidx :
+    {
+        *(.ARM.exidx* .gnu.linkonce.armexidx.*)
+    } > FLASH
+    __exidx_end = .;
+
+    __etext = .;
+
+    .data : AT (__etext)
+    {
+        __data_start__ = .;
+        *(vtable)
+        *(.data*)
+        *(.ram)
+
+        . = ALIGN(4);
+        /* preinit data */
+        PROVIDE_HIDDEN (__preinit_array_start = .);
+        KEEP(*(.preinit_array))
+        PROVIDE_HIDDEN (__preinit_array_end = .);
+
+        . = ALIGN(4);
+        /* init data */
+        PROVIDE_HIDDEN (__init_array_start = .);
+        KEEP(*(SORT(.init_array.*)))
+        KEEP(*(.init_array))
+        PROVIDE_HIDDEN (__init_array_end = .);
+
+
+        . = ALIGN(4);
+        /* finit data */
+        PROVIDE_HIDDEN (__fini_array_start = .);
+        KEEP(*(SORT(.fini_array.*)))
+        KEEP(*(.fini_array))
+        PROVIDE_HIDDEN (__fini_array_end = .);
+
+        . = ALIGN(4);
+        /* All data end */
+        __data_end__ = .;
+
+    } > RAM
+
+    .bss :
+    {
+        __bss_start__ = .;
+        *(.bss*)
+        *(COMMON)
+        __bss_end__ = .;
+    } > RAM
+
+    .heap :
+    {
+        __end__ = .;
+        end = __end__;
+        _end = __end__;
+        *(.heap*)
+        __HeapLimit = .;
+    } > RAM
+
+    /* .stack_dummy section doesn't contains any symbols. It is only
+     * used for linker to calculate size of stack sections, and assign
+     * values to stack symbols later */
+    .stack_dummy :
+    {
+        *(.stack)
+    } > RAM
+
+    /* Set stack top to end of RAM, and stack limit move down by
+     * size of stack_dummy section */
+    __StackTop = ORIGIN(RAM) + LENGTH(RAM);
+    __StackLimit = __StackTop - SIZEOF(.stack_dummy);
+    PROVIDE(__stack = __StackTop);
+
+    /* Check if data + heap + stack exceeds RAM limit */
+    ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack")
 }

+ 6 - 0
bsp/lm3s8962/lm3s_rom.ld

@@ -37,6 +37,12 @@ SECTIONS
         __vsymtab_end = .;
         . = ALIGN(4);
 
+        . = ALIGN(4);
+        __rt_init_start = .;
+        KEEP(*(SORT(.rti_fn*)))
+        __rt_init_end = .;
+        . = ALIGN(4);
+
         _etext = .;
     } > CODE = 0
 

+ 6 - 0
bsp/lm3s9b9x/lm3s_rom.ld

@@ -37,6 +37,12 @@ SECTIONS
         __vsymtab_end = .;
         . = ALIGN(4);
 
+        . = ALIGN(4);
+        __rt_init_start = .;
+        KEEP(*(SORT(.rti_fn*)))
+        __rt_init_end = .;
+        . = ALIGN(4);
+
         _etext = .;
     } > CODE = 0
 

+ 7 - 1
bsp/lm4f232/lm4f_rom.ld

@@ -50,7 +50,13 @@ SECTIONS
         __vsymtab_end = .;
         . = ALIGN(4);
 
-	} > FLASH
+        . = ALIGN(4);
+        __rt_init_start = .;
+        KEEP(*(SORT(.rti_fn*)))
+        __rt_init_end = .;
+        . = ALIGN(4);
+
+    } > FLASH
 
     .data : AT(ADDR(.text) + SIZEOF(.text))
     {

+ 2 - 1
bsp/lpc176x/rtthread-lpc17xx.ld

@@ -36,9 +36,10 @@ SECTIONS
         __vsymtab_start = .;
         KEEP(*(VSymTab))
         __vsymtab_end = .;
+
         . = ALIGN(4);
         __rt_init_start = .;
-        KEEP(*(.rti_fn*))
+        KEEP(*(SORT(.rti_fn*)))
         __rt_init_end = .;
         . = ALIGN(4);
 

+ 6 - 0
bsp/lpc178x/rtthread-lpc178x.ld

@@ -38,6 +38,12 @@ SECTIONS
         __vsymtab_end = .;
         . = ALIGN(4);
 
+        . = ALIGN(4);
+        __rt_init_start = .;
+        KEEP(*(SORT(.rti_fn*)))
+        __rt_init_end = .;
+        . = ALIGN(4);
+
         . = ALIGN(4);
         _etext = .;
     } > CODE = 0

+ 86 - 80
bsp/lpc2148/lpc2148_rom.ld

@@ -4,8 +4,8 @@ OUTPUT_ARCH(arm)
 
 MEMORY
 {
-	CODE (rx) : ORIGIN = 0x00000000, LENGTH = 512k /* 512KB flash */
-	DATA (rw) : ORIGIN = 0x40000000, LENGTH =  32k /* 32K sram */
+    CODE (rx) : ORIGIN = 0x00000000, LENGTH = 512k /* 512KB flash */
+    DATA (rw) : ORIGIN = 0x40000000, LENGTH =  32k /* 32K sram */
 }
 
 ENTRY(_start)
@@ -18,49 +18,55 @@ _svc_tack_size = 0x400;
 
 SECTIONS
 {
-	. = 0;
-
-	. = ALIGN(4);
-	.text :	
-	{
-		*(.init)
-		*(.text)
-		*(.rodata)
-		*(.rodata*)
-		*(.glue_7)
-		*(.glue_7t)
-
-		/* section information for finsh shell */
-		. = ALIGN(4);
-		__fsymtab_start = .;
-		KEEP(*(FSymTab))
-		__fsymtab_end = .;
-		. = ALIGN(4);
-		__vsymtab_start = .;
-		KEEP(*(VSymTab))
-		__vsymtab_end = .;
-		. = ALIGN(4);
-
-	} >CODE
-
-	. = ALIGN(4);
-	.ctors :
-	{
-		PROVIDE(__ctors_start__ = .);
-		KEEP(*(SORT(.ctors.*)))
-		KEEP(*(.ctors))
-		PROVIDE(__ctors_end__ = .);
-	} > CODE
-
-	.dtors :
-	{
-		PROVIDE(__dtors_start__ = .);
-		KEEP(*(SORT(.dtors.*)))
-		KEEP(*(.dtors))
-		PROVIDE(__dtors_end__ = .);
-	} > CODE
-
-	__end_of_text__ = .;
+    . = 0;
+
+    . = ALIGN(4);
+    .text : 
+    {
+        *(.init)
+        *(.text)
+        *(.rodata)
+        *(.rodata*)
+        *(.glue_7)
+        *(.glue_7t)
+
+        /* section information for finsh shell */
+        . = ALIGN(4);
+        __fsymtab_start = .;
+        KEEP(*(FSymTab))
+        __fsymtab_end = .;
+        . = ALIGN(4);
+        __vsymtab_start = .;
+        KEEP(*(VSymTab))
+        __vsymtab_end = .;
+        . = ALIGN(4);
+
+        . = ALIGN(4);
+        __rt_init_start = .;
+        KEEP(*(SORT(.rti_fn*)))
+        __rt_init_end = .;
+        . = ALIGN(4);
+
+    } >CODE
+
+    . = ALIGN(4);
+    .ctors :
+    {
+        PROVIDE(__ctors_start__ = .);
+        KEEP(*(SORT(.ctors.*)))
+        KEEP(*(.ctors))
+        PROVIDE(__ctors_end__ = .);
+    } > CODE
+
+    .dtors :
+    {
+        PROVIDE(__dtors_start__ = .);
+        KEEP(*(SORT(.dtors.*)))
+        KEEP(*(.dtors))
+        PROVIDE(__dtors_end__ = .);
+    } > CODE
+
+    __end_of_text__ = .;
 
     /* .ARM.exidx is sorted, so has to go in its own output section.  */
     __exidx_start = .;
@@ -73,7 +79,7 @@ SECTIONS
     } > CODE
     __exidx_end = .;
 
-	/* .data section which is used for initialized data */
+    /* .data section which is used for initialized data */
     .data : AT (_sidata)
     {
         . = ALIGN(4);
@@ -88,36 +94,36 @@ SECTIONS
         /* This is used by the startup in order to initialize the .data secion */
         _edata = . ;
     } >DATA
-	__data_end = .;
-
-	.noinit :
-	{
-	    *(.bss.noinit)
-	} > DATA
-
-	.stack : 
-	{
-		. = ALIGN(4);
-	    _undefined_stack_base = .;
-	    . = . + _undefined_tack_size;
-	    _undefined_stack_top = .;
-		
-	    _abort_stack_base = .;
-	    . = . + _abort_tack_size;
-	    _abort_stack_top = .;
-		
-	    _fiq_stack_base = .;
-	    . = . + _fiq_tack_size;
-	    _fiq_stack_top = .;
-		
-	    _irq_stack_base = .;
-	    . = . + _irq_tack_size;
-	    _irq_stack_top = .;
-		
-	    _svc_stack_base = .;
-	    . = . + _svc_tack_size;
-	    _svc_stack_top = .;
-	} >DATA
+    __data_end = .;
+
+    .noinit :
+    {
+        *(.bss.noinit)
+    } > DATA
+
+    .stack : 
+    {
+        . = ALIGN(4);
+        _undefined_stack_base = .;
+        . = . + _undefined_tack_size;
+        _undefined_stack_top = .;
+        
+        _abort_stack_base = .;
+        . = . + _abort_tack_size;
+        _abort_stack_top = .;
+        
+        _fiq_stack_base = .;
+        . = . + _fiq_tack_size;
+        _fiq_stack_top = .;
+        
+        _irq_stack_base = .;
+        . = . + _irq_tack_size;
+        _irq_stack_top = .;
+        
+        _svc_stack_base = .;
+        . = . + _svc_tack_size;
+        _svc_stack_top = .;
+    } >DATA
 
     __bss_start = .;
     .bss :
@@ -135,8 +141,8 @@ SECTIONS
     } > DATA
     __bss_end = .;
 
-	/* Align here to ensure that the .bss section occupies space up to
-	_end.  Align after .bss to ensure correct alignment even if the
-	.bss section disappears because there are no input sections.  */
-	. = ALIGN(32 / 8);
+    /* Align here to ensure that the .bss section occupies space up to
+    _end.  Align after .bss to ensure correct alignment even if the
+    .bss section disappears because there are no input sections.  */
+    . = ALIGN(32 / 8);
 }

+ 29 - 23
bsp/lpc2478/lpc2478_rom.lds

@@ -15,8 +15,8 @@ SECTIONS
 {
     .text :
     {
-		*(.init)
-		*(.text)
+        *(.init)
+        *(.text)
         *(.text.*)                      /* remaining code */
         *(.rodata)                      /* read-only data (constants) */
         *(.rodata*)
@@ -35,26 +35,32 @@ SECTIONS
         __vsymtab_end = .;
         . = ALIGN(4);
 
+        . = ALIGN(4);
+        __rt_init_start = .;
+        KEEP(*(SORT(.rti_fn*)))
+        __rt_init_end = .;
+        . = ALIGN(4);
+
         . = ALIGN(4);
         _etext = .;
     } > CODE = 0
 
-	. = ALIGN(4);
-	.ctors :
-	{
-		PROVIDE(__ctors_start__ = .);
-		KEEP(*(SORT(.ctors.*)))
-		KEEP(*(.ctors))
-		PROVIDE(__ctors_end__ = .);
-	} > CODE
-
-	.dtors :
-	{
-		PROVIDE(__dtors_start__ = .);
-		KEEP(*(SORT(.dtors.*)))
-		KEEP(*(.dtors))
-		PROVIDE(__dtors_end__ = .);
-	} > CODE
+    . = ALIGN(4);
+    .ctors :
+    {
+        PROVIDE(__ctors_start__ = .);
+        KEEP(*(SORT(.ctors.*)))
+        KEEP(*(.ctors))
+        PROVIDE(__ctors_end__ = .);
+    } > CODE
+
+    .dtors :
+    {
+        PROVIDE(__dtors_start__ = .);
+        KEEP(*(SORT(.dtors.*)))
+        KEEP(*(.dtors))
+        PROVIDE(__dtors_end__ = .);
+    } > CODE
 
     /* .ARM.exidx is sorted, so has to go in its own output section.  */
     __exidx_start = .;
@@ -82,12 +88,12 @@ SECTIONS
         /* This is used by the startup in order to initialize the .data secion */
         _edata = . ;
     } >DATA
-	__data_end = .;
+    __data_end = .;
 
-	.noinit :
-	{
-	    *(.bss.noinit)
-	} > DATA
+    .noinit :
+    {
+        *(.bss.noinit)
+    } > DATA
 
     __bss_start = .;
     .bss :

+ 6 - 0
bsp/mb9bf500r/fm3_rom.ld

@@ -32,6 +32,12 @@ SECTIONS
         __vsymtab_end = .;
         . = ALIGN(4);
 
+        . = ALIGN(4);
+        __rt_init_start = .;
+        KEEP(*(SORT(.rti_fn*)))
+        __rt_init_end = .;
+        . = ALIGN(4);
+
         . = ALIGN(4);
         _etext = .;
     } > CODE = 0

+ 106 - 97
bsp/mb9bf506r/rtthread-mb9bf506.ld

@@ -41,76 +41,76 @@ PROVIDE(__cs3_heap_end = __cs3_region_start_ram + __cs3_region_size_ram);
 
 SECTIONS
 {
-  .text :
-  {
-    CREATE_OBJECT_SYMBOLS
-    __cs3_region_start_rom = .;
-    *(.cs3.region-head.rom)
-    __cs3_interrupt_vector = __cs3_interrupt_vector_cortex_m;
-    *(.cs3.interrupt_vector)
-    /* Make sure we pulled in an interrupt vector.  */
-    ASSERT (. != __cs3_interrupt_vector_cortex_m, "No interrupt vector");
-    *(.rom)
-    *(.rom.b)
-
-    __cs3_reset = __cs3_reset_cortex_m;
-    *(.cs3.reset)
-    /* Make sure we pulled in some reset code.  */
-    ASSERT (. != __cs3_reset, "No reset code");
-
-    *(.text .text.* .gnu.linkonce.t.*)
-    *(.plt)
-    *(.gnu.warning)
-    *(.glue_7t) *(.glue_7) *(.vfp11_veneer)
-
-    *(.rodata .rodata.* .gnu.linkonce.r.*)
-
-    *(.ARM.extab* .gnu.linkonce.armextab.*)
-    *(.gcc_except_table)
-    *(.eh_frame_hdr)
-    *(.eh_frame)
-
-    . = ALIGN(4);
-    KEEP(*(.init))
-
-    . = ALIGN(4);
-    __preinit_array_start = .;
-    KEEP (*(.preinit_array))
-    __preinit_array_end = .;
-
-    . = ALIGN(4);
-    __init_array_start = .;
-    KEEP (*(SORT(.init_array.*)))
-    KEEP (*(.init_array))
-    __init_array_end = .;
-
-    . = ALIGN(0x4);
-    KEEP (*crtbegin.o(.ctors))
-    KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
-    KEEP (*(SORT(.ctors.*)))
-    KEEP (*crtend.o(.ctors))
-
-    . = ALIGN(4);
-    KEEP(*(.fini))
-
-    . = ALIGN(4);
-    __fini_array_start = .;
-    KEEP (*(.fini_array))
-    KEEP (*(SORT(.fini_array.*)))
-    __fini_array_end = .;
-
-    KEEP (*crtbegin.o(.dtors))
-    KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
-    KEEP (*(SORT(.dtors.*)))
-    KEEP (*crtend.o(.dtors))
-
-    . = ALIGN(4);
-    __cs3_regions = .;
-    LONG (0)
-    LONG (__cs3_region_init_ram)
-    LONG (__cs3_region_start_ram)
-    LONG (__cs3_region_init_size_ram)
-    LONG (__cs3_region_zero_size_ram)
+    .text :
+    {
+        CREATE_OBJECT_SYMBOLS
+        __cs3_region_start_rom = .;
+        *(.cs3.region-head.rom)
+        __cs3_interrupt_vector = __cs3_interrupt_vector_cortex_m;
+        *(.cs3.interrupt_vector)
+        /* Make sure we pulled in an interrupt vector.  */
+        ASSERT (. != __cs3_interrupt_vector_cortex_m, "No interrupt vector");
+        *(.rom)
+        *(.rom.b)
+
+        __cs3_reset = __cs3_reset_cortex_m;
+        *(.cs3.reset)
+        /* Make sure we pulled in some reset code.  */
+        ASSERT (. != __cs3_reset, "No reset code");
+
+        *(.text .text.* .gnu.linkonce.t.*)
+        *(.plt)
+        *(.gnu.warning)
+        *(.glue_7t) *(.glue_7) *(.vfp11_veneer)
+
+        *(.rodata .rodata.* .gnu.linkonce.r.*)
+
+        *(.ARM.extab* .gnu.linkonce.armextab.*)
+        *(.gcc_except_table)
+        *(.eh_frame_hdr)
+        *(.eh_frame)
+
+        . = ALIGN(4);
+        KEEP(*(.init))
+
+        . = ALIGN(4);
+        __preinit_array_start = .;
+        KEEP (*(.preinit_array))
+        __preinit_array_end = .;
+
+        . = ALIGN(4);
+        __init_array_start = .;
+        KEEP (*(SORT(.init_array.*)))
+        KEEP (*(.init_array))
+        __init_array_end = .;
+
+        . = ALIGN(0x4);
+        KEEP (*crtbegin.o(.ctors))
+        KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
+        KEEP (*(SORT(.ctors.*)))
+        KEEP (*crtend.o(.ctors))
+
+        . = ALIGN(4);
+        KEEP(*(.fini))
+
+        . = ALIGN(4);
+        __fini_array_start = .;
+        KEEP (*(.fini_array))
+        KEEP (*(SORT(.fini_array.*)))
+        __fini_array_end = .;
+
+        KEEP (*crtbegin.o(.dtors))
+        KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
+        KEEP (*(SORT(.dtors.*)))
+        KEEP (*crtend.o(.dtors))
+
+        . = ALIGN(4);
+        __cs3_regions = .;
+        LONG (0)
+        LONG (__cs3_region_init_ram)
+        LONG (__cs3_region_start_ram)
+        LONG (__cs3_region_init_size_ram)
+        LONG (__cs3_region_zero_size_ram)
 
         /* section information for finsh shell */
         . = ALIGN(4);
@@ -122,35 +122,43 @@ SECTIONS
         KEEP(*(VSymTab))
         __vsymtab_end = .;
         . = ALIGN(4);
-  }
 
-  /* .ARM.exidx is sorted, so has to go in its own output section.  */
-  __exidx_start = .;
-  .ARM.exidx :
-  {
-    *(.ARM.exidx* .gnu.linkonce.armexidx.*)
-  } >rom
-  __exidx_end = .;
-  .text.align :
-  {
-    . = ALIGN(8);
-    _etext = .;
-  } >rom
-  __cs3_region_size_rom = LENGTH(rom);
-  __cs3_region_num = 1;
+        . = ALIGN(4);
+        __rt_init_start = .;
+        KEEP(*(SORT(.rti_fn*)))
+        __rt_init_end = .;
+        . = ALIGN(4);
+
+    }
+
+    /* .ARM.exidx is sorted, so has to go in its own output section.  */
+    __exidx_start = .;
+    .ARM.exidx :
+    {
+      *(.ARM.exidx* .gnu.linkonce.armexidx.*)
+    } >rom
+    __exidx_end = .;
+    .text.align :
+    {
+      . = ALIGN(8);
+      _etext = .;
+    } >rom
+    __cs3_region_size_rom = LENGTH(rom);
+    __cs3_region_num = 1;
+
+    .data :
+    {
+        __cs3_region_start_ram = .;
+        *(.cs3.region-head.ram)
+        KEEP(*(.jcr))
+        *(.got.plt) *(.got)
+        *(.shdata)
+        *(.data .data.* .gnu.linkonce.d.*)
+        *(.ram)
+        . = ALIGN (8);
+        _edata = .;
+    } >ram AT>rom
 
-  .data :
-  {
-    __cs3_region_start_ram = .;
-    *(.cs3.region-head.ram)
-    KEEP(*(.jcr))
-    *(.got.plt) *(.got)
-    *(.shdata)
-    *(.data .data.* .gnu.linkonce.d.*)
-    *(.ram)
-    . = ALIGN (8);
-    _edata = .;
-  } >ram AT>rom
   .bss :
   {
     *(.shbss)
@@ -161,6 +169,7 @@ SECTIONS
     _end = .;
     __end = .;
   } >ram AT>rom
+
   .heap :
   {
     *(.heap)

+ 75 - 69
bsp/mini2440/mini2440_ram.ld

@@ -3,83 +3,89 @@ OUTPUT_ARCH(arm)
 ENTRY(_start)
 SECTIONS
 {
-	. = 0x30000000;
+    . = 0x30000000;
 
-	. = ALIGN(4);
-	.text :	
-	{
-		*(.init)
-		*(.text)
-		*(.gnu.linkonce.t*)
-		
-		/* section information for finsh shell */
-		. = ALIGN(4);
-		__fsymtab_start = .;
-		KEEP(*(FSymTab))
-		__fsymtab_end = .;
-		. = ALIGN(4);
-		__vsymtab_start = .;
-		KEEP(*(VSymTab))
-		__vsymtab_end = .;
-		. = ALIGN(4);	
+    . = ALIGN(4);
+    .text : 
+    {
+        *(.init)
+        *(.text)
+        *(.gnu.linkonce.t*)
+        
+        /* section information for finsh shell */
+        . = ALIGN(4);
+        __fsymtab_start = .;
+        KEEP(*(FSymTab))
+        __fsymtab_end = .;
+        . = ALIGN(4);
+        __vsymtab_start = .;
+        KEEP(*(VSymTab))
+        __vsymtab_end = .;
+        . = ALIGN(4);   
 
-		/* section information for modules */
-		. = ALIGN(4);
-		__rtmsymtab_start = .;
-		KEEP(*(RTMSymTab))
-		__rtmsymtab_end = .;
-	}
+        . = ALIGN(4);
+        __rt_init_start = .;
+        KEEP(*(SORT(.rti_fn*)))
+        __rt_init_end = .;
+        . = ALIGN(4);
 
-	. = ALIGN(4);
-	.rodata : { *(.rodata) *(.rodata.*) *(.gnu.linkonce.r*) *(.eh_frame) }
+        /* section information for modules */
+        . = ALIGN(4);
+        __rtmsymtab_start = .;
+        KEEP(*(RTMSymTab))
+        __rtmsymtab_end = .;
+    }
 
-	. = ALIGN(4);
-	.ctors :
-	{
-		PROVIDE(__ctors_start__ = .);
-		KEEP(*(SORT(.ctors.*)))
-		KEEP(*(.ctors))
-		PROVIDE(__ctors_end__ = .);
-	}
+    . = ALIGN(4);
+    .rodata : { *(.rodata) *(.rodata.*) *(.gnu.linkonce.r*) *(.eh_frame) }
 
-	.dtors :
-	{
-		PROVIDE(__dtors_start__ = .);
-		KEEP(*(SORT(.dtors.*)))
-		KEEP(*(.dtors))
-		PROVIDE(__dtors_end__ = .);
-	}
+    . = ALIGN(4);
+    .ctors :
+    {
+        PROVIDE(__ctors_start__ = .);
+        KEEP(*(SORT(.ctors.*)))
+        KEEP(*(.ctors))
+        PROVIDE(__ctors_end__ = .);
+    }
 
-	. = ALIGN(4);
-	.data :
-	{
-		*(.data)
-		*(.data.*)
-		*(.gnu.linkonce.d*)
-	}
+    .dtors :
+    {
+        PROVIDE(__dtors_start__ = .);
+        KEEP(*(SORT(.dtors.*)))
+        KEEP(*(.dtors))
+        PROVIDE(__dtors_end__ = .);
+    }
 
-	. = ALIGN(4);
-	.nobss : { *(.nobss) }
+    . = ALIGN(4);
+    .data :
+    {
+        *(.data)
+        *(.data.*)
+        *(.gnu.linkonce.d*)
+    }
 
-	. = 0x30200000;
-	. = ALIGN(4);
-	__bss_start = .;
-	.bss : { *(.bss) }
-	__bss_end = .;
+    . = ALIGN(4);
+    .nobss : { *(.nobss) }
 
-	/* stabs debugging sections. */
-	.stab 0 : { *(.stab) }
-	.stabstr 0 : { *(.stabstr) }
-	.stab.excl 0 : { *(.stab.excl) }
-	.stab.exclstr 0 : { *(.stab.exclstr) }
-	.stab.index 0 : { *(.stab.index) }
-	.stab.indexstr 0 : { *(.stab.indexstr) }
-	.comment 0 : { *(.comment) }
-	.debug_abbrev 0 : { *(.debug_abbrev) }
-	.debug_info 0 : { *(.debug_info) }
-	.debug_line 0 : { *(.debug_line) }
-	.debug_pubnames 0 : { *(.debug_pubnames) }
-	.debug_aranges 0 : { *(.debug_aranges) }
+    . = 0x30200000;
+    . = ALIGN(4);
+    __bss_start = .;
+    .bss : { *(.bss) }
+    __bss_end = .;
 
-	_end = .;
+    /* stabs debugging sections. */
+    .stab 0 : { *(.stab) }
+    .stabstr 0 : { *(.stabstr) }
+    .stab.excl 0 : { *(.stab.excl) }
+    .stab.exclstr 0 : { *(.stab.exclstr) }
+    .stab.index 0 : { *(.stab.index) }
+    .stab.indexstr 0 : { *(.stab.indexstr) }
+    .comment 0 : { *(.comment) }
+    .debug_abbrev 0 : { *(.debug_abbrev) }
+    .debug_info 0 : { *(.debug_info) }
+    .debug_line 0 : { *(.debug_line) }
+    .debug_pubnames 0 : { *(.debug_pubnames) }
+    .debug_aranges 0 : { *(.debug_aranges) }
+
+    _end = .;
 }

+ 49 - 43
bsp/sam7x/sam7x_rom.ld

@@ -2,48 +2,54 @@ OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
 OUTPUT_ARCH(arm)
 MEMORY
 {
-	CODE (rx) : ORIGIN = 0x00100000, LENGTH = 0x00040000
-	/* DATA (rw) : ORIGIN = 0x00200000, LENGTH = 0x00010000 */
-	DATA (rw) : ORIGIN = 0x00204000, LENGTH = 0x0000C000
+    CODE (rx) : ORIGIN = 0x00100000, LENGTH = 0x00040000
+    /* DATA (rw) : ORIGIN = 0x00200000, LENGTH = 0x00010000 */
+    DATA (rw) : ORIGIN = 0x00204000, LENGTH = 0x0000C000
 }
 ENTRY(_start)
 SECTIONS
 {
-	.text :
-	{
-		*(.init)
-		*(.text)
-		*(.rodata)
-
-		/* section information for finsh shell */
-		. = ALIGN(4);
-		__fsymtab_start = .;
-		KEEP(*(FSymTab))
-		__fsymtab_end = .;
-		. = ALIGN(4);
-		__vsymtab_start = .;
-		KEEP(*(VSymTab))
-		__vsymtab_end = .;
-		. = ALIGN(4);
-
-	} > CODE = 0
-
-	. = ALIGN(4);
-	.ctors :
-	{
-		PROVIDE(__ctors_start__ = .);
-		KEEP(*(SORT(.ctors.*)))
-		KEEP(*(.ctors))
-		PROVIDE(__ctors_end__ = .);
-	} > CODE
-
-	.dtors :
-	{
-		PROVIDE(__dtors_start__ = .);
-		KEEP(*(SORT(.dtors.*)))
-		KEEP(*(.dtors))
-		PROVIDE(__dtors_end__ = .);
-	} > CODE
+    .text :
+    {
+        *(.init)
+        *(.text)
+        *(.rodata)
+
+        /* section information for finsh shell */
+        . = ALIGN(4);
+        __fsymtab_start = .;
+        KEEP(*(FSymTab))
+        __fsymtab_end = .;
+        . = ALIGN(4);
+        __vsymtab_start = .;
+        KEEP(*(VSymTab))
+        __vsymtab_end = .;
+        . = ALIGN(4);
+
+        . = ALIGN(4);
+        __rt_init_start = .;
+        KEEP(*(SORT(.rti_fn*)))
+        __rt_init_end = .;
+        . = ALIGN(4);
+
+    } > CODE = 0
+
+    . = ALIGN(4);
+    .ctors :
+    {
+        PROVIDE(__ctors_start__ = .);
+        KEEP(*(SORT(.ctors.*)))
+        KEEP(*(.ctors))
+        PROVIDE(__ctors_end__ = .);
+    } > CODE
+
+    .dtors :
+    {
+        PROVIDE(__dtors_start__ = .);
+        KEEP(*(SORT(.dtors.*)))
+        KEEP(*(.dtors))
+        PROVIDE(__dtors_end__ = .);
+    } > CODE
 
     /* .ARM.exidx is sorted, so has to go in its own output section.  */
     __exidx_start = .;
@@ -71,12 +77,12 @@ SECTIONS
         /* This is used by the startup in order to initialize the .data secion */
         _edata = . ;
     } >DATA
-	__data_end = .;
+    __data_end = .;
 
-	.noinit :
-	{
-	    *(.bss.noinit)
-	} > DATA
+    .noinit :
+    {
+        *(.bss.noinit)
+    } > DATA
 
     __bss_start = .;
     .bss :

+ 13 - 6
bsp/stm32f0x/stm32_rom.ld

@@ -38,6 +38,13 @@ SECTIONS
         __vsymtab_end = .;
         . = ALIGN(4);
 
+        /* section information for initial. */
+        . = ALIGN(4);
+        __rt_init_start = .;
+        KEEP(*(SORT(.rti_fn*)))
+        __rt_init_end = .;
+        . = ALIGN(4);
+
         . = ALIGN(4);
         _etext = .;
     } > CODE = 0
@@ -70,12 +77,12 @@ SECTIONS
         _edata = . ;
     } >DATA
 
-	.stack : 
-	{
-		. = . + _system_stack_size;
-		. = ALIGN(4);
-		_estack = .;
-	} >DATA
+    .stack : 
+    {
+        . = . + _system_stack_size;
+        . = ALIGN(4);
+        _estack = .;
+    } >DATA
 
     __bss_start = .;
     .bss :

+ 13 - 6
bsp/stm32f107/stm32_rom.ld

@@ -39,6 +39,13 @@ SECTIONS
         __vsymtab_end = .;
         . = ALIGN(4);
 
+        /* section information for initial. */
+        . = ALIGN(4);
+        __rt_init_start = .;
+        KEEP(*(SORT(.rti_fn*)))
+        __rt_init_end = .;
+        . = ALIGN(4);
+
         . = ALIGN(4);
         _etext = .;
     } > CODE = 0
@@ -71,12 +78,12 @@ SECTIONS
         _edata = . ;
     } >DATA
 
-	.stack : 
-	{
-		. = . + _system_stack_size;
-		. = ALIGN(4);
-		_estack = .;
-	} >DATA
+    .stack : 
+    {
+        . = . + _system_stack_size;
+        . = ALIGN(4);
+        _estack = .;
+    } >DATA
 
     __bss_start = .;
     .bss :

+ 13 - 6
bsp/stm32f10x/stm32_rom.ld

@@ -39,6 +39,13 @@ SECTIONS
         __vsymtab_end = .;
         . = ALIGN(4);
 
+        /* section information for initial. */
+        . = ALIGN(4);
+        __rt_init_start = .;
+        KEEP(*(SORT(.rti_fn*)))
+        __rt_init_end = .;
+        . = ALIGN(4);
+
         . = ALIGN(4);
         _etext = .;
     } > CODE = 0
@@ -71,12 +78,12 @@ SECTIONS
         _edata = . ;
     } >DATA
 
-	.stack : 
-	{
-		. = . + _system_stack_size;
-		. = ALIGN(4);
-		_estack = .;
-	} >DATA
+    .stack : 
+    {
+        . = . + _system_stack_size;
+        . = ALIGN(4);
+        _estack = .;
+    } >DATA
 
     __bss_start = .;
     .bss :

+ 14 - 7
bsp/stm32f20x/stm32_rom.ld

@@ -7,7 +7,7 @@
 MEMORY
 {
     CODE (rx) : ORIGIN = 0x08000000, LENGTH = 512k /* 512KB flash */
-    DATA (rw) : ORIGIN = 0x20000000, LENGTH =  128k /* 64K sram */
+    DATA (rw) : ORIGIN = 0x20000000, LENGTH = 128k /* 64K sram */
 }
 ENTRY(Reset_Handler)
 _system_stack_size = 0x100;
@@ -39,6 +39,13 @@ SECTIONS
         __vsymtab_end = .;
         . = ALIGN(4);
 
+        /* section information for initial. */
+        . = ALIGN(4);
+        __rt_init_start = .;
+        KEEP(*(SORT(.rti_fn*)))
+        __rt_init_end = .;
+        . = ALIGN(4);
+
         . = ALIGN(4);
         _etext = .;
     } > CODE = 0
@@ -71,12 +78,12 @@ SECTIONS
         _edata = . ;
     } >DATA
 
-	.stack : 
-	{
-		. = . + _system_stack_size;
-		. = ALIGN(4);
-		_estack = .;
-	} >DATA
+    .stack : 
+    {
+        . = . + _system_stack_size;
+        . = ALIGN(4);
+        _estack = .;
+    } >DATA
 
     __bss_start = .;
     .bss :

+ 13 - 6
bsp/stm32f40x/stm32_rom.ld

@@ -39,6 +39,13 @@ SECTIONS
         __vsymtab_end = .;
         . = ALIGN(4);
 
+        /* section information for initial. */
+        . = ALIGN(4);
+        __rt_init_start = .;
+        KEEP(*(SORT(.rti_fn*)))
+        __rt_init_end = .;
+        . = ALIGN(4);
+
         . = ALIGN(4);
         _etext = .;
     } > CODE = 0
@@ -71,12 +78,12 @@ SECTIONS
         _edata = . ;
     } >DATA
 
-	.stack : 
-	{
-		. = . + _system_stack_size;
-		. = ALIGN(4);
-		_estack = .;
-	} >DATA
+    .stack : 
+    {
+        . = . + _system_stack_size;
+        . = ALIGN(4);
+        _estack = .;
+    } >DATA
 
     __bss_start = .;
     .bss :

+ 6 - 0
bsp/xplorer4330/m4/lpc4330_xplorer_spifi32mb.ld

@@ -38,6 +38,12 @@ SECTIONS
         __vsymtab_end = .;
         . = ALIGN(4);
 
+        . = ALIGN(4);
+        __rt_init_start = .;
+        KEEP(*(SORT(.rti_fn*)))
+        __rt_init_end = .;
+        . = ALIGN(4);
+
         . = ALIGN(4);
         _etext = .;
     } > CODE = 0