CPP: fix static objects init for MWDT toolchain
The constructors of static objects are stored in ".ctors"
section. In case of MWDT toolchain we have incompatible
".ctors" section format with GNU toolchain. So let's use
initialization code provided by MWDT instead of Zephyr one
in case of MWDT toolchain usage.
As it is done for GNU toolchain We call constructors of
static objects but we don't call destructors for them.
Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
Signed-off-by: Evgeniy Paltsev <PaltsevEvgeniy@gmail.com>
diff --git a/subsys/cpp/cpp_init.c b/subsys/cpp/cpp_init.c
new file mode 100644
index 0000000..a3a6771
--- /dev/null
+++ b/subsys/cpp/cpp_init.c
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2021 Synopsys, Inc.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Author: Evgeniy Paltsev
+ */
+
+#ifdef CONFIG_CPP_STATIC_INIT_GNU
+
+void __do_global_ctors_aux(void);
+void __do_init_array_aux(void);
+
+void z_cpp_init_static(void)
+{
+ __do_global_ctors_aux();
+ __do_init_array_aux();
+}
+
+#else
+
+#ifdef __CCAC__
+void _init(void);
+
+void z_cpp_init_static(void)
+{
+ _init();
+}
+#endif /* __CCAC__ */
+
+#endif /* CONFIG_CPP_STATIC_INIT_GNU */