diff --git a/base-codezero/lib/mk/base-common.mk b/base-codezero/lib/mk/base-common.mk
index 3c9fabf93..6e1008e60 100644
--- a/base-codezero/lib/mk/base-common.mk
+++ b/base-codezero/lib/mk/base-common.mk
@@ -6,7 +6,7 @@
LIBS += cxx l4 startup
-SRC_CC += cap_copy.cc
+SRC_CC += cap_copy.cc main_bootstrap.cc
SRC_CC += ipc/ipc.cc ipc/pager.cc ipc/ipc_marshal_cap.cc
SRC_CC += pager/pager.cc
SRC_CC += avl_tree/avl_tree.cc
@@ -28,6 +28,7 @@ INC_DIR += $(REP_DIR)/src/base/lock
INC_DIR += $(BASE_DIR)/src/base/thread
INC_DIR += $(REP_DIR)/include/codezero/dummies
-vpath cap_copy.cc $(BASE_DIR)/src/platform
-vpath %.cc $(REP_DIR)/src/base
-vpath %.cc $(BASE_DIR)/src/base
+vpath main_bootstrap.cc $(REP_DIR)/src/platform
+vpath cap_copy.cc $(BASE_DIR)/src/platform
+vpath %.cc $(REP_DIR)/src/base
+vpath %.cc $(BASE_DIR)/src/base
diff --git a/base-codezero/src/platform/_main_helper.h b/base-codezero/src/platform/main_bootstrap.cc
similarity index 72%
rename from base-codezero/src/platform/_main_helper.h
rename to base-codezero/src/platform/main_bootstrap.cc
index a14c70212..aca3889f3 100644
--- a/base-codezero/src/platform/_main_helper.h
+++ b/base-codezero/src/platform/main_bootstrap.cc
@@ -1,6 +1,7 @@
/*
* \brief Platform-specific helper functions for the _main() function
* \author Norman Feske
+ * \author Christian Helmuth
* \date 2009-10-02
*/
@@ -11,14 +12,11 @@
* under the terms of the GNU General Public License version 2.
*/
-#ifndef _PLATFORM___MAIN_HELPER_H_
-#define _PLATFORM___MAIN_HELPER_H_
-
+/* Genode includes */
+#include
#include
-
-/* make Codezero includes happy */
-extern "C" char *strncpy(char *dest, const char *src, Genode::size_t n);
-extern "C" void *memcpy(void *dest, const void *src, Genode::size_t n);
+#include
+#include
/* Codezero includes */
#include
@@ -59,19 +57,25 @@ extern "C" int printf(const char *format, ...)
** Startup-code helpers **
**************************/
+namespace Genode { void platform_main_bootstrap(); }
+
Genode::Native_thread_id main_thread_tid;
Codezero::l4_mutex main_thread_running_lock;
-static void main_thread_bootstrap()
+void Genode::platform_main_bootstrap()
{
- Codezero::__l4_init();
+ static struct Bootstrap
+ {
+ Bootstrap()
+ {
+ Codezero::__l4_init();
- main_thread_tid = Codezero::thread_myself();
+ main_thread_tid = Codezero::thread_myself();
- Codezero::l4_mutex_init(&main_thread_running_lock);
- Codezero::l4_mutex_lock(&main_thread_running_lock); /* block on first mutex lock */
+ Codezero::l4_mutex_init(&main_thread_running_lock);
+ Codezero::l4_mutex_lock(&main_thread_running_lock); /* block on first mutex lock */
+ }
+ } bootstrap;
}
-
-#endif /* _PLATFORM___MAIN_HELPER_H_ */
diff --git a/base-fiasco/lib/mk/base-common.mk b/base-fiasco/lib/mk/base-common.mk
index 35859aa5f..39f6e3162 100644
--- a/base-fiasco/lib/mk/base-common.mk
+++ b/base-fiasco/lib/mk/base-common.mk
@@ -6,7 +6,7 @@
LIBS += cxx startup
-SRC_CC += cap_copy.cc
+SRC_CC += cap_copy.cc main_bootstrap.cc
SRC_CC += ipc/ipc.cc ipc/pager.cc ipc/ipc_marshal_cap.cc
SRC_CC += pager/pager.cc
SRC_CC += avl_tree/avl_tree.cc
@@ -25,6 +25,7 @@ SRC_CC += thread/thread.cc thread/thread_bootstrap_empty.cc thread/trace.cc
INC_DIR += $(REP_DIR)/src/base/lock
INC_DIR += $(BASE_DIR)/src/base/thread
-vpath cap_copy.cc $(BASE_DIR)/src/platform
-vpath %.cc $(REP_DIR)/src/base
-vpath %.cc $(BASE_DIR)/src/base
+vpath main_bootstrap.cc $(REP_DIR)/src/platform
+vpath cap_copy.cc $(BASE_DIR)/src/platform
+vpath %.cc $(REP_DIR)/src/base
+vpath %.cc $(BASE_DIR)/src/base
diff --git a/base-fiasco/src/platform/_main_helper.h b/base-fiasco/src/platform/main_bootstrap.cc
similarity index 67%
rename from base-fiasco/src/platform/_main_helper.h
rename to base-fiasco/src/platform/main_bootstrap.cc
index 8c994f0e4..40d58d8b1 100644
--- a/base-fiasco/src/platform/_main_helper.h
+++ b/base-fiasco/src/platform/main_bootstrap.cc
@@ -11,9 +11,4 @@
* under the terms of the GNU General Public License version 2.
*/
-#ifndef _PLATFORM___MAIN_HELPER_H_
-#define _PLATFORM___MAIN_HELPER_H_
-
-static void main_thread_bootstrap() { }
-
-#endif /* _PLATFORM___MAIN_HELPER_H_ */
+namespace Genode { void platform_main_bootstrap() { /* dummy */ } }
diff --git a/base-foc/lib/mk/base-common.inc b/base-foc/lib/mk/base-common.inc
index 87e12dbc2..97339de7f 100644
--- a/base-foc/lib/mk/base-common.inc
+++ b/base-foc/lib/mk/base-common.inc
@@ -6,6 +6,7 @@
LIBS += cxx syscall startup
+SRC_CC += main_bootstrap.cc
SRC_CC += ipc/ipc.cc ipc/pager.cc
SRC_CC += pager/pager.cc
SRC_CC += avl_tree/avl_tree.cc
@@ -26,5 +27,8 @@ INC_DIR += $(REP_DIR)/src/base/lock
INC_DIR += $(BASE_DIR)/src/base/lock
INC_DIR += $(BASE_DIR)/src/base/thread
-vpath %.cc $(REP_DIR)/src/base
-vpath %.cc $(BASE_DIR)/src/base
+vpath main_bootstrap.cc $(REP_DIR)/src/platform
+vpath %.cc $(REP_DIR)/src/base
+vpath %.cc $(BASE_DIR)/src/base
+
+# vi: set ft=make :
diff --git a/base-foc/src/platform/_main_helper.h b/base-foc/src/platform/main_bootstrap.cc
similarity index 52%
rename from base-foc/src/platform/_main_helper.h
rename to base-foc/src/platform/main_bootstrap.cc
index a6a836f8c..0a4ac3afe 100644
--- a/base-foc/src/platform/_main_helper.h
+++ b/base-foc/src/platform/main_bootstrap.cc
@@ -1,6 +1,7 @@
/*
* \brief Platform-specific helper functions for the _main() function
* \author Christian Prochaska
+ * \author Christian Helmuth
* \date 2009-08-05
*/
@@ -11,9 +12,6 @@
* under the terms of the GNU General Public License version 2.
*/
-#ifndef _PLATFORM___MAIN_HELPER_H_
-#define _PLATFORM___MAIN_HELPER_H_
-
/* Genode includes */
#include
#include
@@ -23,16 +21,21 @@ namespace Fiasco {
#include
}
-enum { MAIN_THREAD_CAP_ID = 1 };
-static void main_thread_bootstrap() {
- using namespace Genode;
+namespace Genode { void platform_main_bootstrap(); }
- Cap_index *i
- = cap_map()->insert(MAIN_THREAD_CAP_ID, Fiasco::MAIN_THREAD_CAP);
- Fiasco::l4_utcb_tcr()->user[Fiasco::UTCB_TCR_BADGE] = (unsigned long) i;
- Fiasco::l4_utcb_tcr()->user[Fiasco::UTCB_TCR_THREAD_OBJ] = 0;
+
+void Genode::platform_main_bootstrap()
+{
+ static struct Bootstrap
+ {
+ enum { MAIN_THREAD_CAP_ID = 1 };
+
+ Bootstrap()
+ {
+ Cap_index *i(cap_map()->insert(MAIN_THREAD_CAP_ID, Fiasco::MAIN_THREAD_CAP));
+ Fiasco::l4_utcb_tcr()->user[Fiasco::UTCB_TCR_BADGE] = (unsigned long) i;
+ Fiasco::l4_utcb_tcr()->user[Fiasco::UTCB_TCR_THREAD_OBJ] = 0;
+ }
+ } bootstrap;
}
-
-
-#endif /* _PLATFORM___MAIN_HELPER_H_ */
diff --git a/base-hw/lib/mk/base-common.mk b/base-hw/lib/mk/base-common.mk
index 0c9b37f85..3acdbc877 100644
--- a/base-hw/lib/mk/base-common.mk
+++ b/base-hw/lib/mk/base-common.mk
@@ -6,6 +6,7 @@
LIBS += cxx syscall
+SRC_CC += main_bootstrap.cc
SRC_CC += ipc.cc ipc/ipc_marshal_cap.cc
SRC_CC += avl_tree/avl_tree.cc
SRC_CC += allocator/slab.cc
@@ -24,5 +25,6 @@ INC_DIR += $(REP_DIR)/src/base/lock
INC_DIR += $(BASE_DIR)/src/base/lock
INC_DIR += $(BASE_DIR)/src/base/thread
-vpath %.cc $(REP_DIR)/src/base
-vpath %.cc $(BASE_DIR)/src/base
+vpath main_bootstrap.cc $(REP_DIR)/src/platform
+vpath %.cc $(REP_DIR)/src/base
+vpath %.cc $(BASE_DIR)/src/base
diff --git a/base-hw/src/platform/_main_helper.h b/base-hw/src/platform/main_bootstrap.cc
similarity index 61%
rename from base-hw/src/platform/_main_helper.h
rename to base-hw/src/platform/main_bootstrap.cc
index e161f008e..3b1328b8c 100644
--- a/base-hw/src/platform/_main_helper.h
+++ b/base-hw/src/platform/main_bootstrap.cc
@@ -1,6 +1,7 @@
/*
* \brief Platform-specific helper functions for the _main() function
* \author Martin Stein
+ * \author Christian Helmuth
* \date 2010-09-13
*/
@@ -11,19 +12,20 @@
* under the terms of the GNU General Public License version 2.
*/
-#ifndef _SRC__PLATFORM__MAIN_HELPER_H_
-#define _SRC__PLATFORM__MAIN_HELPER_H_
-
+/* Genode includes */
#include
+namespace Genode { void platform_main_bootstrap(); }
+
+
Genode::Native_thread_id main_thread_tid;
-static void main_thread_bootstrap()
+void Genode::platform_main_bootstrap()
{
- main_thread_tid = Kernel::current_thread_id();
+ static struct Bootstrap
+ {
+ Bootstrap() { main_thread_tid = Kernel::current_thread_id(); }
+ } bootstrap;
}
-
-#endif /* _SRC__PLATFORM__MAIN_HELPER_H_ */
-
diff --git a/base-linux/lib/mk/base-common.mk b/base-linux/lib/mk/base-common.mk
index 1754058da..8bd39b991 100644
--- a/base-linux/lib/mk/base-common.mk
+++ b/base-linux/lib/mk/base-common.mk
@@ -6,6 +6,7 @@
LIBS += syscall
+SRC_CC += main_bootstrap.cc
SRC_CC += ipc/ipc.cc
SRC_CC += avl_tree/avl_tree.cc
SRC_CC += allocator/slab.cc
@@ -27,5 +28,6 @@ INC_DIR += $(REP_DIR)/src/base/env
INC_DIR += $(REP_DIR)/src/platform $(BASE_DIR)/src/platform
INC_DIR += $(BASE_DIR)/src/base/thread
-vpath %.cc $(REP_DIR)/src/base
-vpath %.cc $(BASE_DIR)/src/base
+vpath main_bootstrap.cc $(REP_DIR)/src/platform
+vpath %.cc $(REP_DIR)/src/base
+vpath %.cc $(BASE_DIR)/src/base
diff --git a/base-linux/src/platform/_main_helper.h b/base-linux/src/platform/_main_helper.h
deleted file mode 100644
index 7cdb5b60c..000000000
--- a/base-linux/src/platform/_main_helper.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * \brief Platform-specific helper functions for the _main() function
- * \author Christian Prochaska
- * \date 2009-08-05
- */
-
-/*
- * Copyright (C) 2009-2013 Genode Labs GmbH
- *
- * This file is part of the Genode OS framework, which is distributed
- * under the terms of the GNU General Public License version 2.
- */
-
-#ifndef _PLATFORM___MAIN_HELPER_H_
-#define _PLATFORM___MAIN_HELPER_H_
-
-#include
-
-#include
-
-/*
- * Define 'lx_environ' pointer.
- */
-char **lx_environ;
-
-
-/**
- * Natively aligned memory location used in the lock implementation
- */
-int main_thread_futex_counter __attribute__((aligned(sizeof(Genode::addr_t))));
-
-
-static inline void main_thread_bootstrap()
-{
- using namespace Genode;
-
- extern Genode::addr_t *__initial_sp;
-
- /*
- * Initialize the 'lx_environ' pointer
- *
- * environ = &argv[argc + 1]
- * __initial_sp[0] = argc (always 1 in Genode)
- * __initial_sp[1] = argv[0]
- * __initial_sp[2] = NULL
- * __initial_sp[3] = environ
- *
- */
- lx_environ = (char**)&__initial_sp[3];
-
- /* reserve context area */
- Genode::addr_t base = Native_config::context_area_virtual_base();
- Genode::size_t size = Native_config::context_area_virtual_size();
- if (lx_vm_reserve(base, size) != base)
- PERR("reservation of context area [%lx,%lx) failed",
- (unsigned long) base, (unsigned long) base + size);
-}
-
-#endif /* _PLATFORM___MAIN_HELPER_H_ */
diff --git a/base-linux/src/platform/lx_hybrid.cc b/base-linux/src/platform/lx_hybrid.cc
index d4563449b..4fb5cf476 100644
--- a/base-linux/src/platform/lx_hybrid.cc
+++ b/base-linux/src/platform/lx_hybrid.cc
@@ -13,7 +13,7 @@
#include
#include
-#include <_main_helper.h>
+#include
#include
diff --git a/base-linux/src/platform/main_bootstrap.cc b/base-linux/src/platform/main_bootstrap.cc
new file mode 100644
index 000000000..e6f4eb440
--- /dev/null
+++ b/base-linux/src/platform/main_bootstrap.cc
@@ -0,0 +1,71 @@
+/*
+ * \brief Platform-specific helper functions for the _main() function
+ * \author Christian Prochaska
+ * \author Christian Helmuth
+ * \date 2009-08-05
+ */
+
+/*
+ * Copyright (C) 2009-2013 Genode Labs GmbH
+ *
+ * This file is part of the Genode OS framework, which is distributed
+ * under the terms of the GNU General Public License version 2.
+ */
+
+#include
+#include
+
+
+namespace Genode { void platform_main_bootstrap(); }
+
+
+/*
+ * Define 'lx_environ' pointer.
+ */
+char **lx_environ;
+
+
+/**
+ * Natively aligned memory location used in the lock implementation
+ */
+int main_thread_futex_counter __attribute__((aligned(sizeof(Genode::addr_t))));
+
+
+/**
+ * Initial value of SP register (in crt0)
+ */
+extern Genode::addr_t *__initial_sp;
+
+
+/**
+ * Platform-specific bootstrap
+ */
+void Genode::platform_main_bootstrap()
+{
+ static struct Bootstrap
+ {
+ Bootstrap()
+ {
+ /*
+ * Initialize the 'lx_environ' pointer
+ *
+ * environ = &argv[argc + 1]
+ * __initial_sp[0] = argc (always 1 in Genode)
+ * __initial_sp[1] = argv[0]
+ * __initial_sp[2] = NULL
+ * __initial_sp[3] = environ
+ */
+ lx_environ = (char**)&__initial_sp[3];
+
+ /*
+ * Free context area preserved in linker script
+ */
+ addr_t base = Native_config::context_area_virtual_base();
+ Genode::size_t size = Native_config::context_area_virtual_size();
+ int ret;
+ if ((ret = lx_munmap((void *)base, size)) < 0)
+ PERR("flushing of context area [%lx,%lx) failed (ret=%d)",
+ (unsigned long) base, (unsigned long) base + size, ret);
+ }
+ } bootstrap;
+}
diff --git a/base-nova/lib/mk/base-common.inc b/base-nova/lib/mk/base-common.inc
index d492d4511..94e8c0b6e 100644
--- a/base-nova/lib/mk/base-common.inc
+++ b/base-nova/lib/mk/base-common.inc
@@ -6,6 +6,7 @@
LIBS += cxx startup
+SRC_CC += main_bootstrap.cc
SRC_CC += ipc/ipc.cc ipc/pager.cc
SRC_CC += avl_tree/avl_tree.cc
SRC_CC += allocator/slab.cc
@@ -24,5 +25,8 @@ INC_DIR += $(REP_DIR)/src/base/lock
INC_DIR += $(BASE_DIR)/src/base/lock
INC_DIR += $(BASE_DIR)/src/base/thread
-vpath %.cc $(REP_DIR)/src/base
-vpath %.cc $(BASE_DIR)/src/base
+vpath main_bootstrap.cc $(REP_DIR)/src/platform
+vpath %.cc $(REP_DIR)/src/base
+vpath %.cc $(BASE_DIR)/src/base
+
+# vi: set ft=make :
diff --git a/base-nova/src/platform/_main_helper.h b/base-nova/src/platform/main_bootstrap.cc
similarity index 65%
rename from base-nova/src/platform/_main_helper.h
rename to base-nova/src/platform/main_bootstrap.cc
index 6e6059ac8..fe716fe89 100644
--- a/base-nova/src/platform/_main_helper.h
+++ b/base-nova/src/platform/main_bootstrap.cc
@@ -12,11 +12,4 @@
* under the terms of the GNU General Public License version 2.
*/
-#ifndef _PLATFORM___MAIN_HELPER_H_
-#define _PLATFORM___MAIN_HELPER_H_
-
-#include
-
-static void main_thread_bootstrap() {};
-
-#endif /* _PLATFORM___MAIN_HELPER_H_ */
+namespace Genode { void platform_main_bootstrap() { /* dummy */ } }
diff --git a/base-okl4/lib/mk/base-common.mk b/base-okl4/lib/mk/base-common.mk
index c6a9ccc65..e6b8332d9 100644
--- a/base-okl4/lib/mk/base-common.mk
+++ b/base-okl4/lib/mk/base-common.mk
@@ -6,7 +6,7 @@
LIBS += cxx startup
-SRC_CC += cap_copy.cc
+SRC_CC += cap_copy.cc main_bootstrap.cc
SRC_CC += ipc/ipc.cc ipc/pager.cc ipc/ipc_marshal_cap.cc
SRC_CC += pager/pager.cc
SRC_CC += avl_tree/avl_tree.cc
@@ -25,6 +25,7 @@ SRC_CC += thread/thread.cc thread/thread_bootstrap.cc thread/trace.cc
INC_DIR += $(REP_DIR)/src/base/lock
INC_DIR += $(BASE_DIR)/src/base/thread
-vpath cap_copy.cc $(BASE_DIR)/src/platform
-vpath %.cc $(REP_DIR)/src/base
-vpath %.cc $(BASE_DIR)/src/base
+vpath main_bootstrap.cc $(REP_DIR)/src/platform
+vpath cap_copy.cc $(BASE_DIR)/src/platform
+vpath %.cc $(REP_DIR)/src/base
+vpath %.cc $(BASE_DIR)/src/base
diff --git a/base-okl4/src/platform/_main_helper.h b/base-okl4/src/platform/main_bootstrap.cc
similarity index 67%
rename from base-okl4/src/platform/_main_helper.h
rename to base-okl4/src/platform/main_bootstrap.cc
index b74f42baa..b328ce4f8 100644
--- a/base-okl4/src/platform/_main_helper.h
+++ b/base-okl4/src/platform/main_bootstrap.cc
@@ -1,6 +1,7 @@
/*
* \brief Platform-specific helper functions for the _main() function
* \author Christian Prochaska
+ * \author Christian Helmuth
* \date 2009-08-05
*/
@@ -11,9 +12,8 @@
* under the terms of the GNU General Public License version 2.
*/
-#ifndef _PLATFORM___MAIN_HELPER_H_
-#define _PLATFORM___MAIN_HELPER_H_
-
+/* Genode includes */
+#include
/* OKL4-specific includes and definitions */
namespace Okl4 { extern "C" {
@@ -40,16 +40,23 @@ namespace Okl4 {
}
+namespace Genode { void platform_main_bootstrap(); }
+
+
Genode::Native_thread_id main_thread_tid;
-static void main_thread_bootstrap()
+void Genode::platform_main_bootstrap()
{
- /* copy thread ID to utcb */
- main_thread_tid.raw = Okl4::copy_uregister_to_utcb();
+ static struct Bootstrap
+ {
+ Bootstrap()
+ {
+ /* copy thread ID to utcb */
+ main_thread_tid.raw = Okl4::copy_uregister_to_utcb();
- if (main_thread_tid.raw == 0) /* core */
- main_thread_tid.raw = Okl4::L4_rootserver.raw;
+ if (main_thread_tid.raw == 0) /* core */
+ main_thread_tid.raw = Okl4::L4_rootserver.raw;
+ }
+ } bootstrap;
}
-
-#endif /* _PLATFORM___MAIN_HELPER_H_ */
diff --git a/base-pistachio/lib/mk/base-common.mk b/base-pistachio/lib/mk/base-common.mk
index 38fe95088..a064d07db 100644
--- a/base-pistachio/lib/mk/base-common.mk
+++ b/base-pistachio/lib/mk/base-common.mk
@@ -6,7 +6,7 @@
LIBS += cxx startup
-SRC_CC += cap_copy.cc
+SRC_CC += cap_copy.cc main_bootstrap.cc
SRC_CC += ipc/ipc.cc ipc/pager.cc ipc/ipc_marshal_cap.cc
SRC_CC += pager/pager.cc
SRC_CC += avl_tree/avl_tree.cc
@@ -25,6 +25,7 @@ SRC_CC += thread/thread.cc thread/trace.cc thread/thread_bootstrap.cc
INC_DIR += $(REP_DIR)/src/base/lock
INC_DIR += $(BASE_DIR)/src/base/thread
-vpath cap_copy.cc $(BASE_DIR)/src/platform
-vpath %.cc $(REP_DIR)/src/base
-vpath %.cc $(BASE_DIR)/src/base
+vpath main_bootstrap.cc $(REP_DIR)/src/platform
+vpath cap_copy.cc $(BASE_DIR)/src/platform
+vpath %.cc $(REP_DIR)/src/base
+vpath %.cc $(BASE_DIR)/src/base
diff --git a/base-pistachio/src/platform/_main_helper.h b/base-pistachio/src/platform/main_bootstrap.cc
similarity index 69%
rename from base-pistachio/src/platform/_main_helper.h
rename to base-pistachio/src/platform/main_bootstrap.cc
index 1f73d8aef..5d14099b1 100644
--- a/base-pistachio/src/platform/_main_helper.h
+++ b/base-pistachio/src/platform/main_bootstrap.cc
@@ -1,6 +1,7 @@
/*
* \brief Platform-specific helper functions for the _main() function
* \author Christian Prochaska
+ * \author Christian Helmuth
* \date 2009-08-05
*/
@@ -11,25 +12,25 @@
* under the terms of the GNU General Public License version 2.
*/
-#ifndef _PLATFORM___MAIN_HELPER_H_
-#define _PLATFORM___MAIN_HELPER_H_
+/* Genode includes */
+#include
/* Pistachio includes */
namespace Pistachio {
#include
}
-/* Genode includes */
-#include
+
+namespace Genode { void platform_main_bootstrap(); }
Genode::Native_thread_id main_thread_tid;
-static void main_thread_bootstrap()
+void Genode::platform_main_bootstrap()
{
- main_thread_tid = Pistachio::L4_Myself();
+ static struct Bootstrap
+ {
+ Bootstrap() { main_thread_tid = Pistachio::L4_Myself(); }
+ } bootstrap;
}
-
-
-#endif /* _PLATFORM___MAIN_HELPER_H_ */
diff --git a/base/src/platform/_main.cc b/base/src/platform/_main.cc
index a6120ef4e..7ff308ee6 100644
--- a/base/src/platform/_main.cc
+++ b/base/src/platform/_main.cc
@@ -25,7 +25,6 @@
#include
/* platform-specific local helper functions */
-#include <_main_helper.h>
#include <_main_parent_cap.h>
@@ -35,7 +34,8 @@ extern int main(int argc, char **argv, char **envp);
extern void init_exception_handling(); /* implemented in base/cxx */
namespace Genode {
- extern Rm_session *env_context_area_rm_session();
+ Rm_session *env_context_area_rm_session();
+ void platform_main_bootstrap();
}
@@ -225,10 +225,13 @@ namespace Genode { extern bool inhibit_tracing; }
/**
* C entry function called by the crt0 startup code
+ *
+ * Note, _main is executed twice when starting dynamic programs: in ld.lib.so
+ * and also in the loaded binary.
*/
extern "C" int _main()
{
- main_thread_bootstrap();
+ platform_main_bootstrap();
/* call env() explicitly to setup the environment */
(void*)env();