diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 1998-03-21 15:37:18 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 1998-03-21 15:37:18 +0000 |
commit | e2a2ec6016c9bb3f3146c701bbe950af212c097c (patch) | |
tree | 065452e3ecb58b60fb720dcd378e620089d4b407 /c/src/lib/libbsp/shared/main.c | |
parent | Fixed spacing to be consistent with other CPUs. (diff) | |
download | rtems-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.c | 62 |
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 ); +} + |