Advertisement
Guest User

Untitled

a guest
Aug 5th, 2020
356
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.40 KB | None | 0 0
  1. Haiku's EFI ARM bootloader is hanging calling our kernel entry code.
  2.  
  3.  
  4. # Bootloader
  5.  
  6. Assembly to enter kernel:
  7.  
  8. /* status_t arch_enter_kernel(struct kernel_args *kernelArgs,
  9. addr_t kernelEntry, addr_t kernelStackTop);
  10. r0 - kernelArgs
  11. r1 - kernelEntry (0x4438de04)
  12. r2 - kernelStackTop (0x445e0674)
  13. */
  14. FUNCTION(arch_enter_kernel):
  15.  
  16. // We can print 'A' to uart here
  17. // and it shows up as expected.
  18.  
  19. // set the kernel stack
  20. mov sp,r2
  21.  
  22. // set up kernel _start args
  23. //mov r0,r0 // kernelArgs
  24. mov r4,r1
  25. mov r1,#0 // currentCPU=0
  26.  
  27. // call the kernel
  28. mov pc,r4
  29.  
  30. // return
  31. mov r0,#-1 // B_ERROR
  32. mov pc,lr
  33. FUNCTION_END(arch_enter_kernel)
  34.  
  35.  
  36.  
  37. Log messages from our bootloader exiting EFI
  38. and entering kernel:
  39.  
  40. kernel entry at 0x4438de04
  41. Kernel stack at 0x445e0674
  42. System provided memory map:
  43. 0x445e0578-0x40000000 0x0 0x41fa1000 0x0
  44. 0x445e0578-0x41fa1000 0x0 0x44000000 0x0
  45. 0x445e0578-0x44000000 0x0 0x44020000 0x0
  46. 0x445e0578-0x44020000 0x0 0x44023000 0x0
  47. 0x445e0578-0x44023000 0x0 0x442a9000 0x0
  48. 0x445e0578-0x442a9000 0x0 0x442aa000 0x0
  49. 0x445e0578-0x442aa000 0x0 0x4458a000 0x0
  50. 0x445e0578-0x4458a000 0x0 0x445f9000 0x0
  51. 0x445e0578-0x445f9000 0x0 0x4579c000 0x0
  52. 0x445e0578-0x4579c000 0x0 0x474ed000 0x0
  53. 0x445e0578-0x474ed000 0x0 0x47654000 0x0
  54. 0x445e0578-0x47654000 0x0 0x478d5000 0x0
  55. 0x445e0578-0x478d5000 0x0 0x4796b000 0x0
  56. 0x445e0578-0x4796b000 0x0 0x47a97000 0x0
  57. 0x445e0578-0x47a97000 0x0 0x47ab9000 0x0
  58. 0x445e0578-0x47ab9000 0x0 0x47af3000 0x0
  59. 0x445e0578-0x47af3000 0x0 0x47edf000 0x0
  60. 0x445e0578-0x47edf000 0x0 0x47ee5000 0x0
  61. 0x445e0578-0x47ee5000 0x0 0x47fe6000 0x0
  62. 0x445e0578-0x47fe6000 0x0 0x47ff7000 0x0
  63. 0x445e0578-0x47ff7000 0x0 0x47ffc000 0x0
  64. 0x445e0578-0x47ffc000 0x0 0x48000000 0x0
  65. 0x445e0578-0x4000000 0x0 0x8000000 0x0
  66. 0x445e0578-0x9010000 0x0 0x9011000 0x0
  67. Calling ExitBootServices. So long, EFI!
  68. VirtioBlkExitBoot: Context=0x45D0F490
  69. VirtioBlkExitBoot: Context=0x45D1A690
  70. VirtioNetExitBoot: Context=0x47034010
  71. VirtioGpuExitBoot: Context=0x47044210
  72. SetUefiImageMemoryAttributes - 0x0000000047965000 - 0x0000000000006000 (0x0000000000000000)
  73. SetUefiImageMemoryAttributes - 0x000000004795E000 - 0x0000000000007000 (0x0000000000000000)
  74. SetUefiImageMemoryAttributes - 0x0000000047958000 - 0x0000000000006000 (0x0000000000000000)
  75. SetUefiImageMemoryAttributes - 0x0000000047952000 - 0x0000000000006000 (0x0000000000000008)
  76. SetUefiImageMemoryAttributes - 0x0000000047949000 - 0x0000000000009000 (0x0000000000000008)
  77. SetUefiImageMemoryAttributes - 0x000000004793D000 - 0x000000000000C000 (0x0000000000000008)
  78. SetUefiImageMemoryAttributes - 0x0000000047937000 - 0x0000000000006000 (0x0000000000000008)
  79. SetUefiImageMemoryAttributes - 0x0000000047931000 - 0x0000000000006000 (0x0000000000000008)
  80. A
  81.  
  82.  
  83.  
  84. # Kernel
  85.  
  86. Kernel entry (_start):
  87. extern "C" int
  88. _start(kernel_args *bootKernelArgs, int currentCPU)
  89. {
  90. + Print B to uart.
  91. + asm volatile (
  92. + "mov r1, #66\n\t"
  93. + "mov r2, #0x9000000\n\t"
  94. + "strb r1, [r2]\n\t"
  95. + );
  96.  
  97.  
  98. This entry address is definitely correct looking at the disassembly...
  99.  
  100. Disassemble kernel Entry address in qemu:
  101.  
  102. (qemu) xp /128i 0x4438de04
  103. 0x4438de04: e92d4810 push {r4, fp, lr}
  104. 0x4438de08: e28db008 add fp, sp, #8
  105. 0x4438de0c: e24dd014 sub sp, sp, #0x14
  106. 0x4438de10: e50b0018 str r0, [fp, #-0x18]
  107. 0x4438de14: e50b101c str r1, [fp, #-0x1c]
  108. 0x4438de18: e59f4464 ldr r4, [pc, #0x464]
  109. 0x4438de1c: e08f4004 add r4, pc, r4
  110. 0x4438de20: e3a01042 mov r1, #0x42
  111. 0x4438de24: e28db008 add fp, sp, #8
  112. 0x4438de28: e24dd014 sub sp, sp, #0x14
  113. 0x4438de2c: e50b0018 str r0, [fp, #-0x18]
  114. 0x4438de30: e50b101c str r1, [fp, #-0x1c]
  115. 0x4438de34: e59f4464 ldr r4, [pc, #0x464]
  116. 0x4438de38: e08f4004 add r4, pc, r4
  117. 0x4438de3c: e3a01042 mov r1, #0x42 << print 'B' to uart in top of _start in kernel
  118. 0x4438de40: e3a02409 mov r2, #0x9000000 << print 'B' to uart in top of _start in kernel
  119. 0x4438de44: e5c21000 strb r1, [r2] << print 'B' to uart in top of _start in kernel
  120. 0x4438de48: e51b3018 ldr r3, [fp, #-0x18]
  121. 0x4438de4c: e5933004 ldr r3, [r3, #4]
  122. 0x4438de50: e3530001 cmp r3, #1
  123. 0x4438de54: 1a00000f bne #0x4438de98
  124. 0x4438de58: e51b3018 ldr r3, [fp, #-0x18]
  125. 0x4438de5c: e5933000 ldr r3, [r3]
  126. 0x4438de60: e3002c28 movw r2, #0xc28
  127.  
  128.  
  129. Registers when the lockup occurs:
  130.  
  131. (qemu) info registers
  132. R00=445f55f8 R01=00000000 R02=821b3000 R03=445f55f8
  133. R04=4438de04 R05=47ac5f85 R06=09010000 R07=00000000
  134. R08=09011000 R09=00000000 R10=00000000 R11=47ab89dc
  135. R12=ffffffd0 R13=00000000 R14=47830704 R15=47830704
  136. PSR=600001d7 -ZC- A abt32
  137. s00=00000000 s01=00000000 d00=0000000000000000
  138. s02=00000000 s03=00000000 d01=0000000000000000
  139. s04=00000000 s05=00000000 d02=0000000000000000
  140. s06=00000000 s07=00000000 d03=0000000000000000
  141. s08=00000000 s09=00000000 d04=0000000000000000
  142. s10=00000000 s11=00000000 d05=0000000000000000
  143. s12=00000000 s13=00000000 d06=0000000000000000
  144. s14=3f4ccccd s15=00000000 d07=000000003f4ccccd
  145. s16=00000000 s17=00000000 d08=0000000000000000
  146. s18=00000000 s19=00000000 d09=0000000000000000
  147. s20=00000000 s21=00000000 d10=0000000000000000
  148. s22=00000000 s23=00000000 d11=0000000000000000
  149. s24=00000000 s25=00000000 d12=0000000000000000
  150. s26=00000000 s27=00000000 d13=0000000000000000
  151. s28=00000000 s29=00000000 d14=0000000000000000
  152. s30=00000000 s31=00000000 d15=0000000000000000
  153. s32=76726553 s33=73656369 d16=7365636976726553
  154. s34=6f53202e s35=6e6f6c20 d17=6e6f6c206f53202e
  155. s36=00000000 s37=00000000 d18=0000000000000000
  156. s38=00000000 s39=00000000 d19=0000000000000000
  157. s40=00000000 s41=00000000 d20=0000000000000000
  158. s42=00000000 s43=00000000 d21=0000000000000000
  159. s44=00000000 s45=00000000 d22=0000000000000000
  160. s46=00000000 s47=00000000 d23=0000000000000000
  161. s48=00000000 s49=00000000 d24=0000000000000000
  162. s50=00000000 s51=00000000 d25=0000000000000000
  163. s52=00000000 s53=00000000 d26=0000000000000000
  164. s54=00000000 s55=00000000 d27=0000000000000000
  165. s56=00000000 s57=00000000 d28=0000000000000000
  166. s58=00000000 s59=00000000 d29=0000000000000000
  167. s60=00000000 s61=00000000 d30=0000000000000000
  168. s62=00000000 s63=00000000 d31=0000000000000000
  169. FPSCR: 60000010
  170.  
  171.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement