Merge pull request #573 from ozbenh/bios-data
software/microwatt: Fix copying data to RAM and clearing BSS
This commit is contained in:
commit
e32e8c069b
|
@ -41,6 +41,7 @@ class Microwatt(CPU):
|
||||||
flags += "-mlittle-endian "
|
flags += "-mlittle-endian "
|
||||||
flags += "-mstrict-align "
|
flags += "-mstrict-align "
|
||||||
flags += "-fno-stack-protector "
|
flags += "-fno-stack-protector "
|
||||||
|
flags += "-mcmodel=small "
|
||||||
flags += "-D__microwatt__ "
|
flags += "-D__microwatt__ "
|
||||||
return flags
|
return flags
|
||||||
|
|
||||||
|
|
|
@ -41,12 +41,44 @@
|
||||||
_start:
|
_start:
|
||||||
FIXUP_ENDIAN
|
FIXUP_ENDIAN
|
||||||
|
|
||||||
|
/* Grab our own address */
|
||||||
|
bcl 20,31,$+4
|
||||||
|
0: mflr %r12
|
||||||
|
|
||||||
|
/* Get our TOC */
|
||||||
|
addis %r2,%r12,(.TOC.-0b)@h
|
||||||
|
addi %r2,%r2,(.TOC.-0b)@l
|
||||||
|
|
||||||
|
/* Copy data from ROM to SRAM */
|
||||||
|
ld %r3,_fdata@got(%r2)
|
||||||
|
ld %r4,_edata@got(%r2)
|
||||||
|
ld %r5,_fdata_rom@got(%r2)
|
||||||
|
subf %r6,%r3,%r4
|
||||||
|
srdi. %r6,%r6,3
|
||||||
|
beq 1f
|
||||||
|
li %r10,0
|
||||||
|
mtctr %r6
|
||||||
|
0: ldx %r0,%r10,%r5
|
||||||
|
stdx %r0,%r10,%r3
|
||||||
|
addi %r10,%r10,8
|
||||||
|
bdnz 0b
|
||||||
|
1:
|
||||||
|
/* Clear BSS */
|
||||||
|
ld %r3,_fbss@got(%r2)
|
||||||
|
ld %r4,_ebss@got(%r2)
|
||||||
|
subf %r6,%r3,%r4
|
||||||
|
srdi. %r6,%r6,3
|
||||||
|
beq 1f
|
||||||
|
li %r0,0
|
||||||
|
subi %r3,%r3,8
|
||||||
|
mtctr %r6
|
||||||
|
0: stdu %r0,8(%r3)
|
||||||
|
bdnz 0b
|
||||||
|
1:
|
||||||
/* setup stack */
|
/* setup stack */
|
||||||
LOAD_IMM64(%r1, _fstack - 0x100)
|
ld %r1,_fstack@got(%r2)
|
||||||
LOAD_IMM64(%r12, main)
|
bl main
|
||||||
mtctr %r12,
|
b .
|
||||||
bctrl
|
|
||||||
b .
|
|
||||||
|
|
||||||
#define EXCEPTION(nr) \
|
#define EXCEPTION(nr) \
|
||||||
.= nr; \
|
.= nr; \
|
||||||
|
|
|
@ -25,6 +25,7 @@ SECTIONS
|
||||||
*(.rodata .rodata.* .gnu.linkonce.r.*)
|
*(.rodata .rodata.* .gnu.linkonce.r.*)
|
||||||
*(.rodata1)
|
*(.rodata1)
|
||||||
*(.got .got.*)
|
*(.got .got.*)
|
||||||
|
*(.toc .toc.*)
|
||||||
|
|
||||||
/* Make sure the file is aligned on disk as well
|
/* Make sure the file is aligned on disk as well
|
||||||
as in memory; CRC calculation requires that. */
|
as in memory; CRC calculation requires that. */
|
||||||
|
|
Loading…
Reference in New Issue