| /* go-main.c -- the main function for a Go program. | |
| Copyright 2009 The Go Authors. All rights reserved. | |
| Use of this source code is governed by a BSD-style | |
| license that can be found in the LICENSE file. */ | |
| #include "config.h" | |
| #include <stdlib.h> | |
| #include <time.h> | |
| #include <unistd.h> | |
| #ifdef HAVE_FPU_CONTROL_H | |
| #include <fpu_control.h> | |
| #endif | |
| #include "runtime.h" | |
| #include "array.h" | |
| #include "arch.h" | |
| #undef int | |
| #undef char | |
| #undef unsigned | |
| /* The main function for a Go program. This records the command line | |
| parameters, calls the real main function, and returns a zero status | |
| if the real main function returns. */ | |
| extern char **environ; | |
| /* A copy of _end that a shared library can reasonably refer to. */ | |
| uintptr __go_end; | |
| extern byte _end[]; | |
| /* The main function. */ | |
| int | |
| main (int argc, char **argv) | |
| { | |
| runtime_isarchive = false; | |
| if (runtime_isstarted) | |
| return 0; | |
| runtime_isstarted = true; | |
| if (runtime_iscgo) | |
| setIsCgo (); | |
| __go_end = (uintptr)_end; | |
| runtime_ginit (); | |
| runtime_cpuinit (); | |
| runtime_check (); | |
| runtime_args (argc, (byte **) argv); | |
| runtime_osinit (); | |
| runtime_schedinit (); | |
| __go_go ((uintptr)(runtime_main), NULL); | |
| runtime_mstart (runtime_m ()); | |
| abort (); | |
| } |