cprt0.as 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /*
  2. Start-up code for Free Pascal Compiler when linking with C library.
  3. Written by Edmund Grimley Evans in 2015 and released into the public domain.
  4. */
  5. .text
  6. .align 2
  7. .globl _start
  8. .type _start,#function
  9. _start:
  10. /* Initialise FP to zero */
  11. mov x29,#0
  12. /* This is rtld_fini */
  13. mov x5,x0
  14. /* Get argc, argv, envp */
  15. ldr x1,[sp]
  16. add x2,sp,#8
  17. add x11,x1,#1
  18. add x11,x2,x11,lsl #3
  19. /* Save argc, argv, envp, and initial stack pointer */
  20. adrp x10,:got:operatingsystem_parameter_argc
  21. ldr x10,[x10,#:got_lo12:operatingsystem_parameter_argc]
  22. str x1,[x10]
  23. adrp x10,:got:operatingsystem_parameter_argv
  24. ldr x10,[x10,#:got_lo12:operatingsystem_parameter_argv]
  25. str x2,[x10]
  26. adrp x10,:got:operatingsystem_parameter_envp
  27. ldr x10,[x10,#:got_lo12:operatingsystem_parameter_envp]
  28. str x11,[x10]
  29. adrp x10,:got:__stkptr
  30. ldr x10,[x10,#:got_lo12:__stkptr]
  31. mov x6,sp
  32. str x6,[x10]
  33. /* __libc_start_main(main, argc, argv,
  34. init, fini, rtld_fini, stack_end) */
  35. adrp x0,:got:PASCALMAIN
  36. ldr x0,[x0,#:got_lo12:PASCALMAIN]
  37. adrp x3,:got:__libc_csu_init
  38. ldr x3,[x3,#:got_lo12:__libc_csu_init]
  39. adrp x4,:got:__libc_csu_fini
  40. ldr x4,[x4,#:got_lo12:__libc_csu_fini]
  41. bl __libc_start_main
  42. /* This should never happen */
  43. b abort
  44. .globl _haltproc
  45. .type _haltproc,#function
  46. _haltproc:
  47. adrp x0,:got:operatingsystem_result
  48. ldr x0,[x0,#:got_lo12:operatingsystem_result]
  49. ldr w0,[x0]
  50. mov w8,#94 // syscall_nr_exit_group
  51. svc #0
  52. b _haltproc
  53. /* Define a symbol for the first piece of initialized data. */
  54. .data
  55. .align 3
  56. .globl __data_start
  57. __data_start:
  58. .long 0
  59. .weak data_start
  60. data_start = __data_start
  61. .bss
  62. .align 3
  63. .comm __stkptr,8
  64. .comm operatingsystem_parameter_envp,8
  65. .comm operatingsystem_parameter_argc,8
  66. .comm operatingsystem_parameter_argv,8
  67. .section .note.GNU-stack,"",%progbits