1 /* go-main.c -- the main function for a Go program. 2 3 Copyright 2009 The Go Authors. All rights reserved. 4 Use of this source code is governed by a BSD-style 5 license that can be found in the LICENSE file. */ 6 7 #include "config.h" 8 9 #include <stdlib.h> 10 #include <time.h> 11 #include <unistd.h> 12 13 #ifdef HAVE_FPU_CONTROL_H 14 #include <fpu_control.h> 15 #endif 16 17 #include "runtime.h" 18 #include "go-alloc.h" 19 #include "array.h" 20 #include "arch.h" 21 #include "malloc.h" 22 23 #undef int 24 #undef char 25 #undef unsigned 26 27 /* The main function for a Go program. This records the command line 28 parameters, calls the real main function, and returns a zero status 29 if the real main function returns. */ 30 31 extern char **environ; 32 33 /* A copy of _end that a shared library can reasonably refer to. */ 34 uintptr __go_end; 35 36 extern byte _end[]; 37 38 /* The main function. */ 39 40 int main(int argc,char ** argv)41main (int argc, char **argv) 42 { 43 runtime_isarchive = false; 44 45 if (runtime_isstarted) 46 return 0; 47 runtime_isstarted = true; 48 49 __go_end = (uintptr)_end; 50 runtime_check (); 51 runtime_args (argc, (byte **) argv); 52 runtime_osinit (); 53 runtime_schedinit (); 54 __go_go (runtime_main, NULL); 55 runtime_mstart (runtime_m ()); 56 abort (); 57 } 58