prt0.as 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. ldr x10,=__dl_fini
  12. str x0,[x10]
  13. b _start
  14. .globl _start
  15. .type _start,#function
  16. _start:
  17. /* Initialise FP to zero */
  18. mov x29,#0
  19. /* Get argc, argv, envp */
  20. ldr x1,[sp]
  21. add x2,sp,#8
  22. add x11,x1,#1
  23. add x11,x2,x11,lsl #3
  24. /* Save argc, argv, envp, and initial stack pointer */
  25. ldr x10,=operatingsystem_parameter_argc
  26. str x1,[x10]
  27. ldr x10,=operatingsystem_parameter_argv
  28. str x2,[x10]
  29. ldr x10,=operatingsystem_parameter_envp
  30. str x11,[x10]
  31. ldr x10,=__stkptr
  32. mov x6,sp
  33. str x6,[x10]
  34. /* Call main */
  35. bl PASCALMAIN
  36. .globl _haltproc
  37. .type _haltproc,#function
  38. _haltproc:
  39. ldr x10,=__dl_fini
  40. ldr x0,[x10]
  41. cbz x0,.Lexit
  42. blr x0
  43. .Lexit:
  44. ldr x10,=operatingsystem_result
  45. ldr w0,[x10]
  46. mov w8,#94 // syscall_nr_exit_group
  47. svc #0
  48. b _haltproc
  49. /* Define a symbol for the first piece of initialized data. */
  50. .data
  51. .align 3
  52. .globl __data_start
  53. __data_start:
  54. .long 0
  55. .weak data_start
  56. data_start = __data_start
  57. .bss
  58. .align 3
  59. .comm __dl_fini,8
  60. .comm __stkptr,8
  61. .comm operatingsystem_parameter_envp,8
  62. .comm operatingsystem_parameter_argc,8
  63. .comm operatingsystem_parameter_argv,8
  64. .section .note.GNU-stack,"",%progbits