startup_gcc.S 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. /*
  2. * Copyright (C) 2017-2019 Alibaba Group Holding Limited
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2020-08-20 zx.chen startup file. Should use with
  9. * GCC for T-HEAD Embedded Processors
  10. */
  11. #include <csi_config.h>
  12. .section .vectors, "aw", @progbits
  13. .align 6
  14. .globl __Vectors
  15. .type __Vectors, @object
  16. __Vectors:
  17. .long Default_Handler
  18. .long Default_Handler
  19. .long Default_Handler
  20. .long PendSV_Handler
  21. .long Default_Handler
  22. .long Default_Handler
  23. .long Default_Handler
  24. .long Default_IRQHandler
  25. .long Default_Handler
  26. .long Default_Handler
  27. .long Default_Handler
  28. .long Default_Handler
  29. .long Default_Handler
  30. .long Default_Handler
  31. .long Default_Handler
  32. .long Default_Handler
  33. /* External interrupts */
  34. .long Default_IRQHandler
  35. .long Default_IRQHandler
  36. .long Default_IRQHandler
  37. .long Default_IRQHandler
  38. .long Default_IRQHandler
  39. .long Default_IRQHandler
  40. .long Default_IRQHandler
  41. .long Default_IRQHandler
  42. .long Default_IRQHandler
  43. .long Default_IRQHandler
  44. .long Default_IRQHandler
  45. .long Default_IRQHandler
  46. .long Default_IRQHandler
  47. .long Default_IRQHandler
  48. .long Default_IRQHandler
  49. .long Default_IRQHandler
  50. .long Default_IRQHandler
  51. .long Default_IRQHandler
  52. .long Default_IRQHandler
  53. .long Default_IRQHandler
  54. .long Default_IRQHandler
  55. .long Default_IRQHandler
  56. .long Default_IRQHandler
  57. .long Default_IRQHandler
  58. .long Default_IRQHandler
  59. .long Default_IRQHandler
  60. .long Default_IRQHandler
  61. .long Default_IRQHandler
  62. .long Default_IRQHandler
  63. .long Default_IRQHandler
  64. .long Default_IRQHandler
  65. .long Default_IRQHandler
  66. .text
  67. .align 2
  68. _start:
  69. .text
  70. .align 2
  71. .globl Reset_Handler
  72. .type Reset_Handler, %function
  73. Reset_Handler:
  74. .option push
  75. .option norelax
  76. la gp, __global_pointer$
  77. .option pop
  78. la a0, Default_Handler
  79. ori a0, a0, 3
  80. csrw mtvec, a0
  81. la a0, __Vectors
  82. csrw mtvt, a0
  83. la sp, __StackTop
  84. csrw mscratch, sp
  85. /* Load data section */
  86. la a0, __erodata
  87. la a1, __data_start__
  88. la a2, __data_end__
  89. bgeu a1, a2, 2f
  90. 1:
  91. lw t0, (a0)
  92. sw t0, (a1)
  93. addi a0, a0, 4
  94. addi a1, a1, 4
  95. bltu a1, a2, 1b
  96. 2:
  97. /* Clear bss section */
  98. la a0, __bss_start__
  99. la a1, __bss_end__
  100. bgeu a0, a1, 2f
  101. 1:
  102. sw zero, (a0)
  103. addi a0, a0, 4
  104. bltu a0, a1, 1b
  105. 2:
  106. #ifndef __NO_SYSTEM_INIT
  107. jal SystemInit
  108. #endif
  109. jal entry
  110. .size Reset_Handler, . - Reset_Handler
  111. __exit:
  112. j __exit
  113. .section .bss
  114. .align 3
  115. .global g_base_irqstack
  116. .global g_top_irqstack
  117. g_base_irqstack:
  118. .space CONFIG_ARCH_INTERRUPTSTACK
  119. g_top_irqstack: