1/* 2 * Copyright (C) Paul Mackerras 1997. 3 * 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU General Public License 6 * as published by the Free Software Foundation; either version 7 * 2 of the License, or (at your option) any later version. 8 * 9 * NOTE: this code runs in 32 bit mode and is packaged as ELF32. 10 */ 11 12#include "ppc_asm.h" 13 14 .text 15 /* a procedure descriptor used when booting this as a COFF file */ 16_zimage_start_opd: 17 .long _zimage_start, 0, 0, 0 18 19 .weak _zimage_start 20 .globl _zimage_start 21_zimage_start: 22 .globl _zimage_start_lib 23_zimage_start_lib: 24 /* Work out the offset between the address we were linked at 25 and the address where we're running. */ 26 bl 1f 271: mflr r0 28 lis r9,1b@ha 29 addi r9,r9,1b@l 30 subf. r0,r9,r0 31 beq 3f /* if running at same address as linked */ 32 33 /* The .got2 section contains a list of addresses, so add 34 the address offset onto each entry. */ 35 lis r9,__got2_start@ha 36 addi r9,r9,__got2_start@l 37 lis r8,__got2_end@ha 38 addi r8,r8,__got2_end@l 39 subf. r8,r9,r8 40 beq 3f 41 srwi. r8,r8,2 42 mtctr r8 43 add r9,r0,r9 442: lwz r8,0(r9) 45 add r8,r8,r0 46 stw r8,0(r9) 47 addi r9,r9,4 48 bdnz 2b 49 50 /* Do a cache flush for our text, in case the loader didn't */ 513: lis r9,_start@ha 52 addi r9,r9,_start@l 53 add r9,r0,r9 54 lis r8,_etext@ha 55 addi r8,r8,_etext@l 56 add r8,r0,r8 574: dcbf r0,r9 58 icbi r0,r9 59 addi r9,r9,0x20 60 cmplw cr0,r9,r8 61 blt 4b 62 sync 63 isync 64 65 /* Clear the BSS */ 66 lis r9,__bss_start@ha 67 addi r9,r9,__bss_start@l 68 lis r8,_end@ha 69 addi r8,r8,_end@l 70 li r0,0 715: stw r0,0(r9) 72 addi r9,r9,4 73 cmplw cr0,r9,r8 74 blt 5b 75 76 /* Possibly set up a custom stack */ 77.weak _platform_stack_top 78 lis r8,_platform_stack_top@ha 79 addi r8,r8,_platform_stack_top@l 80 cmpwi r8,0 81 beq 6f 82 lwz r1,0(r8) 83 li r0,0 84 stwu r0,-16(r1) /* establish a stack frame */ 856: 86 87 /* Call platform_init() */ 88 bl platform_init 89 90 /* Call start */ 91 mr r3,r1 92 b start 93