prt0.as 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /*
  2. Start-up code for Free Pascal Compiler, not in a shared library,
  3. not linking with C library.
  4. Written by Edmund Grimley Evans in 2015 and released into the public domain.
  5. */
  6. .text
  7. .align 2
  8. .globl _dynamic_start
  9. .type _dynamic_start, function
  10. _dynamic_start:
  11. lui x5,%hi(__dl_fini)
  12. addi x5,x5,%lo(__dl_fini)
  13. sw x10, (x5)
  14. jal x0, _start
  15. .globl _start
  16. .type _start, function
  17. _start:
  18. /* Initialise FP to zero */
  19. addi x2,x0,0
  20. /* Get argc, argv, envp */
  21. lw x5,(x2)
  22. addi x6,x2,8
  23. addi x7,x5,1
  24. slli x7,x7,3
  25. add x7,x6,x7
  26. /* Save argc, argv, envp, and initial stack pointer */
  27. lui x8,%hi(operatingsystem_parameter_argc)
  28. addi x8,x8,%lo(operatingsystem_parameter_argc)
  29. sw x5,(x8)
  30. lui x8,%hi(operatingsystem_parameter_argv)
  31. addi x8,x8,%lo(operatingsystem_parameter_argv)
  32. sw x6,(x8)
  33. lui x8,%hi(operatingsystem_parameter_envp)
  34. addi x8,x8,%lo(operatingsystem_parameter_envp)
  35. sw x7,(x8)
  36. lui x5,%hi(__stkptr)
  37. addi x5,x8,%lo(__stkptr)
  38. addi x6, x2, 0
  39. sw x6,(x5)
  40. /* Call main */
  41. jal x1, PASCALMAIN
  42. .globl _haltproc
  43. .type _haltproc,function
  44. _haltproc:
  45. lui x10,%hi(__dl_fini)
  46. addi x10,x10,%lo(__dl_fini)
  47. lw x10,(x10)
  48. beq x10,x0,.Lexit
  49. jalr x1,x10
  50. .Lexit:
  51. lui x10,%hi(operatingsystem_result)
  52. addi x10,x10,%lo(operatingsystem_result)
  53. lw x10,(x10)
  54. addi x17, x0, 94
  55. scall
  56. jal x0, _haltproc
  57. /* Define a symbol for the first piece of initialized data. */
  58. .data
  59. .align 3
  60. .globl __data_start
  61. __data_start:
  62. .long 0
  63. .weak data_start
  64. data_start = __data_start
  65. .bss
  66. .align 3
  67. .comm __dl_fini,8
  68. .comm __stkptr,8
  69. .comm operatingsystem_parameter_envp,8
  70. .comm operatingsystem_parameter_argc,8
  71. .comm operatingsystem_parameter_argv,8
  72. .section .note.GNU-stack,"",%progbits