]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - arch/ppc64/boot/crt0.S
[PATCH] ppc64 boot: make the zImage relocateable
[linux-2.6-omap-h63xx.git] / arch / ppc64 / boot / crt0.S
index da6618a865c945916dfffe3f23d3521e2a6758aa..5788a453a7a22bded19ba5a7dd8e997064760192 100644 (file)
        .text
        .globl  _start
 _start:
+       bl      reloc_offset
+
+reloc_offset:
+       mflr    r0
+       lis     r9,reloc_offset@ha
+       addi    r9,r9,reloc_offset@l
+       subf.   r0,r9,r0
+       beq     clear_caches
+
+reloc_got2:
+       lis     r9,__got2_start@ha
+       addi    r9,r9,__got2_start@l
+       lis     r8,__got2_end@ha
+       addi    r8,r8,__got2_end@l
+       subf.   r8,r9,r8
+       beq     clear_caches
+       srwi.   r8,r8,2
+       mtctr   r8
+       add     r9,r0,r9
+reloc_got2_loop:
+       lwz     r8,0(r9)
+       add     r8,r8,r0
+       stw     r8,0(r9)
+       addi    r9,r9,4
+       bdnz    reloc_got2_loop
+
+clear_caches:
        lis     r9,_start@h
+       add     r9,r0,r9
        lis     r8,_etext@ha
        addi    r8,r8,_etext@l
+       add     r8,r0,r8
 1:     dcbf    r0,r9
        icbi    r0,r9
        addi    r9,r9,0x20