Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Haiku's EFI ARM bootloader is hanging calling our kernel entry code.
- # Bootloader
- Assembly to enter kernel:
- /* status_t arch_enter_kernel(struct kernel_args *kernelArgs,
- addr_t kernelEntry, addr_t kernelStackTop);
- r0 - kernelArgs
- r1 - kernelEntry (0x4438de04)
- r2 - kernelStackTop (0x445e0674)
- */
- FUNCTION(arch_enter_kernel):
- // We can print 'A' to uart here
- // and it shows up as expected.
- // set the kernel stack
- mov sp,r2
- // set up kernel _start args
- //mov r0,r0 // kernelArgs
- mov r4,r1
- mov r1,#0 // currentCPU=0
- // call the kernel
- mov pc,r4
- // return
- mov r0,#-1 // B_ERROR
- mov pc,lr
- FUNCTION_END(arch_enter_kernel)
- Log messages from our bootloader exiting EFI
- and entering kernel:
- kernel entry at 0x4438de04
- Kernel stack at 0x445e0674
- System provided memory map:
- 0x445e0578-0x40000000 0x0 0x41fa1000 0x0
- 0x445e0578-0x41fa1000 0x0 0x44000000 0x0
- 0x445e0578-0x44000000 0x0 0x44020000 0x0
- 0x445e0578-0x44020000 0x0 0x44023000 0x0
- 0x445e0578-0x44023000 0x0 0x442a9000 0x0
- 0x445e0578-0x442a9000 0x0 0x442aa000 0x0
- 0x445e0578-0x442aa000 0x0 0x4458a000 0x0
- 0x445e0578-0x4458a000 0x0 0x445f9000 0x0
- 0x445e0578-0x445f9000 0x0 0x4579c000 0x0
- 0x445e0578-0x4579c000 0x0 0x474ed000 0x0
- 0x445e0578-0x474ed000 0x0 0x47654000 0x0
- 0x445e0578-0x47654000 0x0 0x478d5000 0x0
- 0x445e0578-0x478d5000 0x0 0x4796b000 0x0
- 0x445e0578-0x4796b000 0x0 0x47a97000 0x0
- 0x445e0578-0x47a97000 0x0 0x47ab9000 0x0
- 0x445e0578-0x47ab9000 0x0 0x47af3000 0x0
- 0x445e0578-0x47af3000 0x0 0x47edf000 0x0
- 0x445e0578-0x47edf000 0x0 0x47ee5000 0x0
- 0x445e0578-0x47ee5000 0x0 0x47fe6000 0x0
- 0x445e0578-0x47fe6000 0x0 0x47ff7000 0x0
- 0x445e0578-0x47ff7000 0x0 0x47ffc000 0x0
- 0x445e0578-0x47ffc000 0x0 0x48000000 0x0
- 0x445e0578-0x4000000 0x0 0x8000000 0x0
- 0x445e0578-0x9010000 0x0 0x9011000 0x0
- Calling ExitBootServices. So long, EFI!
- VirtioBlkExitBoot: Context=0x45D0F490
- VirtioBlkExitBoot: Context=0x45D1A690
- VirtioNetExitBoot: Context=0x47034010
- VirtioGpuExitBoot: Context=0x47044210
- SetUefiImageMemoryAttributes - 0x0000000047965000 - 0x0000000000006000 (0x0000000000000000)
- SetUefiImageMemoryAttributes - 0x000000004795E000 - 0x0000000000007000 (0x0000000000000000)
- SetUefiImageMemoryAttributes - 0x0000000047958000 - 0x0000000000006000 (0x0000000000000000)
- SetUefiImageMemoryAttributes - 0x0000000047952000 - 0x0000000000006000 (0x0000000000000008)
- SetUefiImageMemoryAttributes - 0x0000000047949000 - 0x0000000000009000 (0x0000000000000008)
- SetUefiImageMemoryAttributes - 0x000000004793D000 - 0x000000000000C000 (0x0000000000000008)
- SetUefiImageMemoryAttributes - 0x0000000047937000 - 0x0000000000006000 (0x0000000000000008)
- SetUefiImageMemoryAttributes - 0x0000000047931000 - 0x0000000000006000 (0x0000000000000008)
- A
- # Kernel
- Kernel entry (_start):
- extern "C" int
- _start(kernel_args *bootKernelArgs, int currentCPU)
- {
- + Print B to uart.
- + asm volatile (
- + "mov r1, #66\n\t"
- + "mov r2, #0x9000000\n\t"
- + "strb r1, [r2]\n\t"
- + );
- This entry address is definitely correct looking at the disassembly...
- Disassemble kernel Entry address in qemu:
- (qemu) xp /128i 0x4438de04
- 0x4438de04: e92d4810 push {r4, fp, lr}
- 0x4438de08: e28db008 add fp, sp, #8
- 0x4438de0c: e24dd014 sub sp, sp, #0x14
- 0x4438de10: e50b0018 str r0, [fp, #-0x18]
- 0x4438de14: e50b101c str r1, [fp, #-0x1c]
- 0x4438de18: e59f4464 ldr r4, [pc, #0x464]
- 0x4438de1c: e08f4004 add r4, pc, r4
- 0x4438de20: e3a01042 mov r1, #0x42
- 0x4438de24: e28db008 add fp, sp, #8
- 0x4438de28: e24dd014 sub sp, sp, #0x14
- 0x4438de2c: e50b0018 str r0, [fp, #-0x18]
- 0x4438de30: e50b101c str r1, [fp, #-0x1c]
- 0x4438de34: e59f4464 ldr r4, [pc, #0x464]
- 0x4438de38: e08f4004 add r4, pc, r4
- 0x4438de3c: e3a01042 mov r1, #0x42 << print 'B' to uart in top of _start in kernel
- 0x4438de40: e3a02409 mov r2, #0x9000000 << print 'B' to uart in top of _start in kernel
- 0x4438de44: e5c21000 strb r1, [r2] << print 'B' to uart in top of _start in kernel
- 0x4438de48: e51b3018 ldr r3, [fp, #-0x18]
- 0x4438de4c: e5933004 ldr r3, [r3, #4]
- 0x4438de50: e3530001 cmp r3, #1
- 0x4438de54: 1a00000f bne #0x4438de98
- 0x4438de58: e51b3018 ldr r3, [fp, #-0x18]
- 0x4438de5c: e5933000 ldr r3, [r3]
- 0x4438de60: e3002c28 movw r2, #0xc28
- Registers when the lockup occurs:
- (qemu) info registers
- R00=445f55f8 R01=00000000 R02=821b3000 R03=445f55f8
- R04=4438de04 R05=47ac5f85 R06=09010000 R07=00000000
- R08=09011000 R09=00000000 R10=00000000 R11=47ab89dc
- R12=ffffffd0 R13=00000000 R14=47830704 R15=47830704
- PSR=600001d7 -ZC- A abt32
- s00=00000000 s01=00000000 d00=0000000000000000
- s02=00000000 s03=00000000 d01=0000000000000000
- s04=00000000 s05=00000000 d02=0000000000000000
- s06=00000000 s07=00000000 d03=0000000000000000
- s08=00000000 s09=00000000 d04=0000000000000000
- s10=00000000 s11=00000000 d05=0000000000000000
- s12=00000000 s13=00000000 d06=0000000000000000
- s14=3f4ccccd s15=00000000 d07=000000003f4ccccd
- s16=00000000 s17=00000000 d08=0000000000000000
- s18=00000000 s19=00000000 d09=0000000000000000
- s20=00000000 s21=00000000 d10=0000000000000000
- s22=00000000 s23=00000000 d11=0000000000000000
- s24=00000000 s25=00000000 d12=0000000000000000
- s26=00000000 s27=00000000 d13=0000000000000000
- s28=00000000 s29=00000000 d14=0000000000000000
- s30=00000000 s31=00000000 d15=0000000000000000
- s32=76726553 s33=73656369 d16=7365636976726553
- s34=6f53202e s35=6e6f6c20 d17=6e6f6c206f53202e
- s36=00000000 s37=00000000 d18=0000000000000000
- s38=00000000 s39=00000000 d19=0000000000000000
- s40=00000000 s41=00000000 d20=0000000000000000
- s42=00000000 s43=00000000 d21=0000000000000000
- s44=00000000 s45=00000000 d22=0000000000000000
- s46=00000000 s47=00000000 d23=0000000000000000
- s48=00000000 s49=00000000 d24=0000000000000000
- s50=00000000 s51=00000000 d25=0000000000000000
- s52=00000000 s53=00000000 d26=0000000000000000
- s54=00000000 s55=00000000 d27=0000000000000000
- s56=00000000 s57=00000000 d28=0000000000000000
- s58=00000000 s59=00000000 d29=0000000000000000
- s60=00000000 s61=00000000 d30=0000000000000000
- s62=00000000 s63=00000000 d31=0000000000000000
- FPSCR: 60000010
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement