Merge pull request #780 from GustavWi/iar_mbed

IAR: skip dynamic initialization, new common IAR startup file
pull/769/merge
Martin Kojtal 2014-12-15 08:52:35 +00:00
commit 5aafaa0d63
35 changed files with 162 additions and 68 deletions

View File

@ -0,0 +1,81 @@
/**************************************************
*
* Part two of the system initialization code, contains C-level
* initialization, thumb-2 only variant.
*
* Copyright 2006 IAR Systems. All rights reserved.
*
* $Revision: 59783 $
*
**************************************************/
; --------------------------------------------------
; Module ?cmain, C-level initialization.
;
SECTION SHT$$PREINIT_ARRAY:CONST:NOROOT(2)
SECTION SHT$$INIT_ARRAY:CONST:NOROOT(2)
SECTION .text:CODE:NOROOT(2)
PUBLIC __cmain
;; Keep ?main for legacy reasons, it is accessed in countless instances of cstartup.s around the world...
PUBLIC ?main
EXTWEAK __iar_data_init3
EXTWEAK __iar_argc_argv
EXTERN __low_level_init
EXTERN __call_ctors
EXTERN main
EXTERN exit
EXTERN __iar_dynamic_initialization
EXTERN mbed_sdk_init
EXTERN SystemInit
THUMB
__cmain:
?main:
; Initialize segments.
; __segment_init and __low_level_init are assumed to use the same
; instruction set and to be reachable by BL from the ICODE segment
; (it is safest to link them in segment ICODE).
FUNCALL __cmain, __low_level_init
bl __low_level_init
cmp r0,#0
beq ?l1
FUNCALL __cmain, __iar_data_init3
bl __iar_data_init3
MOVS r0,#0 ; No parameters
FUNCALL __cmain, mbed_sdk_init
BL mbed_sdk_init
MOVS r0,#0 ; No parameters
FUNCALL __cmain, __iar_dynamic_initialization
BL __iar_dynamic_initialization ; C++ dynamic initialization
?l1:
REQUIRE ?l3
SECTION .text:CODE:NOROOT(2)
PUBLIC _main
PUBLIC _call_main
THUMB
__iar_init$$done: ; Copy initialization is done
?l3:
_call_main:
MOVS r0,#0 ; No parameters
FUNCALL __cmain, __iar_argc_argv
BL __iar_argc_argv ; Maybe setup command line
FUNCALL __cmain, main
BL main
_main:
FUNCALL __cmain, exit
BL exit
END

View File

@ -436,21 +436,34 @@ __attribute__((naked)) void software_init_hook (void) {
#elif defined (__ICCARM__)
extern void* __vector_table;
extern int __low_level_init(void);
extern void __iar_data_init3(void);
extern __weak void __iar_init_core( void );
extern __weak void __iar_init_vfp( void );
extern void __iar_dynamic_initialization(void);
extern void mbed_sdk_init(void);
extern void exit(int arg);
__noreturn __stackless void __cmain(void) {
#pragma required=__vector_table
void __iar_program_start( void )
{
__iar_init_core();
__iar_init_vfp();
int a;
if (__low_level_init() != 0) {
__iar_data_init3();
mbed_sdk_init();
__iar_dynamic_initialization();
}
osKernelInitialize();
set_main_stack();
osThreadCreate(&os_thread_def_main, NULL);
a = osKernelStart();
exit(a);
}
#endif

View File

@ -722,11 +722,11 @@
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
<state>--skip_dynamic_initialization</state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>

View File

@ -743,11 +743,11 @@
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
<state>--skip_dynamic_initialization</state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>

View File

@ -743,11 +743,11 @@
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
<state>--skip_dynamic_initialization</state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>

View File

@ -743,11 +743,11 @@
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
<state>--skip_dynamic_initialization</state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>

View File

@ -743,11 +743,11 @@
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
<state>--skip_dynamic_initialization</state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>

View File

@ -743,11 +743,11 @@
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
<state>--skip_dynamic_initialization</state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>

View File

@ -743,11 +743,11 @@
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
<state>--skip_dynamic_initialization</state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>

View File

@ -743,11 +743,11 @@
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
<state>--skip_dynamic_initialization</state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>

View File

@ -743,11 +743,11 @@
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
<state>--skip_dynamic_initialization</state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>

View File

@ -743,11 +743,11 @@
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
<state>--skip_dynamic_initialization</state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>

View File

@ -743,11 +743,11 @@
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
<state>--skip_dynamic_initialization</state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>

View File

@ -748,11 +748,11 @@
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
<state>--skip_dynamic_initialization</state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>

View File

@ -743,11 +743,11 @@
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
<state>--skip_dynamic_initialization</state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>

View File

@ -722,11 +722,11 @@
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
<state>--skip_dynamic_initialization</state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>

View File

@ -743,11 +743,11 @@
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
<state>--skip_dynamic_initialization</state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>

View File

@ -743,11 +743,11 @@
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
<state>--skip_dynamic_initialization</state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>

View File

@ -743,11 +743,11 @@
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
<state>--skip_dynamic_initialization</state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>

View File

@ -747,11 +747,11 @@
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
<state>--skip_dynamic_initialization</state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>

View File

@ -747,11 +747,11 @@
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
<state>--skip_dynamic_initialization</state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>

View File

@ -747,11 +747,11 @@
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
<state>--skip_dynamic_initialization</state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>

View File

@ -747,11 +747,11 @@
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
<state>--skip_dynamic_initialization</state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>

View File

@ -747,11 +747,11 @@
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
<state>--skip_dynamic_initialization</state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>

View File

@ -743,11 +743,11 @@
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
<state>--skip_dynamic_initialization</state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>

View File

@ -747,11 +747,11 @@
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
<state>--skip_dynamic_initialization</state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>

View File

@ -747,11 +747,11 @@
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
<state>--skip_dynamic_initialization</state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>

View File

@ -747,11 +747,11 @@
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
<state>--skip_dynamic_initialization</state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>

View File

@ -747,11 +747,11 @@
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
<state>--skip_dynamic_initialization</state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>

View File

@ -747,11 +747,11 @@
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
<state>--skip_dynamic_initialization</state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>

View File

@ -747,11 +747,11 @@
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
<state>--skip_dynamic_initialization</state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>

View File

@ -747,11 +747,11 @@
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
<state>--skip_dynamic_initialization</state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>

View File

@ -743,11 +743,11 @@
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
<state>--skip_dynamic_initialization</state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>

View File

@ -722,11 +722,11 @@
</option>
<option>
<name>IlinkUseExtraOptions</name>
<state>0</state>
<state>1</state>
</option>
<option>
<name>IlinkExtraOptions</name>
<state></state>
<state>--skip_dynamic_initialization</state>
</option>
<option>
<name>IlinkLowLevelInterfaceSlave</name>

View File

@ -104,7 +104,7 @@ class IAR(mbedToolchain):
self.default_cmd([self.ar, lib_path] + objects)
def link(self, output, objects, libraries, lib_dirs, mem_map):
args = [self.ld, "-o", output, "--config", mem_map]
args = [self.ld, "-o", output, "--config", mem_map, "--skip_dynamic_initialization"]
self.default_cmd(self.hook.get_cmdline_linker(args + objects + libraries))
@hook_tool