|
@@ -51,14 +51,14 @@ int cplusplus_system_init(void)
|
|
|
(*ctors_func)();
|
|
|
}
|
|
|
#elif defined(__CC_ARM)
|
|
|
-# if 1
|
|
|
/* If there is no SHT$$INIT_ARRAY, calling
|
|
|
- * $Super$$__cpp_initialize__aeabi_() will fault. At least until Keil5.12
|
|
|
- * the problem still exists. So we have to initialize the C++ runtime our
|
|
|
- * own. */
|
|
|
+ * $Super$$__cpp_initialize__aeabi_() will cause fault. At least until Keil5.12
|
|
|
+ * the problem still exists. So we have to initialize the C++ runtime by ourself.
|
|
|
+ */
|
|
|
typedef void PROC();
|
|
|
extern const unsigned long SHT$$INIT_ARRAY$$Base[];
|
|
|
extern const unsigned long SHT$$INIT_ARRAY$$Limit[];
|
|
|
+
|
|
|
const unsigned long *base = SHT$$INIT_ARRAY$$Base;
|
|
|
const unsigned long *lim = SHT$$INIT_ARRAY$$Limit;
|
|
|
|
|
@@ -67,10 +67,6 @@ int cplusplus_system_init(void)
|
|
|
PROC *proc = (PROC*)((const char*)base + *base);
|
|
|
(*proc)();
|
|
|
}
|
|
|
-# else
|
|
|
- /* call armcc lib to initialize cplusplus */
|
|
|
- $Super$$__cpp_initialize__aeabi_();
|
|
|
-# endif
|
|
|
#endif
|
|
|
|
|
|
return 0;
|