diff --git a/bsp/lm3s8962/Libraries/SConscript b/bsp/lm3s8962/Libraries/SConscript index b0631a7d2e20c41bf61803b7f0aa6f3bb1906c82..cb209ba4dfbfd7dead02f8716e67231ca1bbff94 100644 --- a/bsp/lm3s8962/Libraries/SConscript +++ b/bsp/lm3s8962/Libraries/SConscript @@ -4,7 +4,7 @@ from building import * # The set of source files associated with this SConscript file. cwd = GetCurrentDir() -src = Glob('driverlib/*.c') +src = Glob('driverlib/*.c') # cortex-m3 no FPU. if rtconfig.PART_TYPE.startswith('PART_LM4F') != True: @@ -18,9 +18,9 @@ elif rtconfig.CROSS_TOOL == 'keil': elif rtconfig.CROSS_TOOL == 'iar': src += ['startup/iar/start_iar.S'] -CPPPATH = [cwd] - +CPPPATH = [cwd] CPPDEFINES = [rtconfig.PART_TYPE] + group = DefineGroup('Libraries', src, depend = [''], CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES) Return('group') diff --git a/bsp/lm3s8962/SConstruct b/bsp/lm3s8962/SConstruct index 3542c5c40c8c9238ea322f1ea4a7d81f4482e748..c829512b41ad2221e7019c6914c70a655e8fe559 100644 --- a/bsp/lm3s8962/SConstruct +++ b/bsp/lm3s8962/SConstruct @@ -23,7 +23,7 @@ Export('RTT_ROOT') Export('rtconfig') # prepare building environment -objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False) +objs = PrepareBuilding(env, RTT_ROOT) # make a building DoBuilding(TARGET, objs) diff --git a/bsp/lm4f232/Libraries/startup/gcc/start_gcc.c b/bsp/lm4f232/Libraries/startup/gcc/start_gcc.c index b2b9fc6bfb063be611ff462ba9149058295ac0ea..9fb7a18130119438f1c5d6acff6d6efebdc3f18a 100644 --- a/bsp/lm4f232/Libraries/startup/gcc/start_gcc.c +++ b/bsp/lm4f232/Libraries/startup/gcc/start_gcc.c @@ -30,7 +30,7 @@ // Forward declaration of the default fault handlers. // //***************************************************************************** -void ResetISR(void); +void Reset_Handler(void); static void NmiSR(void); static void FaultISR(void); static void IntDefaultHandler(void); @@ -70,9 +70,9 @@ void (* const g_pfnVectors[])(void) = { (void (*)(void))((unsigned long)pulStack + sizeof(pulStack)), // The initial stack pointer - ResetISR, // The reset handler + Reset_Handler, // The reset handler NmiSR, // The NMI handler - HardFault_Handler, // The hard fault handler + HardFault_Handler, // The hard fault handler IntDefaultHandler, // The MPU fault handler IntDefaultHandler, // The bus fault handler IntDefaultHandler, // The usage fault handler @@ -233,10 +233,10 @@ void (* const g_pfnVectors[])(void) = // for the "data" segment resides immediately following the "text" segment. // //***************************************************************************** -extern unsigned long _etext; -extern unsigned long _data; +extern unsigned long _sidata; +extern unsigned long _sdata; extern unsigned long _edata; -extern unsigned long _bss; +extern unsigned long _sbss; extern unsigned long _ebss; //***************************************************************************** @@ -250,15 +250,15 @@ extern unsigned long _ebss; // //***************************************************************************** void -ResetISR(void) +Reset_Handler(void) { unsigned long *pulSrc, *pulDest; // // Copy the data segment initializers from flash to SRAM. // - pulSrc = &_etext; - for(pulDest = &_data; pulDest < &_edata; ) + pulSrc = &_sidata; + for(pulDest = &_sdata; pulDest < &_edata; ) { *pulDest++ = *pulSrc++; } @@ -266,7 +266,7 @@ ResetISR(void) // // Zero fill the bss segment. // - __asm(" ldr r0, =_bss\n" + __asm(" ldr r0, =_sbss\n" " ldr r1, =_ebss\n" " mov r2, #0\n" " .thumb_func\n" diff --git a/bsp/lm4f232/lm4f_rom.ld b/bsp/lm4f232/lm4f_rom.ld index 16bb52b56904d0096deca29841516fa27e70ac3d..b58e8055a0361c5555ff0572029eb38d038fd7ff 100644 --- a/bsp/lm4f232/lm4f_rom.ld +++ b/bsp/lm4f232/lm4f_rom.ld @@ -25,19 +25,26 @@ /* Program Entry, set to mark it as "used" and avoid gc */ MEMORY { - FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00040000 - SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 + CODE (rx) : ORIGIN = 0x00000000, LENGTH = 0x00040000 + DATA (rw) : ORIGIN = 0x10000000, LENGTH = 0x00008000 } +ENTRY(Reset_Handler) +_system_stack_size = 0x200; SECTIONS { .text : { - _text = .; - KEEP(*(.isr_vector)) - *(.text*) + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + *(.text) /* remaining code */ + *(.text.*) /* remaining code */ + *(.rodata) /* read-only data (constants) */ *(.rodata*) - _etext = .; + *(.glue_7) + *(.glue_7t) + *(.gnu.linkonce.t*) /* section information for finsh shell */ . = ALIGN(4); @@ -56,24 +63,108 @@ SECTIONS __rt_init_end = .; . = ALIGN(4); - } > FLASH + PROVIDE(__ctors_start__ = .); + /* old GCC version uses .ctors */ + KEEP(*(SORT(.ctors.*))) + KEEP(*(.ctors)) + /* new GCC version uses .init_array */ + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array)) + PROVIDE(__ctors_end__ = .); + + . = ALIGN(4); + _etext = .; + } > CODE = 0 + + .ARM.extab : + { + *(.ARM.extab*) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _sidata = .; + } > CODE + + /* .data section which is used for initialized data */ + .data : AT (_sidata) + { + . = ALIGN(4); + PROVIDE(__dtors_start__ = .); + KEEP(*(SORT(.dtors.*))) + KEEP(*(.dtors)) + PROVIDE(__dtors_end__ = .); + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _sdata = . ; + + *(.data) + *(.data.*) + *(.gnu.linkonce.d*) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _edata = . ; + } > DATA - .data : AT(ADDR(.text) + SIZEOF(.text)) + .stack : { - _data = .; - *(vtable) - *(.data*) - _edata = .; - } > SRAM + . = . + _system_stack_size; + . = ALIGN(4); + _estack = .; + } >DATA + __bss_start = .; .bss : { - _bss = .; - *(.bss*) + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; + + *(.bss) + *(.bss.*) *(COMMON) - _ebss = .; - } > SRAM + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _ebss = . ; + *(.bss.init) + } > DATA __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) } + /* DWARF debug sections. + * Symbols in the DWARF debugging sections are relative to the beginning + * of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } } diff --git a/bsp/tm4c129x/libraries/startup/startup_gcc.c b/bsp/tm4c129x/libraries/startup/startup_gcc.c index c4815b1ec4be7819c8f30f41dcf74cd33d66d676..9f20837e514ebedf7559eff5b9954c0c7535bc64 100644 --- a/bsp/tm4c129x/libraries/startup/startup_gcc.c +++ b/bsp/tm4c129x/libraries/startup/startup_gcc.c @@ -201,10 +201,10 @@ void (* const g_pfnVectors[])(void) = // for the "data" segment resides immediately following the "text" segment. // //***************************************************************************** -extern uint32_t _ldata; -extern uint32_t _data; +extern uint32_t _sidata; +extern uint32_t _sdata; extern uint32_t _edata; -extern uint32_t _bss; +extern uint32_t _sbss; extern uint32_t _ebss; //***************************************************************************** @@ -225,8 +225,8 @@ ResetISR(void) // // Copy the data segment initializers from flash to SRAM. // - pui32Src = &_ldata; - for(pui32Dest = &_data; pui32Dest < &_edata; ) + pui32Src = &_sidata; + for(pui32Dest = &_sdata; pui32Dest < &_edata; ) { *pui32Dest++ = *pui32Src++; } @@ -234,7 +234,7 @@ ResetISR(void) // // Zero fill the bss segment. // - __asm(" ldr r0, =_bss\n" + __asm(" ldr r0, =_sbss\n" " ldr r1, =_ebss\n" " mov r2, #0\n" " .thumb_func\n" diff --git a/bsp/tm4c129x/tm4c_rom.ld b/bsp/tm4c129x/tm4c_rom.ld index 5a82f1605d7c6dc18152dabbef53feacbf385408..7b266ed519690f9f185702b458b38935496bdd18 100644 --- a/bsp/tm4c129x/tm4c_rom.ld +++ b/bsp/tm4c129x/tm4c_rom.ld @@ -24,20 +24,29 @@ MEMORY { - FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 - SRAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 + CODE (rx) : ORIGIN = 0x00000000, LENGTH = 0x00100000 + DATA (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00040000 } +ENTRY(ResetISR) +_system_stack_size = 0x200; + SECTIONS { .text : { - _text = .; - KEEP(*(.isr_vector)) - *(.text*) + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + *(.text) /* remaining code */ + *(.text.*) /* remaining code */ + *(.rodata) /* read-only data (constants) */ *(.rodata*) - - /* section information for finsh shell */ + *(.glue_7) + *(.glue_7t) + *(.gnu.linkonce.t*) + + /* section information for finsh shell */ . = ALIGN(4); __fsymtab_start = .; KEEP(*(FSymTab)) @@ -48,30 +57,114 @@ SECTIONS __vsymtab_end = .; . = ALIGN(4); - /* section information for initial. */ . = ALIGN(4); __rt_init_start = .; KEEP(*(SORT(.rti_fn*))) __rt_init_end = .; . = ALIGN(4); - + + PROVIDE(__ctors_start__ = .); + /* old GCC version uses .ctors */ + KEEP(*(SORT(.ctors.*))) + KEEP(*(.ctors)) + /* new GCC version uses .init_array */ + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array)) + PROVIDE(__ctors_end__ = .); + + . = ALIGN(4); _etext = .; - } > FLASH + } > CODE = 0 - .data : AT(ADDR(.text) + SIZEOF(.text)) + .ARM.extab : + { + *(.ARM.extab*) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _sidata = .; + } > CODE + + /* .data section which is used for initialized data */ + .data : AT (_sidata) { - _data = .; - _ldata = LOADADDR (.data); - *(vtable) - *(.data*) - _edata = .; - } > SRAM + . = ALIGN(4); + PROVIDE(__dtors_start__ = .); + KEEP(*(SORT(.dtors.*))) + KEEP(*(.dtors)) + PROVIDE(__dtors_end__ = .); + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _sdata = . ; + *(.data) + *(.data.*) + *(.gnu.linkonce.d*) + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .data secion */ + _edata = . ; + } > DATA + + .stack : + { + . = . + _system_stack_size; + . = ALIGN(4); + _estack = .; + } >DATA + + __bss_start = .; .bss : { - _bss = .; - *(.bss*) + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; + + *(.bss) + *(.bss.*) *(COMMON) - _ebss = .; - } > SRAM + + . = ALIGN(4); + /* This is used by the startup in order to initialize the .bss secion */ + _ebss = . ; + *(.bss.init) + } > DATA + __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) } + /* DWARF debug sections. + * Symbols in the DWARF debugging sections are relative to the beginning + * of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } }