aboutsummaryrefslogtreecommitdiff
path: root/tinycc/win32/lib/crtinit.c
diff options
context:
space:
mode:
authorUneven Prankster <unevenprankster@protonmail.com>2023-07-12 13:22:29 -0300
committerUneven Prankster <unevenprankster@protonmail.com>2023-07-12 13:22:29 -0300
commitfa2bdd711212ba6b7a94a20971e8bfa281e73296 (patch)
tree6713b3c0379507d49558287b71dd360ce188a2f0 /tinycc/win32/lib/crtinit.c
lol
Diffstat (limited to 'tinycc/win32/lib/crtinit.c')
-rw-r--r--tinycc/win32/lib/crtinit.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/tinycc/win32/lib/crtinit.c b/tinycc/win32/lib/crtinit.c
new file mode 100644
index 0000000..31f087b
--- /dev/null
+++ b/tinycc/win32/lib/crtinit.c
@@ -0,0 +1,26 @@
+//+---------------------------------------------------------------------------
+
+#ifdef __leading_underscore
+# define _(s) s
+#else
+# define _(s) _##s
+#endif
+
+extern void (*_(_init_array_start)[]) (int argc, _TCHAR **argv, _TCHAR **envp);
+extern void (*_(_init_array_end)[]) (int argc, _TCHAR **argv, _TCHAR **envp);
+extern void (*_(_fini_array_start)[]) (void);
+extern void (*_(_fini_array_end)[]) (void);
+
+static void run_ctors(int argc, _TCHAR **argv, _TCHAR **env)
+{
+ int i = 0;
+ while (&_(_init_array_start)[i] != _(_init_array_end))
+ (*_(_init_array_start)[i++])(argc, argv, env);
+}
+
+static void run_dtors(void)
+{
+ int i = 0;
+ while (&_(_fini_array_end)[i] != _(_fini_array_start))
+ (*_(_fini_array_end)[--i])();
+}