/* 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"
#include "malloc.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_cpuinit ();
  runtime_check ();
  runtime_args (argc, (byte **) argv);
  runtime_osinit ();
  runtime_sched = runtime_getsched();
  runtime_schedinit ();
  __go_go (runtime_main, NULL);
  runtime_mstart (runtime_m ());
  abort ();
}
