github.com/golang/gofrontend@v0.0.0-20240429183944-60f985a78526/libgo/runtime/go-main.c (about)

     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 "array.h"
    19  #include "arch.h"
    20  
    21  #undef int
    22  #undef char
    23  #undef unsigned
    24  
    25  /* The main function for a Go program.  This records the command line
    26     parameters, calls the real main function, and returns a zero status
    27     if the real main function returns.  */
    28  
    29  extern char **environ;
    30  
    31  /* A copy of _end that a shared library can reasonably refer to.  */
    32  uintptr __go_end;
    33  
    34  extern byte _end[];
    35  
    36  /* The main function.  */
    37  
    38  int
    39  main (int argc, char **argv)
    40  {
    41    runtime_isarchive = false;
    42  
    43    if (runtime_isstarted)
    44      return 0;
    45    runtime_isstarted = true;
    46  
    47    if (runtime_iscgo)
    48      setIsCgo ();
    49  
    50    __go_end = (uintptr)_end;
    51    runtime_ginit ();
    52    runtime_cpuinit ();
    53    runtime_check ();
    54    runtime_args (argc, (byte **) argv);
    55    runtime_osinit ();
    56    runtime_schedinit ();
    57    __go_go ((uintptr)(runtime_main), NULL);
    58    runtime_mstart (runtime_m ());
    59    abort ();
    60  }