crt0.S 998 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. /*
  2. * (C) Copyright 2007 Semihalf
  3. *
  4. * Written by: Rafal Jaworowski <raj@semihalf.com>
  5. *
  6. * SPDX-License-Identifier: GPL-2.0+
  7. */
  8. #if defined(CONFIG_PPC)
  9. .text
  10. .globl _start
  11. _start:
  12. lis %r11, search_hint@ha
  13. addi %r11, %r11, search_hint@l
  14. stw %r1, 0(%r11)
  15. b main
  16. .globl syscall
  17. syscall:
  18. lis %r11, syscall_ptr@ha
  19. addi %r11, %r11, syscall_ptr@l
  20. lwz %r11, 0(%r11)
  21. mtctr %r11
  22. bctr
  23. #elif defined(CONFIG_ARM)
  24. .text
  25. .globl _start
  26. _start:
  27. ldr ip, =search_hint
  28. str sp, [ip]
  29. b main
  30. .globl syscall
  31. syscall:
  32. ldr ip, =syscall_ptr
  33. ldr pc, [ip]
  34. #elif defined(CONFIG_MIPS)
  35. .text
  36. .globl __start
  37. .ent __start
  38. __start:
  39. sw $sp, search_hint
  40. b main
  41. .end __start
  42. .globl syscall
  43. .ent syscall
  44. syscall:
  45. sw $ra, return_addr
  46. lw $t9, syscall_ptr
  47. jalr $t9
  48. nop
  49. lw $ra, return_addr
  50. jr $ra
  51. nop
  52. .end syscall
  53. return_addr:
  54. .align 4
  55. .long 0
  56. #else
  57. #error No support for this arch!
  58. #endif
  59. .globl syscall_ptr
  60. syscall_ptr:
  61. .align 4
  62. .long 0
  63. .globl search_hint
  64. search_hint:
  65. .long 0