crt1.S 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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. MOV D0Ar6,D0Ar4 ! rtld_fini
  24. #ifdef __PIC__
  25. ADDT A1LbP,CPC1,#HI(__GLOBAL_OFFSET_TABLE__)
  26. ADD A1LbP,A1LbP,#LO(__GLOBAL_OFFSET_TABLE__+4)
  27. MOV D1Ar1,A1LbP
  28. ADDT D1Ar1,D1Ar1,#HI(_main@GOTOFF)
  29. ADD D1Ar1,D1Ar1,#LO(_main@GOTOFF)
  30. MOV D0Ar4,A1LbP
  31. ADDT D0Ar4,D0Ar4,#HI(__init@GOTOFF)
  32. ADD D0Ar4,D0Ar4,#LO(__init@GOTOFF)
  33. MOV D1Ar5,A1LbP
  34. ADDT D1Ar5,D1Ar5,#HI(__fini@GOTOFF)
  35. ADD D1Ar5,D1Ar5,#LO(__fini@GOTOFF)
  36. #else
  37. MOVT D1Ar1,#HI(_main)
  38. ADD D1Ar1,D1Ar1,#LO(_main)
  39. MOVT D0Ar4,#HI(__init)
  40. ADD D0Ar4,D0Ar4,#LO(__init)
  41. MOVT D1Ar5,#HI(__fini)
  42. ADD D1Ar5,D1Ar5,#LO(__fini)
  43. #endif
  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