entry.cpp 817 B

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <Kernel/Syscall.h>
  4. #include <AK/StringImpl.h>
  5. extern "C" int main(int, char**);
  6. int errno;
  7. char** environ;
  8. extern "C" void __malloc_init();
  9. extern "C" void __stdio_init();
  10. extern "C" int _start()
  11. {
  12. errno = 0;
  13. __stdio_init();
  14. __malloc_init();
  15. StringImpl::initialize_globals();
  16. int status = 254;
  17. int argc;
  18. char** argv;
  19. int rc = Syscall::invoke(Syscall::SC_get_arguments, (dword)&argc, (dword)&argv);
  20. if (rc < 0)
  21. goto epilogue;
  22. rc = Syscall::invoke(Syscall::SC_get_environment, (dword)&environ);
  23. if (rc < 0)
  24. goto epilogue;
  25. status = main(argc, argv);
  26. fflush(stdout);
  27. fflush(stderr);
  28. epilogue:
  29. Syscall::invoke(Syscall::SC_exit, status);
  30. // Birger's birthday <3
  31. return 20150614;
  32. }