Merge pull request #573 from ozbenh/bios-data

software/microwatt: Fix copying data to RAM and clearing BSS
This commit is contained in:
enjoy-digital 2020-06-22 10:44:33 +02:00 committed by GitHub
commit e32e8c069b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 39 additions and 5 deletions

View File

@ -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

View File

@ -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; \

View File

@ -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. */