diff options
Diffstat (limited to 'src/runtime/rt_start.S')
-rw-r--r-- | src/runtime/rt_start.S | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/src/runtime/rt_start.S b/src/runtime/rt_start.S new file mode 100644 index 000000000..cea710b57 --- /dev/null +++ b/src/runtime/rt_start.S @@ -0,0 +1,72 @@ +# IBM_PROLOG_BEGIN_TAG +# This is an automatically generated prolog. +# +# $Source: src/runtime/rt_start.S $ +# +# IBM CONFIDENTIAL +# +# COPYRIGHT International Business Machines Corp. 2013 +# +# p1 +# +# Object Code Only (OCO) source materials +# Licensed Internal Code Source Materials +# IBM HostBoot Licensed Internal Code +# +# The source code for this program is not published or otherwise +# divested of its trade secrets, irrespective of what has been +# deposited with the U.S. Copyright Office. +# +# Origin: 30 +# +# IBM_PROLOG_END_TAG +.include "kernel/ppcconsts.S" + +.section .text.intvects + +.org 0x100; +_init: + mflr r10 # Save LR + bl 1f # Get current address by branch-with-link. +1: + mflr r4 # Extract current address. + mtlr r10 # Restore LR. + clrrdi r4, r4, 12 # Align address to 4k. + + addi r10, r4, 0x2000 # Find VFS_LAST_ADDRESS symbol. + ld r10, 0(r10) # Read start of relocation table. + add r10, r10, r4 + + ld r8, 0(r10) # Get count of relocations. + + cmpi cr0, r8, 0 # Perform relocations (if any). + beq 2f + mtctr r8 +1: + ldu r8, 8(r10) # Get relocation destination + add r8, r8, r4 + ld r7, 0(r8) # Get relocation address + add r7, r7, r4 + std r7, 0(r8) # Update relocation address. + bdnz 1b # Decrement CTR and continue loop. +2: + addi r10, r4, 0x2008 # Find pointer to main TOC. + ld r10, 0(r10) # Dereference pointer to get TOC entry. + ld r2, 8(r10) + ld r10, 0(r10) + mtctr r10 + bctr + +.section .text.kernelasm # @2000 +.global VFS_LAST_ADDRESS +VFS_LAST_ADDRESS: + .space 8 +main_toc_ptr: + .quad _main + + +.section .data + +.global hbi_ImageId +hbi_ImageId: + .space 128 |