| /* 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 (); |
| } |