diff options
author | Jeff Law <law@redhat.com> | 2011-11-30 05:16:36 +0000 |
---|---|---|
committer | Jeff Law <law@redhat.com> | 2011-11-30 05:16:36 +0000 |
commit | 7b5177cc9956a68a50825c443a6d396fdc1af2b5 (patch) | |
tree | a6b80dca8f72a2e7640e4d535901e42325b2a954 /libgo/runtime/go-main.c | |
parent | 6377b0d9b395f395e25bd4a030a9056171433061 (diff) | |
parent | ee4a734e5eece9824adc2a26e518c99bbdbe802e (diff) |
Weekly merge from trunk. No regressions.reload-v2a
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/reload-v2a@181834 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgo/runtime/go-main.c')
-rw-r--r-- | libgo/runtime/go-main.c | 61 |
1 files changed, 20 insertions, 41 deletions
diff --git a/libgo/runtime/go-main.c b/libgo/runtime/go-main.c index 15a6a30a93d..8047eaea93f 100644 --- a/libgo/runtime/go-main.c +++ b/libgo/runtime/go-main.c @@ -8,6 +8,7 @@ #include <stdlib.h> #include <time.h> +#include <unistd.h> #ifdef HAVE_FPU_CONTROL_H #include <fpu_control.h> @@ -15,7 +16,6 @@ #include "go-alloc.h" #include "array.h" -#include "go-signal.h" #include "go-string.h" #include "runtime.h" @@ -32,64 +32,43 @@ extern char **environ; -extern struct __go_open_array Args asm ("libgo_os.os.Args"); - -extern struct __go_open_array Envs asm ("libgo_os.os.Envs"); - /* These functions are created for the main package. */ extern void __go_init_main (void); extern void real_main (void) asm ("main.main"); +static void mainstart (void *); + /* The main function. */ int main (int argc, char **argv) { - int i; - struct __go_string *values; - - m = &runtime_m0; - g = &runtime_g0; - m->curg = g; - g->m = m; - runtime_mallocinit (); - runtime_cpuprofinit (); - __go_gc_goroutine_init (&argc); - - Args.__count = argc; - Args.__capacity = argc; - values = __go_alloc (argc * sizeof (struct __go_string)); - for (i = 0; i < argc; ++i) - { - values[i].__data = (unsigned char *) argv[i]; - values[i].__length = __builtin_strlen (argv[i]); - } - Args.__values = values; - - for (i = 0; environ[i] != NULL; ++i) - ; - Envs.__count = i; - Envs.__capacity = i; - values = __go_alloc (i * sizeof (struct __go_string)); - for (i = 0; environ[i] != NULL; ++i) - { - values[i].__data = (unsigned char *) environ[i]; - values[i].__length = __builtin_strlen (environ[i]); - } - Envs.__values = values; - - __initsig (); + runtime_initsig (0); + runtime_args (argc, (byte **) argv); + runtime_osinit (); + runtime_schedinit (); #if defined(HAVE_SRANDOM) srandom ((unsigned int) time (NULL)); #else srand ((unsigned int) time (NULL)); #endif + + __go_go (mainstart, NULL); + runtime_mstart (runtime_m ()); + abort (); +} + +static void +mainstart (void *arg __attribute__ ((unused))) +{ __go_init_main (); - __go_enable_gc (); + mstats.enablegc = 1; real_main (); - return 0; + runtime_exit (0); + + abort (); } |