entry.cpp 821 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  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. int status = 254;
  16. int argc;
  17. char** argv;
  18. int rc = syscall(SC_get_arguments, &argc, &argv);
  19. if (rc < 0)
  20. goto epilogue;
  21. rc = syscall(SC_get_environment, &environ);
  22. if (rc < 0)
  23. goto epilogue;
  24. status = main(argc, argv);
  25. fflush(stdout);
  26. fflush(stderr);
  27. epilogue:
  28. syscall(SC_exit, status);
  29. // Birger's birthday <3
  30. return 20150614;
  31. }
  32. extern "C" void __cxa_pure_virtual() NORETURN;
  33. extern "C" void __cxa_pure_virtual()
  34. {
  35. ASSERT_NOT_REACHED();
  36. }