summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/shared/main.c
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>1998-03-21 15:37:18 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>1998-03-21 15:37:18 +0000
commite2a2ec6016c9bb3f3146c701bbe950af212c097c (patch)
tree065452e3ecb58b60fb720dcd378e620089d4b407 /c/src/lib/libbsp/shared/main.c
parentFixed spacing to be consistent with other CPUs. (diff)
downloadrtems-e2a2ec6016c9bb3f3146c701bbe950af212c097c.tar.bz2
Switch to using a shared main() for all of the embedded BSPs
based on the GNU tools. This usually involved correcting the type of bsp_start(), bsp_cleanup(), adjusting the start code to call the right start routine (the shared boot_card()), and then removing code from bsp_start() which was performed in the new boot_card()/main() path.
Diffstat (limited to 'c/src/lib/libbsp/shared/main.c')
-rw-r--r--c/src/lib/libbsp/shared/main.c62
1 files changed, 62 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/shared/main.c b/c/src/lib/libbsp/shared/main.c
new file mode 100644
index 0000000000..f3a7973efc
--- /dev/null
+++ b/c/src/lib/libbsp/shared/main.c
@@ -0,0 +1,62 @@
+/*
+ * A simple main which can be used on any embedded target.
+ *
+ * This style of initialization insures that the C++ global
+ * constructors are executed after RTEMS is initialized.
+ *
+ * Thanks to Chris Johns <cjohns@plessey.com.au> for this idea.
+ *
+ * COPYRIGHT (c) 1989-1998.
+ * On-Line Applications Research Corporation (OAR).
+ * Copyright assigned to U.S. Government, 1994.
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#include <bsp.h>
+
+char *rtems_progname;
+
+extern void bsp_start( void );
+extern void bsp_cleanup( void );
+
+extern rtems_configuration_table BSP_Configuration;
+extern rtems_cpu_table Cpu_table;
+
+rtems_interrupt_level bsp_isr_level;
+
+int main(int argc, char **argv, char **environ)
+{
+
+ if ((argc > 0) && argv && argv[0])
+ rtems_progname = argv[0];
+ else
+ rtems_progname = "RTEMS";
+
+ rtems_initialize_executive_late( bsp_isr_level );
+
+ return 0;
+}
+
+void boot_card(void)
+{
+ int status;
+
+ /* the atexit hook will be before the static destructor list's entry
+ point */
+ bsp_start();
+
+ bsp_isr_level =
+ rtems_initialize_executive_early( &BSP_Configuration, &Cpu_table );
+
+ status = main(0, 0, 0);
+
+ bsp_cleanup();
+
+ exit( status );
+}
+