Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 1776 → Rev 1777

/kernel/trunk/arch/sparc64/src/start.S
43,56 → 43,8
 
.global kernel_image_start
kernel_image_start:
0:
b 1f
nop
 
/*
* This header forces SILO to load the kernel at 0x4000.
* More precisely, SILO will think this is an old version of Linux.
*/
.ascii "HdrS"
.word 0
.half 0
 
.align 8
 
1:
flushw ! flush all but the active register window
 
/*
* Prepare to copy the kernel image to 4M.
*/
 
set LMA, %g1 ! source address
set VMA, %g2 ! destination address
set hardcoded_ktext_size, %g3 ! link address of hardcoded_ktext_size
set hardcoded_kdata_size, %g4 ! link address of hardcoded_kdata_size
 
sub %g3, %g2, %g3 ! offset of hardcoded_ktext_size from the beginning of the load address
sub %g4, %g2, %g4 ! offset of hardcoded_kdata_size from the beginning of the load address
ldx [%g3 + %g1], %g3 ! hardcoded_ktext_size -> %g3
ldx [%g4 + %g1], %g4 ! hardcoded_kdata_size -> %g4
 
add %g3, %g4, %g3 ! size of kernel text and data
 
/*
* Start copying the kernel from higher addresses towards lower addresses.
*/
 
2: dec %g3
ldub [%g1 + %g3], %g4
stb %g4, [%g2 + %g3]
cmp %g3, 0
bnz 2b
nop
 
set relocated, %g1
jmp %g1
nop
 
relocated:
set ofw, %l0
 
call ofw_init