crt1.S 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. ! Copyright (C) 2013 Imagination Technologies Ltd.
  2. ! Licensed under the LGPL v2.1 or later, see the file COPYING.LIB in this tarball.
  3. #include <asm/unistd.h>
  4. .text
  5. .global __start
  6. .type __start,function
  7. __start:
  8. MOV D0FrT,A0StP
  9. MOV A0FrP,A0StP
  10. MOV A0.2,#0
  11. MOV A0.3,#0
  12. MOV A1.1,#0
  13. MOV A1.2,#0
  14. MOV A1.3,#0
  15. MOV D0.5,#0
  16. MOV D0.6,#0
  17. MOV D0.7,#0
  18. MOV D1.5,#0
  19. MOV D1.6,#0
  20. MOV D1.7,#0
  21. MOV D1Ar3,D0Ar2 ! argv
  22. MOV D0Ar2,D1Ar1 ! argc
  23. #ifdef __PIC__
  24. ADDT A1LbP,CPC1,#HI(__GLOBAL_OFFSET_TABLE__)
  25. ADD A1LbP,A1LbP,#LO(__GLOBAL_OFFSET_TABLE__+4)
  26. MOV D1Ar1,A1LbP
  27. ADDT D1Ar1,D1Ar1,#HI(_main@GOTOFF)
  28. ADD D1Ar1,D1Ar1,#LO(_main@GOTOFF)
  29. MOV D0Ar4,A1LbP
  30. ADDT D0Ar4,D0Ar4,#HI(__init@GOTOFF)
  31. ADD D0Ar4,D0Ar4,#LO(__init@GOTOFF)
  32. MOV D1Ar5,A1LbP
  33. ADDT D1Ar5,D1Ar5,#HI(__fini@GOTOFF)
  34. ADD D1Ar5,D1Ar5,#LO(__fini@GOTOFF)
  35. #else
  36. MOVT D1Ar1,#HI(_main)
  37. ADD D1Ar1,D1Ar1,#LO(_main)
  38. MOVT D0Ar4,#HI(__init)
  39. ADD D0Ar4,D0Ar4,#LO(__init)
  40. MOVT D1Ar5,#HI(__fini)
  41. ADD D1Ar5,D1Ar5,#LO(__fini)
  42. #endif
  43. MOV D0Ar6,#0 ! rtld_fini
  44. MOVT D1Re0,#0x80
  45. SETL [A0StP++],D0Re0,D1Re0 ! stack_end (8Mb)
  46. MOV D1Re0,#0
  47. MOV D0Re0,#0
  48. #ifdef __PIC__
  49. CALLR D1RtP, ___uClibc_main@PLT
  50. #else
  51. CALLR D1RtP, ___uClibc_main
  52. #endif
  53. MOV D1Re0,#__NR_exit
  54. MOV D1Ar1,#0x1
  55. SWITCH #0x440001 ! exit syscall
  56. .size __start,.-__start